设计模式——UML类图
UML类图
概念
类图(ClassDiagram)是用来显示系统中的类、接口、协作以及它们之间的静态结构和关系的一种静态模型。它主要用于描述软件系统的结构化设计,帮助人们简化对软件系统的理解,它是系统分析与设计阶段的重要产物,也是系统编码与测试的重要模型依据。
类图中的类可以通过某种编程 语言直接实现。类图在软件系统开发的整个生命周期都是有效的,它是面向对象系统的建模中最常见的图。
我们在开发过程中,类图可以很好的帮助我们理清实现思路,对于比较复杂的架构或者功能,在编码前都会有一个详细设计方案,那么类图就是很好的展现形式。下面是一个简单的类图:
类
类(Class)是指具有相同属性、方法和关系的对象,它封装了数据和行为,是面向对象程序设计(OOP)的基础,具有封装性、继承性和多态性的三大特性。在 UML 中,类使用包含类名、属性和操作且带有分隔线的矩形来表示。
第一层显示类名,注意:如果是抽象类,则需要斜体显示
第二层显示类的特性,通常是字段和属性
第三层显示类的操作,通常是方法或行为
注意:前面的符号 “+”表示public,“-”表示private,“#”表示protected
接口
接口(Interface)是一种特殊的类,它具有类的结构但不可被实例化,只可以被子类实现。它包含抽象操作,但不包含属性。它描述了类或组件对外可见的动作。在 UML 中,接口使用一个带有名称的小圆圈来进行表示。
或者在第一层顶端有<>显示,如上面类图中飞翔接口
或者棒棒糖表示方式,如上面类图中唐老鸭实现讲人话接口
类之间的关系
依赖关系
依赖(Dependency)关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。比如:在方法中new一个对象,或者方法的参数为某个实例对象,亦或调用工具类的静态方法等情况。
类图中动物要有生命力必须依赖氧气和水,依赖关系通过虚线和箭头表示。
继承关系
继承关系也叫泛化(Generalization)关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系,是 is-a 的关系。
类图中动物,鸟,鸭子,唐老鸭之间就是继承关系,唐老鸭是鸭子,鸭子是鸟,鸟是动物,继承关系通过实线和空心三角表示。
实现关系
实现(Realization)关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。
类图中大雁实现了飞翔的接口,大雁可以飞翔。实现关系通过虚线和空心三角表示。
关联关系
关联(Association)关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,如老师和学生、师傅和徒弟、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。我们先介绍一般关联。
关联可以是双向的,也可以是单向的。在 UML 类图中,双向的关联可以用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。也可以在关联线的两端标注角色名,代表两种不同的角色。
关联关系在代码中的体现就是一个类引入另外一个类,成为其成员变量、属性。
如下图一个学生有多个老师,一个老师教多个学生,他们之间相互关联
聚合关系
聚合(Aggregation)关系是关联关系的一种,是相对比较弱关联关系,是整体和部分之间的关系,是 has-a 的关系。
类图中大雁和雁群的关系,大雁聚集在一起就是雁群,分开就是孤雁,但是仍然是一个小的整体。聚合关系通过空心菱形和箭头表示。
组合关系
组合(Composition)关系也是关联关系的一种,也表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系,是 cxmtains-a 关系。
类图中鸟与翅膀的关系,即整体和部分的关系,组合关系通过实心菱形和箭头表示,聚合关系的连线两端有个数字“1”和“2”,被称为基数,表示一个鸟有两个翅膀。