为什么需要类图建模
类图是面向对象思维的结晶,是以对象的视角描述客观世界的事物:
对象是客观世界存在物,占有空间 //例如一个轮子
对外表现特征 //例如 轮子的半径
跟外部发生作用
一个对象可能由更小的对象构成,就像分子里面还有原子;
一个对象可能和另一个对象有link
... ...
现实世界对象很多,人为了描述简洁、便于交流,把几个相似的对象抽象为类:
类只存在于人的头脑中、人的语言中,
给类起个名字,反应其所代表的对象实例
用属性描述对象的特征
用方法描述对象的行为
部分对象的类可以组成整体对象的类
一个类可以关联到另一个类
几个类似的类可以抽象为父类
... ...
对象之间的关系抽象为类的关系:关联,聚合,组成,泛化,实现 等等。
这么说起来有些抽象,举个例子吧。
当我们面对复杂的逻辑描述的时候,阅读的过程实际上就是理解各种概念和关系的过程,面向对象分析方法和类图可以大大提高理解的效率和精确性。
如下是一个电机控制系统的功能描述,工程师采用文本语言描述如下:
功能描述
|
操作员向控制器发出控制指令,控制器启动电机
如果符合条件,则电机则启动,反馈给操作员成功消息
如果不符合条件,则反馈给操作员警告信息
电机有2种,直流电机和交流电机,电压判定的启动条件不同
如果直流电机,电压达到100伏特启动
如果交流电机,电压达到200伏特启动
|
如果把相关的概念采用类图建模,则模型如下:
哪个更好呢?
更容易理解
更全面
更容易被开发人员转化为系统实现。
我想读者可以自己根据直觉判断!
类图有什么
任何UML图都有语义、元素、关系和用途,下面对类图做个列表描述:
语义 |
描述类、类的属性和方法,以及类之间的关系 |
元素 |
类
(class),接口(interface),抽象类(abstract class) |
关系 |
类之间的关系:
关联-association,聚合-aggregation,组成-compose
依赖-dependency
泛化-generalize
类和接口的关系:
实现-realization |
用途 |
把客观世界的对象分类,用属性描述特征,用方法描述行为,建模各个类之间的关系,帮助用户:
概念建模
数据建模
设计类建模
实现类建模 |
图例:领域模型
采用类图可以对问题域进行面向对象分析,分析各种领域对象的属性、方法和关系,建立领域模型(也称之为分析模型),如下是一个领域模型的简化示例:
图例:设计模型贪吃蛇游戏类图
为了让读者看的更形象,采用图例的方式介绍类图的用法,下面是贪吃蛇游戏的设计类图。设计类图与分析类图的不同之处在于考虑了计算机的软件实现环境和开发语言机制,从开发角度给出了解决方案的逻辑视图:
为了实现软件的健壮性,设计类图常常运用设计原则,此例如下:
基于单一职责原则,把Map和Food进行了分离。
基于接口隔离原则,抽象了接口 Movable。
基于依赖倒置原则,把接口Movable置于和Map同样的上层。
类图说明:
如下是基于类图生成的类的说明字典:
序号 |
类 |
说明 |
1. |
Timer |
定时器类,具有方法tick,时间到后会触发整个方法—调动物体Move()。 |
2. |
Map |
地图类,具有属性weight、height、color、cellSize;具有方法CreateFood()。 |
3. |
Movable
|
可以代表可移动的物体的接口,具有方法声明Move()。 |
4. |
Animal |
动物类,是个抽象类,具有属性
长度和积分,具有抽象方法 Move()。 |
5. |
Node |
节点类,具有属性pointX、pointY、size、color;具有方法Draw()。
|
6. |
Food |
食物类,具有属性name、score。 |
7. |
Alligator
|
鳄鱼类,具有属性food和方法move(),继承Animal类。
|
8. |
Snake |
蛇类,具有方法Move(),继承Animal类。 |
9. |
Train |
火车类,具有方法Move()。 |
10. |
Direction |
方向枚举类型,具有数值up、down、right、left。
|
11. |
Color |
颜色枚举类型,具有多个颜色:Red,Green,Blue,Orange,Black。 |
如下是基于类图生成的类之间的关系目录:
序号 |
起点类 |
关系 |
终点类 |
1. |
Map |
Association |
Movable |
2. |
Direction |
Aggregation |
Movable |
3. |
Animal |
Realisation |
Movable |
4. |
Node |
Aggregation |
Animal |
5. |
Food |
Generalization |
Node |
6. |
Node |
Aggregation |
Map |
7. |
Train |
Realisation |
Movable |
8. |
Timer |
Dependency |
Movable |
9. |
Alligator |
Generalization |
Animal |
10. |
Snake |
Generalization |
Animal |
11. |
Node |
Association |
Color |
可以基于类图生成代码,如下是基于类图生成的代码(C++语言)
可以基于类图生成数据模型,然后基于数据模型生成DDL代码。如下是基于类图生成的数据模型:
可以基于数据模型生成DDL代码,如下是基于生成的DDL代码:
说明:本文的模型采用建模工具EA建模、生成代码、生成数据库。
UML图解系列:
后记
希望您读了此文后有所受益。
如果您有经验乐于分享,欢迎投稿给我们
如果您对我们的培训、咨询和工具感兴趣:
|