zoukankan      html  css  js  c++  java
  • 01、Java模式UML类图

    UML类图

    统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。

    UML 从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图。

    类的结构

    在 UML 中,类使用包含类名、属性和操作且带有分隔线的矩形来表示。

    (1) 类名(Name)是一个字符串,例如,Student。

    (2) 属性(Attribute)是指类的特性,即类的成员变量。UML 按以下格式表示:

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

    可见性表示该属性对类外的元素是否可见,包括公有(+)、私有(-)、受保护(#)和朋友(~)。

    (3) 操作(Operations)是类的任意一个实例对象都可以使用的行为,是类的成员方法。UML 按以下格式表示:

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

    接口

    在 UML 中,接口使用一个带有名称的小圆圈来进行表示。

    类的关系

    在软件系统中,类不是孤立存在的,类与类之间存在各种关系。根据类与类之间的耦合度从弱到强排列,UML 中的类图有以下几种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。

    依赖关系

    依赖(Dependency)关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。

    在 UML 类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。

    人与手机的关系图,人通过手机的语音传送方法打电话。

    代码示例如下:

    public class Person {
        private String name;
        public void call(MobilePhone mp){
            mp.transfer(); // 语音传送
        }
    }
    
    public class MobilePhone {
        public void transfer(){
            System.out.println("send voice");
        }
    }
    

    关联关系

    关联(Association)关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系。

    关联可以是双向的,也可以是单向的。在 UML 类图中,双向的关联可以用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。也可以在关联线的两端标注角色名,代表两种不同的角色。

    在代码中通常将一个类的对象作为另一个类的成员变量来实现关联关系。

    每个老师可以教多个学生,每个学生也可向多个老师学,他们是双向关联。

    代码示例如下:

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

    聚合关系

    聚合(Aggregation)关系是关联关系的一种,是强关联关系,是整体和部分之间的关系,是 has-a 的关系。

    聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。

    学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。

    在 UML 类图中,聚合关系可以用带空心菱形的实线来表示,菱形指向整体。

    代码示例如下:

    public class University {
        private List<Teacher> teas;
    }
    
    public class Teacher {
        private String name;
        private List<Student> stus;
        public void teaching(){ }
    }
    

    组合关系

    组合(Composition)关系也是关联关系的一种,也表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系,是 cxmtains-a 关系。

    在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。

    头和嘴的关系,没有了头,嘴也就不存在了。

    在 UML 类图中,组合关系用带实心菱形的实线来表示,菱形指向整体。

    代码示例如下:

    public class Head {
        private Mouth mouth;
    }
    
    public class Mouth {
        private void eat(){ }
    }
    

    泛化关系

    泛化(Generalization)关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系,是 is-a 的关系。

    在 UML 类图中,泛化关系用带空心三角箭头的实线来表示,箭头从子类指向父类。

    Student 类和 Teacher 类都是 Person 类的子类。

    代码示例如下:

    public class Person {
        private String name;
        private int age;
        public void speak(){ }
    }
    
    public class Teacher extends Person{
        private long studentNo;
        public void teaching(){ }
    }
    
    public class Student extends Person{
        private long studentNo;
        public void study(){ }
    }
    

    实现关系

    实现(Realization)关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。

    在 UML 类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。

    汽车和船实现了交通工具。

    代码示例如下:

    public interface Vehicle {
        void move();
    }
    
    public class Car implements Vehicle{
        @Override
        public void move() { }
    }
    
    public class Ship implements Vehicle{
        @Override
        public void move() { }
    }
    
  • 相关阅读:
    Effective C# 原则12:选择变量初始化而不是赋值语句
    Effective C# 原则20:明辨接口实现和虚函数重载的区别(译)
    Effective C# 原则18:实现标准的处理(Dispose)模式(译)
    Effective C# 原则19:选择定义和实现接口而不是继承(译)
    Is JoyFM goes over? Nope, I believe that JoyFM will stick together with us for a long time.
    Effective C# 原则15:使用using和try/finally来做资源清理(译)
    Effective C# 第二章:.Net资源管理(翻译)
    Effective C# 原则10: 明白GetHashCode()的缺陷(译)
    Effective C# 原则8:确保0对于值类型数据是有效的(翻译)
    Effective C# 原则23:避免返回内部类对象的引用(翻译)
  • 原文地址:https://www.cnblogs.com/pengjingya/p/14934605.html
Copyright © 2011-2022 走看看