UML类图入门介绍

简介: 前言: 笔者辞职后出去玩了一圈,直到上周六回来,开始准备面试找工作,在准备的过程中回顾了一下以往写的博客中的知识点,发现最开始写的那版设计模式一点也不好。

前言: 笔者辞职后出去玩了一圈,直到上周六回来,开始准备面试找工作,在准备的过程中回顾了一下以往写的博客中的知识点,发现最开始写的那版设计模式一点也不好。不好在哪里呢?第一示例的命名不够通俗易懂。第二举的例子笔者感觉不是很贴切,还不够靠近生活。第三,没有设计模式之间的特点比对,或者说是优缺点的对比。所以笔者准备废弃最早写的那版设计模式,重新写一版且长期维护,这样更方便差缺补漏。俗话说得好,罗马不是一天建成的,所以要慢慢写~完美掩盖笔者学渣且懒的特质

原来参考的是设计模式与游戏完美开发
新版参考的是大话设计模式

写最专业的博客笔者还有很大差距的,但是写最有趣的技术博客我还是可以试一试的~
img_8352fba51005806030ab7e6468f72153.png

有说的不正确或者不准确的地方欢迎留言指正


有什么有趣的写作技巧或者想法欢迎大家给我留言,大家的帮助是我写下去最有效的动力


进入正题: UML类图可以按照指定的图形规则,有效的表示出类与类直接的关系,就像五线谱一样,按照指定规则的书写,阅读者就知道对应的曲调,当然前提你也得会,反正不管你们会不会,笔者我是不会~

笔者使用的UML画图工具是ProcessOn

VisualStudio 如何使用UML呢?请看雨兄的这篇文章VisualStudio中类设计器的使用

下面开始逐一讲解规则

public abstract class Newbie
{
    /// <summary>
    /// 姓名
    /// </summary>
    public string name = "菜鸟海澜";
    /// <summary>
    /// 有多少钱
    /// </summary>
    protected float money = -666.0f;
    /// <summary>
    /// 身份证号码
    /// </summary>
    private string IDNumber = "123456789";


    public abstract void FindGoodWork0(string parameter = "钱多");
    public abstract string FindGoodWork1(string parameter = "活少");
    public abstract float FindGoodWork2( int[] distance, string parameter =  "离家近" );
}
对应的类图
img_cb703f2b0d9cc1313414f0408c970e83.png
  • 第一行显示类名
  • 第二行显示类的特性,通常就是字段和属性
  • 第三行就是操作,通常是方法或行为
  • +代表public
  • -代表private
  • #代表protected
  • 如果是抽象类,用斜体显示
  • UML规定属性的表示方式为:可见性 名称:类型 [ = 缺省值 ]
    • “可见性”表示该属性对于类外的元素而言是否可见,包括公有(public)、私有(private)和受保护(protected)三种,在类图中分别用符号+、-和#表示。
    • “名称”表示属性名,用一个字符串表示。
    • “类型”表示属性的数据类型,可以是基本数据类型,也可以是用户自定义类型。
    • “缺省值”是一个可选项,即属性的初始值。
  • UML规定操作的表示方式为:可见性 名称(参数列表) [ : 返回类型]
    • “可见性”的定义与属性的可见性定义相同。
    • “名称”即方法名,用一个字符串表示。
    • “参数列表”表示方法的参数,其语法与属性的定义相似,参数个数是任意的,多个参数之间用逗号“,”隔开。
    • “返回类型”是一个可选项,表示方法的返回值类型,依赖于具体的编程语言,可以是基本数据类型,也可以是用户自定义类型,还可以是空类型(void),如果是构造方法,则无返回类型。


接口

public interface IUnity
{
    void PlayUnity();
}
对应的接口图
img_96a077e51f5150ae7425cfe1e0312627.png
  • 第一行是接口名称
  • 第二行是几口方法
也可以用棒棒糖表示法
public class Unity : IUnity
{
    public void PlayUnity()
    {
        Debug.Log("使用Unity");
    }
}
img_99efdc718e4d19102c28074ec50f8e63.png
  • “棒棒糖”表示接口
  • 圆圈旁边为接口名称
  • 接口方法在实现类中出现


继承

public class HaiLan : Newbie
{
    public override void FindGoodWork0(string parameter = "钱多")
    {
        
    }

    public override string FindGoodWork1(string parameter = "活少")
    {
        return "";
    }

    public override float FindGoodWork2(int[] distance, string parameter = "离家近")
    {
        return 0.0f;
    }
}
img_d36a0c84cfbc00cd2aa5fc87aee0126d.png


实现接口

img_83999e859debd3ffefb197e27c4f0246.png


关联关系

public class Unity : IUnity
{
    public Csharp learnCsharp;
    public void PlayUnity()
    {
        Debug.Log("使用Unity");
    }
}

public class Csharp
{

}

当一个类中引用另一个类的时候是引用关系

img_3e73c5f8c978b4f30afb3bc97d7c1054.png


