编辑: 645135144 2019-09-15
第第第4

4 4章章章类图和对象图 类图和对象图 类图和对象图 东华大学计算机学院 石秀金 2007-10-8 Copy Right X.

Shi, DHU

2 本章内容 本章内容 类的定义 类图的阅读 类的关系 高级概念 类的划分 绘制类图 设计原则 复合结构图 对象图 包 本章小结 2007-10-8 Copy Right X.Shi, DHU

3 4.1 4.1 类的定义 类的定义 面向对象思想 2007-10-8 Copy Right X.Shi, DHU

4 4.1 4.1 类的定义 类的定义 面向对象思想 每个对象都扮演了一个角色,并为其它成员提供特 定的服务或执行特定的行为. 在面向对象世界中,行为的启动是通过将 消息 传 递给对此行为负责的对象来完成的;

同时还将伴随 着执行要求附上相关的信息(参数);

而收到该消 息的对象则会执行相应的 方法 来实现需求 用类和对象表示现实世界,用消息和方法来模拟现 实世界的核心思想 2007-10-8 Copy Right X.Shi, DHU

5 4.1 4.1 类的定义 类的定义 什么是类(class)? 具有相似结构、行为 和关系的一组对象的 描述符. 类的组成: 属性 操作 shape origin : point size : double fillcolor : color count : int other shape() move() resize() display() 2007-10-8 Copy Right X.Shi, DHU

6 4.1.1 4.1.1 属性 属性 标准格式: [可见性] 属性名 [: 类型] ['

['

多重性[次序]'

]'

][=初 始值][{特性}] 可见性:可访问性 多重性:属性值个数格式 次序:属性值顺序 特性:属性约束 2007-10-8 Copy Right X.Shi, DHU

7 4.1.1 4.1.1 属性 属性 可见性 属性的可访问性,四类: 公共(public) + 私有(private) - 保护(protected) # 实现(implementation) ~ 2007-10-8 Copy Right X.Shi, DHU

8 4.1.1 4.1.1 属性 属性 举例: + size: Area = (100,100) # visibility: Boolean = false - origin : Point;

Colors : color[3] Points : Point[2..* ordered] Name: String[0..2] 2007-10-8 Copy Right X.Shi, DHU

9 4.1.2 4.1.2 操作 操作 标准格式: [可见性] 操作名 [(参数列表)] [:返回类型][{特性}] 例: + display() # create() -attachXWindow(xwin:XWindowPtr) + getname() : String 2007-10-8 Copy Right X.Shi, DHU

10 4.2 4.2 类图的阅读 类图的阅读 示例类图 先看清有哪 些类,然后 看看类之间 存在的关 系,并结合 多重性来理 解类图的结 构特点以及 各个属性和 方法的含义 2007-10-8 Copy Right X.Shi, DHU

11 4.2 4.2 类图的阅读 类图的阅读 读图过程 读出类: Order、OrderItem、Customer、Consignee、 DeliverOrder、Peddlery、Prodcut 读出关系: 从图中关系最复杂(也就是线最密集)的类开始阅读,本 图中最复杂的就是Order类. OrderItem和Order之间是组合关系,根据箭头的方向可知 Order包含了OrderItem. Order类和Customer、Consignee、DeliverOrder是关联关 系.也就是说,一个订单和客户、收货人、送货单是相关 的. 2007-10-8 Copy Right X.Shi, DHU

12 4.2 4.2 类图的阅读 类图的阅读 读图过程 多重性:用来说明关联的两个类之间的数量关系 源类及多重性 目标类及多重性 分析 Customer(1) Order(0…n) 订单是属于某个客户的,网站的客户可以有0个或多个订单 Order(1) Consignee(1) 每个订单只能够有一个收货人 Order(1) OrderItem(1…n) 订单是由订单项组成的,至少要有一个订单项,最多可以 有n个Order(1) DeliverOrder(1…n) 一个订单有一个或多个送货单 DeliverOrder(1) OrderItem(1…n) 一张送货单对应订单中的一到多个订单项 DeliverOrder(1) Consignee(1) 每张送货单都对应着一个收货人 Peddlery(1) DeliverOrder(0…n) 每个商户可以有相关的0个或多个送货单 OrderItem(1) Product(1) 每个订单项中都包含着唯一的一个产品 Peddlery(1) Prodcut(0…n) 产品是属于某个商户的,可以注册0到多个产 品 说明:系统 根据订单项 的产品所属 的商户,将 其分发给商 户,拆成了 多个送货单 ! 2007-10-8 Copy Right X.Shi, DHU

13 4.2 4.2 类图的阅读 类图的阅读 读图过程 理解方法与图 Order类,有两个方法:dispatch()和close(),从名字中可以猜出 它们分别实现 分拆订单生成送货单 和 完成订单 . DeliveOrder()类中则有一个Close()方法,同理它应该表示 完成 送货 . 而在OrderItem中有一个stateChange()方法和deliverState,不难 猜出它就是用来改变其 是否交给收货人 标志位的 先调用Order的dispatch()方法,它将根据其包含的OrderItem中 产品信息,来按供应商户分拆成若干个DeliverOrder.商户登录 系统后就可以获取其DeliverOrder,并在执行完后调用close()方法.这时,就将调用OrderItem的stateChange()方法来改为其状 态.同时再调用Order的close()方法,判断该Order的所有的 OrderItem是否都已经送到了,如果是就将其真正close()掉2007-10-8 Copy Right X.Shi, DHU

