在一个现代化的工程中,人们要相互沟通和合作,就必须使 用标准的工业化设计语言对待开发的产品进行建模

建模过程把复杂的问题分解成为易于理解的小问题,以达到问题的求解;其目的是把所要设计的结构和系统的行为联系起来,并对系统的结构进行可视化控制

一、UML的结构

1.1视图

  • 用户视图:以用户的观点表示系统的目标,是所有视图的核心,该视图描述系统的需求
  • 结构视图:表示系统的静态行为,描述系统的静态元素,如包、类与对象,以及它们之间的关系
  • 行为视图:表示系统的动态行为,描述系统的组成元素,如对象在系统运行时的 交互关系
  • 实现视图:表示系统中逻辑元素的分布,描述系统中物理文件以及它们之间的关系
  • 环境视图:表示系统中物理元素的分布,描述系统中硬件设备以及它们之间的关系

1.2图

  • 用例图:对应用户视图。用例图通过用例来表示系统的功能需求。用例图用于表示多个外部执行者与系统用例之间以及用例与用例之间的关系。用例图与用例说明文档是常用的需求建模工具
  • 类图:对应结构视图。类图使用类描述系统的静态结构。类图包含类和它们之间的关系,它描述系统内所声明的类,但它没有描述系统运行时类的行为
  • 对象图:对应结构视图。对象图是类图在某一时刻的一个实例,用于表示类的对象之间的关系
  • 状态图:对应行为视图。状态图描述一个特定对象的所有可能状态及其引起状态转移的事件。一个状态图包括一系列对象的状态及状态之间的转换
  • 活动图:对应行为视图。活动图表示系统中各种活动的次序,其应用非常广泛,既可用来描述用例的工作流程,也可以用来描述类中某个方法的操作行为
  • 序列图:又称时序图,对应行为视图。顺序图表示对象之间的交互,重点表示对象之间发送消息的时间顺序
  • 协作图:对应行为视图。协作图展示了一组对象、这些对象间的连接以及它们之间收发的消息它与序列图是同构图,包含了相同的信息,只是表达方式不同而已,协作图与序列图可以相互转换
  • 构件图:对应实现视图。构件图描述每个功能所在的组件位置以及它 们之间的关系
  • 部署图:对应于环境视图。部署图描述软件中各个组件驻留的硬件位置以及这些硬件之间的交互关系

1.3模型元素

在 UML中,模型元素包括事物以及事物与事物之间的联系

事物是 UML的重要组成部分,它代表任何可以定义的东西。事物之间的关系把事物联系在一起,组成有意义的结构模型。每一个模型元素都有一个与之相对应的图形元素

二、类图

2.1类与类图

封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称

在系统中,每个类具有一定的职责,即类要完成什么样的功能。一个类可以有多种职责,设计得好的类一般只有 一种职责

定义类的时候,将类的职责分解成为类的属性和操作(即方法)。类的属性即类的数据职责,类的操作即类的行为职责

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

  • 类名:每个类都必须有一个名字,类名是一个字符串
  • 属性:指类的性质,即类的成员变量。类可以有任意多个属性,也可以没有属性。可见性 名称:类型 [= 默认值]
  • 操作:操作是类的任意一个实例对象都可以使用 的行为,操作是类的成员方法

2.2类之间的关系

(1)关联关系

关联关系是类与类之间最常用的一种关系,用于表示一类对象与另一类对象之间的联系

在 UML类图中,用实线连接有关联的对象所对应的类

在使用类图表示关联关系时可以在关联线上标注角色名

public class LoginForm {
    private JButton loginButton;
    ……
}
public class JButton {
    ……
}
  • 双向关联:默认情况下,关联是双向的

    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;
        ……
    }
  • 重数性关联:表示 一个类的对象与另一个类的对象连接的个数

    public class Form {
        private Button buttons[];
        ……
    }
    public class Button {
        …
    }

(2)聚合关系

聚合关系表示整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构,从而找出一些成员类,该整体类和成员类之间就形成了聚合关系

