• UML学习之类图


    UML学习--类图

      之前对UML有过系统的学习,但是一直没有以文字的形式总结下来。在接下来这几篇中,我就系统的总结一下吧!

    基本概念

      类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。

      UML类图中包含三个最基本的组件,分别是:类名,属性和方法。一个最简单的例子如下:

                       

      在这之中分三栏,第一栏是类名,在此声明了一个叫Animal的类,第二栏是属性,属性的书写规范为:可访问性(+代表public,-代表private,#代表proctected)+属性名+冒号+类型的形式。第三栏是方法,方法的书写规范与属性类似,在括号中加上方法传入的参数,参数书写方法与属性相同(去掉可访问性)。

    关系

      在类图中,类与类之间一共有几种关系,分别是泛化(Generalization),实现(Realization),关联(Association),聚合(Aggregation),组合(Composition)和依赖(Dependency)。下面我就对这几类简单的总结一下,以下的总结只代表自己的理解,若有错误请大神指正。

      泛化(Generalization)

      泛化关系,表示的就是面向对象中的继承关系。子类会继承父类的属性与方法,也可实现子类独有的属性与方法。在UML图中采用带三角箭头的实线(从子类指向父类)来表示。例:

                                          

      如图,狗是动物的一个子类,继承了动物的属性和方法,同时,狗自己还有一个eatBone的方法。

      实现(Realization)

      实现关系,表示的就是面向对象中的实现,主要指的是一个类实现了接口中的所有属性和方法。在UML图中采用带三角箭头的虚线(从子类指向父类)来表示。例:

                                          

      如图,狗是实现了动物接口的所有属性和方法。

      关联(Association)

      关联关系,就是一个类中可以使用另一个类的属性和方法,简单的说就是一个类中有另一个类的实例化的对象。关联关系中有1对1的关联,1对n的关联,n对n的关联。关联关系可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。下面举例说明:

                                

      在此例中声明Student关联Course,即在Student类中有Course类的实例化对象,可以通过实例化的对象访问Course类的属性和方法。

                                

      在此例中声明Student与Teacher互相关联,即两个类都有对方的实例化对象,可以通过此实例化对象访问对方的公有属性和方法。

      聚合(Aggregation)

      聚合关系,表示的是一种整体与部分的关系,但是部分可以脱离整体的存在而存在,比如书本和纸张,没有书本,纸张也可以单独存在。在UML图中,用空心菱形线连接两类,菱形所在方向为整体。可以说,聚合关系是一个强的关联关系。例:

                                    

      组合(Composition)

      组合关系也表达了一种整体与部分的关系,但是在组合关系中,部分不能脱离整体的存在而存在,例如大学和学院分别是两个类,但是如果没有大学,学院也没有存在的意义。在UML图中,用实心菱形线连接两类,菱形方向为整体。组合关系是一种比聚合关系还要强的惯量关系。例:

                              

      依赖(Dependency)

      依赖关系表达了一种类之间的使用关系,即一个类的实现需要另一个类的协助。例如:计算机类要实现一个buy方法,需要有Human类的对象作为参数传入才能实现。buy方法的实现就体现了类与类之间的依赖关系。依赖关系用带虚线的箭头表示。箭头所指方向为被依赖的类。例如:

                                      

      以上就是我对类图中各种关系的理解,如果其中有错误的地方还请批评指正!

  • 相关阅读:
    客户端session与服务端session
    对session和cookie的一些理解
    Servlet生命周期与工作原理
    Linux命令行编辑快捷键
    含有GROUP BY子句的查询中如何显示COUNT()为0的成果(分享)
    设计模式学习——准备(UML类图)
    find()方法
    js中的动态效果
    动态添加,移除,查找css属性的方法
    VUE中的require ( )
  • 原文地址:https://www.cnblogs.com/fanfan-blogs/p/5568680.html
Copyright © 2020-2023  润新知