UML(统一建模语言)扫盲篇

一. UML概述

            UML(Unified Modeling Language,统一建模语言)是当前面向对象软件系统建模的标准语言,它融合了众多软件建模技术的优点,通过一系列标准的图形符号来描述系统。

            UML是一个通用的可视化建模语言,不同于编程语言,它通过一些标准的图形符号和文字对系统进行建模,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档。UML适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具,UML是一套总结了以往建模技术的经验并吸收了当今最优秀成果的标准建模方法。

二. UML结构组成

            UML是一种主要由图形符号表达的建模语言,其结构主要包括以下4个部分。

    (1)视图(View):UML视图用于从不同的角度来表示待建模系统。视图是由许多图形组成的一个抽象集合,在建立一个系统 模型时只有通过定义多个视图,每个视图显示该系统的一个特定方面,才能构造出该系统的完整蓝图,视图也将建模语言链接到开发所选择的方法和过程。UML视图包括用户视图、结构视图、行为视图、实现视图和环境视图。

    (2)图(Diagram):UML图是描述UML视图内容的图形。UML2.0提供了13种图,分别是用例图(Use Case Diagram)、类图(Class Diagram)、对象图(Object Diagram)、包图(Package Diagram)、组合图(Composite Structure Diagram)、状态图(State Diagram)、活动图(Activity Diagram)、顺序图(Sequence Diagram)、通信图(Communication Diagram)、定时图(Timimg Diagram)、交互概览图(Interaction Diagram)、组件图(Component Diagram)和部署图(Deployment Diagram),通过它们之间的相互结合可提供待建模系统的所有视图。

    (3)模型元素(Model Element):模型元素是指UML图中所使用的一些概念,它们对应于普通的面向对象概念,如类、对象、属性以及这些概念之间的关系,例如关联关系、依赖关系、泛化关系等。同一个模型元素可以在多个不同的UML图中使用,但是无论在哪个图中,同一个模型元素都必须保持相同的意义并具有相同的符号。

    (4)通用机制(General Mechanism):UML提供的通用机制为模型元素提供额外的注释、语义和其他信息,这些通用机制也提供了扩展机制,允许用户对UML进行扩展,如定义新的建模元素、扩展原有元素的定义、天剑新的特殊信息来扩展模型元素的规则说明等,以便适用于一个特定的方法或过程、组织或用户。

三. 类与类的UML表示

       在UML2.0的13中图形中,类图是使用最广泛的图形之一,它用于描述系统所包含的类以及它们之间的相互关系。类图帮助人们简化对系统的理解,是系统分析和设计阶段的产物,也是系统编码的重要模型依据。

       1. 类

           在系统中每个类都具有一定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务。一个类可以有多种职责,设计得好的类通常有且仅有一种职责。在定义类的时候将类的职责分解成类的属性和操作(即方法)。类的属性即类的数据职责,累的操作即类的行为职责。

           类图(Class Diagram)使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。

       2. 类的UML图示

           在UML中类使用包含类名、属性和操作且带有分割线的长方形来表示。如下图所示:

                                                  

          该图表示了一个Person类,它包含属性name、age和address以及操作work()和eat()。该图所对应的代码如下:          

public class Person {

    public String name;
    private int age;
    private String address;

    public void work() {

    }

    public String eat() {
        return "rice";
    }
}

          在UML类图中,类一般由3部分组成。

        (1)第一部分是类名:每个类都必须有一个名字,类名是一个字符串。

        (2)第二部分是累的属性:属性是指类的性质,即类的成员变量。一个类通常可以有任意多个属性,也可以没有属性。

                 UML规定属性的表示方式如下:

[可见性] 名称 : 类型 [ = 默认值 ]

                 其中:

                    ① “可见性”表示该属性对于类外的元素而言是否可见,包括共有(public)、私有(private)和受保护(protected)3种,在UML类图中分别用 “+” “-” 和 “#”表示。在Java语言中还新增了默认的包内可见,包内可见在UML建模工具中用符号 “*”表示。

                    ② “名称” 表示属性名,用一个字符串表示。

                    ③ “类型” 表示属性的数据类型,可以是基本数据类型,也可以是用户自定义类型。

                    ④ “默认值” 是一个可选项,即属性的初始值。

         (3)第三部分是类的操作:操作是类的任意一个实例对象都可以使用的行为,是类的成员方法。

                   UML规定操作的表示方式如下:

