UML核心逻辑视图-类图成分及关系的具体说明

UML核心逻辑视图-类图成分及关系的具体说明

类图技术是面向对象方法的核心技术,应用非常广泛,是进一步学习设计模式的基础!

其中,类、对象,以及它们之间的关系是最基本的建模元素

文章目录

成分介绍

类是对一组具有相同属性、操作、关系和语义的对象的描述。

在UML中,类用矩形来表示,并且该矩形被划分为3个部分:名称部分(Name)、属性部分(Attribute)和操作部分(Operation,也可以称为方法)

《UML核心逻辑视图-类图成分及关系的具体说明》

抽象类

《UML核心逻辑视图-类图成分及关系的具体说明》

在类的模型上,类名和操作使用斜体,表示抽象类。

涉及的操作是抽象的操作

接口

接口是描叙类的部分行为的一组操作,它也是一个类提供给另一个类的一组操作

接口包含操作但不包含属性

并且它没有对外界可见的关联

《UML核心逻辑视图-类图成分及关系的具体说明》

继承

继承指的是一个类(子类)继承另外的一个类 (父类)的同一功能,并增加它自己的功能的能力。

从子类(要继承行为的类)拉出一条闭合的、单键头(或三角形)的实线指向超类

《UML核心逻辑视图-类图成分及关系的具体说明》

泛化 – Generalization

相对继承而言,父类对继承了之的子类为泛化关系

《UML核心逻辑视图-类图成分及关系的具体说明》

实现

由实现了某个接口的类指向接口,该关系成为实现

表示上,只需要把继承的指向改变,并换成虚线表示即可

《UML核心逻辑视图-类图成分及关系的具体说明》

依赖,关联,聚合,组合

依据联系的紧密程度,由弱到强,依次为 依赖 < 关联 < 聚合 < 组合

依赖-dependency

如果一个类,偶尔用到某个类,例如,客户吃饭偶尔用到叉子(偶尔吃西餐的时候),那么客户类和叉子类之间就是依赖关系

《UML核心逻辑视图-类图成分及关系的具体说明》

依赖是类的五种关系中耦合最小的一种关系

在代码形式上,其表现为

public class Client{ 
    public void eat(){ 
        Fork fork = new Fork();
        ...
    }
}

Fork(叉子)类作为该方法的变量来使用

请注意Fork类的生命期,它是当Client类的eat()方法被调用的时候,才被实例化。
持有Fork类的是Client类的一个方法而不是Client类,这点是最重要的

注意:

只有Client类知道Fork类的存在,而Fork类不知道Client的存在

Fork类被Client类的一个方法持有。生命期随着方法的执行结束而结束

关联-association

关联是实线加箭头表示。表示类之间的耦合度比依赖要更强

关联分单向关联和双向关联

在一个单向关联中,两个类是相关的,但是只有一个类知道这种联系的存在

在一个双向关联中,两个类互相知道对方

例如,客户需要与商家进行沟通,此时客户与商家就是关联关系,进而言之,如果商家也要跟客户沟通,这就构成了双向关联

《UML核心逻辑视图-类图成分及关系的具体说明》

注意:

关联关系中,关联类的属性持有被关联的类,也即被关联类作为关联类的类属性存在

单向关联下,只有关联类知道被关联类的存在;而在双向关联中,两类互知

此关系的生命周期,在类实例化时产生,类销毁时消失

聚合-aggregation

该关系是关联关系的再细分,耦合度比关联更强些

聚合通常是整体与部分之间的关系

例如 公司和员工。此时的整体和部分,都可以独立存在

图例中,使用空心菱形+实线+箭头的方式表示

《UML核心逻辑视图-类图成分及关系的具体说明》

代码体现上

class Company{ 
List<Employe> employes;
public Company(List<Employe> employes){ 
    this.employes = employes
}
...
}

明显可知:

聚合类的构造函数中包含了另一个类作为参数

部分类可以脱离整体类而独立存在

组合 – composition

比聚合更强的整体与部分的关系

通常整体和部分都不能独立存在,必须要组合到一起存在,例如 人和头,汽车和变速器。

图例中使用实心菱形+实线+箭头(箭头可选)表示,如图

《UML核心逻辑视图-类图成分及关系的具体说明》

代码体现上

class Car { 
Transmission transmission //变速器
public Car(){ 
    transmission = new Transmission();
} 
}

组合类的构造函数中包含了另一个类的实例化,表明汽车类在实例化之前,一定要先实例化变速器类,这两个类紧密的耦合在一起,同生共灭。变速器类是不可以脱离汽车类而独立存在

    原文作者:JunSIr_#
    原文地址: https://blog.csdn.net/JunSIrhl/article/details/102645570
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