第4章静态结构模型-类图
设备:在系统中被使用或由系统进行监控的设备、仪器等,系统运行
中的硬件设备(如打印机)除外。 事件:需要由系统长期记忆的事件(如在自动柜员机上的每次取款事 件、每次借书事件)。
不同类别的概念(续)
规格说明:系统中关于对象的规格信息的描述。 – 如图书品种,每种图书有一个唯一的馆藏号,同时该图书还包含一些描述信 息,如书号、价格、作者、出版社等,多本图书对象共用这些规格说明。这 是一种经过了抽象的概念,应该识别为概念类。 业务规则或政策:系统中经常使用的业务规则或政策的文字描述。 – 业务规则通常会在用例文档之外以其他条款说明。如图书馆系统中,对不同 违规行为指定不同的罚款金额,商店对不同顾客或产品有不同的折扣策略等。 如果这些规则无法并入到其他对象中,则可以作为概念类建立。 – 通常规则可能仅有属性,或者仅有操作,比如折扣策略可能是一个纯粹的计 算类。
面向对象的分析
建立静态结构模型(类图)
面向对象的分析
分析业务领域,找出问题解决方案,发现对象,分析对象的内部构成 和外部关系,建立软件系统的对象模型。
着重分析业务领域和系统责任,建立独立于实现的OOA模型,暂时忽
略与系统实现有关的问题。 主要使用5种图描述完整的系统需求:
用例图
类图 时序图 协作图 状态图
在分析中需要着重对系统与外部的用户和其他系统的交互进行分析,
确定交互的内容、步骤和顺序。 ——用例模型
第二阶段:发现和定义对象和类
识别对象和类,确定它们的内部特征:属性与服务操作。
这是一个从现实世界到概念模型的抽象过程,而抽象是面向对象分析 的基本原则。
第三阶段:识别对象的外部联系
在发现和定义对象和类的过程中,需要同时识别对象与对象、类与类 之间的各种外部联系,如一般与特殊、整体与部分、实例连接(关联)、
属性的表示
借书记录 borrowDate:Date returnDate:Date
属性的有关说明:
• 属性的名称和解释:有些属性只适用于该问题域,是专业术语,晦 涩难懂;有些常用词语在特定环境下字面的含义有所修改,为了提 高清晰度,需要对这些属性进行定义。 • 属性的数据类型:分析时使用简单类型,如整数、实数、字符串、 日期、数组、布尔等,分析阶段因为不考虑技术实现,所以不需要 考虑具体语言能支持的数据类型。 • 其他要求:如取值范围、缺省值等。
明显无意义的对象:收款处
用例名称:预定房间 涉及的参与者:酒店前台 正常事件流: 1) 前台人员向系统提供需要预定房间的类型、时间和预定天数。 2) 系统确认有相应档次的空闲房间,并计算出总费用和定金。 3) 前台人员向系统提供旅客信息(姓名、地址、联系电话、证件号等)。 4) 系统记录旅客信息。 5) 前台人员确认已经交纳定金。 6) 系统记录房间已经预定,工作完成。
消息连接等联系。
对象和类是现实世界中的事物的抽象,它们之间的联系也要从分析现 实世界事物的各种真实的联系中获得。
第四阶段:建立系统的静态结构模型 分析系统的行为,建立系统的静态结构模型,并将其用图形和文字说 明表示出来,如绘制类图、对象图、系统与子系统结构图等,编制相 应的说明文档。 第五阶段:建立系统的动态行为模型 分析系统的行为,建立系统的动态行为模型,并将其用图形和文字说 明表示出来,如绘制用例图、交互图、活动图、状态图等,编制相应 的说明文档。
图书馆系统的对象
名词类别 显而易见的对象 明显无意义的对象 不确定类别的对象 概念类列表 读者 借书卡 图书 借书信息 借书清单 读者身份 借书条件 图书状态 可借数量 可用限额
• 图书状态总是和具体的图书联系在一起,不是一个独立的对象。同理, 借书数量、可用限额是读者属性。 • 可借数量是某个图书品种的特性,每本图书归属于一个图书品种,图书 品种是一个隐含概念 • 借书条件是一种规则,可以作为对象吗?
其标注下划线;
合并同义词; 将最终得到的每一个名词映射为一个类; 动词映射为类的操作,形容词/名词映射为类的属性。
借书用例
借书用例描述
用例描述如下: 1.图书管理员将读者借书卡提供给系统; 2.系统验证读者身份和借书条件; 3.图书管理员将读者所借图书输入系统; 4.系统记录借书信息,并且修改图书的状态和此种书的可借数量; 5.系统修改读者的可用限额; 6.重复3-5,直到图书管理员确认全部图书登记完毕; 7.系统打印借书清单,交易成功完成。
练习
阅读用例描述,找出概念类
用例名:购买商品 参与者:出纳员 描述:顾客带着所要购买的商品来到收款处。出纳员记录下商品信息 并收款。付款完成后,顾客带着所购买的商品和收据离开。
练习
阅读用例描述,找出概念类
用例名:购买商品 参与者:出纳员 描述:顾客带着所要购买的商品来到收款处。出纳员记录下商品信息 并收款。付款完成后,顾客带着所购买的商品和收据离开。
组合(composition)
聚合(aggregation) 依赖(dependency)
关联名称
销售项 Sale
包含 1 1..*
销售项条目 SalesLineItem
多重性
描述关联的要素
关联名称 对象在关联中的角色
1. 2.
3.
4.
多重性
导向性
1、关联名称
• • 多数关联是二元的(即只存在于两个类的实例之间),在图 中表示为连接两个类符号的实线路径。 使用关联名称,应该反映该关系的目的,并且应该是一个动 词词组。
用例名称:预定房间 涉及的参与者:酒店前台 正常事件流: 1) 前台人员向系统提供需要预定房间的类型、时间和预定天数。 2) 系统确认有相应档次的空闲房间,并计算出总费用和定金。 3) 前台人员向系统提供旅客信息(姓名、地址、联系电话、证件号等)。 4) 系统记录旅客信息。 5) 前台人员确认已经交纳定金。 6) 系统记录房间已经预定,工作完成。
借书用例描述
用例描述如下: 1.图书管理员将读者借书卡提供给系统; 2.系统验证读者身份和借书条件; 3.图书管理员将读者所借图书输入系统; 4.系统记录借书信息,并且修改图书的状态和此种书的可借数量; 5.系统修改读者的可用限额; 6.重复3-5,直到图书管理员确认全部图书登记完毕; 7.系统打印借书清单,交易成功完成。
消息连接也称为“依赖关系”(Dependency)。
依 赖
(4) 消息连接:依赖关系
– 比如教师对象和课程对象的关联名称就是“讲授”,医生和处方近。
读者
借阅
图书
2、关联角色(Role)
关联所联系的每一端叫做一个角色
角色名称应该是一个名词,能够表达被关联对象在关联中所充当的角 色,角色名称紧邻关联线的末端。
贷款
1
* 0..1 担保人
4、关联的导向性(Navigability)
角色的导向性特征表示可以通过关联从源类导向到目标类上。也就是说给 定关联一端的对象就能够容易并直接地得到另一端的对象。
识别关联的导向可以推迟,与设计实现有关。通常是源对象存储了对目标
对象的一些引用 1 登记 1..*
读者 Reader
借书记录 Loan
Reader很可能有一个 指向Loan对象的属性
建立静态结构模型
基本的分析过程: Step 1:从用例模型入手,识别概念类; Step 2:描述各个类的属性; Step 3:定义各个类的操作; Step 4:建立类之间的关系;
Step 5:绘制类图(class diagram)
识别概念类
如何从用户的需求陈述中找到“概念类”? ——名词驱动的识别方法 对用户需求陈述进行“语法分析”,找出所有的名词或名词短语,对
定义领域类属性的原则
1. 仅定义与系统责任和系统目标有关的属性。
2. 使用简单数据类型来定义属性。如数字、字符串、日期、布尔、文 本等。还包含多种特征或规则的数据,可考虑作为独立的对象类。
3. 一般不使用可导出的属性。( 出生年月年龄)
4. 不为对象关联定义属性。属性只用于体现对象本身的内在性质,关 联属性来实现,但那是设计阶段的问题,应推迟考虑。 • 如毕业设计题目与教师和学生存在关联,但题目中不应定义“教 师姓名”、“学号”之类的属性。
面向对象的分析模型
功能模型:从用户的角度获取功能需求,由用例模型表示
(已在上堂课学习过);
静态结构模型(分析对象模型):描述系统的概念实体,由 类图表示; 动态行为模型:描述对象之间的交互行为,由状态图和顺 序图表示。
面向对象的分析模型
面向对象的分析模型
面向对象分析的过程
第一阶段:业务领域分析 分析应用领域的业务范围、业务规则和业务处理过程,确定系统的责 任、范围和边界,确定系统的需求。
不同类别的概念
人员:系统需要保存或管理其信息的人员(如录像商店的会员、图书 馆的读者),或在系统中中扮演一定角色的人员(如录像商店的职员、 论文评阅教师)。 组织:在系统中发挥一定作用的组织机构(如录像商店的连锁店,医
疗保险系统中的医院,学校中的系)。
物品:需要由系统管理的各种物品(如录像商店的商品、图书),包 括无形事物(如学校的一门课程、毕设题目)。
导航箭头说明Reader对象可单向 访问到Loan对象
实例连接:关联关系
class Course {} class Student { private Course [] selectedCourses; }
Student
- selectedCourses 5..*
Course
class Teacher { private Student [] students; }
关联类
String description; Date dateHired;
double salary;
}
(4) 消息连接:依赖关系
消息连接
– 消息连接是对象之间的通信联系,它表现了对象行为的动态联系。 – 一个对象需要另一个对象的服务,便向它发出请求服务的消息,接收消息的 对象 响应消息,触发所要求的服务操作。