《类图和对象图.ppt》由会员分享,可在线阅读,更多相关《类图和对象图.ppt(46页珍藏版)》请在三一文库上搜索。
1、第5章 类图和对象图,面向对象分析与设计&UML,2,5.1 类的定义,面向对象分析与设计&UML,3,5.1.1 类的属性,可见性属性名:类型多重性次序=初值特性,+size: Area = (100,100) #visibility: Boolean = false colors: Color3 points: Point2* ordered name: String01,面向对象分析与设计&UML,4,5.1.2 类的操作,可见性操作名(参数列表): 返回值类型特性,+display(): Location +hide() #create() -attachXWindow(xwing:
2、XwindowPtr),面向对象分析与设计&UML,5,5.2 类之间的关系,常见的类之间的关系包括: 关联、聚集、组合、泛化、依赖等.,面向对象分析与设计&UML,6,5.2.1 关联,关联(association)是模型元素间的一种语义联系, 它是对具有共同的结构特性、行为特性、关系和语义的链(Link)的描述.,面向对象分析与设计&UML,7,5.2.1 关联,1. 关联名,用来描述关联的作用.,面向对象分析与设计&UML,8,5.2.1 关联,2. 关联的角色,关联的两端可以以某种角色参与关联, 如果不标注角色则隐含用类名作为角色名.,角色的多重性,表示可以有多少个对象参与该关联.,面
3、向对象分析与设计&UML,9,5.2.1 关联,3. 关联类,/Company.java public class Company private String companyName; public Person employee; /Person.java public class Person private int personName; public Company employer; /Contract.java public class Contract private Double salary; ,面向对象分析与设计&UML,10,5.2.1 关联,4. 关联的约束,面向对象
4、分析与设计&UML,11,5.2.1 关联,5. 限定关联,限定符, 关联的属性,面向对象分析与设计&UML,12,5.2.1 关联,6. 关联的种类,(1) 自反关联,public class EnginePart public EnginePart theEnginePart; ,(2) 二元关联,(3) N元关联,面向对象分析与设计&UML,13,5.2.2 聚集与组合,聚集(aggregation)是一种特殊的关联, 表示类之间的整体与部分关系.,public class Circle public int radius; Style style; ,public class Styl
5、e Color color; boolean isFilled; ,面向对象分析与设计&UML,14,5.2.2 聚集与组合,组合(composition)是一种特殊的聚集, 强调整体和部分具有相同的生命期.,public class Circle public int radius; Point center; ,public class Style int x, y; ,面向对象分析与设计&UML,15,5.2.3 泛化关系,泛化关系指一般元素和特殊元素之间的分类关系. 在OOPL中称为继承.,面向对象分析与设计&UML,16,5.2.3 泛化关系,面向对象分析与设计&UML,17,5.2
6、.4 依赖关系,依赖关系也称使用关系.,调用, 一个类调用另一个类的方法 参数, 一个类的方法使用另一个类作为形式参数 发送, 消息的发送者与接收者之间的关系 实例化, 一个类的方法创建了另一个的实例,面向对象分析与设计&UML,18,5.2.4 依赖关系,class MyDependentClass . . . . . void myFunction1( MyReferencedClass r ) . MyReferencedClass myFunction2( ) . void myFunction3( ) MyReferencedClass m ,MyDependentClass att
7、: int myFunction(),MyReferencedClass,依赖 (引用一个类),参数,or 返回类型,or 局部变量,面向对象分析与设计&UML,19,5.3 派生属性和派生关联,派生属性(关联)指可以由其他属性()关联计算得到的属性,名字前加”/”.,面向对象分析与设计&UML,20,5.4 抽象类和接口,抽象类,接口,面向对象分析与设计&UML,21,5.4 抽象类和接口,interface MyAbstractClass . . . . class MyClass implements MyInterface . . . . . ,UML 符号 - 接口的实现描述,面向对
8、象分析与设计&UML,22,5.5 版型,版型(stereotype)是UML的3种扩展机制之一. 版型是建模人员在已有的构造块上派生出新的构造块,这些新的构造块与特定问题相关. 版型可以应用于所有类型的模型元素.,系统预定义的版型,用户自义的版型,面向对象分析与设计&UML,23,5.6 边界类、控制类和实体类,UML中三种主要的类版型 边界类, boundary class 控制类, control class 实体类, entity class,引入多种类版型帮助分析和设计人员确定系统中的类.,面向对象分析与设计&UML,24,5.6.1 边界类,边界类位于系统与外界的交界处,包括:,用
9、户界面类, 如: 窗口、对话框、报表类等 通讯协议类, 如: TCP/IP的类 直接与外部设备交互的类 直接与外部系统交互的类,边界类的UML表示方法:,面向对象分析与设计&UML,25,5.6.1 边界类,通过用例图可以确定需要的边界类, 每个Actor/User case对至少需要一个边界类.,但并不是每个Actor/Use case都需要生成惟一边界类, 多个actor启动同一use case可以使用同一边界类.,面向对象分析与设计&UML,26,5.6.2 实体类,实体类保存要放进持久存储体(数据库/文件等)的信息.,实体类通过事件流和交互图发现, 采用目标领域术语命名. 通常实体类对
10、应数据库中的表, 其属性对应表的字段, 但实体类与数据库中的表不一定是一一对应关系.,面向对象分析与设计&UML,27,5.6.3 控制类,控制类是负责管理或控制其他类工作的类.,每个用例通常有一个控制类, 控制用例中的事件顺序, 控制类也可以在多个用例间共用. 控制较少接收消息, 发出较多消息.,面向对象分析与设计&UML,28,5.7 类图,类加上它们之间的关系就构成类图, 其中包含接口、包、关系等元素, 同时也可以包含对象、链等实例. 类图描述类和类之间的静态关系.,面向对象分析与设计&UML,29,5.7.1 类图的抽象层次,概念层类图, 描述应用领域的概念.,说明层类图, 描述软件的
11、接口部分, 不是实现部分.,实现层类图考虑实现问题, 提供类的细节.,面向对象分析与设计&UML,30,5.7.2 构造类图,根据用例描述中的名词确定候选类. 使用CRC分析法寻找类, CRC指: 类(class)、职责(responsibility)、协作(collaboration). 根据边界类、控制类和实体类的划分来帮助发现类. 参考设计模式来确定类. 根据软件开发过程的指导寻找类, 如:UP, XP等.,寻找类的方法,构造类图时注意,不要试图使用所有的符号. 不要过早陷入细节, 根据阶段、层次逐步细化. 构造完成要将模型与目标问题对照验证其是否合理.,面向对象分析与设计&UML,31
12、,5.7.2 构造类图,研究分析问题领域, 确定系统需求. 确定类, 明确类的含义和职责, 确定属性和操作. 确定类之间的关系. 调整和细化类及类之间的关系. 绘制类图并增加相应的说明.,建立类图的步骤,面向对象分析与设计&UML,32,5.8 领域分析,建立类图的过程就是对领域及其解决方案的分析与设计过程. 领域分析包括: 通过对某一领域中的已有应用系统、理论、技术、开发历史等的研究, 来标识、收集、组织、分析和表示领域模型及软件体系结构的过程; 根据这一过程得到的结果.,面向对象分析与设计&UML,33,5.9 OO设计的原则,开闭原则(Open/Closed Principle, OCP
13、) Liskov替换原则(Liskov Substitution Principle, LSP) 依赖倒置原则(Dependency Inversion Principle, DSP) 接口分离原则(Interface Segregation Principle, ISP),面向对象分析与设计&UML,34,5.9.1 开闭原则,开闭原则指的是一个模块在扩展性方面应该是开放的, 而在更改性方面应该是封闭的.,其目的是在写模块时,应该尽量使得模块可以扩展, 并且在扩展时不需要对模块的源代码进行修改.,为达到开闭原则, 设计时就尽量使用接口进行封闭, 采用抽象机制, 并利用OO中的多态性技术.,面
14、向对象分析与设计&UML,35,5.9.1 开闭原则,例: 某输出类Output中包含一个output方法, 该方法可能使用多种不同的打印机, 如: HP、EPSON、Canon,每种打印机都有不同的print方法。,设计方案1,void output(int printType) if(printType=1) Hp prt = new Hp(); prt.print(args); else if(printType=2) Epson prt = new Epson(); prt.print(args); else ,面向对象分析与设计&UML,36,5.9.1 开闭原则,设计方案2,voi
15、d output(Printer printer) printer.print(args); ,如何增加打印机类型?,面向对象分析与设计&UML,37,5.9.2 Liskov替换原则,定义: 如果对每一个类型为T1的对象o1, 都有类型为T2的对象o2, 使得以T1定义的所有程序P, 在所有对象o1被代换成o2时, 程序P的行为没有变化, 那么类型T2是类型T1的子类型.,Java等语言中是否允许左图中的继承, 即子类使用较低访问权限覆盖父类的方法呢?,不允许, 这样违背了Liskov替换原则.,面向对象分析与设计&UML,38,5.9.3 依赖倒置原则,定义1: 抽象不应该依赖于细节, 细
16、节应该依赖于抽象.,定义2: 要针对接口编程, 不要针对实现编程.,设计人员希望遵守”开-闭”原则, 倒置依赖关系是达到要求的途径.,面向对象分析与设计&UML,39,5.9.4 接口分离原则,使用多个专门的接口比使用单一的总接口要好.,面向对象分析与设计&UML,40,5.9.4 接口分离原则,一个真实的例子: 某全文查找引擎的系统设计.,违反接口分离原则,面向对象分析与设计&UML,41,5.9.4 接口分离原则,探索器接口 索引生成器接口 搜索结果集接口,功能接口的划分:,面向对象分析与设计&UML,42,5.9.6 设计过程中注意的问题,遵守OO设计原则. 不同类中相似方法的名称应该相
17、同. 遵守已有的约定俗成的习惯. 尽量减少消息模式的数目. 只要可能,使消息具有一致的模式, 以利于理解. 设计简单的类. 类的职责要明确, 不要在类中提供太多的服务, 应该从类名可以比较容易推断出用途. 泛化结构的深度要适当. 定义简单的方法. 一个方法内不要包含过多的功能.,面向对象分析与设计&UML,43,5.9.6 设计过程中注意的问题,好的设计的变动轨迹:,面向对象分析与设计&UML,44,5.10 对象图,对象图表示地组对象及它们之间的关系. 是系统详细状态在某一时刻的快照, 表示复杂的类图的一个实例.,对象图的建模元素: 对象和链,对象图在UML建模中使用有限, 用于表达数据结构的示例, 了解系统在某个特定时刻的具体情况.,面向对象分析与设计&UML,45,5.10 对象图,类图,对象图,面向对象分析与设计&UML,46,作业,建立”笔记本维修系统”的类模型,
链接地址:https://www.31doc.com/p-2598011.html