文章目录
前言
类图是面向对象思维的结晶,是以对象的视角描述客观世界的事物:
对象是客观世界存在物,占有空间 //例如一个轮子
对外表现特征 //例如 轮子的半径
跟外部发生作用
一个对象可能由更小的对象构成,就像分子里面还有原子;
一个对象可能和另一个对象有link(连接)
现实世界对象很多,人为了描述简洁、便于交流,把几个相似的对象抽象为类:类只存在于人的头脑中、人的语言中,
给类起个名字,反应其所代表的对象实例
用属性描述对象的特征
用方法描述对象的行为
部分对象的类可以组成整体对象的类
一个类可以关联到另一个类
几个类似的类可以抽象为父类
… …
对象之间的关系抽象为类的关系:关联,聚合,组成,泛化,实现 等等。
当我们面对复杂的逻辑描述的时候,阅读的过程实际上就是理解各种概念和关系的过程,面向对象分析方法和类图可以大大提高理解的效率和精确性。
一、UML是什么?
UML是统一建模语言,是一种可视化的面向对象建模语言,是一种用来对真实世界物理进行建模的标准标记,用图形方式表现典型的面向对象系统的整个结构。它的作用域不局限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。
UML的概念包括了UML语义(Semantics)和UML表示符(Notation)两个部分。UML语义定义了静态模型和动态模型。结构模型强调系统的对象结构,入对象的类、接口、属性和关系;行为模型关注的是系统对象的行为动作,如对象的方法、交互、协作和状态。UML表示符为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。重要内容由9种图来定义,包括用例图、类图、对象图、状态图、构件图、部署图、协作图、交互序列图、活动图。
二、类的UML表示
1.UML是怎么表示类的?
在面向对象中,常用的类有以下几种类:
- 普通类
- 抽象类
- 接口
(1)普通类
咱们先来定义一个女人类,
公有属性为:名字,年龄
私有属性为:身份证号码,家庭地址,
公有方法为:吃饭,睡觉,
私有方法为:生孩子,做家务。
那么在UML类图上怎么展示呢?
①类的表示
在uml类图中,每一个矩形框表示一个类。
普通类分为三部分,上部分为类名,中间部分为属性,下面部分为类的方法。
②权限修饰符的表示
-表示private
#表示protected
~表示default,也就是包权限
_下划线表示static
数据类型表示方法: 权限修饰符 + 属性名 + “:” + 数据类型
下面是一个完整的栗子:
转换成代码就是如下:
public class GeelyClass {
public String name;
private int age;
protected double weight;
default double height;
public static char sex;
public void eat(String food) {
}
protected void drink() {
}
private void walk() {
}
default void run() {
}
public void study() {
}
public boolean openMac() {
return true;
}
public static void playGames() {
}
}
2.抽象类
抽象类的表示方法和普通类一样,分为三部分。
区别在于抽象类的类名是用斜体表示的。
如果有方法是抽象方法,也需要用斜体表示。
3.接口
接口分为两部分,上部分和下部分。
上部分为固定的关键词<>和接口名称,
下部分为接口方法,如下所示:
三、类之间的关系
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
1. 泛化(Generalization)
【泛化关系】:即父类与子类之间的继承关系,它指定了子类如何特化父类的所有特征和行为。
例如:女演员是女人,既有女人的属性与方法,又有女演员独有的属性与方法
【箭头指向】:带三角箭头的实线,箭头指向父类
2.实现(Realization)
【实现关系】:即实体类与接口之间的关系,表示类是接口所有特征和行为的实现.
例如:超人实现了飞翔的超能力,同时他还有自己的名字
【箭头指向】:带三角箭头的虚线,箭头指向接口。
3.关联(Association)
【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。
双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
关联又分为:双向关联、单向关联
上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。
但学生与课程间的关系为单向关联,一个学生可以上多门
4.聚合(Aggregation)
【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。强调的是整体与部分,且两者又可以独立
如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在
聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【箭头及指向】:带空心菱形的实心线,菱形指向整体
5.组合(Composition)
【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。
如公司和部门是整体和部分的关系,没有公司就不存在部门。
组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。
【箭头及指向】:带实心菱形的实线,菱形指向整体
6. 依赖(Dependency)
【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
比如人学习的时候要依靠计算机。
【箭头及指向】:带箭头的虚线,指向被使用者
各种关系的强弱顺序:
泛化(类与继承关系) = 实现(类与接口关系) > 组合(整体与部分的关系) > 聚合(整体与部分的关系) > 关联(拥有的关系) > 依赖(使用的关系)
四、idea生成UML类图
现在有很多UML类图的优秀软件,比如ProcessOn(可视化编辑)、draw.io(可视化编辑)、PlantUML(代码生成),IDEA还是很强大的,有类似PlantUML这个插件都是自带的,接下稍微讲述如何利用IDEA生成UML类图的教程。
1.打开设置 File->Setting或windows下按Ctrl+Alt+S
在搜索框中输入Diagram,如下图:
2.选中你想要生成UML类图的包—>右键选择Diagrams—>选择对应选项
因为我这里没有完整的类图,成果图就不展示了
注意:
- 使用idea版本不同,操作顺序以及选项位置会有所不同,仅供参考
- 虽然这个方便,但是也有他自己的局限性,首先这个功能只能是根据类来自动生成的,所以对于设计类的时候就不行了,还是需要正规的UML图软件,还有就是对于专业的UML软件来说,这种自动生成的东西可能表达并不是非常的准确直观。