软件工程收官之后讲面向对象的核心装备UML 类图的六种关系。上午题考它是给你一段场景描述或一张图让你判断是哪种关系下午面向对象大题考它是让你读完整的类图填代码——图上的每一根线不认识代码就无从填起。好消息是六种关系的考点就两件事——概念怎么区分和图形怎么画都是有死规矩的。一、总览先记住强度排序六种关系从强到弱泛化 实现 组合 聚合 关联 依赖越往左两个类绑得越死最右边的依赖最塑料只是临时用一下。二、逐个击破定义 图形 例子1. 泛化继承——是一种is-a子类继承父类狗是一种动物。图形实线 空心三角形三角形指向父类。狗 ──────▷ 动物 实线空心三角指向父类2. 实现——类实现接口类承诺兑现接口定义的功能ArrayList 实现 List。图形虚线 空心三角形三角形指向接口。和泛化同用一个三角但线换成虚线——实线继承类虚线实现接口。3. 依赖——临时用一下use-a一个类在方法里用到另一个类作为方法参数、局部变量或调用其静态方法。比如人写字的方法里用到了笔。图形虚线 普通箭头箭头指向被使用的类。关系最弱用完即走。4. 关联——长期持有has-a一个类的对象作为成员变量长在另一个类里教师类里有学生列表。图形实线可带箭头表示导航方向。比依赖强在长期——不是某个方法临时用而是结构上一直拥有。5. 聚合——整体-部分但能分家特殊的关联强调整体与部分且部分可以脱离整体独立存在。图形实线 空心菱形菱形在整体一端。班级 ◇────── 学生 空心菱形在班级这端学生转班了还是学生轮胎从车上拆下来还能装到别的车上——能分家就是聚合。6. 组合——整体-部分同生共死比聚合更强的整体-部分部分不能脱离整体独立存在。图形实线 实心菱形菱形在整体一端。人 ◆────── 心脏 实心菱形在人这端窗口销毁了上面的按钮随之消失心脏无法脱离人体独立存在——同生共死就是组合。三、三大辨析坑都集中在这里辨析一聚合 vs 组合——部分能否独立生存能独立 → 聚合空心菱形不能 → 组合实心菱形。班级与学生、图书馆与书籍、车队与汽车都是聚合人与心脏、窗口与按钮都是组合。辨析二关联 vs 依赖——看关系落在哪。落在成员变量上 → 关联长期结构关系只出现在方法参数/局部变量里 → 依赖临时使用。教师持有学生列表是关联人的写字方法接收一支笔作参数是依赖。辨析三泛化 vs 实现——看线型。继承类→ 实线空心三角泛化实现接口→ 虚线空心三角实现。三角相同虚实不同。四、图形速记表背这张就够关系线型端部符号关键朝向泛化实线空心三角指向父类实现虚线空心三角指向接口关联实线可有箭头—聚合实线空心菱形菱形在整体端组合实线实心菱形菱形在整体端依赖虚线普通箭头指向被用者口诀三角管继承实泛化、虚实现菱形管整体空聚合、实组合虚线箭头是依赖光杆实线是关联三角指向父辈菱形跟着整体。五、10 道练习题基础题1~51.UML 类图中表示泛化继承关系的图形是 。A. 实线带空心三角指向父类 B. 虚线带空心三角 C. 实线带空心菱形 D. 虚线带普通箭头2.类实现接口时UML 类图中的表示是 。A. 实线带空心三角 B. 实线带实心菱形 C. 虚线带空心三角指向接口 D. 实线带普通箭头3.类 A 的某个方法以类 B 的对象作为参数使用则 A 与 B 之间最可能的关系是 。A. 泛化 B. 聚合 C. 依赖 D. 组合4.汽车与轮胎轮胎可拆下安装到其他汽车上之间的关系属于 。A. 组合 B. 聚合 C. 泛化 D. 依赖5.下列关系中耦合强度最弱的是 。A. 泛化 B. 组合 C. 关联 D. 依赖进阶题6~10带坑6.窗口与窗口中的按钮窗口销毁时按钮随之销毁之间的关系属于 。A. 聚合 B. 组合 C. 关联 D. 依赖7.类图中两个类以实线相连且其中一端为空心菱形该图表示的关系是 。A. 聚合 B. 组合 C. 泛化 D. 实现8.在聚合关系的图示中空心菱形应画在 。A. 部分的一端 B. 整体的一端 C. 任意一端均可 D. 两端都要画9.教师类中定义了成员变量学生列表则教师与学生之间的关系是 。A. 依赖因为教师用到了学生 B. 聚合因为是整体与部分 C. 泛化因为有继承意味 D. 关联因为学生作为教师的成员变量长期存在10.下列四对事物中最适合用组合关系描述的是 。A. 班级与学生 B. 图书馆与书籍 C. 人与心脏 D. 车队与汽车六、答案与详解1. A泛化 实线 空心三角 指向父类。B 是实现的画法虚线C 是聚合的零件D 是依赖。识图题第一原则先看线型虚实再看端部符号。2. C实现 虚线 空心三角 指向接口。和泛化同一个三角实线继承类、虚线实现接口——这对是软考识图的常驻嘉宾。3. C方法参数里的临时使用 →依赖六种关系里最弱的一种。判断要诀这个 B 有没有成为 A 的成员变量没有只是方法里经手一下——依赖。4. B整体-部分且能分家轮胎可拆、可另装→聚合空心菱形。5. D强度排序泛化实现 组合 聚合 关联 依赖垫底的依赖最弱——临时用一下几乎谈不上绑定。6. B大坑。整体-部分不假但关键在同生共死窗口销毁按钮无法独立存活 → 这是组合实心菱形不是聚合。聚合的部分是能单飞的学生转班、轮胎换车。判据永远一句部分能否独立生存7. A空心菱形 聚合实心菱形才是组合。一空一实一弱一强识图题就爱在这对双胞胎上做文章。8. B菱形永远跟着整体走。记法菱形像整体张开的一个口袋部分那一端往口袋里装。聚合组合都遵守这个朝向记一个等于记两个。9. D本题大坑。看到用到了学生就选依赖错——学生是以成员变量身份长期存在于教师类中的这是结构上的拥有关系 →关联。依赖只覆盖方法参数/局部变量级别的临时使用。判据落在成员变量上是关联落在方法签名里是依赖。10. C逐项过班级与学生学生可转班、图书馆与书籍书可剔旧流转、车队与汽车车可调度——部分都能独立存在全是聚合只有人与心脏同生共死 →组合。七、五句话带走强度排序泛化实现 组合 聚合 关联 依赖三角管继承实线泛化指向父类虚线实现指向接口菱形管整体空心聚合、实心组合菱形永远在整体端聚合组合的分水岭部分能否独立生存轮胎聚合、心脏组合关联依赖的分水岭成员变量 关联方法参数 依赖。下一篇预告转进计算机网络——上午题的稳定计算点OSI 与 TCP/IP 模型分层设备各在哪一层、IP 地址与子网划分给你 IP 和子网掩码算网络号、主机数、广播地址。进制转换练过的基本功在这里要二次变现了。