聚合关系

public class Math3D
{

}

public class Unity1
{
    public Math3D math3D;
}

聚合关系可以理解为一直较弱的关联 ,表示一种状态,例如使用Unity3D中可以会3D数学,但是呢也不能说不会3D数学你就不能用Unity,你可以弄点UI、写写编辑器什么的。这种特殊的状态强调独立性,这种独立性体现在他们的都有各自的生命周期,例如我会3D数学可以用在DirectX,不一定要在Unity3d中使用,但是呢Unity3d可以含有3D数学

img_e0f9fe4564458d6ec9a7cb7e558ce653.png


合成关系

public class UnityLifeCycle
{

}

public class Unity2
{
    public UnityLifeCycle unityLifeCycle;
    public Unity2()
    {
        unityLifeCycle = new UnityLifeCycle();
    }
}

合成(组合)关系 是一种强的拥有关系,他们生命周期共存,同生共死,不可单独存在。例如unity中特定函数的生命周期(Awake 、Start等),在其他游戏引擎中是无用的,不能存在的,反正unity离开这些也是不行的。

img_a268c6da1e30aa0784df4eaf13522b6b.png


依赖关系

public class API
{

}
public class VersionChange
{

    public void Change(API api)
    {

    }
}

依赖关系(Dependency) 是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依 赖关系体现在某个类的方法使用另一个类的对象作为参数。

img_57ff436b0ef900bee7413a3bb9630d40.png


重数性关联

public class Eye
{

}
public class People
{
    public Eye[] eye;

    public People()
    {
        eye = new Eye[2];
    }
}

重数性关联关系又称为多重性关联关系(Multiplicity),表示一个类的对象与另一个类的对象连接的个数。在UML中多重性关系可以直接在关联直线上增加一个数字表示与之对应的另一个类的对象的个数。

1和2被称为基数 表明这一段的类可以有几个实例,同样适用于聚合关系金和合成关系,最下方为多重性表示方式表格。

img_894e8e3579b636da6d2ca36b5b87eaf8.png
表示方式 多重性说明
1..1 表示另一个类的一个对象只与一个该类对象有关系
0..* 表示另一个类的一个对象与零个或多个该类对象有关系
1..* 表示另一个类的一个对象与一个或多个该类对象有关系
0..1 表示另一个类的一个对象没有或只与一个该类对象有关系
m..n 表示另一个类的一个对象与最少m、最多n个该类对象有关系 (m<=n)

线段含义总览

img_86df34aa11520c436ddde4ff263cc3fa.png

不知道大家有没有发现其中的规律

  • 关于描述“实现”这种的”都是三角箭头,继承这种紧密的关系用的是实线,接口这种相对松散的关系用的是松散的虚线
  • 关于描述“关系”的都是用>(大于号)这种箭头,弱的聚合关系用的是空闲的三角箭头,强的组合关系用的是实心的三角箭头
相关文章
|
7月前
|
uml
UML之类图
UML之类图
102 1
|
7月前
|
数据可视化 Java uml
IDEA中一个被低估的功能,一键把项目代码绘制成UML类图
IDEA中一个被低估的功能,一键把项目代码绘制成UML类图
442 1
|
4月前
|
Java uml
使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实
该博客文章通过UML类图和Java代码示例,展示了如何使用工厂方法模式设计一个支持加法、减法、乘法和除法运算的计算机程序,并严格按照类图设计实现程序。
|
4月前
|
Java uml
1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
该博客文章展示了如何使用简单工厂模式设计一个程序,该程序能够根据用户输入的运算符(加、减、乘、除)对两个数进行计算,并提供了相应的UML类图和Java源码实现。
1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
|
6月前
|
应用服务中间件 uml
【UML】软件工程中常用图:类图、部署图、时序图、状态图
【UML】软件工程中常用图:类图、部署图、时序图、状态图
978 1
|
4月前
|
数据可视化 Java uml
精通UML:从类图到序列图的实战指南
【8月更文第23天】统一建模语言(Unified Modeling Language, UML)是一种用于软件工程的标准图形化语言,它提供了一套工具来帮助开发团队可视化、构造和文档化软件系统。在UML中,类图和序列图是最常用也是最重要的两种图。类图用于描述系统的静态结构,而序列图则用于表示对象之间的交互和系统的动态行为。
237 5
|
4月前
|
设计模式 uml
设计模式常用的UML图------类图
这篇文章介绍了UML中类图的基本概念和用途,详细解释了类与接口、类之间的关系,包括继承、实现、组合、聚合、关联和依赖等六种关系,并展示了它们在类图中的表示方法。
设计模式常用的UML图------类图
|
4月前
|
uml
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
UML 类图几种关系(依赖、关联、泛化、实现、聚合、组合)及其对应代码
651 0
|
7月前
|
数据可视化 Java uml
Java的UML类图
Java的UML类图
131 1
|
6月前
|
测试技术 uml
【UML】详解UML类图
【UML】详解UML类图
123 0