UML类图
类图(ClassDiagram):
是用来显示系统中的类、接口、协作以及它们之间的静态结构和关系的一种静态模型。
它主要用于描述软件系统的结构化设计,帮助人们简化对软件系统的理解,它是系统分析与设计阶段的重要产物,也是系统编码与测试的重要模型依据.
类图中的类可以通过某种编程 语言直接实现。类图在软件系统开发的整个生命周期都是有效的,它是面向对象系统的建模中最常见的图。
类(Class):
类(Class)是指具有相同属性、方法和关系的对象的抽象,它封装了数据和行为,是面向对象程序设计(OOP)的基础,具有封装性、继承性和多态性等三大特性。
在 UML 中,类使用包含类名、属性和操作且带有分隔线的矩形来表示。
(1) 类名(Name)是一个字符串,例如,Student。
(2) 属性(Attribute)是指类的特性,即类的成员变量。UML 按以下格式表示:
[可见性]属性名:类型[=默认值]
例如:-name:String
注意:“可见性”表示该属性对类外的元素是否可见,包括公有(Public)、私有(Private)、受保护(Protected)和朋友(Friendly)4 种,在类图中分别用符号+、-、#、~表示。
(3) 操作(Operations)是类的任意一个实例对象都可以使用的行为,是类的成员方法。UML 按以下格式表示:
[可见性]名称(参数列表)[:返回类型]
例如:+display():void。
接口(Interface):
接口(Interface)是一种特殊的类,它具有类的结构但不可被实例化,只可以被子类实现。它包含抽象操作,但不包含属性。它描述了类或组件对外可见的动作。在 UML 中,接口使用一个带有名称的小圆圈来进行表示。
UML 中的类图有以下几种关系:
UML 中的类图有以下几种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。
各种关系强弱:泛化=实现>组合>聚合>关联>依赖
1.什么是泛化(Generalization 通用)
关系:是一种关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。是一种继承关系,是 is-a 的关系
【箭头指向】:带三角箭头的实线,箭头指向父类
【代码表现】:使用面向对象的继承机制来实现泛化关系,
【例如】:老虎是动物,既有老虎特性也有动物的共性
Student 类和Teacher 类都是Person 的子类
在UML当中,对泛化关系有三个要求:
1、子类与父类应该完全一致,父类所具有的属性、操作,子类应该都有;
2、子类中除了与父类一致的信息以外,还包括额外的信息;
3、可以使用父类的实例的地方,也可以使用子类的实例;
2. 什么是实现(Realization)
关系:是一种类与接口的关系,表示类是接口所有特征和行为的实现,在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。
【箭头指向】:带三角箭头的虚线,箭头指向接口
【代码表现】:类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作
【例如】:汽车和船实现了交通工具
3. 什么是组合(Composition)
关系:是整体与部分的关系,但部分不能离开整体而单独存在;是 cxmtains-a 关系。
组合关系也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在,部分对象与整体对象之间具有同生共死 的关系。
在组合关系中,成员类是整体类的一部分,而且整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类。在UML中,组合关系用带实心菱形的直线表示。
如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。
【箭头指向】:带实心菱形箭头的实线,菱形指向整体
【代码实现】:通常将一个类的对象作为另一个类的成员变量来实现关联关系,通过方法注入,和set注入
【例如】:头和嘴的关系,没有了头,嘴也就不存在了
4.什么是聚合(aggregation)
关系:是整体与部分的关系,且部分可以离开整体而单独存在;是 has-a 的关系。
例如:如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体逻辑关系
【箭头指向】:带空心菱形箭头的实线,菱形指向整体
【代码表现】:通常将一个类的对象作为另一个类的成员变量来实现(默认实现)关联关系
【例如】:学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。
5.什么是关联(association)
关系:是一种拥有的关系,它是一类知道另一个类的属性和方法;是依辣关系一种特例。
类之间的联系,如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单,再如篮球队员与球队之间的关联。
是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系
如老师与学生,丈夫与妻子关联可以是双向,也可以是单向。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头
【箭头指向】:带普通箭头的实线,箭头指向被拥有者,
【代码表现】:通常将一个类的对象作为另一个类的成员变量来实现关联关系
【例如】:老师和学生的关系图,每个老师可以教多个学生,每个学生也可向多个老师学,他们是双向关联
关系具有导航性
双向关联: 默认情况下,关联是双向的,用一条直线关联,互相包含对方常量
单向关联:类的关联关系也可以是单向的,单向关联用带箭头的实线表示.
自关联: 在系统中可能会存在 一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。
重数性关联: 重数性关联关系又称为 多重性关联关系 (Multiplicity) ,表示一个类的对象与另一个类的对象连接的个数。在 UML 中多重性关系可以直接在关联直线上增加一个数字表示与之对应的另一个类的对象的个数。
6.什么是依赖(dependency)
关系:是一种使用关系,即一个类的实现需要另一个类的协助,所以要尽量不适用双向的互相依赖。
它是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。
【箭头指向】:带普通箭头的虚线,箭头指向被使用者
【代码表现】:某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。
【例如】:人与手机的关系图,人通过手机的语音传送方法打电话
依赖关系有如下三种情况:
1、A类是B类中的(某中方法的)局部变量;
2、A类是B类方法当中的一个参数;
3、A类向B类发送消息,从而影响B类发生变化;