• uml-类图书写指南


    说明

    类图是最常用的UML图,面向对象建模的主要组成部分。它用于描述系统的结构化设计,显示出类、接口以及它们之间的静态结构和关系。

    类图主要产出于面向对象设计的分析和设计阶段,用来描述系统的静态结构。

    基本元素

    类图的基本组成元素是类、接口以及关系三种。

    image.png

    类由三部分组成:

    classname:类的名字;

    field:类的属性/成员变量,field由三部分组成,第一部分表示可见型(+public,-private,#protected),第二部分表示属性名词,第三部分表示属性类型;

    method/operate:类的操作/方法。由四部分组成,第一部分表示可见性,第二部分表示方法名,第三部分表示参数类型,第四部分表示返回值类型。

    具体示例:

    image.png

    抽象类于普通类基本一样,name上方有<<abstrace>>标志。

    接口

    image.png

    接口与类十分类似,就是name上方有<<interface>>标志,没有field。

    关系

    泛化(Generalization)

    泛化对应到代码里就是具体的父类的继承关系。表示方式是空心三角形的直线。

    image.png

    实现(realize)

    实现是描述子类对抽象类/接口的实现关系。

    image.png

     

    依赖(dependency)

    依赖关系表示一个类依赖于另一个类的定义,不过这个关系比较弱,仅表示一个类在运行时需要另一个类的定义,而不需要在内部持有另一个类(use a)。简单点儿说就是类A的临时变量、方法参数等依赖类B。

    依赖关系是用一套带箭头的虚线表示的。

    image.png

    关联(Association)


    关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。在代码里一般表现形式为成员变量。

    自然语言描述的例子:我和我的好朋友,就可以认为是关联关系。

    image.png

    聚合(Aggregation)

    聚合是一种带有特殊语义的关联关系,关联关系双方并不强调层级关系(我和朋友是同级的),但是聚合关系是强调层级关系的。

    聚合关系用一条带空心菱形箭头的直线表示。

    自然语言描述的例子:公司和员工就是聚合关系,有明确的层级。

    聚合关系在代码中的体现也是成员变量。

    image.png

    组合关系(composition)

    组合关系也是一种特殊的关联关系,组合关系表示整体和部分的生命周期都是相同的,而聚合和关联都不关注生命周期。

    例如,公司和部门,部门不会独立于公司存在,公司也不会没有部门,一个部门也不会属于不同的公司。

    组合关系用一条带实心菱形箭头直线表示。

    image.png

    实例

    image.png

    • 车的类图结构为<<abstract>>,表示车是一个抽象类;
    • 它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;
    • 小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
    • 小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;
    • 学生与班级之间是聚合关系,使用带空心箭头的实线表示;
    • 学生与身份证之间为关联关系,使用一根实线表示;
    • 学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;

    工程实践

    类图的概念上面已经说完了,这里说一下在具体的面向对象建模过程中,类图应该如何产出(参考《软件工程(第四版)》)。

    注意不要教条主义,这只是一个参考的指导思想,具体实践还是需要结合实际。

    0.前期设计准备

    这一块比较大,包含需求分析、领域划分等,一时也没法说清楚,这里就略过了。

    1.识别系统名词

    标识出来自问题域的相关对象类,对象类包括物理实体和概念。所有类在应用中都必须有意义。

    首先是从需求陈述中找出所有的名词,将它们作为类—对象的初步候选者,根据以下标准,去掉不正确和不必要的类:冗余类、不相关的类、模糊类等。

    最终识别到的每个名词都可以作为一个类。

    将识别出的所有名词整理到系统名词表,就可以作为类图的大纲来使用。

    2.准备数据字典

    为所有建模实体准备一个数据词典,准确描述各个对象类的精确含义,描述当前问题中的类的范围,包括对类的成员、用法方面的假设或限制等。

    其实也就是识别每一个类的成员和方法。

    3.确定关系

    识别完毕类和数据字典之后,再根据系统设计,识别类之间的相互关系。这个关系就是指上述的依赖、关联、聚合、组合等关系。

    注意这里并不包含泛化、实现等关系

    4.使用继承来细化对象类

    这一步就是在上一步的基础上,分析类之间的关联,进行一些抽象设计。

    通常可以用下面两种方式来进行:

    一是自底向上通过把现有类的共同性质一般化为父类,寻找具有相似的属性、关联或操作的类来发现继承。

    二是自顶向下将现有类细化为更具体的子类。

    5.完善对象模型


    对象模型不可能一次就能保证模型是完全正确的,软件开发的整个过程是一个不断完善的过程。模型的不同组成部分多半是在不同阶段完成的。如果发现模型的缺陷,就必须返回前期阶段进行修改。

    实际情况

    代码写完了,照着类图的基本元素的说明,画出类图,over。

    书写工具

    plantuml

    https://plantuml.com/zh/class-diagram

    一种文本化的uml书写工具,可以用类似写代码的方式画出uml图。

    实例:

    @startuml
    class Car
    
    Driver - Car : drives >
    Car *- Wheel : have 4 >
    Car -- Person : < owns
    
    @enduml

    实际效果

    Draw.io

    免费、开源的绘图工具,可以方便的画各种uml图。

    https://www.draw.io/

    推荐下载桌面离线版

  • 相关阅读:
    android 学习笔记1- 应用程序的资源管理
    idea shortcut
    关于layou以及layout 上的控件
    java 之深拷贝与浅拷贝
    Java中static静态方法可以继承吗?可以被重写吗?
    String StringBuff StringBuilder 使用。
    linux 中断
    设备类class理解
    linux 内核符号
    QT 调试输出格式
  • 原文地址:https://www.cnblogs.com/csonezp/p/12294430.html
Copyright © 2020-2023  润新知