14 4.2 4.2 类图的阅读 类图的阅读 一张复杂的类图 2007-10-8 Copy Right X.Shi, DHU

15 4.2 4.2 类图的阅读 类图的阅读 一张复杂的类图 2007-10-8 Copy Right X.Shi, DHU

16 4.3 4.3 类的关系 类的关系 四类基本关系: 关联(association) 泛化(generalization) 实现(realization) 依赖(dependency) 2007-10-8 Copy Right X.Shi, DHU

17 4.3.1 4.3.1 关联 关联 关联名 导航性(navigability) 从一个类(对象)可以找到另外一个,反过来却不 可. student teacher teaching id password 2007-10-8 Copy Right X.Shi, DHU

18 4.3.1 4.3.1 关联 关联 关联角色(role) 关联的多重性(multiplicity)

0 表没有实例的关联 0..1 0..n

1 1..n n 一个教师可以开设一到三门课,一门课程有一到多名教师讲授 teacher student +teach n +study n n n teacher course 1..3 1..n 1..n 1..3 2007-10-8 Copy Right X.Shi, DHU

19 4.3.1 4.3.1 关联 关联 发现关联 PerformResponsibility Link Association Communication Diagram Class Diagram 0..* 0..* Client Supplier :Client :Supplier Client Supplier PerformResponsibility() 2007-10-8 Copy Right X.Shi, DHU

20 4.3.1 4.3.1 关联 关联 受限关联(qualified association) 受限关联用于一对多或多对多的关联.限定符 (qualifier)用来区分关联 多 端的对象集合,它 指明了在关联 多 端的某个特殊对象. 2007-10-8 Copy Right X.Shi, DHU

21 4.3.1 4.3.1 关联 关联 关联约束(constraint) /依赖(dependency) 2007-10-8 Copy Right X.Shi, DHU

22 4.3.1 4.3.1 关联 关联 聚合(aggregation) 整体和部分的关系,个体可以属于多个整体;

组合(composition) 整体和部分的关系,个体唯一属于一个整体;

bank customer bank customer computer cdrom 2007-10-8 Copy Right X.Shi, DHU

23 4.3.1 4.3.1 关联 关联 自反关联 file folder 0..1 0..n +paren t +son 0..n 0..1 file folder 0..n 0..1 0..1 0..n +parent 2007-10-8 Copy Right X.Shi, DHU

24 4.3.1 4.3.1 关联 关联 派生(Derived)关联 { person.employer=person.department.employer } 一个公司有多个部门,一个职员为其中某部门工 作,则可推导该职员为该公司工作 department company 1..n

1 person n

1 n

1 为部门工作 /为公司工作

1 1..n

1 n n

1 2007-10-8 Copy Right X.Shi, DHU

25 4.3. 4.3.2

2 泛化 泛化 Generalization,一般元素和特殊元素之间的关 系. 用户 操作员 管理员 课程 必修课 选修课 2007-10-8 Copy Right X.Shi, DHU

26 4.3. 4.3.2

2 泛化 泛化 泛化的目的: 可以使子类共享父类的属性和操作,实现继承;

可以使子类的实例用于任何父类被声明使用的地 方,实现多态;

2007-10-8 Copy Right X.Shi, DHU

27 4.3. 4.3.2

2 泛化 泛化 继承 person name : string student stuID : String teacher teacherID : String 2007-10-8 Copy Right X.Shi, DHU

28 4.3. 4.3.2

2 泛化 泛化 例: Student继承了 person的name 属性 Rose中,只有 父类的保护 (Protected) 和公共 (Public)特 性会被子类继 承2007-10-8 Copy Right X.Shi, DHU

29 4.3. 4.3.2

2 泛化 泛化 多态 尽管每个子类的实现方法各自不同,但外界调用的方 式完全一样: Shape *oShape;

Line *oLine;

oLine=new line;

oShape=oLine;

oShape->

draw();

Shape Line Circle Square Rectangle 2007-10-8 Copy Right X.Shi, DHU

30 4.3. 4.3.2

2 泛化 泛化 抽象类(abstract,斜体表示):不能产生实例的类, 因为类中的方法往往只是声明,而没有实现. 所有的基类都应该是抽象类,所有的抽象类都应该是 基类. fruit weight : Single color : String print() cost() getWeight() getColor() apple taste seednum getTaste() orange seedless banana country getCountry() 2007-10-8 Copy Right X.Shi, DHU

31 4.3. 4.3.3

3 依赖 依赖 一个元素(b)的改变会影响另外一个元素 (a),则称存在依赖关系(a依赖于b) a b n 1..1 a b 2007-10-8 Copy Right X.Shi, DHU

32 4.3. 4.3.3

3 依赖 依赖 抽象(abstraction):从一个对象中提取一些特性,并用类方法表 示. 绑定(binding):为模板参数指定值,以定义一个新的模板元素. 组合(combination):对不同类或包进行性质相似融合. 许可(permission):允许另一个对象对本对象的访问. 使用(usage):声明使用一个模型元素需要用到已存在的另一个模 型元素,这样才能正确实现使用者的功能(包括调用、实例化、参数、发送). 调用(call):声明一个类调用其他类的操作的方法. 导出(derive):声明一个实例可从另一个实例导出. 实例(instantiation):关于一个类的方法创建了另一个类的实例声 明. 参数(parameter):一个操作和它........

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题