1.前言
UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作。一般说来,在UML图中,只要掌握类图、用例图、时序图的使用,就能完成大部分的工作。对于程序员来说,最频繁使用的莫过于类图。因此,这里我只讲解UML类图。
类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图中最基本的元素是类、接口。软件设计师设计出类图后,程序员就可以用代码实现类图中包含的内容。
1.1.UML图
- 用例图(use case)
- 静态结构图: 类图、对象图、包图、组件图、部署图
- 动态行为图:交互图(时序图与协作图)、状态图、活动图
- 类图是描述类与类之间的关系的,是UML图中最核心的
1.2.UML类图
- 用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。
- 类之间的关系:
依赖、泛化(继承)、实现、关联、聚合与组合
1.3.类图关系
- 设计一个类中的信息和行为要
高内聚
- 设计多个类, 类之间要
低耦合
面向对象是符合人们对现实世界的思维模式,利用面向对象设计,特别是采用各种设计模式来解决问题时,会设计多个类,然后创建多个对象,一个设计良好的类,应该是兼顾信息和行为并且高内聚。而不同的类之间,应该做到松耦合。
当面对应用系统或者需要解决的问题经常是复杂的、高度抽象的,我们 创建的多个对象往往是有联系的,通常对象之间的关系可以分为以下几类:
- 泛化关系
- 实现关系
- 依赖关系
- 关联关系
- 聚合关系
- 组合关系
2.依赖关系(Dependence)
- 只要是在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编绎都通过不了
- 依赖(Dependency)关系是一种弱关联关系。如果对象A用到对象B,但是和B的关系不是太明显的时候,就可以把这种关系看作是依赖关系。
3.泛化关系(generalization)
- 泛化关系其实就是
继承关系
:指的是一个类(称为子类、子接口)继承(extends
)另外的一个类(称为父类、父接口)的功能,并可以增加自己额外的一些功能,继承是类与类或者接口与接口之间最常见的关系; - Java代码中,对象之间的泛化关系可以直接翻译为关键字
extends
。 - 他是依赖关系的特例
4.实现关系(realization)
- 实现关系实际上就是 A 类实现 B 接口,他是依赖关系的特例
- 在Java代码中,实现关系可以直接翻译为关键字
implements
。
5.关联关系(association)
- 关联关系(Association)是指对象和对象之间的连接,它使一个对象知道另一个对象的属性和方法。在Java中,关联关系的代码表现形式为一个对象含有另一个对象的引用。也就是说,如果一个对象的类代码中,包含有另一个对象的引用,那么这两个对象之间就是关联关系。
- 关联关系有单向关联和双向关联。如果两个对象都知道(即可以调用)对方的公共属性和操作,那么二者就是双向关联。如果只有一个对象知道(即可以调用)另一个对象的公共属性和操作,那么就是单向关联。大多数关联都是单向关联,单向关联关系更容易建立和维护,有助于寻找可重用的类。
5.1.按多重性分类
- 一对一:一个A对象属于一个B对象,一个B对象属于一个A对象。
- 一对多:一个A对象包含多个B对象。
- 多对一:多个A对象属于一个B对象,并且多个A对象中的每个A对象只能属于一个B对象。
- 多对多:一个A对象属于多个B对象,一个B对象属于多个A对象。
5.2.按导航性分类
- 单向:只能从A通过属性导航到B,B不能导航到A。
- 双向:A可以通过属性导航到B,B也可以通过属性导航到A。
6.聚合关系(aggregtion)
- 聚合(Aggregation)是关联关系的一种特例,它体现的是整体与部分的拥有关系,即 “has a” 的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系。
- 与关联关系一样,
聚合关系
也是通过实例变量
实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。
- 聚合关系表示整体和个体的关系,整体和个体可以相互独立存在,一定是有两个模块分别管理整体和个体。
public class Computer {
private Mouse mouse; //鼠标可以和computer分离
private Moniter moniter;//显示器可以和Computer分离
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public void setMoniter(Moniter moniter) {
this.moniter = moniter;
}
}
对应的类图:
7.组合关系(composition)
-
组合(Composition)也是关联关系的一种特例,它同样体现整体与部分间的包含关系,即 “contains a” 的关系。但此时整体与部分是不可分的,部分也不能给其它整体共享,作为整体的对象负责部分的对象的生命周期。这种关系比聚合更强,也称为强聚合。如果
A
组合B
,则A
需要知道B
的生存周期,即可能A
负责生成或者释放B
,或者A
通过某种途径知道B
的生成和释放。 -
例如,人包含头、躯干、四肢,它们的生命周期一致。当人出生时,头、躯干、四肢同时诞生。当人死亡时,作为人体组成部分的头、躯干、四肢同时死亡。
-
但是如果在程序中 Person 实体中定义了对 IDCard 进行级联删除,即删除 Person 时连同 IDCard 一起删除,那么 IDCard 和 Person 就是组合了.
public class Person{
private IDCard card;
private Head head = new Head();
}
public class IDCard{
}
public class Head{
}
对应的类图:
文章来源:https://www.toymoban.com/news/detail-768798.html
8.结束语
这次的设计模式之UML类图的学习到此就结束了,不知道大家是否已经了解并且掌握了呢,如有知识点和内容上面的错误,请及时联系我来改正文章来源地址https://www.toymoban.com/news/detail-768798.html
到了这里,关于Java设计模式之UML类图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!