UML类图

    本篇主要介绍UML的类图(Class Diagram),类图主要是为了图形化的展示静态结构模型,主要显示类、接口以及它们的内部结构和关系。只描述抽象的类结构和相互关联,这些类型具体的对象实例信息主要在对象图和交互图中得到体现。

    下面主要介绍类图中的相关模型,同时建模与编码(以Java为案例,后续不再强调)做实现类比,注意建模可以实现编码实现的功能,并不代表建模一定要细化到和编码实现一样的程度。


类(Class)

    通过属性(Property)、方法(Operation)、接收(Reception)、端口(Port)描述结构定义

模型:

枚举结构

枚举结构.png

类结构

类结构.png

  + : public
  - : private
   # : protected
  ~ : package

编码:
public enum CoolingEnum {

    WIND("风冷"),
    WATER("水冷");

    private String type;

    CoolingEnum(String type) {
        this.type = type;
    }
}

    类(Class)模型与编码对比时,可以明显发现模型属性(Property)对应编码的属性,模型操作(Operation)对应编码的方法


属性(Property)

    定义结构的字段属性,主要有两种场景,一种是主动创建定义属性,一种是创建关联时自动创建一个属性用来承载关联另一端(属性类型是关联另一端的类结构,通过属性描述类与类之间的关联关系)
  属性主要操作是设置类型,设置多重性,设置默认值
  
  设置类型
  类型设置主要分两种场景:
  1、数据类型(DataType),基础类型(PrimitiveType)、枚举(Enumeration)也都是DataType
  2、非数据类型(除Datatyp外的Type类型模型,主要是类[Class],DataType也是Type)
  
  设置多重性
  决定属性是空、单个、指定大小列表或无限制列表
  
  设置默认值
  设置默认值,根据类(Class)创建对象实例(Instance Specification)时,该对象实例(Instance Specification)的此属性提前设置一个默认值。
  如果类(Class)与类(Class)之间存在泛化时,子类结构创建对象实例(Instance Specification)时可以获取父类结构的所有属性,子类结构上可以进行重写父类结构属性的操作
  除此之外,属性模型规范上还提供了很多属性用来标记该属性的特性,此处不一一展开,具体可查看OMG的UML标准规范文档(本系统博客主要针对UML模型的使用进行功能性描述说明,下一系列博客会针对UML的规范文档进行规范性描述说明)。

模型:

属性以及属性重写

属性以及属性重写.png
编码:
public class PetrolEngine extends Engine {      
    // 定价      
    public List<Double> pricing = Arrays.asList(30.0);      
    // 缸数(重写)      
    public Integer cylindersNumber;  
}

操作(Operation)

    操作(Operation),其方法(Method)可以绑定一种行为用来描述此操作,其整体效果可实现与编码的方法类似的功能,操作(Operation)对应编码的方法定义,操作(Operation)的方法(Method)绑定的行为模型对应编码的方法体实现细节。
    此外额外进行拓展说明:此处只是设置操作定义的地方,其方法细节(Method)需要行为的相关模型元素描述(例如Opaque Behavior、Activity等),其操作调用使用场景需要逻辑仿真的支持
    下面以三种调用场景为例进行说明(此处不细说行为相关的模型,具体细节行为图类进行说明):

  1. 外部传参方法 + 使用Opaque Behavior描述Method内部
模型:

Opaque Behavior

Opaque Behaviors.png

Operation属性

Operation.png

Parameter

Parameter.png
编码:
// 计算加速度      
public Double calculateAcceleration(Double v, Double t) {          
    Double result = v / t;          
    System.out.println(result);          
    return result;      
}
  1. 外部传参方法 + 使用Activity描述Method内部
模型:

计算转速

计算转速.png
编码:
// 计算转速     
public Double calculateRev(Double f, Integer p) {          
    Double result = 60*(f / p);          
    System.out.println(result);          
    return result;      
}
  1. 内部属性处理方法 + 使用Activity描述Method内部(仿真过程中可以根据表达式解析到对应实例的属性)
模型:

计算总缸数

计算总缸数.png
编码:
// 计算总缸数      
public Integer calculateRev() {          
    return cylindersNumber * averageCylindersNumber;      
}

