UML学习笔记(三)__类

     类是一种对本质相同事物的抽象。

类图

       在UML中,类图显示了一组类、接口、协作以及它们之间的关系。在UML的静态机制中类图是一个重点,它不但为设计人员所关心,更为实现人员所关注,建模工具也主要依靠类图来产生代码(正向)工程。因此,类图在UML的各种图中占据了相当重要的地位。

    

     在类图中,类用矩形框来表示,它的属性和操作分别列在分格中,若不需要表达详细信息,分格可以省略。一个类可能出现在好几个图中。同一个类的属性和操作只在一种图中列出,在其他图中可省略。图1给出Flight类。

      image   图1

     类间关系

     在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需描述类之间的联系,因为类通常是需要和别的类协作。在UML类图中,关系用类框之间的连线来表示,连线上和连线端头出的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合。

继承

      继承,指的是一个类(子类)继承另外一个类(超类)的同一个功能,并增加它自己的新功能的能力。为了在一个类图上建模继承,从子类(要继承行为的类)拉出一条闭合的,单箭头(或三角形)的实线指向超类。如图2所示的银行账户类型:

CheckingAccount类和SavingsAccount类如何从BankAccount类继承而来:

    image

                                         图2

 当存在两个或更多类时,可以使用树形记号,如图3所示。

        image

                                                       图3         

关联

     当你系统建模时,特定的对象间将会彼此关联,而且这些关联本身需要被清晰地建模。有五种关联,此处讨论两种:双向的关联和单项的关联。

     双向(标准)的关联

     关联是两个类间的联接,关联总是被假定是双向的:这意味着,两个类彼此知道他们间的联系,除非你限定一些其他类型的关联。图4显示了在Flight和Plane类之间的一个标准类型的关联。

    image

       图4:在一个Flight类和Plane类之间的双向关联的实例

     一个双向关联用两个类间的实线表示。在线的任一端,你放置一个角色名和多重值。图4显示Flight与一个特定的Plane相关联,而且Flight类知道这个关联。因为角色民以Plane类表示,所以Plane承担关联中的“assignedPlane”角色。紧接于Plane类后面的多重值描述0…1表示,当一个Flight实体存在时,可以有一个或没有Plane与之关联(也就是,Plane可能还没有被分配)。图4也显示Plane知道它与Flight类的关联。在这个关联中,Flight承担“assignedFlights”角色,Plane实体可以不与Flight关联,也可以与没有上限的Flight关联。

      单向关联

      在一个单项关联中,两个类是相关的,但是只有一个类知道这种联系的存在。图5显示单向关联的透支财务报告的一个实例。

       image

                图5 单项关联的一个实例:OverdrawAccountReport类和BankAccount类,

                                               而BankAccount类则对关联一无所知。

      一个单向的关联,表示为一条带有指向已知类的开放箭头()的实线。如同标准关联,单向关联包括一个角色名和一个多重值描述,但是与标准的双向关联不同的是,单向关联只包含已知类的角色名和多重值描述。在图5例子中,OverdrawAccountReport知道BankAccount类,而且知道BankAccount类扮演“overdrawnAccounts”的角色,然而,和标准关联不同,BankAccount类并不知道它与OverdrawAccountReport相关联。

聚合

     聚合是一种特别类型的关联,用于描述“总体到局部”的关系。在基本的聚合关系中, 部分类的生命周期独立于整体类的生命周期。

      举例来说,我们可以想象,是一个整体实体,而轮胎是整辆车的一部分,轮胎可以在安置到车的前几个星期被制造,并放置在仓库中。在这个实例中,Wheel类实例清楚地独立于Car类实例而存在。然而,有些情况下,部分类和生命周期并不独立于整体类的生命周期---这称为组合。举例来说,考虑公司和部门的关系,公司和部门都建模成类,在公司存在之前,部门不能存在。这里Department类的实例就依赖于Company类的实例存在。

基本聚合

有聚合关系的关联指出,某个类是另外某个类的一部分。在一个聚合关系中,子类实例可以比父类存在更长的时间。为了表现一个聚合关系,画一条从父类到部分类的实线,并在父类的关联末端画一个为填充菱形。图6显示车与轮胎间的聚合关系。

                                image

                                           图6 聚合关联的例子

组合

子类实例的生命周期依赖于父类实例的生命周期。在图7中显示Company类和Department类之类的组合关系,这次菱形是被填充的。

                                image

                                               图7  组合关联的例子

    在图7的关系建模中,一个Company类实例至少总有一个Department类实例。因为关系是组合聚合关系,当Company实例被移除/销毁的时候,Department类也被自动地移除/销毁。组合关系的另一个重要功能是部分类只能与父类的实例相关。

聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

posted @ 2009-11-14 09:43  唐颖  阅读(195)  评论(0编辑  收藏  举报