为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

第8章 面向对象的概念和记号

2011-08-24 50页 ppt 2MB 8阅读

用户头像

is_470937

暂无简介

举报
第8章 面向对象的概念和记号null面向对象的软件工程面向对象的软件工程李蓉 lirongwow@yahoo.com.cn教材教材叶俊民,《软件工程》. 清华大学出版社,2006 。参考书参考书(美)拉曼, UML和模式应用(原书第3版) ,机械工业出版社 Grady Booch、James Rumbaugh以及Ivar Jacobson, UML用户指南,机械工业出版社 蔡敏 徐慧慧 黄炳强, UML基础与Rose建模教程,人民邮电出版社 普里斯特,面向对象设计UML实践(第2版),清华大学出版社 课程学习安排课程学习安排课程安排:40课时授课+...
第8章 面向对象的概念和记号
null面向对象的软件工程面向对象的软件工程李蓉 lirongwow@yahoo.com.cn教材教材叶俊民,《软件工程》. 清华大学出版社,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 计算机科学会议 软件危机根源解决途径软件工程 “概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。” 软件工程的目标软件工程的目标软件工程的目标是明确的,就是研制、开发与生产出具有良好软件质量和费用合算的产品。 采用工程化方法和途径来开发与维护软件。 应该开发和使用更好的软件工具。 采取必要的管理措施。null瀑布模型 结构化方法的问题结构化方法的问题软件不能满足用户的最终需求。 软件维护困难。 软件可复用性较差。 开发效率低下。产生的原因?面向对象解决的问题面向对象解决的问题将处理问题的数据模型和处理模型合二为一。 从系统分析平滑过渡到设计。第8章 面向对象的概念和记号第8章 面向对象的概念和记号面向过程开发模式面向过程开发模式面向过程开发模式产生过程的抽象。 这些抽象的基础是把软件视为处理流,并定义成由一系列步骤构成的算法。 每一步骤都是带有预定输入和特定输出的一个过程,把这些步骤串联在一起可产生合理的稳定的贯通于整个程序的控制流,最终产生一个简单的具有静态结构的体系结构。面向过程开发模式的特点面向过程开发模式的特点过程性开发模式侧重建立构成问题解决的处理流。 数据抽象、数据结构根据算法步骤的要求开发,它贯穿于过程,提供过程所要求操作的信息。 系统的状态是一组全局变量,这组全局变量保存状态的值,把它们从一个过程传送到另一个过程。null面向对象开发模式面向对象开发模式在面向过程开发模式中优先考虑的是过程抽象;在面向对象开发模式中优先考虑的是实体(问题论域的对象)。 在面向对象开发模式中,把标识和模型化问题论域中的主要实体做为系统开发的起点,主要考虑对象的行为而不是必须执行的一系列动作。面向对象开发模式的特点面向对象开发模式的特点面向对象系统中的对象是数据抽象与过程抽象的综合。 系统的状态保存在各个数据抽象的所定义的数据存储中。 控制流包含在各个数据抽象中的操作内 在面向对象体系结构。消息从一个对象传送到另一个对象。算法被分布到各种实体中。面向对象方法学的优点 面向对象方法学的优点 与人类习惯的思维方法一致; 稳定性好; 可重用性好; 较易开发大型软件产品; 所开发出的软件可维护性好; 面向对象软件比较容易修改; 面向对象软件比较容易理解; 面向对象软件易于测试和调试。 8.1 面向对象的概念 8.1 面向对象的概念 什么是面向对象? Coad和Yourdon给出了一个定义: “面向对象 = 对象+类+继承+通信” 如果一个软件系统是使用这样 4 个概念设计和实现的,则认为这个软件系统是面向对象的。 一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。面向对象的特点面向对象的特点抽象性:对象的数据抽象和行为抽象; 封装性:信息隐蔽(两个视图); 共享性: 同一类中所有实例共享数据结构和行为特征; 同一应用中所有实例通过继承共享数据结构和行为特征; 不同应用中所有实例通过复用共享数据结构和行为特征 对象(Object)对象(Object)我们认为,在应用领域中有意义的、与所要解决的问题有关系的任何事物,都可以作为对象。它既可以是具体概念,也可以是人为的概念,还可以是任何具有明确边界和意义的事物。 客观世界中的对象,既具有静态的属性,又具有动态的行为。 例如,椅子是一种家具,在面向对象上下文中,这话的意思是:椅子是一个对象,它属于一个称为“家具”的对象类 该对象类具有价格、尺寸、重量和颜色等属性,椅子继承了家具类定义的所有属性 椅子具有可以买卖、修理和使用等功能null对象是面向对象开发模式的基本成份。 每个对象可用它本身的一组属性和它可以执行的一组操作来定义。 属性一般只能通过执行对象的操作来改变。 操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。消息(Message)消息(Message)消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。 发送方: 发送给一个对象的消息定义了一个方法名和一个参数表(可能是空的),并指定某一个对象。 接收方: 一个对象接收的消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。nullnull类(class)类(class)类是一组具有相同数据结构和相同操作的对象的集合。 类的定义包括一组数据属性和在数据上的一组合法操作。 类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象null在一个类中,每个对象都是类的实例 (Instance),它们都可使用类中提供的函数。 对象的状态则包含在它的实例变量,即实例的属性中。 类 ← 两个四边形对象 类 ← 两个四边形对象nullQuadrilateral类的每个对象有同样的一组实例变量和方法。 就这个意义来讲,类Quadrilateral给我们提供了一个模板,表示了所有四边形对象。 类常常可看做是一个抽象数据类型(ADT)的实现。但更合适的是把类看做是某种概念的模型null类的实现常常使用其它类的实例,它们提供了该类所需要的服务。这些实例应当受到保护不被其它对象存取,包括同一个类的其它实例。 在四边形的例子中,定义4个Point类的实例作为Quadrilateral类的实例的4个顶点。这些Point对象不能被其它对象存取。2. 类之间的关系 2. 类之间的关系 类之间的关系通常有关联、泛化(继承)、依赖和细化等4种关系。 (1)关联 关联表示两个类的对象之间存在某种语义上的联系。 关联分为普通关联、限定关联和关联类。 普通关联是最常见的关联关系,只要类与类之间存在连接关系就可以用普通关联表示。普通关联的图示符号是连接两个类之间的直线。 null关联一般是双向的,在一个方向上为关联起一个名字,在另一个方向上为关联起另一个名字,如果关联清晰的话,也可不起名字。 在表示关联的直线两端可以写上重数(multiplicity),重数表示该类有多少个对象与对方的一个对象相连接。重数的表示方法通常有: 0..1: 表示0到1个对象; 0..*或*: 表示0到多个对象; 1+或1..*:表示1到多个对象; 1..15: 表示1到15个对象; 3: 表示3个对象。 null如果图中未明确标出关联的重数,则默认重数是1。 null在任何关联中,都会涉及到关联对象所扮演的角色(即起的作用),显式标明角色名有助于理解类图。 如果没有显式标出角色名,则意味着用类名同时作为角色名。 null限定关联通常用在一对多或多对多的关联关系中,可以把模型中的重数从一对多变成一对一,或将多对多简化成多对一。 在类图中把限定词放在关联关系末端的一个小方框内。 null为了说明关联的性质,我们还可以增加一些附加信息。这样可以引入关联类来记录这些信息。 关联中的每个连接与关联类的一个对象相联系。关联类通过一条虚线与关联连接。 (2)聚集 (2)聚集 聚集是关联的特例。聚集所表示的类之间的关系是整体与部分的关系。 在需求陈述中,我们常常会使用的“包含”、“组成”、“分为……部分”等字句,这往往意味着存在聚集关系。 如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集(Aggregation)。 聚集和共享聚集的图示符号是在表示关联关系的直线末端紧挨着整体类的地方画一个空心菱形。 nullIs a member ofnull如果部分类完全隶属于整体类,部分类需要与整体类共存,一旦整体类不存在了,则部分类也会随之消失,或失去存在价值,则称该聚集称为组合聚集(composition),简称为“组成”。 Is a part of(3)泛化(generalization) (3)泛化(generalization) 泛化关系就是通常所说的继承关系,它是通用元素和具体元素之间的一种分类关系。具体元素完全拥有通用元素的信息,并且还可以附加一些其他信息。 用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。 泛化可分成普通泛化和受限泛化两类。 没有具体对象的类称为抽象类。抽象类通常作为父类,用于描述其他类(子类)的公共属性和行为。 nullnull抽象类通常都具有抽象操作。抽象操作仅用来指定该抽象类的所有子类应具有哪些行为。 与抽象类相反的类是具体类,具体类有自己的对象,并且该类的操作都有具体的实现方法。 null对泛化关系,我们可以增加约束条件,以进一步说明该泛化关系的使用方法或扩充方法,这样的泛化关系称为受限泛化。 预定义的约束有4种: 多重、不相交、完全和不完全。这些约束都是语义约束。 多重继承指的是,一个子类可同时多次继承同一个上层基类. 与多重继承相反的是单继承,即一个子类不能多次继承同一个基类。一般的继承都是单继承。 nullnull完全继承是父类的所有子类都已在类图中穷举出来了。 不完全继承则相反,父类的子类并没有都穷举出来,随着对问题理解的深入,可不断补充和维护,这为日后系统的扩充和维护带来很大方便。不完全继承是一般情况下默认的继承关系。 (4)依赖和细化(4)依赖和细化依赖关系描述两个模型元素(类、用例等)之间的语义连接关系:其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。 下图表示一个友元依赖关系,该关系使得B类的操作可以使用A类中私有的或保护的成员。 null当对不同抽象层次上的同一个事物进行描述时,这些层次描述之间具有细化关系。 假设两个模型元素A和B描述同一个事物,它们分属不同的抽象层,如果B在A的基础上进行了更详细的描述,则称B细化了A。 细化用来协调不同阶段模型之间的关系,表示各个开发阶段不同抽象层次的模型之间的相关性,细化常常用于跟踪模型的演变。 实例(instance) 实例(instance) 实例就是由某个特定类所描述的一个具体对象。对象是类的实际例子,通常称为实例。 当使用“对象”这个术语时,既可指一个具体的对象,也泛指一般的对象,但是,当使用“实例”这个术语时,必然是指一个具体的对象。 null消息(message):消息是一个对象与另一个对象之间交互的手段,它要求某个对象执行类中定义的某个操作的规格说明。 方法(method) :方法是对象所能执行的操作,即类中所定义的服务或操作。方法描述了对象执行操作的算法,以及响应消息的方法。 属性(attribute) 属性(attribute) 属性是类中定义的数据,它是对客观世界实体所具有性质的抽象。类的每个实例都有自己特有的属性值。 一致描述属性的语法格式如下: 可见性 属性名: 类型名=初值{性质串} 属性的可见性(即可访问性)通常有下述3种:公有的(public)、私有的(private)和保护的(protected),分别用加号(+)、减号(-)和井号(#)表示。如果未声明可见性,则表示该属性的可见性尚未定义。 null属性名和类型名之间用冒号(:)分隔。类型名表示该属性的数据类型,它可以是基本数据类型,也可以是用户自定义的类型。 在创建类的实例时应给其属性赋值,如果给某个属性定义了初值,则该初值可作为创建实例时这个属性的默认值。类型名和初值之间用等号(=)隔开。 {}括起来的性质串明确地列出该属性所有可能的取值。 null继承(inheritance) 继承(inheritance) 继承是指能够直接获得已有事务的性质和特征,而不必重复定义它们。 继承是子类自动地共享基类中所定义数据和方法的机制。 继承性使得对象可以共享程序代码和数据结构,大大减少了程序中的冗余信息。 继承具有传递性。因此,一个类实际上继承了它所在的类等级中在它上层的全部基类的所有描述。 当一个类只允许有一个父类时,类的继承是单继承。当允许一个类有多个父类时,类的继承是多重继承。nullPolygonTriangleQuadrilateralRectanglenull封装(encapsulation) :封装就是信息隐藏,通过封装对外界隐藏了对象的实现细节。这样,使用一个对象时,只需知道它向外界提供的接口形式,无须知道它的数据结构细节和实现操作的算法。 多态性(polymorphism) :多态性是指同样的消息既可以发送给父类对象也可以发送给子类对象,即在类等级的不同层次中可以共享一个方法的名字,不同层次中的每个类按自己的需要来实现这个行为。在C++语言中,多态性是通过虚函数来实现的。 重载(overloading) 重载(overloading) 重载分为函数重载和运算符重载。 函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。 运算符重载是指同一个运算符可以施加于不同类型的操作数上面。 重载进一步提高了面向对象系统的灵活性和可读性。nullPolygonreferencePoint VerticesDraw( ) move(x, y) contains(aPoint)QuadrilateralreferencePoint VerticesDraw( ) move(x, y) contains(aPoint)Polygon类Polygon类的子类 Quadrilateral面向对象方法的开发过程面向对象方法的开发过程面向对象方法改进了在生存期各个阶段之间的接口,因为在生存期各个阶段所开发出来的“部件”都是类。 在面向对象生存期的各个阶段对各个类的信息进行细化,类成为分析、设计和实现的基本单元。nullnull在面向对象软件开发中,复用扮演了重要角色。软件部件应当独立于当初开发它们的应用而存在。 部件的开发瞄准某些局部的设计和实现,它们能够帮助当前问题的解决,但为了在以后的项目中使用,它们还应当足够通用。 类就是一个希望能够复用的单元,因此,提出了一个“类生存期”。nullnull类生存期是与应用生存期是交叉的。即就是说,类的标识是应用生存期的一个阶段,但类生存期的步骤独立于任一特殊应用的开发。 类的开发应能完整地描述一个基本实体。而不仅仅考虑当前正在开发的系统。 类的定义类的定义一旦标识了一个类,就给出它的规格说明,其中包括类的实例可执行的操作和它们的数据表示。 对于那些使应用与数据库交互的类来说,其规格说明应当包括查找数据库和向数据库加入数据的行为。 类的规格说明中定义的应工作在封装在对象内部的数据存储上,或返回关于对象状态的信息。 操作的名字应反映这个操作本身的含义。 类的设计与实现类的设计与实现类的规格说明可指导对存放既存类的软件库进行查找,这些既存类可用来提供为当前应用所需要的功能。 三个可能的利用既存类的方向。开发过程可能依赖于这种查找的结果。 既存类的复用 从既存类进行演化 从废弃型进行开发 8.2 面向对象建模中的记号8.2 面向对象建模中的记号模型是为了理解事物而对该事物做出的一种抽象,是对事物的一种无歧义的书面描述。由于模型忽略了事物的非本质东西,因此模型比原始事物更容易操纵。 建模的目的就是将一个系统或者子系统的本质抽象出来。建模过程是处理各类复杂性系统的手段。 建模过程意味着要构造一个抽象系统,该抽象系统表达了建模者对系统感兴趣的方面,同时建模者忽略掉了无关的细节。 建模的意义建模的意义模型是对现实的简化,建模是为了更好地理解系统 模型帮助我们按照实际情况或需求对系统可视化 模型允许我们详细说明系统的结构、行为 模型给出了一个构造系统的模板 模型对我们作出的决策进行文档化null通常,模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。 在模型建立之后,该模型就要经受用户和各个领域专家的严格审查。由于模型的化和系统化,因此比较容易暴露出系统分析员对目标系统认识的片面性和不一致性。 模型审查的一种有效技术是建立该模型的原型,用户和领域专家通过亲身体验该原型,从而对系统模型进行更有效的审查。 null面向对象方法描述系统数据结构的对象模型描述系统控制结构的动态模型描述系统功能的功能模型 在软件开发中,对象模型是最重要、最基本、最核心的。为什么有必要统一建模语言为什么有必要统一建模语言面对众多的建模语言,用户没有能力区别不同语言之间的差别。 在众多的建模语言中,实际上各有千秋,需要取长补短,日臻完善。 虽然不同的建模语言大多相同,但仍存在某些细微的差别,这极大地妨碍了用户之间的交流。 选择UML选择UML使用UML建立对象模型来映射现实世界UMLUMLUML——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主要是遵循精确语法的图形语言 目标 提供全面的建模语言(为所有事情所有人),便于开发组所有成员通信交流nullUML吸收和容纳的方法UML是一种建模语言UML是一种建模语言建模方法 = 建模语言 + 建模过程。建模语言定义了用于表示设计的符号(通常是图形符号);建模过程描述进行设计所需要遵循的步骤。 标准建模语言UML是一种建模语言,而不是一种方法,它统一了面向对象建模的基本概念、术语及其图形符号,为人们建立了便于交流的共同语言。 建模能力:建模方法 + 领域知识 + 实践UML的应用领域UML的应用领域UML是一个通用的标准建模语言,可对任何具有静态结构和动态行为的系统进行建模。 UML适用于软件系统开发的不同阶段: 需求分析阶段用用例 分析阶段用类图 实现阶段用动态模型 构造阶段用OO编程语言 在测试阶段:单元测试用类图;集成测试用部件图和合作图;系统测试用用例图。 在应用标准建模语言UML时,需要有相应的开发工具来支持。UML建模常用工具UML建模常用工具Rational Rose——最早的UML工具,是IBM的主推产品,具有广泛的第三方工具支持。 MS Visio——易性、符号全面,但数据建模功能一般。 PowerDesigner——生成的代码对Sybase的产品PowerBuilder数据库的支持很好,并且不需要任何插件就可以与代码和数据库双向转换。 StarUML——免费的UML工具,简单易学,适合初学者 UML的主要内容 UML定义了语义和表示法 (1)语义定义 ① 通过元模型来严格地定义语义。 ② 运用元模型对语言中的基本概念、术语和表示法给出了统一而严格的定义和说明,即给出了这些概念的准确含义。 UML的主要内容null③对一般使用者只需对元模型有所了解就可以了。M2 层 UML元模型的4层体系结构UML元模型的4层体系结构真实的对象 (计算机内存, 运行时环境)模型 (模型库)元模型 (建模工具)元元模型 (建模工具)UML的模型图UML的模型图两类、九种模型图 静态模型图,又称结构图 可视化、说明、构造和文档化系统静态特性 动态模型图,又称行为图 可视化、说明、构造和文档化系统动态特性 UML在软件模型中的应用UML在软件模型中的应用软件的模型类型null业务用例图,活动图,状态图,实体图; Erksson-Penker UML扩展机制。 用例图,活动图,状态图等类图,交互图,活动图,状态图等类图,交互图,活动图,状态图等构件图等用例图,类图,交互图等使用UML的目的使用UML的目的学习面向对象技术; 和领域专家交流; 帮助理解全局。 UML各种模型图简介(1)用例图 ①描述系统外部的执行者与系统提供的用例之间的使用关系。“谁使用了哪个用例” ②执行者可以是人或外部系统。 ③用例是系统提供的功能的一种描述。 ④用例图着重从系统外部执行者的角度来描述系统需要提供哪些功能。 UML各种模型图简介用例图的实例用例图的实例 UML各种模型图简介(2)类图 ①类图用于描述系统中各种类之间的静态结构。 ②一个系统可以看作是由一些不同类型的对象组成的。 ③对象是具有属性和方法的统一体。 UML各种模型图简介类图实例类图实例 UML各种模型图简介(3)对象图 ①是类图的一种变形。 ②对象图有助于通过具体的实例分析,更具体、更直观地了解复杂类图所表达的丰富内涵。 ③对象图可以作为协作图的组成部分。 UML各种模型图简介对象图实例 对象图实例计算机名字:String 内存:IntegerUses0..11..*小影:作者名字 = “王小影” 年龄 = 32小影的家庭PC: 计算机名字 = “Dell 486” 内存 = 128小影的工作PC: 计算机名字 = “Compaq X” 内存 = 256类图展示类、对象图展示类的实例作者名字:String 年龄:Integer类 图对象 图 UML各种模型图简介(4)状态图 ①是对对象的一种补充描述。 ②展示对象所具有的所有可能的状态,以及某些事件发生时,其状态的转移情况。 ③事件是指系统外界或系统内部的某个对象在某个特定的时刻发生的某种事情。 UML各种模型图简介状态图实例状态图实例 UML各种模型图简介(5)顺序图 ①反映对象之间一次特定的交互过程。 ②描述几个对象之间的动态协作关系。 ③直观地展示了对象之间传送消息的时间顺序。 UML各种模型图简介顺序图实例顺序图实例 UML各种模型图简介(6)协作图 ①协作图也是用来描述系统中对象之间的动态协作关系。 ②协作图侧重于描述各个对象之间存在的消息收发关系,并不强调时间顺序。 ③协作图也可以被看作是对象图的另一种表达方式,它描述系统中的对象及其相互之间的通信关系 UML各种模型图简介协作图实例协作图实例 UML各种模型图简介(7)活动图 ①描述系统中各种活动的执行顺序。 ②描述一个操作中各项活动的执行流程。 ③描述一个用例的处理流程。 ④描述一个交互的流程。 UML各种模型图简介活动图的实例活动图的实例 UML各种模型图简介(8)构件图 ①描述程序代码的组织结构。 ②说明各种构件之间的依赖关系。 UML各种模型图简介构件图实例构件图实例 UML各种模型图简介(9)部署图 ①描述系统中硬件和软件的物理配置情况和系统的体系结构。 ②用结点表示实际的物理设备,并根据它们之间的连接关系,将相应的结点连接起来。 ③在结点里面,说明分配给结点上运行的可执行构件和对象。 UML各种模型图简介配置图实例配置图实例统一建模过程(Unified Process)统一建模过程(Unified Process)UP的特征 用例驱动的过程 以体系结构为中心的过程 增量式的迭代过程统一过程的生命周期阶段视图统一过程的生命周期阶段视图初始阶段细化阶段构造阶段移交阶段初始阶段细化阶段构造阶段移交阶段初始阶段:项目范围(Scope)、效益,开发事务实例(Business Case)细化阶段:建立项目计划,描述系统特征,捕获详细需求,建立基线体系结构构造阶段:在基线体系结构的基础上建立系统移交阶段:确认测试,用户测试,向用户移交最终的软件统一过程的迭代视图统一过程的迭代视图核心工作流和模型核心工作流和模型null统一开发过程UP的核心工作流 统一开发过程UP的核心工作流 UP中有9个核心工作流,分为6个核心过程工作流(Core Process Workflows)和3个核心支持工作流(Core Supporting Workflows)。 这些工作流在整个生命周期中一次又一次被访问。9个核心工作流在项目中轮流被使用,在每一次迭代中以不同的重点和强度重复。 UP是一个通用的过程模板,包含了很多开发指南、制品、开发过程所涉及到的角色说明,由于它非常庞大所以对具体的开发机构和项目,用UP时还要做裁剪,也就是要对UP进行配置。UP就像一个元过程,通过对UP进行裁剪可以得到很多不同的开发过程,这些软件开发过程可以看作UP的具体实例。 null 作用:描述一组用例,参与者及其它们之间的关系。用于需求建模。8.2.1 用例图 (一)概述(一)概述UML的用例图描述了一组用例、参与者以及它们之间的关系,因此用例图的组成主要包括: 用例(Use Case) 参与者(Actor) 关系(Relationship) 用例图中的图符(UML1.3) 用例图中的图符(UML1.3)参与者系统用例关联<>注释体注释连接<> 泛化 包含 扩展 卫星表的用例图 卫星表的用例图 自动售货机系统的用例图 自动售货机系统的用例图 (二)参与者(二)参与者参与者(actor)的概念 An actor represents anything that interacts with the system. 参与者是外部需要与系统交互的事物(是为了完成一个事件而与系统交互的实体) 参与者包括 ①. 用户:如客户,读者,库管员 ②. 外部硬件设备:如计算机,磁盘,读卡机等 ③. 外部系统 参与者可以是系统外部与系统有交互的任何事物。 【注】当参与者是人时,它是指一个与系统有交互的用户所扮演的角色(同一个人还可能对应多个参与者)如何发现参与者?如何发现参与者?通过回答以下问题帮助寻找参与者: 谁将使用系统的主要功能? 谁需要借助系统的支持来完成日常工作? 谁来维护和管理系统? 系统控制哪些硬件设备? 系统需要与哪些其它系统交互? 哪些人或系统对本系统产生的结果感兴趣?(三)用例(三)用例用例(Use Case)的概念 用例是对一组动作序列的描述,系统执行这些动作将产生一个对特定的参与者有价值的、且可观察的结果。 (用例是系统与外部的参与者交互的一组动作序列的描述) 用例分析可以认为是对系统功能的分解 用例的表示 用例用椭圆表示如何识别用例?如何识别用例?通过回答以下问题帮助识别用例: 参与者需要系统提供哪些功能? 参与者自身需要做什么? 参与者是否需要读取、创建、删除、修改或存储系统中的某类信息? 系统中(哪个)发生的事件需要通知参与者吗? 参与者需要通知系统某些事情吗? 从功能观点看,这些事件能做什么?(四)用例图中的关系(四)用例图中的关系 用例图中可以出现以下几种关系: ①. 关联关系 ②. 包含关系 ③. 扩展关系 ④. 泛化关系null 1. 关联关系 参与者与用例之间是关联关系,表示参与者与用例之间具有使用、交互信息的关联。 用单向箭头表示,只表示谁启动用例,不考虑信息的双向流动 每个用例都有参与者启动,除包含和扩展用例 习惯上,无论用例和参与者之间是否存在双向数据交流,关联总是由参与者指向用例null 2. 包含关系 两个用例之间,一个用例(基本用例)的行为包含了另外一个用例(被包含用例)的行为。 包含关系用依赖关系的<>构造型来表示。箭头方向指向被包含用例 两个以上用例有共同功能,可分解到单独用例,形成包含依赖。(执行基本用例时,每次都必须调用被包含用例)null 一个用例功能过多需分解成小用例,构成包含依赖null 3. 扩展关系 扩展关系表示基本用例在扩展点要增加新的行为或功能,以扩展到新用例。 扩展关系用依赖关系的<>构造型来表示。箭头方向指向被扩展用例(即基本用例) 基本用例提供了一组扩展点(extension points),在这些扩展点中可以添加新的行为,而扩展用例提供了一组插入片段,这些片段能够被插入到基本用例的扩展点 一般情况下,基本用例的执行不会涉及扩展用例的行为; 如果特定条件发生,扩展用例的行为才被执行 扩展用例依赖于基本用例,只是部分片段组成,不是完整的独立用例,无法单独执行null 4. 泛化关系 参与者与参与者之间,用例与用例之间存在一般与特殊的关系。(五)用例建模(五)用例建模步骤: (1)找出系统外部参与者,确定系统边界和范围; (2)确定各参与者所期望的系统行为,把这些系统行为命名为用例; (3)确定各用例之间的关系(包含、扩展、泛化); 把一些公共的系统行为分解成新的用例,供其它用例引用 把一些变更的行为分解为扩展用例 (4)绘制用例图; (5)编制用例说明场景(Scenario) 场景(Scenario) 一个用例是描述相关功能的所有可能场景的抽象。场景是用例的实例。 我们使用带有三个域的模板描述场景。 场景的名字应是无二义性的。一个场景的名字带有下划线,以说明该场景是一个实例。 参与者实例域说明参与者实例包含了这一场景。参与者实例的名字也有下划线。 事件流一步步地描述了事件顺序。null例:假设有一个基于Web的在线购物站点,我们可以给出这样一个购物用例: 主场景: 顾客浏览了货单并将感兴趣的物品添加到购物筐中。如决定购买,则说明要购买的物品,提供信用卡信息并确认购物清单。系统将检查信用卡的合法性并确认销售结果。给客户发出确认电子邮件 备选场景: 信用卡失效 用例:购买商品用例:购买商品主场景: 顾客浏览货单并选择要买的商品 顾客选择付款 顾客填写采购信息(地址、隔天或3天送货) 系统显示价目信息 顾客填写信用卡信息 系统检查信用卡的合法性 系统确认销售 系统给客户发出确认电子邮件null候选场景:信用卡失效 第6步,系统检查信用卡失败。允许客户重新执行第5步 候选场景:固定客户 3a. 系统显示当前购物信息、价格信息、信用卡的最后四位数字 3b. 顾客接受或修改这些隐含值。转至主场景的第6步 8.2.2 类图 8.2.2 类图 类图是由类,相关建模元素,及其关系构成的图,用来描述类之间的静态关系。 类图在系统中处在核心位置,也是UML中最为重要的一种图。null类图类图类图用于捕捉系统的词汇 在整个开发过程中建立和精化 在系统的不同开发阶段,类图可以具有不同的抽象程度。随着开发的深入,类图应该越来越详细、具体。 目的 Name and model concepts in the system Specify collaborations Specify logical database schemas 由分析人员、设计人员、实现人员开发类的表示类的表示类名属性操作类之间的关系 类之间的关系 四类基本关系(1)关联(1)关联关联表示两个类的对象之间存在某种语义上的联系。 关联可以分为单向关联,双向关联。null① 关联名关联名★如果关联关系已经清楚,就无需关联名null② 关联的角色★如果关联名与角色名相同,则不标出角色名关联的角色null③ 关联的重数1 0..1 0..n 或 0..* 或 * 1..n 或 1..* 关联的重数表示1个对象 表示0到1个对象 表示0到多个对象 表示1到多个对象null④ 关联类 把关联建立类 通过关联类描述关联的属性,操作,及其它信息关联类null 通过限定符来规定关联的限定关系。 由被关联类和限定符可以唯一确定受限制的类 例如, 银行(bank)通过帐户(account)与具体的人(customer)对象进行关联。指定的一个账户(最多)只对应一个客户⑤ 限定关联null限定关联通常用在一对多或多对多的关联关系中,可以把模型中的重数从一对多变成一对一,或将多对多简化成多对一。 在类图中把限定词放在关联关系末端的一个小方框内。特殊的关联:聚合与组合特殊的关联:聚合与组合聚合(aggregation)表示类之间一种松散的整体与部分的组成关系(个体可以属于多个整体)null组合(composition)表示类之间一种紧密的整体与部分的组成关系(个体唯一属于一个整体)null聚合与组合的区别 ① 聚合松散,组合紧密; ② 一个部分事物对象可以属于多个聚合对象, 但一个部分事物对象仅能属于一个组合对象; ③ 聚合的对象生命周期可以不同, 但组合对象则是同存同亡。(2)泛化(2)泛化泛化(generalization) 表示事物之间的一般与特殊的关系。(也可以称为继承关系) 泛化关系除了表示类与类之间的关系之外,还可以表示参与者、用例、包、构件、接口等建模元素之间的关系。 泛化的目的 可以使子类共享父类的属性和操作,实现继承 可以使子类的实例用于任何父类被声明使用的地方,实现多态泛化的表示 泛化的表示 例子表示(3)依赖(3)依赖依赖(dependency)表示两个元素X、Y,如果X的变化必然导致Y的变化,则称Y依赖X。 依赖关系不仅限于类,用例、包、构件之间都可以存在依赖关系(4)实现(4)实现实现(realization)表示规格说明和其实现间的关系 一个元素完成另外一个元素的操作功能 如接口类及其实现:接口没有属性,只有声明的操作方法(对方法没有实现部分),而由实现类具体定义实现部分8.2.3 交互图 8.2.3 交互图 交互图 是描述对象之间的关系和对象之间的信息传递的图。 交互图的作用: 通常用来描述一个用例的行为,实现一个用例,完成对系统的动态行为建模。 交互图的类型:顺序图、协作图交互图的类型 交互图的类型 顺序图(sequence diagram) 协作图(collaboration diagram)null1. 顺序图的概念 顺序图(sequence diagram): 按照时间顺序显示对象之间交互的图。null 2. 顺序图样式和元素 对象(object) 生命线(lifeline) 控制焦点/激活期(focus of control / activation) 消息(message)null 2. 顺序图样式和元素 ① 对象及命名 包括对象名和类名 类名(匿名对象) 对象名(不关心类) 画顺序图时,一般参与者和对象按照从左到右的顺序排列,主要参与者排在最左边null 2. 顺序图样式和元素 ① 对象 ② 生命线 表示对象存在的时间,对象下面一条虚线表示 如果对象生命期结束,则用注销符号表示null 2. 顺序图样式和元素 ① 对象 ② 生命线 ③ 控制焦点/激活期 小矩形,表示对象执行某个操作的时期。 控制焦点null 2. 顺序图样式和元素 ① 对象的命名 ② 生命线 表示对象存在的时间,对象下面一条虚线表示。 ③ 控制焦点 小矩形,表示这个时间对象将执行操作。 ④ 消息 带箭头的连线,表示对象之间传输的信息。 消息null3. 消息 消息:对象之间传输的信息。 消息有以下类型: ① 调用消息(同步消息,Procedure Call) ② 异步消息(Asynchronous) ③ 返回消息(Return) 此外, Rose补充了: ● 阻止消息(Balking) ● 超时消息(Timeout)null① 调用消息(Procedure Call) 调用消息(也称为同步消息)的发送者把消息发送后,等待直到消息接收者返回控制。null②异步消息(Asynchronous) 异步消息的发送者发送消息后,继续自己活动,不等待接收者返回消息或控制(常用于并发)。null③返回消息(Return) 返回消息表示消息的返回。 一般,同步(过程调用)返回消息是隐含的,可以不画出来 对于异步返回消息,应该画出来(虚线表示)null④阻止消息(Balking) 阻止消息指消息发送者发出消息给接收者,如果接收者无法立即接收这个消息,则发送者放弃这个消息。 null⑤超时消息(Timeout) 超时消息指消息发送者发出消息给接收者,并按指定时间等待,如果接收者无法在指定时间内接收这个消息,则发送者放弃这个消息。 null消息的语法格式 [条件][序号][表达式][返回值:=]消息名([参数列表])例如: 2:display(x,y) 简单消息 1.2.1:p:=find(specs) 嵌套消息,消息带返回值 [x<0] 4:invert(x,color) 条件消息 3.1 *:update() 循环消息 null4.建立顺序图 1)从用例中识别交互过程,确定交互的范围 2)识别参与交互的对象(含参与者); 3)为每一个对象设置生命线,并确定对象的存在期限; 4)从引发交互的初始消息开始,在对象生命线上依次画出交互的消息; 5)如果需要,可以给消息增加时间约束,以及前置条件和后置条件。卫星表例子中的“设置时间”用例的顺序图卫星表例子中的“设置时间”用例的顺序图null图中最左栏表示了卫星表用户角色的时间线,该角色启动用例。 其它栏目代表参与到这一用例的对象时间线。对象名用下划线表示,以说明它们是实例(与类不同)。 带标号的箭头表示一个角色或一个对象向另一个对象发送的激励。在这种情况下,卫星表用户按下按钮1两次,按下按钮2一次,就可以设置其卫星表的分针。 交互图的类型 交互图的类型 顺序图(sequence diagram) 协作图(collaboration diagram)null1. 协作图的概念 协作图(collaboration diagram): 描述系统对象(或参与者)如何共同协作来实现用例,强调的是参与交互的各对象的组织。 一般,顺序图和协作图可以相互转换。null 2. 协作图样式和元素对象消息链 链和消息: 连接对象的线段,以及对象之间传输的信息。null3.建立协作图 ① 从用例中识别交互过程; ② 识别参与交互过程的对象; ③ 确定对象之间的链,以及链上的消息; ④ 从引发交互的初始消息开始,将随后每个消息附在相应的链上; ⑤ 如果需要,可以给消息增加时间约束,以及前置条件和后置条件。null 顺序图和协作图都属于交互图,用来描述对象之间的动态关系。 顺序图强调消息的时间顺序,协作图强调参与交互的对象的组织关系。 顺序图和协作图在语义上是等价的,两者可以相互转换。顺序图与协作图的异同一台打印机服务器的顺序图一台打印机服务器的顺序图 一台打印机服务器的合作图 一台打印机服务器的合作图8.2.4 状态图 8.2.4 状态图 状态机(state machine): 用于描述一个对象在其生存期内的动态行为,表现对象响应事件所经历的状态序列以及伴随的动作。 状态图(statechart diagram): 用来描述状态机。 状态图用多个状态以及这些状态之间的迁移描述了单个对象的动态行为。 当在系统建模过程中需要描述某个事物或对象的不同状态,以及状态之间转移的事件和动作时,用状态图。null 状态图的例子一个机器 的状态图:一个发货单 的状态图:状态图与交互图的区别状态图与交互图的区别交互图不显示对象所有可能的动态行为,只显示特定交互(一个具体的用例)中对象的行为 状态图可以显示一个对象在其生存期内所有的动态行为状态图的要素状态开始状态结束状态事件转移状态图的要素CD播放器的状态图(1) 状态(1) 状态状态的概念 状态(state): 是指对象在其生命周期中,满足某些条件、执行某些活动或等待某些事件时的一个状况 对象在任何时候都会处于某种状态中,所有对象都有状态。例如: ● 发票(对象)已被支付(状态) ● 小车(对象)正在停着(状态) ● 发动机(对象)正在工作(状态) ● 电灯(对象)开着(状态) 对象所处的状态决定了它如何响应所检测到的事件或所接收的消息 通常,事件使对象从一个状态转向另一个状态(即状态的转移)null状态的类型 ① 初始状态 ② 中间状态 ③ 结束状态 null① 初始状态(Start State) 显示状态图中状态机的执行的开始 一个状态机只能有一个初态,因为每一个执行都是从相同的地方开始的。如果一个状态机用多张图描述,则多张图用同一个初始状态 嵌套状态中可以使用新的初态 ② 结束状态(End State) 表示一个最后的或者终端状态 结束状态的数目可以不定 null③ 中间状态 表示:圆角的矩形框 组成要素: 状态名(name) 进入动作(entry action)--系统进入该状态时要发生的动作 退出动作(exit action)--系统离开该状态时要发生的动作 活动(do)--系统处于该状态时要发生的动作 内部转移(internal transition)--不导致状态改变的转移(不会执行entry和exit动作)。触发内部转移事件,可以产生与此事件相关联的动作null传真机的状态图当传真机处于Faxing状态时,传真机参加给传真adding a datestamp和timestamp的活动,以及增加电话号码和发送者姓名到传真机中。这个状态下的其它活动是机器拉进传真页,逐页传真,完成传输任务。 在Idle状态下,传真机要显示出当前的日期和时间null④ 组合状态和子状态 子状态:被嵌套在另外一个状态中的状态。 组合/嵌套状态:含有子状态的状态。组合状态也可以有初态和终态。 组合状态子状态(2) 转移(2) 转移转移的概念 转移(transition): 是一个状态向另外一个状态的转换。对象在源状态时,由于某特定事件的发生(某个特定条件满足),或执行一定的动作,而进入到目标状态。 转移用箭头表示,如果没有标注事件,则本转移为自动转移。 转移null转移的特殊类型 ① 自转移: 源状态和目标状态为同一状态的转移。自转移null② 自动转移: 一个 状态根据本状态的有关情况,自动触发进入目标状态,在转移上没有事件。 自动转移③ 条件转移: 通过分支判断所确定的转移。 条件转移(3) 事件(3) 事件事件的概念 事件(event): 是指在确定的时间和位置所发生的对对象起作用的事情。事件的发生将引起一些动作,使对象发生状态的转移。 动作(action): 动作是对象类中一个操作的执行,动作具有原子和不可中断特性。 两种特殊动作(只要进入或离开该状态都会执行该动作): 进入动作(entry action):进入状态时执行的动作 Entry / setMode(onTrack) 退出动作(exit action):退出状态时执行的动作 Exit / setMode(offtrack) null事件的类型 1)调用事件(call event) 2)变化事件(change event) 3)时间事件(time event) 事件的描述 事件名称[参数表]字符串,常为接收对象类中的一个操作。事件的形式参数,可以省略null1)调用事件:是表示对一个操作的调度。 请求调用另一个对象的操作。 语法格式:op (a:T) null2)变化事件:某条件(布尔表达式)值的变化。 变化条件用关键字when表示,后面跟布尔表达式。 语法格式:when (exp) 事件null3)时间事件:满足某一时间表达式的情况的出现,例如到达某一时间或经过了某一时间段。用关键字after或when表示。 语法格式: after (time) when (time) 状态图的作用状态图的作用状态图: 用来描述一个对象在其生命周期中所表现出来的状态和行为。 当在系统建模过程中需要描述某个事物或对象的不同状态,以及状态之间转移的事件和动作时,用状态图。 但状态图并不是对每一个对象都需要的。null实例:订单处理系统null8.2.5 活动图 8.2.5 活动图 活动图(activity diagram)是UML的动态视图之一,用来描述事物或对象的活动变化流程。null 活动图用来建模某个过程的活动序列,以活动为中心 状态图用来建模对象生命期中的所有阶段,以状态为中心【注】活动图的要素活动图的要素活动活动流汇合分劈泳道(1) 活动(1) 活动 活动(Activity): 是活动图主要结点,用两边为弧的条形框表示,中间填活动名。 可以表示工作流中任务的执行或者职责, 也可以表示过程(Procedure)中语句的执行。null活动分为简单活动和复合活动。 简单活动:不能再分解的活动; 复合活动:可以再分解的复杂活动。简单活动复合活动(2) 活动流(2) 活动流 活动流(ActivityFlow): 描述活动之间的有向关系,反映一个活动向另外一个活动之间的转移。用带箭头的实线表示。活动流(3) 分支(判定)(3) 分支(判定) 分支: 表示活动流的分叉和合并。表示从一个活动按照某种条件转移到几个不同的活动。分叉合并(4) 分劈和汇合(并发路径)(4) 分劈和汇合(并发路径) 分劈和汇合: 表示并发的同步行为,用同步杆表示。分劈汇合(5) 泳道(5) 泳道 泳道(swimlane): 是活动图中的区域划分,每一个泳道代表一个区域。一个泳道中包括一组相关活动。泳道null例子:表现软件开发过程的活动图活动图的用途活动图的用途活动图具有广泛地用途,在软件建模中
/
本文档为【第8章 面向对象的概念和记号】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索