资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,面向对象的软件工程,李蓉,lirongwow,教材,叶俊民,,软件工程,.,清华大学出版社,,2006,。,参考书,(,美)拉曼,UML,和模式应用,(,原书第,3,版,),机械工业出版社,Grady,Booch,、,James,Rumbaugh,以及,Ivar,Jacobson,UML,用户指南,机械工业出版社,蔡敏 徐慧慧 黄炳强,UML,基础与,Rose,建模教程,人民邮电出版社,普里斯特,面向对象设计,UML,实践,(,第,2,版,),清华大学出版社,课程学习安排,课程安排:,40,课时授课,+8,课时讨论,+16,课时上机,课堂内学习:课外自学(包括上机操作),=1,:,3,考核:课程试验,40,+,平时成绩,10%+,笔试(闭卷),50%,课程试验包括上课报告,+,上机验收,+,实验报告,上机课题要求,试验由小组完成,每组,4-5,人,每组自由选择试验选题,要求开发一个应用系统,请注意选题的规模。,课题文档(,A4,纸质,+,电子版):按面向对象的软件工程文档标准完成,主要:需求分析文档、总体设计文档、详细设计文档、源程序、测试用例与分析结论。,最后,3,次课由学生介绍自己的系统,每组学生要做好,ppt,课堂汇报,15,分钟,并回答老师提问。,结构化方法复习,软件工程的定义,1968,年,NATO,计算机科学会议,软件危机,根源,解决途径,软件工程,“概括地说,,软件工程,是指导计算机软件开发和维护的一门工程学科。采用,工程,的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的,管理技术,和当前能够得到的最好的技术方法结合起来,以,经济地开发出高质量的软件并有效地维护它。,”,软件工程的目标,软件工程的目标是明确的,就是研制、开发与生产出具有良好软件质量和费用合算的产品,。,采用工程化方法和途径来开发与维护软件。,应该开发和使用更好的软件工具。,采取必要的管理措施。,瀑布模型,结构化方法的问题,软件不能满足用户的最终需求。,软件维护困难。,软件可复用性较差。,开发效率低下。,产生的原因?,面向对象解决的问题,将处理问题的数据模型和处理模型合二为一。,从系统分析平滑过渡到设计。,第,8,章 面向对象的概念和记号,面向过程开发模式,面向过程开发模式产生,过程的抽象,。,这些抽象的基础是,把软件视为处理流,,并,定义成由一系列步骤构成的算法,。,每一步骤都是带有预定输入和特定输出的一个过程,把这些步骤串联在一起可,产生合理的稳定的贯通于整个程序的控制流,,最终产生一个简单的具有静态结构的体系结构。,面向过程开发模式的特点,过程性开发模式,侧重建立构成问题解决的处理流,。,数据抽象、数据结构,根据算法步骤的要求开发,它贯穿于过程,提供过程所要求操作的信息。,系统的状态是一组全局变量,,这组全局变量保存状态的值,把它们从一个过程传送到另一个过程。,面向对象开发模式,在面向过程开发模式中优先考虑的是,过程抽象,;在面向对象开发模式中优先考虑的是,实体(问题论域的对象),。,在面向对象开发模式中,把标识和模型化,问题论域中的主要实体,做为系统开发的起点,主要考虑,对象的行为,而不是必须执行的一系列动作。,面向对象开发模式的特点,面向对象系统中的,对象是数据抽象与过程抽象的综合,。,系统的状态,保存在各个数据抽象的所定义的数据存储中。,控制流,包含在各个数据抽象中的操作内,在面向对象体系结构。消息从一个对象传送到另一个对象。,算法,被分布到各种实体中。,面向对象方法学的优点,与人类习惯的思维方法一致;,稳定性好;,可重用性好;,较易开发大型软件产品;,所开发出的软件可维护性好;,面向对象软件比较容易修改;,面向对象软件比较容易理解;,面向对象软件易于测试和调试。,8.1,面向对象的概念,什么是面向对象?,Coad,和,Yourdon,给出了一个定义:,“,面向对象,=,对象,+,类,+,继承,+,通信,”,如果一个软件系统是使用这样,4,个概念设计和实现的,则认为这个软件系统是面向对象的。,一个面向对象的程序的每一成份应是,对象,,计算是通过,新的对象的建立,和,对象之间的通信,来执行的。,面向对象的特点,抽象性:对象的数据抽象和行为抽象;,封装性:信息隐蔽(两个视图);,共享性:,同一类中所有实例共享数据结构和行为特征;,同一应用中所有实例通过继承共享数据结构和行为特征;,不同应用中所有实例通过复用共享数据结构和行为特征,对象(,Object,),我们认为,在应用领域中有意义的、与所要解决的问题有关系的任何事物,都可以作为,对象,。它既可以是具体概念,也可以是人为的概念,还可以是任何具有明确边界和意义的事物。,客观世界中的对象,既具有静态的属性,又具有动态的行为。,例如,椅子是一种家具,在面向对象上下文中,这话的意思是:椅子是一个对象,它属于一个称为,“,家具,”,的对象类,该对象类具有价格、尺寸、重量和颜色等属性,椅子继承了家具类定义的所有属性,椅子具有可以买卖、修理和使用等功能,对象是面向对象开发模式的基本成份。,每个对象可用,它本身的一组属性,和,它可以执行的一组操作,来定义。,属性,一般只能通过执行对象的操作来改变。,操作,又称为,方法,或,服务,,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。,消息(,Message,),消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。,发送方:,发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。,接收方:,一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。,类,(class),类是一组具有,相同数据结构,和,相同操作,的对象的集合。,类的定义包括,一组数据属性,和,在数据上的一组合法操作,。,类定义可以视为一个具有类似特性与共同行为的对象的,模板,,可用来产生对象,在一个类中,每个,对象,都是,类的实例,(Instance),,它们都可使用类中提供的函数。,对象的状态则包含在它的实例变量,即实例的属性中。,类,两个四边形对象,Quadrilateral,类的每个对象有同样的一组实例变量和方法。就这个意义来讲,类,Quadrilateral,给我们提供了一个模板,表示了所有四边形对象。,类常常可看做是一个,抽象数据类型,(,ADT,),的实现。但更合适的是把类看做是某种,概念的模型,类的实现常常使用其它类的实例,它们提供了该类所需要的服务。这些实例应当受到保护不被其它对象存取,包括同一个类的其它实例。,在四边形的例子中,定义,4,个,Point,类的实例作为,Quadrilateral,类的实例的,4,个顶点。这些,Point,对象不能被其它对象存取。,2.,类之间的关系,类之间的关系通常有,关联、泛化(继承)、依赖和细化,等,4,种关系。,(,1,)关联,关联,表示两个类的对象之间存在某种语义上的联系。,关联分为,普通关联、限定关联和关联类,。,普通关联,是最常见的关联关系,只要类与类之间存在连接关系就可以用普通关联表示。普通关联的图示符号是连接两个类之间的直线。,关联一般是双向的,在一个方向上为关联起一个名字,在另一个方向上为关联起另一个名字,如果关联清晰的话,也可不起名字。,在表示关联的直线两端可以写上重数(,multiplicity,),,重数表示该类有多少个对象与对方的一个对象相连接。重数的表示方法通常有:,0.1,:,表示,0,到,1,个对象;,0.*,或*:表示,0,到多个对象;,1,+,或,1.*,:表示,1,到多个对象;,1.15,:,表示,1,到,15,个对象;,3,:,表示,3,个对象。,如果图中未明确标出关联的重数,则默认重数是,1,。,在任何关联中,都会涉及到关联对象所扮演的,角色,(即起的作用),显式标明角色名有助于理解类图。,如果没有显式标出角色名,则意味着用类名同时作为角色名。,限定关联,通常用在一对多或多对多的关联关系中,可以把模型中的重数从一对多变成一对一,或将多对多简化成多对一。,在类图中把限定词放在关联关系末端的一个小方框内。,为了说明关联的性质,我们还可以增加一些附加信息。这样可以引入,关联类,来记录这些信息。,关联中的每个连接与关联类的一个对象相联系。关联类通过一条虚线与关联连接。,(,2,)聚集,聚集,是关联的特例。,聚集所表示的类之间的关系是,整体与部分的关系,。,在需求陈述中,我们常常会使用的“包含”、“组成”、“分为,部分”等字句,这往往意味着存在聚集关系。,如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为,共享聚集(,Aggregation,),。,聚集和共享聚集的图示符号是在表示关联关系的直线末端紧挨着整体类的地方画一个,空心菱形,。,Is a member of,如果部分类完全隶属于整体类,部分类需要与整体类共存,一旦整体类不存在了,则部分类也会随之消失,或失去存在价值,则称该聚集称为,组合聚集,(composition),,,简称为“组成”。,Is a part of,(,3,)泛化,(generalization),泛化,关系就是通常所说的,继承关系,,它是通用元素和具体元素之间的一种分类关系。具体元素完全拥有通用元素的信息,并且还可以附加一些其他信息。,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。,泛化可分成,普通泛化,和,受限泛化,两类。,没有具体对象的类称为,抽象类,。抽象类通常作为父类,用于描述其他类(子类)的公共属性和行为。,抽象类通常都具有,抽象操作,。抽象操作仅用来指定该抽象类的所有子类应具有哪些行为。,与抽象类相反的类是,具体类,,具体类有自己的对象,并且该类的操作都有具体的实现方法。,对泛化关系,我们可以增加,约束条件,,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称为,受限泛化,。,预定义的约束有,4,种:,多重、不相交、完全和不完全,。这些约束都是语义约束。,多重继承,指的是,一个子类可同时多次继承同一个上层基类,.,与多重继承相反的是,单继承,,即一个子类不能多次继承同一个基类。一般的继承都是单继承。,完全继承,是父类的所有子类都已在类图中穷举出来了。,不完全继承,则相反,父类的子类并没有都穷举出来,随着对问题理解的深入,可不断补充和维护,这为日后系统的扩充和维护带来很大方便。不完全继承是一般情况下默认的继承关系。,(,4,)依赖和细化,依赖,关系描述两个模型元素(类、用例等)之间的语义连接关系:其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。,下图表示一个友元依赖关系,该关系使得,B,类的操作可以使用,A,类中私有的或保护的成员。,当对不同抽象层次上的同一个事物进行描述时,这些层次描述之间具有,细化关系,。,假设两个模型元素,A,和,B,描述同一个事物,它们分属不同的抽象层,如果,B,在,A,的基础上进行了更详细的描述,则称,B,细化了,A,。,细化用来协调不同阶段模型之间的关系,表示各个开发阶段不同抽象层次的模型之间的相关性,细化常常用于跟踪模型的演变。,实例(,instance),实例就是由某个特定类所描述的一个具体对象。对象是类的实际例子,通常称为,实例,。,当使用“对象”这个术语时,既可指一个具体的对象,也泛指一般的对象,但是,当使用“实例”这个术语时,必然是指一个具体的对象。,消息(,message),:,消息是一个对象与另一个对象之间交互的手段,它要求某个对象执行类中定义的某个操作的规格说明。,方法(,method),:,方法是对象所能执行的操作,即类中所定义的服务或操作。方法描述了对象执行操作的算法,以及响应消息的方法。,属性(,attribute),属性,是类中定义的数据,它是对客观世界实体所具有性质的抽象。类的每个实例都有自己特有的属性值。,一致描述属性的语法格式如下:,可见性 属性名:类型名,=,初值,性质串,属性的可见性(即可访问性)通常有下述,3,种:公有的,(public),、,私有的,(private),和保护的,(protected),,,分别用加号(,+,)、减号(,-,)和井号(,#,)表示。,如果未声明可见性,则表示该属性的可见性尚未定义。,属性名和类型名之间用冒号(:)分隔。类型名表示该属性的数据类型,它可以是基本数据类型,也可以是用户自定义的类型。,在创建类的实例时应给其属性赋值,如果给某个属性定义了初值,则该初值可作为创建实例时这个属性的默认值。类型名和初值之间用等号(,=,)隔开。,括起来的性质串明确地列出该属性所有可能的取值。,继承(,inheritance),继承,是指能够直接获得已有事务的性质和特征,而不必重复定义它们。,继承是子类自动地共享基类中所定义数据和方法的机制。,继承性使得对象可以共享程序代码和数据结构,大大减少了程序中的冗余信息。,继承具有,传递性,。因此,一个类实际上继承了它所在的类等级中在它上层的全部基类的所有描述。,当一个类只允许有一个父类时,类的继承是,单继承,。当允许一个类有多个父类时,类的继承是,多重继承。,Polygon,Triangle,Quadrilateral,Rectangle,封装(,encapsulation),:,封装就是信息隐藏,通过封装对外界隐藏了对象的实现细节。这样,使用一个对象时,只需知道它向外界提供的接口形式,无须知道它的数据结构细节和实现操作的算法。,多态性(,polymorphism),:,多态性是指同样的消息既可以发送给父类对象也可以发送给子类对象,即在类等级的不同层次中可以共享一个方法的名字,不同层次中的每个类按自己的需要来实现这个行为。在,C+,语言中,多态性是通过虚函数来实现的。,重载(,overloading),重载,分为函数重载和运算符重载。,函数重载,是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。,运算符重载,是指同一个运算符可以施加于不同类型的操作数上面。,重载进一步提高了面向对象系统的灵活性和可读性。,Polygon,referencePoint,Vertices,Draw(),move(,x,y,),contains(aPoint,),Quadrilateral,referencePoint,Vertices,Draw,(),move,(,x,y,),contains,(,aPoint,),Polygon,类,Polygon,类的子类,Quadrilateral,面向对象方法的开发过程,面向对象方法改进了在生存期各个阶段之间的接口,因为在生存期各个阶段所开发出来的“部件”都是类。,在面向对象生存期的各个阶段对各个类的信息进行细化,类成为分析、设计和实现的基本单元,。,在面向对象软件开发中,复用扮演了重要角色。,软件部件应当独立于当初开发它们的应用而存在,。,部件的开发瞄准某些局部的设计和实现,它们能够帮助当前问题的解决,但为了在以后的项目中使用,它们还应当足够通用。,类就是一个希望能够复用的单元,因此,提出了一个,“类生存期”,。,类生存期是与应用生存期是交叉的。即就是说,类的标识是应用生存期的一个阶段,但类生存期的步骤独立于任一特殊应用的开发。,类的开发应能完整地描述一个基本实体。而不仅仅考虑当前正在开发的系统。,类的定义,一旦标识了一个类,就给出它的,规格说明,,其中包括类的实例可执行的操作和它们的数据表示。,对于那些使应用与数据库交互的类来说,其规格说明应当包括查找数据库和向数据库加入数据的行为。,类的规格说明中定义的应工作在封装在对象内部的数据存储上,或返回关于对象状态的信息。,操作的名字应反映这个操作本身的含义。,类的设计与实现,类的规格说明可指导对存放既存类的软件库进行查找,这些既存类可用来提供为当前应用所需要的功能。,三个可能的利用既存类的方向。开发过程可能依赖于这种查找的结果。,既存类的复用,从既存类进行演化,从废弃型进行开发,8.2,面向对象建模中的记号,模型,是为了理解事物而对该事物做出的一种抽象,是对事物的一种无歧义的书面描述。由于模型忽略了事物的非本质东西,因此模型比原始事物更容易操纵。,建模的目的就是将一个系统或者子系统的本质抽象出来。建模过程是处理各类复杂性系统的手段。,建模过程意味着要构造一个抽象系统,该抽象系统表达了建模者对系统感兴趣的方面,同时建模者忽略掉了无关的细节。,建模的意义,模型是对现实的简化,建模是为了更好地理解系统,模型帮助我们按照实际情况或需求对系统可视化,模型允许我们详细说明系统的结构、行为,模型给出了一个构造系统的模板,模型对我们作出的决策进行文档化,通常,模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。,在模型建立之后,该模型就要经受用户和各个领域专家的严格审查。由于模型的规范化和系统化,因此比较容易暴露出系统分析员对目标系统认识的片面性和不一致性。,模型审查的一种有效技术是建立该模型的原型,用户和领域专家通过亲身体验该原型,从而对系统模型进行更有效的审查。,面向对象方法,描述系统数据结构的对象模型,描述系统控制结构的动态模型,描述系统功能的功能模型,在软件开发中,对象模型是最重要、最基本、最核心的。,为什么有必要统一建模语言,面对众多的建模语言,用户没有能力区别不同语言之间的差别。,在众多的建模语言中,实际上各有千秋,需要取长补短,日臻完善。,虽然不同的建模语言大多相同,但仍存在某些细微的差别,这极大地妨碍了用户之间的交流。,选择,UML,使用,UML,建立对象模型来映射现实世界,UML,UML,Unified Modeling Language,Unified,组合了当前最好的面向对象软件建模方法,Grady Booch,James Rumbaugh,and Ivor Jacobson,UML,三位主要贡献者,OMT(James Rumbaugh),The Booch method(Grady Booch),OOSE(Ivor Jacobson),Modeling,用于表达现实的简化视图,以便于面向对象软件系统的设计与实现,Language,UML,主要是遵循精确语法的图形语言,目标,提供全面的建模语言(为所有事情所有人),便于开发组所有成员通信交流,HP Fusion,操作描述和消息编号,Embley,单类和超级视图,Meyer,上下文语义,Harel,状态图,Gamma,et al,框架和模式,Wirfs-Brock,职责,Odell,分类,Shlaer-Mellor,对象生命周期,Rumbaugh,OMT,方法,Booch,Booch,方法,Jacobson,OOSE,方法,UML,吸收和容纳的方法,UML,是一种建模语言,建模方法,=,建模语言,+,建模过程。,建模语言定义了用于表示设计的符号,(,通常是图形符号,),;,建模过程描述进行设计所需要遵循的步骤。,标准建模语言,UML,是一种建模语言,而不是一种方法,它统一了面向对象建模的基本概念、术语及其图形符号,为人们建立了便于交流的共同语言。,建模能力:建模方法,+,领域知识,+,实践,UML,的应用领域,UML,是一个通用的标准建模语言,可对任何具有静态结构和动态行为的系统进行建模。,UML,适用于软件系统开发的不同阶段:,需求分析阶段用用例,分析阶段用类图,实现阶段用动态模型,构造阶段用,OO,编程语言,在测试阶段:单元测试用类图;集成测试用部件图和合作图;系统测试用用例图。,在应用标准建模语言,UML,时,需要有相应的开发工具来支持。,UML,建模常用工具,Rational Rose,最早的,UML,工具,是,IBM,的主推产品,具有广泛的,第三方工具支持,。,MS,Visio,易性、符号全面,但数据建模功能,一般,。,PowerDesigner,生成,的,代码对,Sybase,的产品,PowerBuilder,数据库,的支持很好,并且不需要任何插件就可以与代码和数据库双向转换。,StarUML,免费的,UML,工具,简单易学,适合初学者,UML,定义了语义和表示法,(,1,)语义定义,通过元模型来严格地定义语义。,运用元模型对语言中的基本概念、术语和表示法给出了统一而严格的定义和说明,即给出了这些概念的准确含义。,UML,的主要内容,对一般使用者只需对元模型有所了解就可以了。,M2,层,UML,元模型的,4,层体系结构,真实的对象,(,计算机内存,运行时环境,),模型,(,模型库,),元模型,(,建模工具,),CustomerOrder,item,quantity,Customer,id,元元模型,(,建模工具,),Class,Association,.,01011,01011,01011,(M0),(M1),(M2),(M3),Class(MOF),.,specifiedBy,modeledBy,modeledBy,modeledBy,specifiedBy,specifiedBy,UML,的模型,图,两类、九种模型图,静态模型图,又称结构图,可视化、说明、构造和文档化系统静态特性,动态模型图,又称行为图,可视化、说明、构造和文档化系统动态特性,业务模型,需求模型,逻辑模型,设计模型,实现模型,测试模型,UML,在软件模型中的应用,软件的模型类型,业务模型,需求模型,逻辑模型,设计模型,实现模型,测试模型,业务用例图,活动图,状态图,实体图;,Erksson-Penker UML,扩展机制。,用例图,活动图,状态图等,类图,交互图,活动图,状态图等,类图,交互图,活动图,状态图等,构件图等,用例图,类图,交互图等,使,用,UML,的目的,学习面向对象技术;,和领域专家交流;,帮助理解全局。,(,1,)用例图,描述系统外部的执行者与系统提供的用例之间的使用关系。,“,谁使用了哪个用例,”,执行者可以是人或外部系统。,用例是系统提供的功能的一种描述。,用例图着重从系统外部执行者的角度来描述系统需要提供哪些功能。,UML,各种模型图简介,用例图的实例,(,2,)类图,类图用于描述系统中各种类之间的静态结构。,一个系统可以看作是由一些不同类型的对象组成的。,对象是具有属性和方法的统一体。,UML,各种模型图简介,类图实例,(,3,)对象图,是类图的一种变形。,对象图有助于通过具体的实例分析,更具体、更直观地了解复杂类图所表达的丰富内涵。,对象图可以作为协作图的组成部分。,UML,各种模型图简介,对象图实例,计算机,名字:,String,内存:,Integer,Uses,0.1,1.*,小影:作者,名字,=“,王小影”,年龄,=32,小影的家庭,PC,:,计算机,名字,=“Dell 486”,内存,=128,小影的工作,PC,:,计算机,名字,=“Compaq X”,内存,=256,类图展示类、对象图展示类的实例,作者,名字:,String,年龄:,Integer,类 图,对象 图,(,4,)状态图,是对对象的一种补充描述。,展示对象所具有的所有可能的状态,以及某些事件发生时,其状态的转移情况。,事件是指系统外界或系统内部的某个对象在某个特定的时刻发生的某种事情。,UML,各种模型图简介,状态图实例,(,5,)顺序图,反映对象之间一次特定的交互过程。,描述几个对象之间的动态协作关系。,直观地展示了对象之间传送消息的时间顺序。,UML,各种模型图简介,顺序图实例,(,6,)协作图,协作图也是用来描述系统中对象之间的动态协作关系。,协作图侧重于描述各个对象之间存在的消息收发关系,并不强调时间顺序。,协作图也可以被看作是对象图的另一种表达方式,它描述系统中的对象及其相互之间的通信关系,UML,各种模型图简介,协作图实例,(,7,)活动图,描述系统中各种活动的执行顺序。,描述一个操作中各项活动的执行流程。,描述一个用例的处理流程。,描述一个交互的流程。,UML,各种模型图简介,活动图的实例,(,8,)构件图,描述程序代码的组织结构。,说明各种构件之间的依赖关系。,UML,各种模型图简介,构件图实例,(,9,)部署图,描述系统中硬件和软件的物理配置情况和系统的体系结构。,用结点表示实际的物理设备,并根据它们之间的连接关系,将相应的结点连接起来。,在结点里面,说明分配给结点上运行的可执行构件和对象。,UML,各种模型图简介,配置图实例,统一建模过程(,Unified Process,),UP,的特征,用例驱动的过程,以体系结构为中心的过程,增量式的迭代过程,统一过程的生命周期阶段视图,时间,初始阶段,细化阶段,构造阶段,移交阶段,初始阶段,细化阶段,构造阶段,移交阶段,初始阶段:项目范围(,Scope,)、,效益,开发事务实例(,Business Case,),细化阶段:建立项目计划,描述系统特征,捕获详细需求,建立基线体系结构,构造阶段:在基线体系结构的基础上建立系统,移交阶段:确认测试,用户测试,向用户移交最终的软件,统一过程的迭代视图,体系结构,迭代,.,开发迭代,开发迭代,.,移交迭代,.,内部提交,内部提交,内部提交,内部提交,内部提交,内部提交,内部提交,外部提交,初始迭代,.,初始阶段,细化阶段,构造阶段,移交阶段,1,:每个阶段都有若干个迭代过程组成,2,:每次迭代都有产品提交(提交给开发组,所以是,“,内部提交,”,),迭代:按照确定的计划执行的一组有顺序的活动。当满足确定的评价准则时,迭代结束。每次迭代都有一个可执行的提交,核心工作流和模型,需求获取,设计,实现,测试,分析,用例模型,设计模型,配置模型,实现模型,.,分析模型,测试模型,各个模型都采用,UML,的模型图来描述,每个核心工作流都会产生一个或多个模型,统一开发过程,UP,的核心工作流,UP,中有,9,个核心工作流,分为,6,个核心过程工作流,(Core Process Workflows),和,3,个核心支持工作流,(Core Supporting Workflows),。,这些工作流在整个生命周期中一次又一次被访问。,9,个核心工作流在项目中轮流被使用,在每一次迭代中以不同的重点和强度重复。,UP,是一个通用的过程模板,包含了很多开发指南、制品、开发过程所涉及到的角色说明,由于它非常庞大所以对具体的开发机构和项目,用,UP,时还要做裁剪,也就是要对,UP,进行配置。,UP,就像一个元过程,通过对,UP,进行裁剪可以得到很多不同的开发过程,这些软件开发过程可以看作,UP,的具体实例。,作用,:,描述一组用例,参与者及其它们之间的关系。用于需求建模。,8.2.1 用例图,(一)概述,UML,的用例图描述了一组用例、参与者以及它们之间的关系,因此用例图的组成主要包括:,用例(,Use Case,),参与者(,Actor,),关系(,Relationship,),用例图中的图符,(,UML1.3,),参与者,系统,用例,关联,注释体,注释连接,泛化,包含,扩展,卫星表,的用例图,自动售货机系统的用例图,(二)参与者,参与者,(actor),的概念,An,actor,represents anything that interacts with the system.,参与者,是外部需要与系统交互的事物(是为了完成一个事件而与系统交互的实体),参与者包括,.,用户,:,如客户,读者,库管员,.,外部硬件设备,:,如计算机,磁盘,读卡机等,.,外部系统,参与者可以是系统外部与系统有交互的任何事物。,【,注,】,当参与者是人时,它是指一个与系统有交互的用户所扮演的,角色,(同一个人还可能对应多个参与者),如何发现参与者?,通过回答以下问题帮助寻找参与者:,谁将使用系统的主要功能?,谁需要借助系统的支持来完成日常工作?,谁来维护和管理系统?,系统控制哪些硬件设备?,系统需要与哪些其它系统交互?,哪些人或系统对本系统产生的结果感兴趣?,(三)用例,用例(,Use Case,)的概念,用例是对一组动作序列的描述,系统执行这些动作将产生一个对特定的参与者有价值的、且可观察的结果。(用例是系统与外部的参与者交互的一组动作序列的描述),用例分析可以认为是对系统功能的分解,用例的表示,用例用椭圆表示,如何识别用例?,通过回答以下问题帮助识别用例:,参与者需要系统提供哪些功能?,参与者自身需要做什么?,参与者是否需要读取、创建、删除、修改或存储系统中的某类信息?,系统中(哪个)发生的事件需要通知参与者吗?,参与者需要通知系统某些事情吗?,从功能观点看,这些事件能做什么?,(四)用例图中的关系,用例图中可以出现以下几种关系:,.,关联关系,.,包含关系,.,扩展关系,.,泛化关系,1.,关联关系,参与者与用例之间是关联关系,表示参与者与用例之间具有使用、交互信息的关联。,用单向箭头表示,只表示谁启动用例,不考虑信息的双向流动,每个用例都有参与者启动,除包含和扩展用例,习惯上,无论用例和参与者之间是否存在双向数据交流,关联总是由参与者指向用例,2.,包含关系,两个用例之间,一个用例,(,基本用例,),的行为包含了另外一个用例,(,被包含用例,),的行为。包含关系用依赖关系的,构造型来表示。箭头方向指向被包含用例,两个以上用例有共同功能,可分解到单独用例,形成包含依赖。(执行基本用例时,每次都必须调用被包含用例),一个用例功能过多需分解成小用例,构成包含依赖,3.,扩展关系,扩展关系表示基本用例在扩展点要增加新的行为或功能,以扩展到新用例。扩展关系用依赖关系的,构造型来表示。箭头方向指向被扩展用例(即基本用例),基本用例提供了一组扩展点(,extension points,),在这些扩展点中可以添加新的行为,而扩展用例提供了一组插入片段,这些片段能够被插入到基本用例的扩展点,一般情况下,基本用例的执行不会涉及扩展用例的行为;如果特定条件发生,扩展用例的行为才被执行,扩展用例依赖于基本用例,只是部分片段组成,不是完整的独立用例,无法单独执行,4.,泛化关系,参与者与参与者之间,用例与用例之间存在一般与特殊的关系。,(五)用例建模,步骤:,(,1,)找出系统外部参与者,确定系统边界和范围;,(,2,)确定各参与者所期望的系统行为,把这些系统行为命名为用例;,(,3,)确定各用例之间的关系,(,包含、扩展、泛化,),;,把一些公共的系统行为分解成新的用例,供其它用例引用,把一些变更的行为分解为扩展用例,(,4,)绘制用例图;,(,5,)编制用例说明,场景,(,Scenario,),一个用例是描述相关功能的所有可能场景的抽象。,场景是用例的实例。,我们使用带有三个域的模板描述场景。,场景的名字,应是无二义性的。一个场景的名字带有下划线,以说明该场景是一个实例。,参与者实例域,说明参与者实例包含了这一场景。参与者实例的名字也有下划线。,事件流,一步步地描述了事件顺序。,例:假设有一个,基于,Web,的在线购物站点,,我们可以给出这样一个,购物,用例:,主场景:,顾客浏览了货单并将感兴趣的物品添加到购物筐中。如决定购买,则说明要购买的物品,提供信用卡信息并确认购物清单。系统将检查信用卡的合法性并确认销售结果。给客户发出确认电子邮件,备选场景:,信用卡失效,用例:购买商品,主场景:,顾客浏览货单并选择要买的商品,顾客选择付款,顾客填写采购信息(地址、隔天或,3,天送货),系统显示价目信息,顾客填写信用卡信息,系统检查信用卡的合法性,系统确认销售,系统给客户发出确认电子邮件,候选场景:,信用卡失效,第,6,步,系统检查信用卡失败。允许客户重新执行第,5,步,候选场景:,固定客户,3a.,系统显示当前购物信息、价格信息、信用卡的最后四位数字,3b.,顾客接受或修改这些隐含值。转至主场景的第,6,步,8.2.2,类图,类图,是由类,相关建模元素,及其关系构成的图,用来描述类之间的静态关系。,类图在系统中处在核心位置,也是,UML,中最为重要的一种图。,类图,类图用于捕捉系统的词汇,在整个开发过程中建立和精化,在系统的不同开发阶段,类图可以具有不同的抽象程度。随着开发的深入,类图应该越来越详细、具体。,目的,Name and model concepts in the system,Specify collaborations,Specify logical database schemas,由分析人员、设计人员、实现人员开发,类的表示,类名,属性,操作,类之间的关系,四类基本关系,(,1,)关联,关联,表示两个类的对象之间存在某种语义上的联系。,关联可以分为单向关联,双向关联。,关联名,关联名,如果关联关系已经清楚,就无需关联名,关联的角色,如果关联名与角色名相同,则不标出角色名,关联的角色,关联的重数,1,0.1,0.n,或,0.*,或,*,1.n,或,1.*,关联的重数,表示,1,个对象,表示,0,到,1,个对象,表示,0,到多个对象,表示,1,到多个对象,关联类,把关联建立类,通过关联类描述关联的属性,操作,及其它信息,关联类,通过限定符来规定关联的限定关系。,由被关联类和限定符可以唯一确定受限制的类,例如,银行(,bank,)通过帐户(,account,)与具体的人(,customer,)对象进行关联。,指定的一个账户,(,最多,),只对应一个客户,限定关联,限定关联,通常用在一对多或多对多的关联关系中,可以把模型中的重数从一对多变成一对一,或将多对多简化成多对一。,在类图中把限定词放在关联关系末端的一个小方框内。,特殊的关联:,聚合,与,组合,聚合,(,aggregation,),表示类之间一种松散的整体与部分的组成关系(个体可以属于多个整体),组合,(,composition,),表示类之间一种紧密的整体与部分的组成关系(个体唯一属于一个整体),聚合与组合的区别,聚合松散,组合紧密;,一个部分事物对象可以属于多个聚合对象,但一个部分事物对象仅能属于一个组合对象;,聚合的对象生命周期可以不同,但组合对象则是同存同亡。,(,2,)泛化,泛化,(,generalization,),表示事物之间的一般与特殊的关系。(也可以称为继承关系),泛化关系除了表示类与类之间的关系之外,还可以表示参与者、用例、包、构件、接口等建模元素之间的关系。,泛化的目的,可以使子类共享父类的属性和操作,实现继承,可以使子类的实例用于任何父类被声明使用的地方,实现多态,泛化的表示,例子,表示,(,3,)依赖,依赖,(,dependency,),表示两个元素,X,、,Y,,如果,X,的变化必然导致,Y,的变化,则称,Y,依赖,X,。,依赖关系不仅限于类,用例、包、构件之间都可以存在依赖关系,(,4,)实现,实现,(,realization,),表示规格说明和其实现间的关系,一个元素完成另外一个元素的操作功能,如接口类及其实现:接口没有属性,只有声明的操作方法(对方法没有实现部分),而由实现类具体定义实现部分,8.2.3,交互图,交互图,是描述对象之间的关系和对象之间的信息传递的图。,交互图的作用:,通常用来描述一个用例的行为,实现一个用例,完成对系统的动态行为建模。,交互图的类型:,顺序图、协作图,交互图的类型,顺序图,(,sequence diagram,),协作图,(,collaboration diagram,),1.,顺序图的概念,顺序图,(sequence diagram):,按照时间顺序显示对象之间交互的图。,2.,顺序图样式和元素,对象(,object,),生命线(,lifeline,),控制焦点,/,激活期(,focus of control/activation,),消息(,message,),对象,消息,生命线,控制焦点,2.,顺序图样式和元素,对象及命名,包括对象名和类名,类名(匿名对象),对象名(不关心类),画顺序图时,一般参与者和对象按照从左到右的顺序排列,主要参与者排在最左边,2.,顺序图样式和元素,对象
展开阅读全文