如何在类图中展示基于用户Role关联对应Animal实现类的关系?
类图设计:基于Role约束User的Pet类型
两种可行实现方案
方案1:泛型类实现强类型绑定
- 定义抽象父类
Role,DogLover、CatLover作为其子类(用实线箭头表示继承关系) - 将
User设计为泛型类User<T extends Role>,同时通过泛型约束关联对应的Animal类型:- 给
DogLover添加隐含约束:仅关联Dog;给CatLover添加隐含约束:仅关联Cat User的pet属性类型声明为与泛型T绑定的具体Animal子类
- 给
- 类图关联:
User与Role用实线建立1对1关联User<DogLover>与Dog、User<CatLover>与Cat分别建立关联,并用{ 当Role为DogLover时 }这类约束说明标注在关联旁
方案2:依赖关系+OCL约束标注
如果不采用泛型,可通过对象约束语言(OCL)明确业务规则:
- 基础结构:抽象类
Animal派生出Dog、Cat;抽象类Role派生出DogLover、CatLover;User与Role建立1对1关联,User与Animal建立关联 - 在
User和Animal的关联线上添加OCL约束:self.role.oclIsTypeOf(DogLover) implies self.pet.oclIsTypeOf(Dog)
self.role.oclIsTypeOf(CatLover) implies self.pet.oclIsTypeOf(Cat) - 用虚线箭头表示
User对Dog、Cat的依赖,同时将上述约束文本标注在关联旁,明确类型匹配规则
关键说明
两种方案都无需直接将Dog/Cat与Role关联,而是通过User作为中间载体,结合约束实现“Role决定pet类型”的逻辑绑定。泛型方案更贴近强类型代码的实现映射,OCL约束方案则更适合表达业务层面的规则。
内容的提问来源于stack exchange,提问作者DonBege
相关产品推荐
相关产品推荐

