• UML类图简明教程


    作者:郭孝星
    微博:郭孝星的新浪微博
    邮箱:allenwells@163.com
    博客:http://blog.csdn.net/allenwells
    Github:https://github.com/AllenWells

    类图用于描写叙述系统中所包含的类以及它们之间的相互关系,它是系统分析和设计阶段的重要产物,也是系统编码和測试的重要模型根据。

    一 类图结构

    类封装了数据和行为,它是具有同样属性、操作和关系的对象集合的总称。

    在系统分析与设计阶段。类通常分为三种:

    • 实体类:实体类是系统需求中的实体,实体类通常保存在永久记忆体中,一般使用数据库表或文件来记录。实体类既包含存储数据的类、传递数据的类和操作数据的类。实体类通常来源于需求说明中的名词(比如:用户、产品)。
    • 控制类:控制类体现了应用的运行逻辑,提供相应的业务操作。将控制类抽象出来能够减少界面和数据库之间的耦合度。

      控制类通常有动词+名词来命名(比如:UserRegister)。

    • 边界类:边界类用于对外部用户与系统之间的交互对象进行抽象,主要包含界面类(比如:对话框、窗体、菜单)。

    类的组成

    例如以下图所看到的:

    这里写图片描写叙述

    • 类名:类的名字
    • 属性:类的成员变量
    • 操作:类的成员方法

    属性的表示方式例如以下所看到的:

    可见性 名称:类型[=缺省值]
    • 可见性:public、private和protected,在类图中分别用+、-和#表示。
    • 名称:属性的名称。
    • 类型:属性的数据类型,能够是基本数据类型,也能够是用户自己定义的类型。

    • 缺省值:可选项,表示属性的初始值。

    二 类图关系

    2.1 关联

    关联是一种结构化关系。用于表示一类对象与还有一类对象之间有联系。

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

    2.1.1 双向关联

    双向关联表示双向关联是双向的。

    这里写图片描写叙述

    2.1.2 单向关联

    单向表示关联是单向的。

    这里写图片描写叙述

    2.1.3 自关联

    自关联表示类的属性对象类型为该类本身。

    这里写图片描写叙述

    2.1.4 多重关联

    多重关联又称为重数性关联,表示两个关联对象在数量上的相应关系。

    这里写图片描写叙述

    常见的多重关联例如以下所看到的:

    • 1..1 表示还有一个类的一个对象仅仅与该类的一个对象有关系
    • 0..* 表示还有一个类的一个对象与该类的零个或多个对象有关系
    • 1..* 表示还有一个类的一个对象与该类的一个或多个对象有关系
    • 0..1 表示还有一个类的一个对象没有或仅仅与该类的一个对象有关系
    • m..n 表示还有一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)

    2.2 聚合/组合

    2.2.1 聚合

    聚合表示总体和部分关系,在聚合关系中成员对象是总体的对象的部分,可是成员对象能够脱离总体对象独立存在。

    在UML中,聚合关系用带空心菱形的直线表示,例如以下图所看到的:

    这里写图片描写叙述

    在代码实现聚合关系时,成员对象通常作为构造方法、Setter方法或业务方法的參数注入到总体对象中。例如以下所看到的:

    public class Car 
    {  
        private Engine engine;  
    
        //构造注入  
        public Car(Engine engine) 
        {  
            this.engine = engine;  
        }  
    
        //设值注入  
        public void setEngine(Engine engine) 
        {  
            this.engine = engine;  
        }  
    
    }  
    
    public class Engine 
    {  
        ……  
    }  

    2.2.2 组合

    组合关系也表示总体和部分的关系。可是在组合关系汇总总体对象能够控制成员对象的生命周期,一旦总体对象不存咋了。成员对象也将不存在。

    在UML中,组合关系用带实心菱形的直线表示,例如以下图所看到的:

    这里写图片描写叙述

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

    public class Head 
    {  
        private Mouth mouth;  
    
        public Head() 
        {  
            mouth = new Mouth(); //实例化成员类  
        }  
    }  
    
    public class Mouth 
    {  
        ……  
    }  

    2.3 依赖

    依赖关系是一种使用关系,依赖关系通常体如今某个类的方法使用还有一个类的对象作为參数。

    在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。例如以下图所看到的:

    这里写图片描写叙述

    在代码实现依赖关系时,通常有三种方式,例如以下所看到的:

    • 将一个类的对象作为还有一个类中方法的參数
    • 在一个类的方法中将还有一个类的对象作为其局部变量
    • 在一个类的方法中调用还有一个类的静态方法
    public class Driver 
    {  
        public void drive(Car car) 
        {  
            car.move();  
        }    
    }  
    
    public class Car 
    {  
        public void move() 
        {  
            ……  
        }    
    }  

    2.4 继承

    继承关系用来描写叙述父类与子类自检的关系。

    在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() 
        {  
            ……  
        }  
    }  
    
    //子类  
    public class Teacher extends Person 
    {  
        private String teacherNo;  
    
        public void teach()
        {  
            ……  
        }  
    }  
    

    2.5 接口与实现

    接口之间也能够有像类之间关系那样的继承关系和依赖关系,可是接口和类之间还存在着一种实现关系。

    在实现关系中。类实现了接口中定义的全部操作。

    在UML中。类与接口之间的实现关系用带空心三角形的虚线来表示。例如以下图所看到的:

    这里写图片描写叙述

    在代码实现时使用implents关键字,例如以下所看到的:

    public interface Vehicle 
    {  
        public void move();  
    }  
    
    public class Ship implements Vehicle
    {  
        public void move()
        {  
            …… 
        }  
    }  
    
    public class Car implements Vehicle 
    {  
        public void move()
        {  
            ……  
        }  
    }
  • 相关阅读:
    理解javascript观察者模式(订阅者与发布者)
    Javascript异步编程之setTimeout与setInterval详解分析(一)
    Gulp.js----比Grunt更易用的前端构建工具
    requireJS对文件合并与压缩(二)
    requireJS(版本是2.1.15)学习教程(一)
    Git使用教程
    Ajax基本知识
    go语言基础之有参有返回值函数的使用
    go语言基础之函数有多个返回值
    go语言基础之函数只有一个返回值
  • 原文地址:https://www.cnblogs.com/llguanli/p/8637275.html
Copyright © 2020-2023  润新知