软考中级软件设计师高频考点UML类图用例图六大关系与Include Extend真题详解附历年真题·百度网盘所属考纲模块专题五 面向对象技术与 UML 建模考点 02 / 03UML 关系与类图用例图️考查题型上午综合知识单选题1~2 分 下午试题三面向对象分析与设计必考 15 分核心知识点UML 六种关系的符号与强弱排序、类图可见性标记与多重度、用例图 include 与 extend 的方向和语义差异、顺序图/状态图/活动图的核心元素、下午题填类名/填关系答题方法实操验证环境Java 17文内附依赖、关联、聚合、组合、泛化、实现的完整代码对照本文核心知识点目录软考中级软件设计师高频考点UML类图用例图六大关系与Include Extend真题详解附历年真题·百度网盘一、 UML 六种关系符号、语义、强弱强弱排序必背符号辨析要点聚合与组合的判定方法二、 类图的可见性与多重度1. 可见性标记2. 多重度表示三、 用例图include 与 extend1. 用例图的三要素2. include包含与 extend扩展的核心区别3. 三个易混点四、 其他 UML 图的核心元素1. 顺序图Sequence Diagram2. 状态图State Diagram3. 活动图Activity Diagram五、 下午题答题方法1. 填类名2. 填关系3. 填多重度六、 真题切片精讲 真题切片一聚合 vs 组合 真题切片二include 与 extend 真题切片三关系强弱排序七、 代码验证六种关系的 Java 对照八、 易错点清单附相关真题与复习资料UML 是下午试题三的主战场15 分里通常要求你补充类图中的类名“补充类之间的多重度”“说明某两个类之间的关系”。这些题看似考画图实际考的是关系语义的精确区分依赖和关联差在哪、聚合和组合怎么分、include 和 extend 箭头朝哪边。本文把六种关系的符号、语义、代码映射一次讲透并用一段 Java 代码把聚合 vs 组合依赖 vs 关联变成可运行的事实。一、 UML 六种关系符号、语义、强弱关系英文图形符号语义强弱依赖Dependency虚线 开放箭头指向被依赖方临时使用一方变化可能影响另一方★最弱关联Association实线可带箭头、多重度长期的结构化联系★★聚合Aggregation实线 空心菱形菱形在整体端整体与部分可分离“has-a”★★★组合Composition实线 实心菱形菱形在整体端整体与部分同生共死“contains-a”★★★★最强泛化Generalization实线 空心三角指向父类继承“is-a”纵向关系实现Realization虚线 空心三角指向接口实现接口纵向关系强弱排序必背依赖 关联 聚合 组合符号辨析要点菱形永远在整体一端不在部分一端空心菱形 聚合部分可独立存在如班级—学生实心菱形 组合部分不能独立存在如订单—订单项空心三角指向父类/接口实线是泛化、虚线是实现依赖是虚线 开放箭头最容易和实现混淆——实现是虚线 空心三角依赖是虚线 普通箭头。聚合与组合的判定方法判断问题聚合组合整体销毁时部分是否销毁不销毁销毁部分能否被多个整体共享能通常不能典型例子班级—学生、部门—员工订单—订单项、人—心脏 一句话聚合是借来的组合是生出来的。二、 类图的可见性与多重度1. 可见性标记标记含义Java 对应public公开public-private私有private#protected受保护protected~package包内可见默认无修饰符类图中属性的完整写法- name: String getAge(): int2. 多重度表示表示含义1恰好 1 个0..10 或 1 个*或0..*0 个或多个1..*至少 1 个n..mn 到 m 个多重度标注在关联线两端表示该端类的实例对应另一端多少个实例。例“一个部门拥有 1…* 个员工一个员工属于 0…1 个部门”则在部门端标1在员工端标1..*注意标注在被指向的一端。三、 用例图include 与 extend1. 用例图的三要素参与者Actor与系统交互的外部角色用小人表示用例Use Case系统提供的功能用椭圆表示关系参与者与用例之间的关联、用例之间的包含/扩展/泛化。2. include包含与 extend扩展的核心区别对比项include 包含extend 扩展语义基用例必须执行被包含用例基用例可选执行扩展用例箭头方向基用例 → 被包含用例扩展用例 → 基用例触发条件无条件必然发生满足扩展条件时才发生典型例子下单 → 登录校验下单 → 使用优惠券 记忆口诀include 是必须做箭头指向被包含者extend 是可能做箭头指向被扩展者。3. 三个易混点箭头方向include 从基用例指向被包含用例extend 从扩展用例指向基用例。方向记反是最高频错误。谁依赖谁include 中基用例依赖被包含用例extend 中被扩展用例不依赖扩展用例。泛化用例之间也可以有泛化子用例继承父用例符号与类泛化相同空心三角实线。四、 其他 UML 图的核心元素1. 顺序图Sequence Diagram生命线垂直虚线表示对象存在的时间激活条生命线上的矩形表示对象正在执行消息同步消息实心箭头、异步消息开放箭头、返回消息虚线箭头组合片段alt分支、loop循环、opt可选。2. 状态图State Diagram状态圆角矩形转移带箭头的实线标注事件[守卫条件]/动作初态实心圆终态实心圆外加圆环。3. 活动图Activity Diagram活动圆角矩形分叉/汇合粗黑线并发判断/合并菱形泳道用竖线划分责任区域。顺序图强调时间顺序状态图强调单个对象的状态变迁活动图强调业务流程与控制流。五、 下午题答题方法1. 填类名题干中的名词往往是类如订单“商品”“会员”题干中的动词往往是方法如计算总价“提交订单”若某类包含1…*“的一端通常是整体”。2. 填关系按语义判断而不是看图形题干描述关系“A 是 B 的一种”泛化“A 实现 B 接口”实现“A 在方法中临时使用 B”依赖“A 长期持有 B 的引用”关联“A 包含 B但 B 可独立存在”聚合“A 由 B 组成A 销毁 B 也销毁”组合3. 填多重度从题干中找数量词“一个订单包含多个订单项” → 订单端1订单项端1..*“一个会员可以没有订单” → 会员端0..1。六、 真题切片精讲 真题切片一聚合 vs 组合在 UML 类图中订单与订单项之间、班级与学生之间的关系分别是 。A. 组合、聚合 B. 聚合、组合 C. 关联、依赖 D. 组合、关联解题步骤订单销毁时订单项没有独立意义属于组合实心菱形班级撤销后学生仍然存在属于聚合空心菱形。正确答案A 真题切片二include 与 extend在用例图中若下单用例在执行时可能使用优惠券用例则二者之间的关系是 。A. “下单包含优惠券” B. “优惠券扩展下单”C. “下单扩展优惠券” D. “下单泛化优惠券”解题步骤可能使用表示可选属于扩展关系扩展关系的箭头从扩展用例指向被扩展用例即优惠券 → 下单。正确答案B 真题切片三关系强弱排序下列 UML 关系中耦合度由弱到强排列正确的是 。A. 依赖、关联、聚合、组合B. 关联、依赖、组合、聚合C. 依赖、聚合、关联、组合D. 组合、聚合、关联、依赖解题步骤依赖最弱临时使用关联次之长期引用聚合再次之整体-部分可分离组合最强同生共死。正确答案A七、 代码验证六种关系的 Java 对照// 1. 依赖方法参数中临时使用 classReportService{// ReportPrinter 只作为参数出现属于依赖publicvoidprint(ReportPrinterprinter,Stringcontent){printer.print(content);}}classReportPrinter{publicvoidprint(Stringcontent){System.out.println(content);}}// 2. 关联长期持有引用 classTeacher{privateStudentstudent;// 关联Teacher 长期知道某个 StudentpublicTeacher(Students){this.students;}}classStudent{privateStringname;}// 3. 聚合整体与部分可分离 classClazz{privatefinaljava.util.ListStudentstudentsnewjava.util.ArrayList();publicvoidaddStudent(Students){students.add(s);}// Clazz 销毁时Student 仍可被其他对象引用}// 4. 组合整体销毁部分随之销毁 classOrder{privatefinaljava.util.ListOrderItemitemsnewjava.util.ArrayList();publicOrder(){items.add(newOrderItem(商品A,2));// 由 Order 内部创建}// Order 销毁后OrderItem 不再有独立意义}classOrderItem{privateStringproduct;privateintquantity;OrderItem(Stringproduct,intquantity){this.productproduct;this.quantityquantity;}}// 5. 泛化继承 classMemberextendsUser{privateStringlevel;}classUser{protectedStringusername;}// 6. 实现实现接口 interfacePayable{voidpay(doubleamount);}classWechatPayimplementsPayable{Overridepublicvoidpay(doubleamount){System.out.println(微信支付amount);}}对照代码再回看第一节的表格六种关系的语义差异会非常清晰依赖看参数关联看字段聚合看外部传入组合看内部创建泛化看 extends实现看 implements。八、 易错点清单菱形永远在整体端空心是聚合、实心是组合。依赖是虚线 普通箭头实现是虚线 空心三角不要混淆。强弱顺序依赖 关联 聚合 组合。include 箭头指向被包含用例extend 箭头指向被扩展用例。include 是必须extend 是可选。多重度标在被指向的一端注意题干一个 A 对应多个 B的表述方向。顺序图看时间、状态图看状态、活动图看流程。附相关真题与复习资料本文涉及的 UML 类图、用例图与面向对象建模专项历年真题解析已归档需要可自取百度网盘: https://pan.baidu.com/s/1SwVEmITKHveCupjP_VH7pA 提取码: rk02 备用通道: https://pan.quark.cn/s/bd0eb7dd5673
阅读完成 · 觉得有帮助?