[ 可见性 ] 名称 ([参数列表]) [ : 返回类型 ]

                  其中:

                      ① “可见性” 的定义与属性的可见性定义相同

                      ② “名称” 即方法名或操作名,用一个字符串表示。

                      ③ “参数列表” 表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗号“,”隔开。

                      ④ “返回类型” 是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还是是空类型,如果是构造方法,则无返回类型。

        3. 类之间的关系

             在软件系统中类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示方式。

             1. 关联关系

                 关联关系是类与类之间最常用的一种关系,表示一类对象与另一类对象之间有联系。如汽车与轮胎老师和学生等。在UML类图中用实线连接有关联关系的对象所对应的类,在Java中通常将一个类的对象作为另一个类的成员变量或者以类的属性的形式出现。在使用类图表示关联关系时可以在关联线上标注角色名,关系的两端代表两种不同的角色,因此在一个关联关系中可以包含两个角色名,角色名不是必须的,可以根据需要增加,其目的是使类之间的关系更加明确。

                 例如:学生和老师之间,每个老师可以教很多学生,每个学生也可能有多个老师,他们是双向关联。

                    

                 代码如下所示:

public class Teacher {

    private String name;
    private List<Student> stus;

    public void teaching(){}
}

public class Student {

    private String name;
    private List<Teacher> teas;

    public void study(){}
}

              2. 聚合关系

                  聚合关系表示整体与部分的关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。UML中,聚合关系用带空心菱形的直线表示。例如汽车发动机是汽车的组成部分,但是汽车发动机可以独立存在,因此汽车和发动机是聚合关系。

                 聚合关系如图所示:

                       

                 在代码实现聚合关系时,成员对象通常作为构造方法,Setter方法或业务方法的参数注入到整体对象中。

                 代码如下:

public class Car {

    private Engine engine;

    public Car(Engine engine) {
        this.engine = engine;
    }
    
    public void setEngine(Engine engine){}
    
}

public class Engine {
    ........
}

               3. 组合关系

                   组合关系也表示类之间整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系。在UML中,组合关系用带实心菱形的直线表示。例如人的头和嘴巴,嘴巴是头的组成部分之一,而且如果头没了,嘴巴也就没了,因此头和嘴巴是组合关系。UML如图所示:

                      

                   在代码实现组合关系时,通常在整体类的构造方法中直接实例化成员类。代码如下所示:

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

public class Mouth{
    ......
}

                  4. 依赖关系

                      依赖关系是一种使用关系,特定事物的改变可能会影响使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。一般情况下,依赖关系体现在某个类的方法使用另一个类的对象做为参数。在UML中使用带箭头的虚线表示依赖关系,由依赖的一方指向被依赖的一方。例如驾驶员开车,在Driver类的drive()方法中将Car类型的对象作为一个参数传递,以便在drive()方法中能够调用car的move()方法,驾驶员的drive()方法依赖车的move()方法,因此类Driver依赖类Car。如下图所示:

                      

                        在代码实现中,依赖关系通常通过3中方式实现:第一种,将一个类的对象作为一个类中方法的参数;第二种方式是在一个类的方法中将另一个类的对象作为其局部变量;第三种方式是在一个类的方法中调用另一个类的静态方法。

                   5. 泛化关系 

                       泛化关系也就是继承关系,用于描述子类与父类之间的关系,在UML中,泛化关系用带空心三角形的直线来表示。例如,Teacher和Student都可以是Person的子类,他们都可以移动move()和说话say()。UML如下所示:

                           

                         对应的代码如下:

public class Person {

    public String name;
    private int age;

    public void move() {
        ......
    }

    public void say() {
        ......
    }
}

public class Teacher extends Person {

    private String teacherNo;

    public void teach(){
        .......
    }
}

public class Student extends Person{

    private String studentNo;

    public void study(){
        ......
    }
}

                  6. 接口与实现关系

                      实现(Realization)关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。例如定义一个交通工具接口Vehicle,包含一个抽象操作move(),在类Ship和类Car中都实现了该move()操作,不过具体细节可能不同。UML如下图所示:

                       

                       代码如下:

public interface Vehicle {

    void move();
}

public class Ship implements Vehicle {

    @Override
    public void move() {

    }
}

public class Car implements Vehicle{

    @Override
    public void move() {

    }
}

以上就是今天我要分享给大家的内容,UML有太多的东西了,类图只是其中最常用的一小部分,其他的各种图还需要继续学习和使用。

       多谢大家的浏览,欢迎留言交流共同进步。

猜你喜欢

转载自blog.csdn.net/zhourui_1021/article/details/100174535