UML——统一建模语言
2018-08-14 本文已影响5人
快乐的工程师
统一建模语言
统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言。UML是一种开发的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
现在来解释上面那段话是什么意思。在我们一开始开发软件的时候,因为软件结构还是比较简单,所以我们比不需要去分析软件的结构是什么样子。需要先写哪些类,哪些类里面具体实现哪些方法,这些都是直接存大脑里的。但是随着软件变得足够的复杂,过去这种原始的开发方式就显得力不从心。
系统变得越来越大,代码越写越多,这时候先前因为没有做规划的弊端就暴露无遗。UML主要就是为了解决软件开发人员做规划时,通过画图的方式直观地架构这个系统的结构——类与类之间的关系。这也就是UML的作用。
模型
- 功能模型:就是从用户的角度出发,描述程序都有哪些功能的模型图。
- 对象模型:就是从程序设计的角度出发,描述一个程序的组织结构。图中有类、接口、属性、抽象类,各个属性之间的继承关系等。我们就可以逻辑清晰地编写代码。
- 动态模型:就是表现出程序当中的内部行为。
使用
往往很多教材一下就会给我们介绍还有多少种UML模型,具体每一个模型又代表了什么意思。但是我的教程里UML和Github一样是我认为你最先应该了解到的两个基础的编程工具,UML可以帮你理清程序的结构,Github可以让你去了解大牛们的代码从中学习经验。
接下来,让我们通过具体的Java代码来了解UML图中的对象模型。
类图的结构
如下图所示,我们建造了一个Person类的结构图。图中包括这几点信息:
- 类的名称
- 类的成员属性
- 类的成员方法
属性的表示方式如下所示:
可见性 名称:类型[=缺省值]
- 可见性:public、private和protected,在类图中分别用+、-和#表示。
- 名称:属性的名称。
- 类型:属性的数据类型,可以是基本数据类型,也可以是用户自定义的类型。
- 缺省值:可选项,表示属性的初始值。
public class Person {
private String name;
private int age;
public void run(){
……
}
}
类图关系
- 关联
。双向关联:你中有我,我中有你
双向关联
。单向关联:我中有你,你中没我
。多重关联:一个餐厅里有许多服务员
- 聚合:发动机可以独立于汽车存在,也可以按到汽车中
聚合
public class Car {
private Engine engine;
public Car(Engine engine) {
this.engine = engine;
}
public void setEngine(Engine engine){
this.engine = engine;
}
}
- 组合:嘴必须在脸上
组合
public class Head {
private Mouth mouth;
public Head() {
mouth = new Mouth();
}
}
- 依赖:司机必须得有车
依赖
public class Driver{
private void driverCar( ){
Car car = new Car();
car.move();
}
}
- 继承:老师和孩子都是人类,他们有相同的属性
继承
public class Teacher extends Person {
……
}
public class Children extends Person {
……
}
- 接口与实现:小船和车都需要动起来
接口
public class Ship implements Vehicle{
……
}
public class Car implements Vehicle{
……
}