UML精简概述

UML精简概述

UML精简概述

在学习设计模式之前,需要掌握一些预备知识,主要包括UML类图和面向对象设计原则,它们是"基础内功",将为后续的"深入修行"奠定基础。UML类图可用于描述每一个设计模式的结构以及对模式实例进行说明,而模式结构又是设计模式解法的核心组成部分。学一个设计模式,如果不能绘制和理解其结构图,基本上等于没学。

UML的定义

UML是英文 Unified Modeling Language 的缩写,简称UML(统一建模语言),它是一种由一整套图组成的标准化建模语言,用于帮助系统开发人员阐明、设计和构建软件系统。

UML 的这一整套图被分为两组,一组叫结构性图,包含类图、组件图、部署图、对象图、包图、组合结构图、轮廓图;一组叫行为性图,包含用例图、活动图(也叫流程图)、状态机图、序列图、通信图、交互图、时序图。其中类图是应用最广泛的一种图,经常被用于软件架构设计中。

在UML中,类使用包含类名、属性和操作且带有分隔线的长方形来表示,如定义一个Employee类,它包含属性name、age和email,以及操作modifyInfo(),在UML类图中该类如图所示。

在UML类图中,类一般由三部分组成。

  • 类名:每个类都必须有一个名字,类名是一个字符串。
  • 类的属性(Attributes):属性是指类的性质,即类的成员变量。一个类可以有任意多个属性,也可以没有属性。

可以有任意多个属性,也可以没有属性。

UML规定属性的表示方式为:

可见性 名称: 类型[ = 默认值]

其中:

  • "可见性"表示该属性对于类外的元素而言是否可见,包括公有(public)、私有(private)和受保护(protected)3种,在类图中分别用符号+、-和#表示
  • "名称"表示属性名,用一个字符串表示。
  • "类型"表示属性的数据类型,可以是基本数据类型,也可以是用户自定义类型。

"默认值"是一个可选项,即属性的初始值。

  • 类的操作(Operations):操作是类的任意一个实例对象都可以使用的行为,是类的成员方法。

UML规定操作的表示方式为:

可见性 名称([参数列表])[:返回类型]

其中:

  • "可见性"的定义与属性的可见性定义相同。
  • "名称"即方法名,用一个字符串表示。
  • "参数列表"表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗号","隔开。
  • "返回类型"是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void)。如果是构造方法,则无返回类型。

常见的关系

类图用于表示不同的实体(人、事物和数据),以及它们彼此之间的关系。该图描述了系统中对象的类型以及它们之间存在的各种静态关系,是一切面向对象方法的核心建模工具。

UML 类图中最常见的几种关系有:泛化(Generalization)、实现(Realization)、组合(Composition)、聚合(Aggregation)、关联(Association)和依赖(Dependency)。这些关系的强弱顺序为:泛化=实现 > 组合 > 聚合 > 关联 > 依赖。

  1. 泛化

泛化(Generalization)是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。如:哺乳动物具有恒温、胎生、哺乳等生理特征,猫和牛都是哺乳动物,也都具有这些特征,但除此之外,猫会捉老鼠,牛会耕地,如图所示。

  1. 实现

实现(Realization)是一种类与接口的关系,表示类是接口所有特征和行为的实现。

如:蝙蝠也是哺乳动物,它除具有哺乳动物的一般特征之外,还会飞,我们可以定义一个IFlyable的接口,表示飞行的动作,而蝙蝠需要实现这个接口,如图所示。

  1. 组合

组合(Composition)也表示整体与部分的关系,但部分离开整体后无法单独存在。因此,组合与聚合相比是一种更强的关系。

如:我们的电脑由CPU、主板、硬盘、内存组成,电脑与CPU、主板、硬盘、内存是整体与部分的关系,但如果让CPU、主板等组件单独存在,就无法工作,因此没有意义,如图所示。

  1. 聚合

聚合(Aggregation)是整体与部分的关系,部分可以离开整体而单独存在。

如:一个公司会有多个员工,但员工可以离开公司单独存在,离职了依然可以好好地活着,如图所示。

  1. 关联

关联(Association)是一种拥有关系,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。

如:一本书会有多个读者,一个读者也可能会有多本书,书和读者是一种双向的关系(也就是多对多的关系);但一本书通常只会有一个作者,是一种单向的关系(就是一对一的关系,也可能是一对多的关系,因为一个作者可能会写多本书),如图所示。

  1. 依赖

依赖(Dependency)是一种使用的关系,即一个类的实现需要另一个类的协助,所以尽量不要使用双向的互相依赖。

如:所有的动物都要吃东西才能活着,动物与食物就是一种依赖关系,动物依赖食物而生存,如图所示。

相关推荐
魔道不误砍柴功10 分钟前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_23410 分钟前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨13 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
测开小菜鸟2 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity3 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天3 小时前
java的threadlocal为何内存泄漏
java
caridle3 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^3 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋33 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花3 小时前
【JAVA基础】Java集合基础
java·开发语言·windows