第8章 · 播客 第7集
系统分析与设计方法 · 类图关系与物理建模
🎙️ 本集播客:第7集:类的三格表示与属性操作语法、四种类关系的图形记号逐一辨析(第 7 题)、聚合与组合的生命周期区别(第 15 题)、多重性读写、对象图与链,再过构件图与部署图两张物理视图。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
明
阿明
类图这块硬骨头,从哪下口?
雅
小雅
先立地位:类、对象和它们之间的关联是面向对象技术中最基本的元素,类图技术是 OO 方法的核心,类模型和对象模型揭示了系统的结构。在 UML 中,类和对象模型分别由类图和对象图表示。类图描述类和类之间的静态关系,它不仅显示了信息的结构,同时还描述了系统的行为,类图是定义其他图的基础。
雅
小雅
类的可视化表示是一个划分成三个格子的长方形,下面两个格子可省略。最顶部的格子包含类的名字,类的命名应尽量用应用领域中的术语,应明确、无歧义;中间的格子包含类的属性,用以描述该类对象的共同特点;第三个格子是类的操作。属性和操作的语法都要会。属性语法为:可见性 属性名冒号类型 等于默认值 花括号约束特性;操作语法为:可见性 冒号操作名 圆括号参数表 冒号返回类型 花括号约束特性。
明
阿明
可见性的三个符号我记得是加减井号?
雅
小雅
对:Public、Private 和 Protected,分别用加号、减号、井号表示。属性的类型可以是基本数据类型,例如整数、实数、布尔型,也可以是用户自定义的类型;约束特性是用户对该属性性质的约束说明,例如花括号只读说明该属性是只读属性。操作用于修改、检索类的属性或执行某些动作,通常也被称为功能,但它们被约束在类的内部,只能作用到该类的对象上;操作名、返回类型和参数表组成操作界面。
明
阿明
类和类之间的关系是重头吧?我记得有四种。
雅
小雅
面向对象建模中有 4 个很重要的关系:依赖、泛化、关联、实现。逐个来,先说依赖关系。有两个元素 X 和 Y,如果修改元素 X 的定义可能会引起对另一个元素 Y 的定义的修改,则称元素 Y 依赖于元素 X。在 UML 中,使用带箭头的虚线表示依赖关系。类中依赖由多种原因引起,如:一个类向另一个类发消息;一个类是另一个类的数据成员;一个类是另一个类的某个操作参数。如果一个类的界面改变,它发出的任何消息可能不再合法。
雅
小雅
泛化关系描述了一般事物与该事物中的特殊种类之间的关系,也就是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说子类是从父类中继承的,而父类则是子类的泛化。在 UML 中,使用带空心箭头的实线表示,箭头指向父类。
雅
小雅
UML 对泛化关系有 3 个要求:子类应与父类完全一致,父类所具有的关联、属性和操作,子类都应具有;子类中除了与父类一致的信息外,还包括额外的信息;可以使用父类实例的地方,也可以使用子类实例。这三条俗称可替换性,是判断题素材。
雅
小雅
关联关系:关联表示两个类之间存在某种语义上的联系,例如一个人为一家公司工作,一家公司有许多办公室,就认为人和公司、公司和办公室之间存在某种语义上的联系。关联关系提供了通信的路径,它是所有关系中最通用的、语义最弱的。在 UML 中,用一条实线来表示关联关系。「最通用、语义最弱」这个评价本身就能出题。
明
阿明
关联里还套着聚合和组合两种特殊形式?练习题第 7 题和第 15 题都堵在这儿。
雅
小雅
对,也是本章图形记号辨析的重仓。聚合是一种特殊形式的关联,表示类之间的关系是整体与部分的关系。例如一辆轿车包含四个车轮、一个方向盘、一个发动机和一个底盘,就是聚合的一个例子。在 UML 中,用一个带空心菱形的实线表示,空心菱形指向的是代表整体的类。练习题第 7 题问聚合关系的图形表示,答案就是带空心菱形的实线。
雅
小雅
第 7 题干扰项拆解:A 带空心箭头的实线是泛化;B 带箭头的虚线是依赖;C 带实心菱形的实线是组合。所以这道题实际把四种记号一网打尽,你只要把四个记号和四个关系对死,这道题就是送分题。
雅
小雅
组合关系:如果聚合关系中的表示部分的类的存在,与表示整体的类有着紧密的关系,例如公司与部门之间的关系,那么就应该使用组合关系来表示。在 UML 中,用带有实心菱形的实线表示,菱形指向的是代表整体的类。
明
阿明
练习题第 15 题问聚合和组合的主要区别。
雅
小雅
希赛教育专家提示的原话:聚合关系是指部分与整体的生命周期可以不相同,而组合关系则是指部分与整体的生命周期是相同的。第 15 题正确选项就是「聚合部分与整体生命周期可以不同,组合则生命周期相同」。干扰项拆解:A 选项把实心空心菱形正好说反——聚合是空心、组合是实心;B 选项把生命周期关系说反;D 选项说两者完全相同没有区别,那是送命题。菱形空心实心加生命周期同不同,两把尺子一起量就稳。
雅
小雅
第四种实现关系:实现关系是用来规定接口和实现接口的类或组件之间的关系的。接口是操作的集合,这些操作用于规定类或组件的服务。在 UML 中,用一个带空心箭头的虚线表示。注意跟泛化对比记忆:泛化是空心箭头实线,实现是空心箭头虚线,都是空心箭头,一个实线一个虚线,就差在虚实。
明
阿明
四种关系连菱形两种共五种记号我理一遍:依赖带箭头虚线、泛化带空心箭头实线、关联实线、聚合带空心菱形实线、组合带实心菱形实线、实现带空心箭头虚线。
雅
小雅
背下来了,考试画图题和选项题都吃这个。接着多重性问题。重复度又称多重性,多重性表示为一个整数范围 n 到 m,整数 n 定义所连接的最少对象的数目,而 m 则为最多对象数,当不知道确切的最大数时,最大数用星号表示。最常见的多重性有:0 到 1;0 到星号;1 到 1;1 到星号;星号。
雅
小雅
原文三个例子要会念:书与借书记录之间的关系应该是 1 对 0 到 1,也就是一本书可以有 0 个或 1 个借书记录;经理与员工之间的关系应为 1 对 0 到星号,一个经理可以领导 0 个或多个员工;学生与选修课程之间的关系可以表示为 0 到星号对 1 到星号,一个学生可以选择 1 门或多门课程,而一门课程可以有 0 个或多个学生选修。
明
阿明
那对象图跟类图什么关系?
雅
小雅
UML 中对象图与类图具有相同的表示形式,对象图可以看作是类图的一个实例。对象是类的实例;对象之间的链,也就是 Link,是类之间的关联的实例。对象与类的图形表示相似,均为划分成两个格子的长方形,下面的格子可省略,上面的格子是对象名,对象名下有下画线,下面的格子记录属性值。链的图形表示与关联相似。对象图常用于表示复杂类图的一个实例。判断题:「对象图就是类图的实例」——对。
明
阿明
静态图还剩构件图和部署图吧?
雅
小雅
这两张是面向对象系统物理方面建模的两种图。先说构件图:构件图可以有效地显示一组构件以及它们之间的关系,图中通常包括构件、接口及各种关系。通常构件指的是源代码文件、二进制代码文件和可执行文件等,构件图就是用来显示编译、链接或执行时构件之间的依赖关系的。
雅
小雅
使用构件图可以完成四项工作:对源代码进行建模,清晰表示各源程序文件之间的关系;对可执行体的发布建模,清晰表示各可执行文件、DLL 文件之间的关系;对物理数据库建模,表示各种类型的数据库、表之间的关系;对可调整的系统建模,例如对应用了负载均衡、故障恢复等系统的建模。绘制时注意侧重于描述系统的静态实现视图的一个方面,为构件图取直观的名称,避免产生线的交叉。
明
阿明
部署图跟构件图怎么分工?
雅
小雅
原话:构件图是说明构件之间的逻辑关系,而部署图则是在此基础上更进一步地描述系统硬件的物理拓扑结构及在此结构上执行的软件。部署图也称为实施图,可以显示计算结点的拓扑结构和通信路径、结点上运行的软件构件,常用于帮助理解分布式系统。分工一句话——构件图讲逻辑、部署图讲物理。
雅
小雅
部署图的组成部分:节点代表一个物理设备及其上运行的软件系统,如一台 UNIX 主机、一个 PC 终端、一台打印机、一个传感器等。在 UML 中使用一个立方体表示一个节点,节点名放在左上角。节点之间的连线表示系统之间进行交互的通信路径,在 UML 中被称为连接,通信类型放在连接旁边的双书名号之间,表示所用的通信协议或网络类型。构件在部署图中代表可执行的物理代码模块,逻辑上可以与类图中的包或类对应。类和构件对外提供可见操作和属性,称之为接口,界面可以表示为一头是小圆圈的直线。
明
阿明
立方体是节点、连线是连接、小圆圈直线是接口。
雅
小雅
本集必背:类图画三格——名字、属性、操作,可见性加号 Public、减号 Private、井号 Protected;四种关系——依赖是带箭头的虚线,泛化是带空心箭头的实线、指向父类,关联是实线、最通用语义最弱,实现是带空心箭头的虚线;聚合带空心菱形实线、部分整体生命周期可以不同;组合带实心菱形实线、生命周期相同,菱形都指向整体。
明
阿明
菱形和生命周期的组合,两把尺子都在手上了。
雅
小雅
再补几条静态图的小分:多重性 n 到 m,最大数不知用星号,书对借书记录是 1 对 0 到 1、经理对员工是 1 对 0 到星号;对象图是类图的实例,对象名有下画线,链是关联的实例;构件图可建模源代码、可执行体发布、物理数据库、可调整系统四样;部署图的节点画立方体、连线叫连接,构件图讲逻辑、部署图讲物理。
明
阿明
静态建模这边收工了。
雅
小雅
下一集讲动态建模三件套加两张行为图:顺序图、通信图、定时图三种交互图的侧重差别,状态图的五种组成和复合状态,活动图的判定、泳道、对象流、信号——它们和状态图的血缘关系也是常考的辨析点。