接口(Interface)

    接口是类、组件、子系统等分类器(Classifier)的外部可见操作(Operation)的定义,没有内部结构的说明。接口由分类器(Classifier)进行操作(Operation)的实现
模型的接口与编码接口概念类似,本质都是广义上的接口概念的两种实现。

模型:

接口

接口.png
编码:
public interface IEngine {      
    public Double calculateAcceleration(Double v, Double t);      
    public Double calculateRev(Double f, Integer p);  
}
public class Engine implements IEngine {      
    // 缸数      
    public Integer cylindersNumber;      
    // 每缸气门数      
    public Integer averageCylindersNumber;      
    // 冷却方式      
    protected CoolingEnum coolingType;      
    // 发动机排量      
    String engineCapacity;
    
    // 计算加速度      
    @Override      
    public Double calculateAcceleration(Double v, Double t) {          
        Double result = v / t;          
        System.out.println(result);          
        return result;      
    }    
    // 计算转数      
    @Override      
    public Double calculateRev(Double f, Integer p) {          
        Double result = 60*(f / p);          
        System.out.println(result);          
        return result;      
    }    
    // 计算总缸数      
    public Integer calculateRev() {          
        return cylindersNumber * averageCylindersNumber;      
    }  
}

数据类型(DataType)

    DataType存在两种子集:

  • 原始类型(PrimitiveType):纯值数据的模型定义,不包含子的UML结构(例如String、Integer、Real)
  • 枚举(Enumeration):枚举的模型定义

    除了原始类型(PrimitiveType)和枚举(Enumeration)的使用场景特殊,其他Type类型的类型定义使用场景都是属性的类型为模型,值为模型的实例(如果是元模型的话,元模型作为类型时,实例是指这种类型的模型InstanceSpecification;
    由于原始类型(PrimitiveType)和枚举(Enumeration)也是Type类型,如果工具未加以限制会错误使用这两种模型类型,即这两种类型下定义子的UML结构,直接作为Type类型使用)

模型:

接口

接口.png

枚举

枚举.png

HashMap

HashMap.png

在这里插入图片描述

结构类型.png
编码:

Java的基础类型(int、double等)

public enum CoolingEnum {    
    WIND("风冷"),      
    WATER("水冷");    
    private String type; 
   
    CoolingEnum(String type) {          
        this.type = type;      
    }  
}

Java的HashMap

public class EngineSystem {      
    // 燃油发动机      
    public Engine fuelOil;      
    // 电力发动机      
    public Engine electricity;  
}

泛化(Generalization)

    泛化(Generalization)表示抽象的分类器(Classfier)到更具体的分类器(Classfier),泛化的概念与编码的继承类似,汽油发动机(具体)继承至发动机(抽象)对应发动机(抽象)泛化汽油发动机(具体)(或者汽油发动机泛化至发动机)
泛化线由具体的分类器指向抽象的分类器

模型:

泛化

泛化.png
编码:
public class PetrolEngine extends Engine {      
    // 定价      
    public List<Double> pricing = Arrays.asList(30.0);      
    // 缸数(重写)      
    public Integer cylindersNumber;  
}

关联 (Association)

    关联模型主要存在三种概念:
    1.关联关系:是整体与部分的关系。
    2.聚合关系:是整体与部分的关系,部分能脱离整体而独立存在。
    3.组合关系:是整体与部分的关系,但部分不能脱离整体而独立存在。
    耦合程度:组合 > 聚合 > 关联

模型:

在这里插入图片描述

关联.png
编码:
public class EngineSystem {      
    // 燃油发动机      
    public Engine fuelOil;      
    // 电力发动机      
    public Engine electricity;  
}

同上,对应成员变量处理同上,对应成员变量处理


实现(Realization)

    实现(Realization)模型的子集存在三种:

  1. 接口实现(Interface Realization):
    接口实现是分类器和接口之间的特殊实现关系。这种关系表示分类器实现符合接口规定。
  2. 组件实现(Component Realization):
    组件和分类器之间的关系
  3. 代换(Substitution):
    两个分类器之间的关系。

欢迎访问个人博客:http://www.codeci.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值