• UML 资料整理


    参考:http://www.uml.org.cn/oobject/201211231.asp

    一、类的属性的表示方式

    在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和email这3个属性,以及modifyInfo()方法。

    那么属性/方法名称前加的加号和减号是什么意思呢?它们表示了这个属性或方法的可见性,UML类图中表示可见性的符号有三种:

    · + :表示public

    · - :表示private

    · #:表示protected(friendly也归入这类)

    因此,上图中的Employee类具有3个私有属性和一个公有方法。

    实际上,属性的完整表示方式是这样的:

    可见性  名称 :类型 [ = 缺省值]

    中括号中的内容表示是可选的

    二、类的方法的表示方式

    上图中我们已经看到了方法的表示形式。实际上,方法的完整表示方式如下:

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

    同样,中括号中的内容是可选的。

    比如在下图的Demo类中,定义了3个方法:

    · public方法method1接收一个类型为Object的参数,返回值类型为void

    · protected方法method2无参数,返回值类型为String

    · private方法method3接收类型分别为int、int[]的参数,返回值类型为int

    三、类与类之间关系的表示方式

    1、关联关系

    关联关系又可进一步分为单向关联、双向关联和自关联。代码中通常将一个类的对象作为另一个类的成员变量,可以调用另一个类的公共属性和方法。

    (1)单向关联

    我们可以看到,在UML类图中单向关联用一个带箭头的直线表示。上图表示每个顾客都有一个地址,这通过让Customer类持有一个类型为Address的成员变量类实现。

    对应的Java代码片段如下:

    public class Customer {
    private Address address;
    ……
    }
    
    public class Address {
    ……
    }

       表示customer可以调用adress类中的公共属性和方法

    (2)双向关联

      从上图中我们很容易看出,所谓的双向关联就是双方各自持有对方类型的成员变量。在UML类图中,双向关联用一个不带箭头的直线表示。上图中在Customer类中维护一个Product[]数组,表示一个顾客购买了那些产品;在Product类中维护一个Customer类型的成员变量表示这个产品被哪个顾客所购买。

    对应的Java代码片段如下:

    public class Customer {
    private Product[] products;
    ……
    }
    
    public class Product {
    private Customer customer;
    ……
    }

      指双方都知道对方的存在,都可以调用对方的公共属性和方法。

    (3)自关联

    自关联在UML类图中用一个带有箭头且指向自身的直线表示。上图的意思就是Node类包含类型为Node的成员变量,也就是“自己包含自己”。

      对应的Java代码片段如下:

    public class Node {
    private Node subNode;
    ……
    }

    2、聚合关系

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

    上图中的Car类与Engine类就是聚合关系(Car类中包含一个Engine类型的成员变量)。由上图我们可以看到,UML中聚合关系用带空心菱形和箭头的直线表示。

    聚合关系强调是“整体”包含“部分”,但是“部分”可以脱离“整体”而单独存在。比如上图中汽车包含了发动机,而发动机脱离了汽车也能单独存在。

    对应的Java代码片段如下:

    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、组合关系

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

    显然,嘴是头的一部分且不能脱离了头而单独存在。在UML类图中,组合关系用一个带实心菱形和箭头的直线表示。

      

    对应的Java代码片段如下:

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

       部分的对象在整体中生成,整体不在,部分也就不存在。

    4、依赖关系 

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

     

    从上图我们可以看到,Driver的drive方法只有传入了一个Car对象才能发挥作用,因此我们说Driver类依赖于Car类。在UML类图中,依赖关系用一条带有箭头的虚线表示。

    对应的Java代码片段如下:

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

    5、继承关系

      继承关系对应的是extend关键字,在UML类图中用带空心三角形的直线表示,如下图所示中,Student类与Teacher类继承了Person类。

    6、接口实现关系

    这种关系对应implement关键字,在UML类图中用带空心三角形的虚线表示。如下图中,Car类与Ship类都实现了Vehicle接口。

    四,UML类图新手入门级介绍

      首先,看动物矩形框,它代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。前面的符号,+ 表示public,- 表示private,# 表示protected。

    这里写图片描述
      右下角的飞翔,它表示一个接口图,与类图的区别主要是顶端的<>显示。第一行是接口名称,第二行是接口方法。接口还有另一种表示方法,俗称棒棒糖表示法。唐老鸭是能讲人话的鸭子,实现了讲人话的接口。

    这里写图片描述
      接下来的是类与类,类与接口之间的关系了。首先注意动物、鸟、鸭、唐老鸭之间的关系符号。它们都是继承的关系,继承关系用空心三角形 + 实线来表示的。

    这里写图片描述
      上述所列举的几种鸟中,大雁最能飞,让它实现了飞翔接口。实现接口用空心三角形 + 虚线来表示。

    这里写图片描述

      企鹅和气候两个类,企鹅是很特别的鸟,会游不会飞。更重要的是,它与气候有很大的关联。我们不去讨论为什么北极没有企鹅,为什么它们要每年长途跋涉。总之,企鹅需要知道气候的变化,需要了解气候规律。当一个类知道另一个类时,可以用关联(association)。关联关系用实线箭头来表示。

    这里写图片描述

      再来看大雁和雁群这两个类,大雁是群居动物,每只大雁都是属于一个雁群,一个雁群可以有多只大雁。所以它们之间就满足聚合(Aggregation)关系。聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。聚合关系用空心的菱形 + 实线箭头来表示。

    这里写图片描述

      组合(Composition)是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。在这里鸟和其翅膀就是组合关系,因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的。组合关系用实习的菱形 + 实线箭头来表示。另外,你会注意到合成关系的连线两端还有一个数字1和数字2,这被称为基数。表明这一端的类可以有几个实例,很显然,一个鸟应该有两只翅膀。如果一个类可能有无数个实例,则就是n来表示。关系关系、聚合关系也可以有基数的。

    这里写图片描述

      动物的几大特征,比如有新陈代谢,能繁殖。而动物要有生命力,需要氧气、水以及食物等。也就是说,动物依赖于氧气和水。他们之间是依赖关系(Dependency),用虚线箭头来表示。

    这里写图片描述

     五,总结

    依赖(Dependency): 只在依赖类的方法中,调用被依赖对象的方法。被依赖对象可以作为依赖类方法的参数,或局部变量。或在依赖类的方法中调用被依赖对象的静态方法。 

               类A使用到了类B,这种依赖具有偶然性、临时性,是非常弱的关系。如某人要过河,则人与船的关系就是依赖,人过河之后,与船的关系就解除了。

               在代码层面,被依赖的类B作为参数被另一个依赖类A在某个方法中使用。  

               ----------->

    关联(Association):   当一个类知道另一个类时,通常将一个类的对象是另一个类的成员变量。可以调用另一个类的对象和方法

               _______>

    聚合(Aggregation): 是关联关系的特例,是强的关联关系,聚合是整体与个体的关系。

               部分类的对象是整体类的成员变量,但部分类的对象不在整体类中生成,部分类对象作为整体类方法的输入参数

               ◇———>
    组合(Composition): 也是关联关系的一种特例,是一种强聚合关系。部分类的对象是整体类的成员变量,且部分类的对象在整体类中生成

               组合与聚合几乎完全相同,唯一区别就是对于组合,“部分”不能脱离“整体”单独存在,其生命周期应该是一致的。

               ◆______>

    泛化(Generalization):继承

               _______▷
    实现(Realization): 接口

               ------------▷

    关联关系的细化需要注意强弱,由若到强分别是 依赖 < 关联 < 聚合 < 组合

  • 相关阅读:
    Socket 通信
    一些 NuGet 程序包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装
    设计模式之六大原则
    UML类图基本画法
    重写 覆盖 final override
    gaussian算子
    常量表达式: const constexpr
    const 限定符:const指针、const引用
    git命令
    vector&list 效率比较
  • 原文地址:https://www.cnblogs.com/shelley-AL/p/10744140.html
Copyright © 2020-2023  润新知