在聚合关系中,成员类是整体类的一部分,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立 存在

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 {
    ……
}

(3)组合关系

组合关系也表示类之间整体和部分的关系, 但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在

在组合关系中,成员类是整体类的一部分,而且整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类

UML中,组合关系用带实心菱形的直线表示

public class Head {
    private Mouth mouth;

    public Head() {
        mouth = new Mouth();
    }

    ……
}
public class Mouth {
    ……
}

(4)依赖关系

依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系

大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数

UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方

public class Driver {
    public void drive(Car car) {
        car.move();
    }

    ……
}
public class Car {
    public void move() {
        ……
    }

    ……
}

(5)泛化关系

泛化关系即继承关系

泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派 生类

UML中,泛化关系用带空心三角形的直线表示

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() {
        ……
    }
}

(6)接口与实现关系

接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现关系,在这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作

UML 中,类与接口之间的实现关系用带空心三角形的虚线来表示

public interface Vehicle  {
    public void move();
}
public class Ship implements Vehicle {
    public void move() {
        ……
    }
}
public class Car implements Vehicle {
    public void move() {
        ……
    }
}

三、序列图

用于表示对象之间的动态交互,而且以图形化的方式描述了对象间消息传递的时间顺序

3.1序列图定义

序列图是一种强调对象间消息传递次序的交互图,又称时序图。它以图形化的方式描述了在一个用例或操作的执行过程中对象如何通过消息相互交互,说明了消息如何在对象之间被发送和接收以及发送的顺序

序列图通常有两种

  • 需求分析阶段的序列图:主要用于描述用例中对象之间的交互,可以使用自然语言绘制,用于细化需求,它从业务的角度进行建模,用描述性的文字叙述消息的内容
  • 系统设计阶段的序列图:确切表示系统设计中对象之间的交互,考虑到具体的系统实现,对象之间通过方法调用传递消息

3.2序列图组成元素与绘制

UML中,序列图将交互关系表示为一个二维图,纵向轴表示时间轴,时间沿竖线向下延伸;横向轴表示在交互过程中的独立对象,对象的活动用生命线表示。序列图由执行者、生命线、 对象、激活框和消息等元素组成

一个复杂的序列图可以划分为几个小块,每一个小块称为一个交互片段。每个交互片段由一个大方框包围,在方框左上角的间隔区内标注该交互片段的操作类型,该操作类型用操作符表示,常用的操作符包括:

  • alt:多条路径,条件为真时执行
  • opt:任选,仅当条件为真时执行
  • par:并行,每一片段都并发执行
  • loop:循环,片段可多次执行

设计模式——统一建模语言UML-LMLPHP

在序列图中,有的消息对应于激活,表示它将会激活一个对象,这种消息称为调用消息;如果消息没有对应激活框,表示它不是一个调用消息,不会引发其他对象的活动,这种消息称为发送消息;如果对象的一个方法调用了自己的另一个方法时,消息是由对象发送给自身,这种消息称为自身消息。序列图中的消息还包括创建消息和销毁消息,创建消息用于使用 new关键字创建另一个对象,而销毁消息用于调用对象的销毁方法将一个对象从内存中销毁

设计模式——统一建模语言UML-LMLPHP

四、状态图

用于描述对象的各种状态以及状态之间的转换

4.1状态图定义

通常用状态图来描述单个对象的行为,它确定了由事件序列引出的状态序列,但并不是所有的类都需要使用状态图来描述它的行为,只有那些具有重要交互行为的类,我们才会使用状态图来描述

大多数面向对象技术都使用状态图来描述一个对象在其生命周期中的行为,对象从产生到结束,可以处于一系列不同的状态。状态影响对象的行为,当这些状态的数目有限时,就可以用状态图来建模对象的行为,状态图显示了单个类的生命周期,在不同状态下对象可能具有不同的行为

4.2状态图组成元素与绘制

在一个状态图中,一个状态也可以被细分为多个子状态,包含多个子状态的状态称为复合状态

10-08 16:12