【UML总结】——类图

来源:互联网 发布:田螺 知乎 编辑:程序博客网 时间:2024/05/09 18:51


类图


1.类

    类即对真实世界中客观存在事物的一个抽象描述,

    就像常说的人类,人这个类;你、我都是一个对人的实例化,就是一个对象。


在实际应用中类又分为实体类、控制类、边界类。


                                                利用UML的图形绘制类


1)可见性

    用于描述类的属性和操作可见性,分为

Public(公有)用画图时“+”表示。

Protected(保护)用“#”表示。

Private(私有)用“-”表示。

Package(包内公有)用“~”表示,一般较少用

上面的图是用Rational Rose画的,表示形式稍有不同,用图画的形式表现了出来。

2)表示方法

    在UML类图中,一般由类名、属性、操作三部分组成

第一部分是类名:每个类都需要有一个名字

第二部分是属性:一个类可以没有,也可以有多个属性。

      类图中属性的表示方式(在类图中每个属性的组成部分):

      [可见性] 属性名 [一个还是多个]:[属性类型][初值][{属性字符串}]

第三部分是操作

      类图中操作的表示方式:

      [可见性] 方法名 [参数列表]:[返回类型][{属性字符串}]


2.类的关系

类图的核心

1)关联关系

    (1)普通关联关系

    一般说关联关系时,只是单单的指普通关联关系。

    关联关系是类与类之间最常用的一种关系,是一种结构化关系。

    a)双向关联

    默认情况下关联是双向的。在UML图中用一条实线连接两个类

    b)单向关联

    关联关系也可以是单向的,用带箭头的实线表示。看了前辈的博客,举例如:顾客(Customer)拥有地址(Address)则Customer类与Adress类具有单向关联关系,但是我还是没有想通。


    应用于关联的修饰

    a)名称:用以描述该关系的性质。

    b)角色:当一个类处于关联某一端时,该类就在这个关系中扮演了一个特定的角色;角色是关联中靠近它的一端类对另一端的类呈现的职责

    c)多重性:关联角色的多重性是说明一个关联实例中有多少个相互连接的对象

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


    d)关联类:两个对象之间的连接(Link)本身可以拥有自己的属性和行为,如果把连接看做是一个类的实例,则成为关联类。

    e)自身关联:系统中存在一些类的属性对象类型为该类本身,这种特殊的关联关系成为自关联。




    (2)聚合关系&组合关系

        两个关系都是描述整体和部分的关系,其实这两个关系挺好区分的,从名字上就可以直观的看出。

        聚合就是几个东西聚到了一起变成了另一个名字,就像初高中刚开学班主任常说的,大家因为缘分聚到了一起组成了我们现在的某某班。是一种松耦合关系。

        组合就是更加紧密的整体和部分的关系,存在一种依附关系。先有整体再有个体,没有整体也就没有个体。是一种紧耦合关系。

        下面是两个关系的一个比较。




2)依赖关系

    依赖关系是一种使用关系,一个事物的改变可能会影响到使用这个事物的其他事物,这时就需要依赖关系来表示两个事物之间的关系。


    大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。

    在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。

    在系统实施阶段,依赖关系通常通过三种方式来实现。
        第一种也是最常用的一种方式,将一个类的对象作为另一个类中方法的参数

        第二种方式是在一个类的方法中将另一个类的对象作为局部变量

        第三种方式是在一个类的方法中调用另一个类的静态方法。


    举个例子:驾驶员开车,在Driver类的drive()方法中将Car类型的对象car作为一个参数传递,以便在drive()方法中调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此类Driver依赖类Car。


3)泛化关系

    泛化关系就是继承关系,如果泛化这个词不好理解的话,那继承呢,从小我们就一直在唱“我们是共产主义接班人,继承了革命先辈的光荣传统。”至于继承了什么就多说无益哈。


    不过在类的继承中就不能任你这么挑剔了,不能你说只继承光荣的就继承光荣的,想继承就全拿走,不继承就什么也别碰。

    一个类继承另一个类,‘另一个类’ 拥有 ‘一个类’ 的所有属性及方法,并且可以增加新的属性及方法。


    一个类继承另一个类,‘一个类’ 叫做子类或者派生类,‘另一个类’ 叫做父类基类或者是超类。就像你是你父亲的孩子,你有你爸的基因,你就是子类,你爸就是父类,具体我也不知道为什么不叫‘母类’,我想大概有点不好听,像骂人吧。


    继承又分为单重继承多重继承

      如果上面的理解了,从名字上就能轻松的区分,单重继承就是一个子类有且只有一个父类,多重继承就是一个子类有两个或两个以上的父类。


4)实现关系

    实现关系指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系。

    这里就先引入一个接口的概念。

    接口:在接口中通常没有属性,对于操作,所有操作都是抽象的,不过只有操作的声明,没有操作的实现。


    接口之间也可以有类之间的继承和依赖关系。而接口和类之间还存在一种实现关系,在这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作。


    在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示。


比如:定义了一个交通工具接口Vehicle,包含一个抽象操作move(),在类Ship和类Car中都实现了该move()操作,不过具体的实现细节有所不同。下图中因为rose软件的问题,在图中是用实现表示的,但是在画的时候还是要用上面说的线画。


3 1