软件工程 第三章:类图
第三章:类图概念类图的概念:类图是描述类、接口以及它们之间关系的图,它显示了系统中各个类的静态结构,是一种静态模型。分类可以有效地使复杂问题简化。建立类模型的过程,是把现实世界中与问题有关的各种对象及其相互关系进行抽象和分类的过程。类图的组成2类元素(对象、类),4种关系对象:是人们对某个事物的一种抽象描述。对象的基本特征可以归纳为对象的属性和行为两类。类:类是指对一组...
第三章:类图
概念
- 类图的概念:类图是描述类、接口以及它们之间关系的图,它显示了系统中各个类的静态结构,是一种静态模型。
- 分类可以有效地使复杂问题简化。建立类模型的过程,是把现实世界中与问题有关的各种对象及其相互关系进行抽象和分类的过程。
类图的组成
2类元素(接口、类),4种关系
-
对象:是人们对某个事物的一种抽象描述。对象的基本特征可以归纳为对象的属性和行为两类。
-
类:类是指对一组具有相同特征的对象的抽象描述;任何对象都是某个类的实例。
-
关联关系:
- 概念:关联用来表示来表示两个(或多个)类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的引用。
- 表示:用一条无向线段表示,是一种双向关系。例如客户和订单的关联:从客户看,订单是他提交的;从订单看,它有一个客户。用一条有向线段表示,是一种单向关系。
- 名称:关联的名称表达了关联的内容,一般使用动宾结构短语。关联的名称仅有语义作用,不转换为代码
- 可见性:用可见性修饰角色名称,以说明该角色名称可以在哪些范围内被访问。
- 泛化关系:
- 概念:泛化关系(继承关系)定义类和包之间的一般元素和特殊元素之间的分类关系。泛化也称之为继承或派生。
- 区别:
泛化(Generalization): 抽象化
特化(Specialization): 实例化
- 依赖关系:
- 概念:依赖表示一个类以某种形式依赖于其他类。当两个类处于依赖关系中时,其中一个类的改变可能会影响另一个类。
- 在程序代码中,依赖关系意味着一个类的对象出现在另一个类的操作当中。常见的有两种情况:一个类将另一个类的对象作为自己某个操作的参数(形参),或者是操作的局部变量。
区别:
- 依赖关系VS关联关系
- 从符号上
- 从语义上:
当一个类的实例与另一个类的一些特定实例存在固定的对应关系时,这两个系统之间为关联关系。只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系。
“我在某个方法中偶然用到了它,但在现实中我和它并没多大关系”。
-
实现关系:
-
聚合与组合:
- 概念:
对于聚合:
聚合表示类之间的整体与部分的关系。聚合意味着一个类拥有但共享另一个类的对象。
当整体类不存在时,部分类仍可能存在。部分类被销毁时,整体类也将能够存在。
对于组合:
组合是一种特殊形式的聚合。与聚合相比,它有两个特点:
一个部分类最多只能属于一个整体类
当整体类不存在时,部分类将同时被销毁。
- 区别
- 关联VS聚合(组合)
关联关系所涉及的两个类是处在同一个层次上的。比如学生和课程就是一种关联关系,而不是聚合关系,因为学生不是由课程组成的。聚合关系涉及的两个类处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和显示器、键盘、主板、内存就是聚合关系,因为主板等是电脑的组成部分。 - 聚合VS组合
组合:整体类端的重数必须是1,部分类的重数是任意的
聚合:整体类端的重数可以大于1,部分类的重数是任意的
- 画图:
聚合也是表示类和类之间的“整体-部分”关系,用空心菱形表示。
组合是聚合的一种特殊情形,用实心菱形表示
- 约束规则
- 概念:
在画类图的过程中,关联、属性和操作等基本要素都要为模型加注约束条件。
约束规则的语法:将约束条件放在括号{ }中,用自然语言或其他常见的设计语言来描述,其描述要简洁准确。
在理想的情况下,在所使用的程序设计语言中,规则应该作为断言来实现,并在调试代码时调用它。
- 对象图
三个层次的观点
- 概念层:描述应用域中的概念,是对现实世界的直接描述,与实现它们的类有关,但与实现方案和实现语言无关。
- 说明层:描述软件的接口,而不是软件的实现。一个类型描述一个接口,但可能有多种实现。
- 实现层:从实现的角度定义类及其实现,揭示了软件实现体的构成情况。
类图建模分析步骤
(1)寻找出需求中的名词(候选对象)。
(2)合并含义相同的名词,排除范围以外的名词,并寻找隐含的名词。
(3)去掉只能作为类属性的名词。
(4)剩下的名词就是要找的分析类(候选类)。
(5)根据常识、问题域、系统责任确定该类有那些属性。
(6)补充该类动态属性,如状态、对象间联系(如聚合、关联)等属性。
(7)从需求中的动词、功能或系统责任中寻找类的操作(候选操作)。
(8)从状态转换,流程跟踪、系统管理等方面补充类的操作。
(9)对所寻找的操作进行合并、筛选。
(10)对所寻找的操作在类间进行合理分配(职责分配),形成每个类候选操作。
(11)补充每个类的的分析文档,为类的进一步设计打下基础。
小结:
- 类和对象的表示法
(1)名称;(2)属性;(3)行为; - 类之间的各种关系
(1)继承:子类继承了超类的所有属性和行为;
(2)关联:两个不同类之间关联,可以单向或双向;
(3)聚合:强关联关系,整体与部分的生命周期分开;
(4)组合:强聚合,整体与部分的生命周期相同; - 三个概念层次
(1)概念层;(2)说明层;(3)实现层
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)