关于 UML 类图
参考资料
https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html
简述
UML(Unified Modeling Language)统一建模语言,为面向对象开发系统的产品编写文档和进行可视化说明的一种标准语言
类图,对类的说明,以及对类之间的关系进行说明的图表
UML 类图,用UML标识并呈现的类图(多么严谨)
类图示图
图中一共出现了 8 种标识
方框
<<abstract>>
带空心箭头的虚线
带空心箭头的实线
带箭头的虚线
带实心菱形的实线
带空心菱形的实线
实线
一个类用方框表示,上部分为类名,下部分为类中的字段
抽象类在上部分用
<<abstract>>
标识,如上图中的「车」,就是一个抽象类子类继承,是实现关系的用带空心箭头的虚线标识,如「小汽车」、「自行车」继承并实现了抽象类「车」
子类继承,是泛化关系的用带空心箭头的实线标识,如「SUV」继承了非抽象类「小汽车」
组合关系,用带实心菱形的实线标识,如「发动机」和「轮胎」组合形成「小汽车」
聚合关系,用带空心菱形的实线标识,如「学生」和「班级」就是聚合关系
关联关系,用一根实线标识,如「身份证」和「学生」就是关联关系
依赖关系,用一根带箭头的虚线标识,如「学生」依赖「自行车」
标识说明
实现关系
「车」是一个抽象类,「小汽车」和「自行车」是对「车」这个抽象类的具体实现,表现为「小汽车」和「自行车」继承了「车」,并分别做了具体的实现,这种关系就是一个类对一个抽象类的实现关系,用一根带空心箭头的虚线标识
泛化关系
泛化关系也属于继承的一种,但不同于实现关系,泛化关系是指一个类对一个非抽象类的继承,如「小汽车」是一个非抽象类,但「SUV」继承了「汽车」,并做了继承和实现,用一根带空心箭头的实线标识
组合关系
组合关系指的是一个类由多个类拼凑形成,两者之间属于强绑定关系,例如「小汽车」由「轮胎」、「发动机」组合形成,「小汽车」不存在了,「轮胎」和「发动机」也就不存在,用一根带实心菱形的实线标识
聚合关系
聚合关系是指一个类按照一定维度构建出的另一个类,不同于组合关系,聚合关系的两个类之间属于松散关系,如「学生」和「班级」的关系,「学生」按照「班号」等维度聚合形成「班级」,当「班级」消失后,「学生」是可以单独存在的,不会随着「班级」的消失而消失,用一根带空心菱形的实线标识
总结一下组合关系和聚合关系的区分。组合关系是指一个类由多个类组合到一起形成的新类;聚合关系形成的类是按照一定维度临时组成的类;组合类之间是强绑定关系,不能单独存在;聚合类是松散关系,聚合形成的类被取消后,被聚合的类不会消失
关联关系
关联关系是一种静态关系,并且是强关联关系,两个类之间互相认证,例如「学生」和「身份证」之间的关系,「学生」都有「身份证」,「身份证」是每个「学生」的一项标识,也可以理解为一种属性关联,是对一个类的属性的扩展,用一根实线标识
依赖关系
依赖关系,顾名思义,是一个类 A 在运行过程中需要去访问另一个类 B ,称为 A 依赖于 B,这种依赖关系是临时性的,在运行过程中,A 对于外部的依赖也在发生变化,用带箭头的虚线标识
在画图过程中,如果发现存在一个双向依赖,则这种设计是存在问题的,需要调整
通过以上示图和标识的说明,可以根据需要采用相应的标识对类之间的关系进行说明,完成一张UML类图。一张好的UML类图,可以帮助我们在开发中更好的把握类之间的关系,是把握全局的导航图
版权声明: 本文为 InfoQ 作者【西贝】的原创文章。
原文链接:【http://xie.infoq.cn/article/4ef0324f92bbdbab167509669】。文章转载请联系作者。
评论