什么是UML
UML 是统一建模语言的简称,它是一种由一整套图表组成的标准化建模语言。UML用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。UML代表了一系列在大型而复杂系统建模中被证明是成功的做法,是开发面向对象软件和软件开发过程中非常重要的一部分
为何用 UML? UML 有什么好?
- 为用户提供现成的、有表现力的可视化建模语言,以便他们开发和交换有意义的模型。
- 为核心概念提供可扩展性 (Extensibility) 和特殊化 (Specialization) 机制。
- 独立于特定的编程语言和开发过程。
- 支持更高层次的开发概念,如协作,框架,模式和组件。
UML 图表
大致分为结构性图表和行为性图表两种
结构性图表:
- 类图 (Class Diagram)
- 组件图 (Component Diagram)
- 部署图 (Deployment Diagram)
- 对象图 (Object Diagram)
- 包图 (Package Diagram)
- 复合结构图 (Composite Structure Diagram)
- 轮廓图 (Profile Diagram)
行为性图标:
- 用例图 (Use Case Diagram)
- 活动图 (Activity Diagram)
- 状态机图 (State Machine Diagram)
- 序列图 (Sequence Diagram)
- 通訊圖 (Communication Diagram)
- 交互概述图 (Interaction Overview Diagram)
- 时序图 (Timing Diagram)
类图
类图是一种静态结构图,它通过显示系统的类,它们的属性,操作(或方法)以及对象之间的关系来描述系统的结构。
类图被分为四个部分。
- 顶端部分被用来命名类。
- 第二个是用来显示类的属性。
- 第三部分是用来描述由类执行的操作。
- 第四部分是可选的显示附加组件。
类关系涉及依赖、关联、聚合、组合和泛化这五种关系,耦合度依次递增。
这是什么关系?
public class Car{
private Engine engine;
public Car(Engine engine){
this.engine = engine;
}
public void setEngine(Engine engine){
this.engine = engine;
}
}
public class Engine{
……
}
答案:聚合
依赖
public class Driver {
public void drive(Car car) {
car.move();
}
}
public class Car {
public void move() {
......
}
}
关联
-
双向关联: 默认情况下,关联是双向的
public class Customer{ private Product[] products; …… } public class Product{ private Customer customer; …… }
-
单向关联:类的关联关系也可以是单向的,单向关联用带箭头的实线表示.
public class Customer{ private Address address; …… } public class Address{ …… }
-
自关联: 在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。
public class Node{ private Node subNode; …… }
- 重数性关联: 重数性关联关系又称为多重性关联关系(Multiplicity),表示一个类的对象与另一个类的对象连接的个数。在UML中多重性关系可以直接在关联直线上增加一个数字表示与之对应的另一个类的对象的个数。
聚合
public class Car{
private Engine engine;
public Car(Engine engine){
this.engine = engine;
}
public void setEngine(Engine engine){
this.engine = engine;
}
}
public class Engine{
……
}
组合
public class Head{
private Mouth mouth;
public Head(){
mouth = new Mouth();
}
……
}
public class Mouth{
……
}
实现
public interface Vehicle {
public void move();
}
public class Ship implements Vehicle{
public void move() {
……
}
}
public class Car implements Vehicle{
public void move() {
……
}
}
泛化
public class Person {
protected String name;
protected int age;
public void move() {
……
}
public void say() {
……
}
}
public class Student extends Person {
private String studentNo;
public void study() {
……
}
}