zoukankan      html  css  js  c++  java
  • 学习笔记:UML类图

    一、何谓UML类图

      类是具有相似结构、行为和关系的一组对象的描述符。类是面向对象系统中最重要的构造块。类图显示了一组类、接口、协作以及他们之间的关系。UML是统一建模语言,是一种可视化的面向对象建模语言,是一种用来对真实世界物理进行建模的标准标记,用图形方式表现典型的面向对象系统的整个结构。它的作用域不局限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。

      UML的概念包括了UML语义(Semantics)和UML表示符(Notation)两个部分。UML语义定义了静态模型和动态模型。结构模型强调系统的对象结构,入对象的类、接口、属性和关系;行为模型关注的是系统对象的行为动作,如对象的方法、交互、协作和状态。UML表示符为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。重要内容由9种图来定义,包括用例图、类图、对象图、状态图、构件图、部署图、协作图、交互序列图、活动图。

    二、UML类图的特点

    (1)UML统一了各种方法对不同类型的系统、不同开发阶段以及不同内部概念的不同观点,从而有效地消除了各种建模语言之间不必要的差异,它实际上是一种通用的建模语言。

    (2)UML建模能力比其他面向对象建模方法更强。它不仅适合于一般系统的开发,而且对并行、分布式系统的建模尤为适宜。

    (3)UML是一种建模语言,而不是一个开发过程

    三、UML类图中的常用符号

    下图是常用来进行学习的UML类图:

     

     首先我们从最简单的类结构说起,即动物的那个矩形框

     

    表示一个类,一般的类图会分为三层,第一层表示类的名字、第二层表示类的特性(通常是字段和属性)、第三层表示类的操作 (常用的是方法和行为)

    同时我们注意到前面的符号,表示类的权限:‘+’ 表示public、‘-’表示private,‘#’表示protect

    我们可以看到,在左下角的飞翔和有一个接口图,其主要区别就是顶端有《interface》

    接口还有另一种表示方法,俗称棒棒糖表示法:

     圆圈旁边为接口名称,接口方法在实现类中出现

    而继承关系则用空心三角星+实线来表示,实现接口则用空心三角形+虚线来进行表示

    当一类需要知道另一个类的时候,则需要用关联关系来进行表示,关联关系用实现+箭头来进行标识

    class Penguin : Bird{
    private Climate climate; // 在企鹅对象中,引用到气候climate对象
    }

     

     我们再来看大雁和雁群这两个类,大雁是群居动物,每只大雁都属于一个雁群,一个雁群可以包含多只大雁,它们之间满足聚合关系

    聚合关系:表示一种弱拥有,体现的是A对象可以包含B对象,但B对象不是A对象的一部分

     

    class WideGooseAggreate{
        private WideGoose[] arrayWideGoose;//在雁群类中,有大雁数组对象
    }

    合成则表示一种强的拥有关系(Composition,也可以翻译成组合),体现了严格的部分和整体的关系,部分和整体的生命周期一样。

    鸟和翅膀就是组合关系,因为他们之间是部分和整体的关系,并且具有相同的生命周期,其用实心的菱形+实现箭头来表示,除此之外,在这条线上还有几个数字,我们称之为基数,用来表示一段的类可以具有几个实例。

     

    class Bird{
        private Wing wing;
        public Bird(){
            wing = new wing();//bird 和 wing 同时生成
        }
    }

    而动物则有几大特征,如新陈代谢等,动物需要有生命力、需要氧气、水以及食物。也就是说,动物依赖于氧气和水,他们之间是依赖关系用虚线箭头来进行标识。

    可能刚开始对UML类图并不熟悉,需要多看和理解,应该就很容易掌握。

     

    参考文章:

    https://blog.csdn.net/qq_40138785/article/details/81065979

    https://www.jianshu.com/p/57620b762160

    《大话设计模式》

  • 相关阅读:
    初探webpack4--根据模版自动生成HTML
    初探webpack4---简介与常用loader使用方法
    axios请求五种方法
    iview实现国际化
    解决vuex页面刷新导致数据丢失问题
    一步一步搞懂支持向量机——从牧场物语到SVM(下)
    一步一步搞懂支持向量机——从牧场物语到SVM(上)
    set 利用lower_bound实现key索引
    unique & lower_bound C++
    逆元
  • 原文地址:https://www.cnblogs.com/tombraider-shadow/p/15425085.html
Copyright © 2011-2022 走看看