UML类图

UML类图

UML介绍

  UML类图:表示了软件模型中的静态结构,是软件设计中最重要的一种结构图。可以表达类的内部以及它和其他类直接的关系,帮助其他程序员快速了解系统的结构,是软件工程师必须掌握的技能之一。

表示类的内部结构

既然UML是一种表达类结构的图,那么必然需要表示类名和该类的属性与方法。因此一个类可以由一个矩形表示,矩形用两条水平线分成三个区域,从上到下分别表示类名、属性和方法。

我们知道每一种面向对象的编程语言都有很多权限修饰符,如何使用图来表达各种权限呢,从下面这个表格中可以直观的看出。

权限 表示
public +(加号)
protected #(井号)
default ~(波浪线)
private -(减号)
static _(下划线)
abstract 斜体

表示类与类的关系

类与类的关系就不像类内部表示那么简单,因为类与类直接的关系非常复杂,常见的关系有以下几种,泛化(Generalization)、实现(Realization)、组合(Composition)、聚合(Aggregation)、关联(Association)、依赖(Dependency)。我们进行一一介绍。

泛化(Generalization)

泛化是对象之间耦合程度最高的一种关系,也可以称之为继承关系,表达父类和子类之间的关系,可以用is-a表示,如学生是人的泛化,A student is a person。在UML类图中用带空心三角箭头的实线来表示。
1

实现(Realization)

实现和泛化的耦合程度相同,表达类和接口之间的关系,可以用is-a表示,如学生是动人的实现,A student is a person。在UML类图中用带空心三角箭头的虚线来表示。这里要特别指出,接口用两个尖括号括起来表示。
1

组合(Composition)

组合是一种强的拥有关系,比泛化和实现的耦合程度弱一些。表达了一种严格的整体与部分的关系,可以用contains-a表示,部分脱离整体无法单独存在,往往被组合的对象作为组合对象的成员变量。如人和心脏的关系,A person contains a heart。在UML类图中用带实心菱形的实线表示(有时候可能是带箭头的实线),菱形在组合类一侧,其中实线两端还可以有数字,表示某一侧可以有多少个实例,其中*表示任意多个,1..*表示超过1个,0..1表示0个或1个。
1

聚合(Aggregation)

聚合是一种弱的拥有关系,比组合的耦合程度弱一些。也表达了一种整体与部分的关系,可以用has-a表示,部分脱离整体可以单独存在,往往被聚合的对象作为聚合对象的成员变量。如电脑和显示器的关系,A computer has a monitor。在UML类图中用带空心菱形的实线表示(有时候可能是带箭头的实线),菱形在聚合类一侧,其中实线两端同样可以有数字。
1

关联(Association)

关联表示两个相对独立对象之间的关系,比聚合的耦合程度弱一些,往往被关联的对象作为关联对象的成员变量,和组合聚合不同的是,关联主要强调两个对象的使用关系,而组合聚合强调整体与部分的结构关系。其中关联也包括单向关联,如人和电脑的关系;也包括双向关联,如老板和顾客的关系;也包括自关联,如链表的结点。在UML类图中用带箭头的实线表示,其中实线两端同样可以有数字。
1

依赖(Dependency)

依赖表示两个相对独立对象之间的关系,是最弱的一种耦合关系。可以用use a表示,往往被依赖的对象作为依赖对象的函数参数,返回值,局部变量,静态方法等。表示一个对象完成某些功能需要依赖另一个对象的帮助。如人和电脑的关系,A person uses a computer。在UML类图中用带箭头的虚线表示。
1

UML小结

  其实UML类图很简单,我们需要记住的是类内部修饰符的表达方式和类之间耦合关系的表达方式即可。我们不要过多纠结于类与类的耦合关系,因为有时候两个类的关系会随着场景和代码的写法发生变化,如人和电脑之间的关系,可以是关联关系,也可以是依赖关系,如果将Computer类作为Person类的成员变量,那么可以理解为关联关系,如果仅仅在方法中作为参数传递进去,则可以理解为依赖关系,因此切记生搬硬套和钻牛角尖。

-------------本文结束感谢您的阅读-------------
0%