UML类图

前言

  这几天回顾了《大话设计模式》,发现看类图的时候分不清了,为了加强记忆,也方便回顾,自己手动画了一次类图,并参考了网上文章将此作为笔记,记录下来。

类图

共三层:

  1、类名,如果是抽象类为类名为斜体。

  2、特性,字段和属性

  3、操作,方法,+是公共(Publish)、-是私有(Private)、#是保护(Protected)

关系

关系有六种:

  继承(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)

继承(Generalization)

  描述:类与类的继承关系,子类带有父类的特性和操作

  图形表示:空心三角形+实线,由子类指向父类

  代码表现:继承

public class 鸟 : 动物
{
    public virtual object 羽毛
    {
        get;
        set;
    }

    public virtual void 下蛋()
    {

    }
}

实现(Realization)

  描述:类与接口的继承关系,类对接口的操作的实现

  图形表示:空心三角形+虚线,由类指向接口

  代码表现:继承

public class 大雁 : 飞翔
{
    public virtual void 下蛋()
    {

    }

    public virtual void 飞()
    {

    }

}

关联(Association)

  描述:拥有的关系,类A知道类B的属性和方法

  图形表示:箭头+实线,指向被关联的类

  代码表现:成员变量

public class 企鹅
{
    public virtual 气候 气候
    {
        get;
        set;
    }

    public virtual void 下蛋()
    {

    }
}

聚合(Aggregation)

描述:弱的拥有关系,整体和部分的关系,体现的是A对象,但B对象不是A对象的一部分,也就是B对象能脱离对象A而单独存在

图形表示:空心菱形+实线+箭头,箭头指向部分

代码表现:成员变量(数组)

public class 雁群
{
    public virtual IEnumerable<大雁> 大雁
    {
        get;
        set;
    }

    public virtual void 一行飞行()
    {

    }

    public virtual void V行飞行()
    {

    }
}

组合(Composition)

描述:强的拥有关系,体现了严格的部分和整体的关系,主要体现在部分和整体的生命周期一样。B对象是A对象的一部分,A对象不存在,B对象也不存在

图形表示:实心菱形+实线+箭头,箭头指向部分

代码表现:成员变量(构造函数里new)

public class 鸟 : 动物
{
    private IEnumerable<翅膀> 翅膀;
    public 鸟()
    {
        翅膀 = new IEnumerable<翅膀>();
    }

    public virtual object 羽毛
    {
        get;
        set;
    }

    public virtual void 下蛋()
    {

    }
}

依赖(Dependency)

描述:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖,不然会造成死循环

图形表示:虚线+箭头,箭头指向被使用者

代码表现:局部变量、方法参数或者对静态方法的调用

public abstract class 动物
{
    public virtual object 生命
    {
        get;
        set;
    }

    public virtual void 新陈代谢(水 水,氧气 氧气)
    {

    }

    public virtual void 繁殖()
    {

    }
}

附录

各种关系的强弱顺序:

        继承 = 实现 > 组合 > 聚合 > 关联 > 依赖

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏牛客网

微店2016技术岗面试题

第一部分 简答(请选择一个题目解答) 1.请写出C/C++ 语言中的相关问题。 A. 请简述C/C++ 语言中找空间和对空间的主要区别。 B. C++处理异常可...

35812
来自专栏趣谈编程

外部排序

当我们要排序的文件太大以至于内存无法一次性装下的时候,这时候我们可以使用外部排序,将数据在外部存储器和内存之间来回交换,以达到排序的目的

1500
来自专栏积累沉淀

hash算法原理详解

一.概念 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。 哈希的思路很简单,如果所有...

6805
来自专栏美团技术团队

Java8系列之重新认识HashMap

摘要 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8...

4245
来自专栏开发技术

排序之冒泡排序

  本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此;一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中...

924
来自专栏Stone的专栏

一篇文章精通 VLOOKUP 函数

相信不少人看到标题,立即嗤之以鼻,VLOOKUP 谁不会?是的,大家都会,但用的好的人不多。相信我,这篇文章一定可以算得上通俗易懂,又有深度的一篇文章,熟练掌握...

1710
来自专栏QQ音乐技术团队的专栏

Android Native 开发之 NewString 与 NewStringUtf 解析

本文将从一个 Native Crash 分析入手,带大家了解我们平时开发中,那些容易忽略但又很值得学习的底层源码知识。

1.3K9
来自专栏企鹅号快讯

Python算法分享系列-查找,排序,递归

iTesting,爱测试,爱分享 沉寂了一段时间,继续学习。 算法这个系列我想分享很久了,奈何本身对算法不是特别了解,又找不到合适的载体来分享。 最近看了本有趣...

4306
来自专栏SeanCheney的专栏

《利用Python进行数据分析·第2版》 附录A NumPy高级应用A.1 ndarray对象的内部机理A.2 高级数组操作A.3 广播A.4 ufunc高级应用A.5 结构化和记录式数组A.6 更多

在这篇附录中,我会深入NumPy库的数组计算。这会包括ndarray更内部的细节,和更高级的数组操作和算法。 这章包括了一些杂乱的章节,不需要仔细研究。 A.1...

6526
来自专栏Python小屋

Python中else关键字的常见用法

Python中的else常见用法有三:选择结构、循环结构和异常处理结构。 (1)选择结构 这应该是最常见的用法,与关键字if和elif组合来使用,用来说明条件不...

29610

扫码关注云+社区