目录

  • 1 教学内容
    • 1.1 导言
    • 1.2 用例图
    • 1.3 对象图
    • 1.4 顺序图
    • 1.5 通讯图
    • 1.6 类图
    • 1.7 状态图
    • 1.8 活动图
    • 1.9 包图
    • 1.10 构件图
    • 1.11 部署图
    • 1.12 面向对象分析的uml模型
    • 1.13 面向对象设计的uml模型
  • 2 教学视频
    • 2.1 OOAD详解
    • 2.2 UML简介
    • 2.3 用例图
    • 2.4 类图1
    • 2.5 类图2
    • 2.6 类图3
    • 2.7 对象图
    • 2.8 组件图
    • 2.9 部署图
    • 2.10 时序图
    • 2.11 协作图
    • 2.12 状态图
    • 2.13 包
    • 2.14 使用UML分析十种设计模式
  • 3 软件设计师考试教程教学视频2
    • 3.1 UML建模前言
    • 3.2 UML图(用例图)
    • 3.3 UML图(类图)
    • 3.4 UML图(顺序图)
    • 3.5 UML图(活动图)
    • 3.6 UML图(状态图)
    • 3.7 UML图(通信图)
    • 3.8 UML案例分析
  • 4 实验
    • 4.1 实验一:用例图设计
    • 4.2 实验二:类图设计
    • 4.3 实验三:活动图设计
    • 4.4 实验四:顺序图设计
    • 4.5 实验五:协作图设计
    • 4.6 实验六:状态图设计
    • 4.7 实验七:物理图设计
  • 5 期末考核
    • 5.1 期末考试要求
  • 6 软件
    • 6.1 startuml
    • 6.2 rose
  • 7 课件
    • 7.1 第一章 导言
    • 7.2 第二章 用例图
    • 7.3 第三章 对象图
    • 7.4 第四章 顺序图
    • 7.5 第五章 通讯图
    • 7.6 第六章 类图
    • 7.7 第七章 状态图
    • 7.8 第八章 活动图
    • 7.9 第九章 包图
    • 7.10 第十章  构件图
    • 7.11 第十一章 部署图
类图

6.   1    基于类的系统结构建模

     通过顺序图或通信图确定了对象的行为模型后  ,现在可以根据对象和对象行为模型来建立类模型类模型是整个软件分析和开发中最为重要个环节通常,类建模有两个目是 建立模拟真实世界中的业务关系模型,即域模型( Domai n Model ) ,域模型解决是功能性需求问题; 是建立使类与类之间可能产生最大耦合关系的模型,即 设 计 模型( Des ig n M od e l ) ,设 计 模 型是在域模型的基础上解决软件的质量问题,即非功能需求问题当完成了设计模型这个环节之后,意味着软件编程即将开始无论是用于表达域模型的类图 ,还是  用于表达设计模型的类图, U ML 的类图表达方式都是完全样的

        例如,通过对顺序图 4- 20 和通信图 5-1 的分析 ,可以 根据对象的行为模型来建域模型类图,通过这个类图来描述类以及类与类之间的关系,如图6- 1 所示


6.2     类    图

      类图( C l a s s D ia g ra m ) 是 类的 模 型,是利用图示和文字注释描述类以及类和类之间相互关系的方法类图是 UML   中最重要的建模图示语言之,它用于建立类、类的内部结构(类的属性和方法)以及类与类之间的各种关系模型类图是编程最重要的模型依据

          类图是由类( C la s s 、类之间的关系( R e la t io n sh ip ) 和约束 ( C on s t r a in t ) 构 成的它的表达方式为:

 

6.3        类图的表示方法

 6.3.1          表示类

      U M L ,用 矩形框来表示类。一般将矩形框分为部分最上方为类的名字中 间 为类的属性,下 方 为类的方法                               

           6- 2 是两个类的示例

在实际应用中,只有类名是类图中唯不可缺少的部件而类的属性和方法都可以根据具体需要来决定是否表示在矩形框内

 


   如果需要,还可以向类图中增加其他栏用于表示其他预定义或者用户定义的模型特, 例如用于表示事务规则、职责、变化、信号处理和异常处理等附加分格的顶部写有分格名字,并用特殊的字体与其内容区分开,如图 6-3所示


1.   的名字 

       在 UML 类图中, 类用个矩形框表示在这个矩形框中,类的名字是不能省略,其 他 组成部分属性和方法则可以根据类图的使用目的而省略在系统分析设计阶段,可以用任何语言为类命名但是,般用英语,因为这可以直接与编程对应, 英文命名的规则是类名的首字母要大写如果类名中包括多个单词应该把每个单词 的首位字母均大写还要注意的是正体字书写的类名说明类是可被实例化的类,即 具 体 ( ConcreteClass ) 斜体字说明类为象类( AbstractClass ) 接口( Interface ) 则用构造型的方式来表例如,具 体 OrderMgt、抽象类 Storage和接口 Product 的命名如图6- 4所示

2.     类的属性

      在类的矩形框的属性区域内,U ML 用以下语法来描述类的每个属性:

    上述语法都采用了斜体字,说明   表示属性的语法的每一个部分都是可以省略的6- 5 出了 O r d e 类的类图,这里只列出了 O rd e类的名称和属性,而忽略了O rd e r 类的方法

为了方便将类图和代码对照,下 面给出图 6- 5 所对应的J ava 代码

下面结合 O rd er 类,对表达类的属性的语法做出说明

l ) 可见性

可见性( V is ib li t y ) 指根据可见性规( V i s i blit y R u le ) 个方法或属性是否能被另个方法访问例如,经 p u b l i c 修 饰 的 类、方法或属性可以被任何其他的方法或属性访问可见性规则是为了使类在使用时更安全,尤其 是 对 属性的访问控制的定义更体现了封装的概念6-1 按 照被系统其他部分可访问的范围 ,由高到低地对可见性的修饰词、描述及对应的 J ava 访问控制符给出了说明

如图 6- 5属性orderID具有公共可见性,说 明 它 可被系统中所有的类访问和使用sta  t  us  用“#“修饰表示它可被类 OrderOrder  所在的包中的其他类及可能在他包中的Order类的子类所访问;  属性 price   具 有私有的可见性,说 明 它只能被Order类自身所访问

  1. 2)   /

"示当前导出属性(Derived   A  ttribute),是类的其出的在属性前加/可以提醒实施者,当 前 这 个 属性可能并不是必需的UML范指出,导出属性是只读的( ReadOnly ) ,用 户不能更改它的值6- 6给出了导出屈性的例子

其中,导 出 属 性 amo untPaymentfloat类型的私有属性,它 记 录了订单中产品的总计应付款额,它来自于订单中预订的所有产品的单价与数量的乘积的总额,这个属性完全可以通过计算得出,是个 衍 生值故被设计成导出属性 ,用“ /表示

  1. 3) 属性名

如图 6- 5的属性 priceorderM gr  等都是属性名( Attrib  ute  Name) 属性的命名也有些原则 ,应该用首字母的名词为属性命名如 果 属性名中包括多个单词, 除 了 第 个单词外,应该把其余单词的第个字母大写

  1. 4) 属性的类型 

        用冒号分隔属性名和属性的类型例如 orderID : S tr i ng amo untP aym ent : float 

  1. 5) 多重性 

多重性Multiplicity ) 指明该属性类型有多少个实例被当前属性引用表示方法为:

不指明多重性,则 表示多重性是 1多重性也可能是个简单的整数或者是用”..“分 开的个值的范围用“* 表示多重性的上限,说 明 上限是无限的如果 仅放个“* 表示多重性,则 说 明 多 重性为 0 或多下面是多重性的表示方法和含义的例子

(l) 1 :只有

(2)0..1: 0 1  

(3)  0.. 任意多个

( 4 ) 1.. * : ] 或多个 

(5)    3. . 46: 确切数目,如 34个,或只有 6 

(6)    0. . 1, 3. . 4, 6.. *更复杂的表示方法,表 示除 2~5外的任何多个数目 

  1. 6) 默认值

 

可能注意到有的时候需要在程序中为某个特殊属性设置默认值( Defa ult ) ,例 如屈性 s ta t us 的 默认值为 N u ll 个新银行账户的余额的默认值应该为零等

  1. 7) 属性字符

属性字符( PropertyString ) 用 于说明属性具有的其性质,经 常用特殊的文本指明 ,例如 ,具 有 readOnly属性说明当前属性是只读的,用 readOnly修饰的展性在Java中将被声明为 final如果 个属性多重性大于 1,那 么它可能具有 ordered表明 当 前 属性中的元素应该被顺序存储 ,或者具有唯( Unique ) 属性,说 明 当前 属性中的元素都应该是唯,不允许 有重复值,图 6- 5中属性 productNames就属于这种 情 况所 以,在 Java程 序 中, productNames被 定 义 为 privateHashSet

< S tri ng > prod uct Na mes =new H as hSe t < Stri ng > () ; 以 保 证 prod uct Na mes 的 唯性条件

 

  1. 8) 约束 

约束( Co nt ra i n t ) 表示对属性的约束和限制通常是用“{ "括起的布尔类型的表达式更多时候可能更愿意在注释 ( No te ) 中说明属性的约束然后用虚线将其与它说明的属性连接起来 如图 6- 5 的注释 


 3    类的方法

     类的方法( Method ) 说明了类能够做什在类的矩形框的方法区域内, U ML用以下语法来描述类的每个方法

     在画类图的时候没有必要将全部的属性和方法都画出来实际上在大部分情况下也不可能在个图中将类的属性 和方法都画出来,只将感兴 趣的属性和方法画出来就可以了图 6给出了类 O r d r M a n a g e 及其方法        下面以类O r d e r M ana g e m e n t 为例 ,说明类的方法的语法及其应用

  1. 1仅供个人科研教学使用! ) 可见性

  2. 方法的可见性可分 表示 publicprotectedpackageprivate4不同的级别其含义在表 6- 1中给出了 表述

  3. 2) 方法名

  4. 类的方法名应该用首字母小写的动词如果方法名中包括多 个单词除了第单词外应该其余单词的首字母 大写

  5. 3参数列表

指明方法的数列表如果该 方法没有参数列 表可省略括号还要保留参数列表的格式为


参数列表的方向( D i r e ct io n ) 可能是 ininout o u t 或者 re t ur n 如果该关键存在 ,方向为inin 表示参数将被调用该方法的调用者传入in o u t 表示参数将被调用者传入经当前方法修改并 传回给调用者 o u t 表示参数不会被调用者设定 但是将前方法修改并传回r e t ur n 表示参数的值将被作 为返回值传给调用者

        参数名的命 名方式与属性 的命名

type数的 类型; multip licity   表 示 多 重 性;  d  efa     ult   是参 数的默 认 值properties指与参数相关特性,将在特性部分给解释在方法名及其参数表与 方法返回值类型之间用冒号分隔,各参数间用逗号分隔

         4 ) 方法的返回值

        如果方法没有返 回值,那么 ret urn - type 为空

          5  ) 特性

特性( properties) 用于说明方法具有性质附加在元素上的任何可能常用的特性包括preconditionpostconditionqueryexceptionbodyCondition precondition指明个方法被调用前系统必须处于的状态postcondition指明个方法被调用后 系统处 于的状态query说明方法将不对类的属性做修改当前方仅是个查询方法e xception指明方法可能引 起的异常bodyCondition对方法的返回值作约束在图 6- 7方法 calculateTotalCost( 包括precondition性质cart.items. countO它说明calculateTotalCost (方法在执行之前必须计算产品总数只有总数呈大于 0才可以计算总值在方法 ship ltems ( destination : Address ) 中包个前置条paymenthasbeenverifi  ed它指明为产品添信息时必须先证付费已经完

照 上面 给 出 的 语 法 说 明, 对 OrderManagement做 出细 解 OrderManagement  的名字是 OrderManagement,它个包含 5  个方法的类,这5个方法都具 有公共可见性 方法 getO rder( orderID : String) 的名字是 getOrder,它拥String类型orderID方法 addItems  拥有Product  类型item,该方法的返回值为空,VO方法 minus ltems也只包itemProduct的数组,向该数传递的值应为互不相同的 0多个系列 的数值,minusltems的返回值为,该方法执行完成之后 应有对 totalitems的检验以保证方法执行完成之后totalitems的值大于等于0,否则将有相应的机制来处理total

ite ms 0 的情况 如抛 出个异常在执行 ca lc ul a te T otalCos t 方法的时候首先应ca rt. it e ms. co un t 进行判断,只有当它的值大于 0 时候才执行cal cu la teT otalCos t 方法种判断可以使用 Ja va 语言中的 i f 语句该方法没有参数返回值类型为flo at 方法的情况 与方 法 ca lcu l a te T ota lCos t 也是首先进行判断payment 证之后才执行ship I tems 方法,该 方法具有一Addr ess  类型参数des t i natio n,如果该方法成功执行 则返回 t r ue 返回false


4    类的 静态属性和静态方法的 表述方法

       静态的属性和方法被称为静态 成员在类图中用下划线标明该属性或方法静态成员 O rd er 为了设定所有订单开具发情况的 标志Ord er 类定义了几个静态属性和方法,如图6- 8 所示

Java,用关键字static说明类成成员。它在,并且,类,同时,静orderinvoiceSatus NONE,用ava以定p r ivatestaticStringorderlnvoiceSatusNONE 'B';静getOrderlnvoiceSatusNONE


6.3.2     类的关系

     至此,对于表达个类及类的方法和属性,应 该 没有问题了但是还需要表达这些类的关系( R e la t io n s h ip ) ,因为类是通过各种关系彼此相互联系的类的关系有下面 4  

1 关联 

关联( A s s o c ia t io n ) 表示个对象拥有另个对象关联指两个类之间的 h as a的关系关联描述了有着共同的结构和语义的一组对象之间的连接

6- 9 是一个关联的简单例子,它 表示 O r d er 拥有 P ro d uc t ,而 P ro d uc t 也拥有O rd e r

注意,具有关联关系的类互为成员变量,也就是 说 ,为了表示 O r de r P ro d uc t间的关联关系,要在O rd er 类中定义P ro d uc t 类的成员变量,在 P ro d uct 类中定O rd e r 类的成员变量,用下 面的 J a va 代码表示

为了能够表现现实世界对象间的关联关系,关联需要更多的属性,下面来详细讨  论关联属性6- 10展示了 PersonCompany两个类之间的带有属性的关联关系

关联具有下面的属性

l ) 关联的方向导航

关联的方向属性表示可通过关联关系从关联类导向到目标类上可以用线来表示关联关系。果表达个类到另个类的方向可用带箭头的实线表示关联的方向,阅 读 者将沿着这个箭头来阅读关联

   如6-10所示,公司拥有雇员,则公 司和雇员关联关系用条带箭头线相连,且箭 头指向目标端反过来 ,如果关联的方与另方没有关系,在实线的尾部画个叉如果这种关联的方向是双向的,那就不需要任何箭头,直 接用直线将相互关联的类相连就可以了

6-10  的关联关系表示公司拥有雇员,这是种单向关联,在用代码实现如6-10 所示的关 联关系的时候,

P erso n 被设计为 Co mpany 类的个成员变虽

public class Person{

publ i c class Company { Per son person;} 

  1. 2) 关联名

为了方便人们的阅读关联通常有个名称这个名称应该选用个动词词组关联关系通常是在分析过程中命名的,此时还没有足够的信息对角色进行适当的命如果使用关联关系名称 关联关系名称就应该反映该关系的 目的关联关系名 称应放置在关 联关系路径上或其附近 并且用个实心 箭头表示关联名称的发生方向在图 6- 10Person类和 Company类的关联名为 works  for名称是有方向的它的方向用实心的箭头表示关联名称 是不出现在编码中的 它不能被映射 为代码

3) 关联角色

关联关系的两端为角色 ,角色规定 了类在关联关系中所起的作用

每个角色都必 须有名称而且对应 个类中所有角色的名称都必须是唯一的色名称应该是个名词 以描述在特定 的环境中关联的行 为或职责关联角色是对 个关联的特殊说明,关联角色的命名应能够表达被关联关系对象的角色与关联关系对  象之间的关系,也就是说,关联的命名应根据类在关联关系中为与它相关联的类做了  什么不是根据这个类本身 是什么。

如图 6- 10 Com p any 的合适角色名称可以是 em plo yer , Perso n的角色应该是emplo yee 避免使用“有“和“包含之类的名称因为它们不能提供有关类间关系的信息

值得注意的是,关联关系名称和角色名称的使用是互斥的:不能同时使用关联关  系名称和角色名 称角色名称通常比关联 关系名称更可取在分析阶段 因为没有 足够的信息来正确命名角色可以 选用关联名称 但在设计阶段中应始终使用 角色名称如果没有好的角色名称,可能意味着模型不完善或构建不合理。

角色名称被放置在紧邻关联关系线的末端

  1. 4) 多重性

   多重性表示个类同时拥有的实例的数目它描述的是个类的多少对象与另个类的个对象相关可用 个单的数字或个数字序列表示。多重性应放在被拥有的类的附近

        图 6-10 表示公司可以拥有多名雇员 ,而名雇员只能在个公司工作下面的Java代码可以演示这种多重性

 

 

 

5 ) 关联的类型

前面讨论的关联指两个类之间的 has  的关系,其 实现实世界中这种 has  a  关系却是可以进步再分的

例如辆汽车,它 有车轮和车篷但是车轮和车篷对于汽车来说并不是同等重要。一辆汽车可以没有车篷但是却不能没有车轮可见,关 联所表示的 h as a 关系是有强弱的根据这种强弱可以将关联关系进步细分为般 关 联、聚合和组 合个人为个公司工作这种关系可以将其表为般的关联关系,如 图 6- 10

所示

聚合( Aggregation ) 种强类型的关联,它表示 isthepartof或者 ownsa的关系个装配件类与某个部件类相关联的种关系带有多种部件的装配件应包含多个聚合

关联与聚合有什么区别呢?实际上,关联与聚合之间的区别是比较模糊的,关联   是否应该建模成聚合并不是显而易见的,何 时 使 用 聚合需要判断,没 有统的规定通常,建模需要经验的判断没有成不变的规则

我们的经验是,只 要经过了仔细的判断,并在建模过程中保持致的意见,那么 聚合和普通关联之间的区分实际上并不会产生问题

正是因为关  联与聚合之间这种模糊的区别,UML     决定包含聚合和种被称为组合的更强类型的聚合这样,UML   就包含两种类型的部分整体关系:  两个对象按照部分整体关系绑定的普通形式称为聚合,有更多限制的形式称为组

组合( Co m po s it io n)  是 某种更强形式的聚合。组合意味着整体与组成部件之间是互不可分的关系,作 为整体的类会因为拥有某个作为部分的类而存在,否整体也会消失

PPS  项目中的 产品     摩托车为例 。一辆摩托车包含的件包括机油泵(    O   il Pump汃发 动机( Engine ) 和无线电( Radio ) 其中对于摩托车来说 机油泵和发 动机是必不可少的与摩托车的关系被建模 为组合而无线电 则被建模为聚

       用实心的菱形表示组合 ,用心的菱形表示聚合 相应的类图 如图 6-11 所示

也许你现在正想 为上面所示的 摩托车与其部件的类图写程序有一点请注意 被设计成聚合关系的装配件类中应该包含部 件类的成员变在编程的时候最好在创建这个成员变的时候就为其赋初值 以防止其值 为空。被设计成组合关系的装配中也应该包含部件类的成员 变在编程的时候应强制创建这个 成员变的时候为其赋初值以防止其值更改 虽然这样的做法可能引 起今后更改不易但也应提醒程序员 注意这点

在关联关系中 还有几个方 面值得注意。

(l ) 自关联

      自关联( S e lf- as socia t io n ) 个类与其自身存在种关联关系能不能将解为该类的某个实例与其自身 存在关 联关系呢? 其实,更多的情况下 ,自关 联关系着该类的某个实例与该类的其他实例 之间存在关联关系

        举个例子说明 这个问题,如图 6-12 所示

 

在此示例中 名雇员 与其他多 名雇员存在关联关 系从图 6-12 中可以看出名雇员的角色是经理负责管理多名角色为工人 的雇员由于雇员知道他们的经理而经理也 知道他的属下 所以该关联关系能够双向导航

6-1 2 的示例与如图 6-1 3 所示示例所表达的意思 是样的

自关联关 系的 情况 下,角色名 称对于区分 关联关系的目的非常重要6-1 4 个部门的类图,这是个自关 联加多 重性的例子

它表示个部门有到多个雇 员其中名是该部门 的经理经理负责 领导其多名雇员。一个雇员只能为个部门工作

( 2 ) 关联类

考虑下 面的悄 况,如图 6-1 5 所示

假设公 司做了下面的规定: 在段时期内,你只能为家公 司工作,我们需 要为受雇于每个公司的雇员保存他的受雇时间。那么,雇佣合同中关于雇员受雇时间的属  性应该属于 Co mpa ny 类还是 P erson 类?

解决方案是创建个雇佣类 Employment ,将受雇时间的信息保存在该 类中,这样的类称为关联类( Assoc iat ion C lass) ,如图 6-1 6 所示

要将拥有属性或行为的关联关系组织为关联类,可以向关联类中添加属性、方法  和其他关联的特点。通常关联类最常见的用途是协调多到或多到多关系

除了受雇时间外 还有些信息 如薪水 、工作类型、参加工作 时间等将这些 信息存放在关联类中 要比将这些信 息安插在 Com pa ny Pe rso n 类中处理都要好

     但上面的类图看起来会给人种假象看起来好像是P ers o n 类与 E m ploym e nt类关联 ,E mp lo ym e nt 类又与 Co m pa ny 类关联

如何识别关联类呢? U M L  条从关联关系路径到类符号的虚线表示 ,其中类符号包含此关联关系的属性、方法和关联关 系,如图 6-17 所示

            P er so n 类与 Co m pa ny 类都通过关联类 E m ploym ent 相互关联属性 per iod被保存在 E m plo ym e nt 类中

,关联关系和关联类的名称应该是致的,但 是 在必要的情况下,也可以使用不同的名称。一个退化的关联类只包含关联关系的属性在这情况下 可以忽略关联类名称,以其独立性

在根据上面的类图创建 J a va 类的时候P e r so n 类 中 E m plo yme n t 类的成员变Co m pa ny 类中也将包含Em plo ym e nt 类的成员变量Pe rs on 类中将不再包含 Co m pa ny 类的成员变量,同Co m p a ny 类也不再包含 P e rs o n 类的成员变最

( 3 ) 限定关联。

考虑种情况假设两个类之间存在关联关系,但其 中  个类与另个类的分实例存在关联关系而与这个类的另部分实例不存在关联关    系这就涉及两个类发生关联关系的资格问题,称为限定关联( Qualifi edAssocia  tio  n ) 在类图中,用 限定( Qualifier ) 表 示限定关联,它 用 来选择关联联系起来的对象

限定符的表示法是在关联线靠近源类端绘制个小方框这个小方框可以放置在源类的任何这样源类 加上限定符就产生出目标类

        考虑下面的例子:公 司 规 定 ,只 有具有职员编码的员工才有定期奖金的奖励,并 不是 所有的人都与奖金有关联关系例如名兼职员工,只有具有职员编码的人才与奖 金 有 关 系如 何 反 映 这 种 情 况 呢? 可 以 为 这 个 关 联 关 系添 加 限 定 符em ployee N um ber 表示奖金与员工的关系是通过职员编码实现的,如图 6- 18 所示

    再来看个例子:银行为多个账户服务个账户只属于某个银行银行和账户关联关系的多重性为对多,如 图 6- 1 9 所示

但是,如 果 Ba nk 类中添加 acco un t N um ber 属性,应用“银 行 十账 号”的 组合,那至多会产生个账户也就是说,限定 符 对 目 标 对象进行了选择,将 有 效 的 多 重性从““降为“

这 个 限 定 关 联例子的类图如图 6- 20 所示

在设计的时候,可以将 A cco u nt 类的其他属性忽略,但 acco u nt N um ber  属性却不可忽略

(4 ) 关联上的异或约束: xo r

   具个公共类的二元关联之间可能存在异或约束把这种结构称为  xo r  关联如 图 6- 21 示。

         U M L xor 关联表示成连接两个或者多个关联的虚线,虚线上标有约束串{ xor} xor关联表明对千公共类的任何单实例 次仅可实 例化多个潜在关联中个关联即某时 刻只有个关联实例6- 21的例子表明关联类 Account中或者有一个 Company类的成员变量 或者有Person类的成员变最但不可能 同时拥有 Company类和 Person类的成员变量 或者没有 任何 Company类或Person类的成员变量。也就是说 CompanyPerson不能同时被 Account拥有xor关联也可以通过泛化的方式来表达如图 6- 22所示就是 xor关联的另种表达方式泛化。


2.  泛化

     在实际生活中 有许多事物都具 有共同的特征其实( Gen era lization ) 是人类推理中最 基本的概念从众多的个性化个体中发现们的共同点。泛是指父类与其个或多个子类之间的关系父类拥有公共属性、方法和关联子类除了具有父类的属性、方法和关 联之外还具有自己 的特征每个子类继承(I nher it ) 其父类的 特类之间存在相似性和差异性 应用泛类共享定义在个或多 个父类( P aren t Class ) 里的结构或行为。

        泛化有时被称作 is a kind of 关系来看个例子如图6- 23 所示。


       例子中展示的就是个泛化层次关系ProductStorage  PartsStorage都是Storage类中的种类型在这组类中因为它们都有组相同的属性 和方法所以 把这组属性 和方法定义在 个超类中,并把它们之间的关系定义为泛父类是 般的元素 子类 是更特殊的元素Javaextends关键字来直接表示这种关系,如:

UML中,泛关系被表示为一个带有空心角形箭头的线段人们通常喜欢把泛关系组织成棵树 ,箭头所 指的方向是父类,箭头起 始端是子类从父类到子类 的方 向 被 称 作 特 ( Specialization) , 例 如 从 StorageProductStoragePartsStorage ; 反之 ,被称为泛 ( Generalization,例如从ProductStorage  PartsStorage Storage特化指的是子类约束或特例化父类 ,泛化指的是父类泛化子类

 

3.  实现

 

在对软件系统进行逻辑设计的时候,有时软件的设计者只关心某个类或某个部件 所提供的服务的规 格说明 例如它应提供哪些方法、方法的 调用规则和格式是怎样而不关心 这些服务是如 实现的。对类的服务进行这样的说明以后可以 使设计者把思路集中在类或部件所提供的服务上,而不必拘泥千它的实现,该类或部件的实  现留待设 计的稍后时刻再考虑

UML个专门的建模元素可以用于对类或部 件所提供的服务进行描这就是接口 (Interface ) UML接口描述的是 系列的方法 这些方法为 个类或部件规定了其必须提供的服务

接口被建模 为实现( Realization) 关系。实现关系将种模型元素例如类与另种模型元素例如接 口连接起 来由 实 现关 系 指定二者 之间 的个合 同( Co n t ract ) 个模型元素定义个合同而另个模型元素保证履行该合同也就是说关系中的 个模型元素只具有行为的定义而行 为的具体实现规则是由另模型元素来 给出的

    先来下面的例子,如图 6- 24 所示

UML应用虚线加上心的箭头来表示实现关系关系中的箭头由实现接口的类指向被实 现的接口接口只是行 为的定 义而不是结构或实现接口中的属性都 是常方法都是抽象方法没有方法体 因而 接口只有与外界接触时输入、输出格式的定接口只是一个口它的里面是Java实现关 系可直接用 implements 关键字来表示

       UML2. 0  将接口简化为图6-25  表示的接口形式,称其为 lollipo  p ,它是个供接口,是类提供的对外接口,它表示类能够提供的服务,然后可以在类图的某个地方定义lollipop表示的 接口


4.依赖

 

1 ) 依赖和依赖的类型

    依赖( De p e n d e n c y ) 是两个事物间的语义关系其中个事 物称为服务的提供发生变化,会 影 响 到另个事物称为客户或服务的使用者,或向它客户提供所需信息在类与类之间应用依赖关系指明个类使用另的方法或个类使用 类所定义的属性和方法

UML 中 定 义 了 4 类 基 本 依 赖 类 型,分 别 是 :使 用 ( U sag e ) 赖、抽象( A bs tra ctio n) 依赖、授权( P ermiss ion) 依赖和绑定(B ind ing ) 依 赖

使用依赖是种非直接的依赖,它 通  常表示使用者使用服务提供者所提供的服务,实 现它的行 为可 选 择的使用依赖关键词有: us e ca ll s e nd parame te r i ns ta n t ia t e 等。

抽象依赖建模表示使用者和提供者之间的关系,它依赖千在不同抽象层次上的事    可选择的抽象依赖关键词有t r ace refi ne der iv e 等。

授权依赖表达了个事物访问另物的能力提供者可以规定使用者的权 限,这是提供者控制和限制对其内容访问的方法。可选择的授权依赖关键词有:     accessimportfriend等。

绑定依赖,用于 绑 定 模 板 以 建 新的模型元素,可选择的绑定依赖关键词主要为

bind

6-2给出了UM L 基本模型中的些依赖关系、关键词和它们的含义

2 ) 依赖的表示方法

   在图形上个依赖关系画成条有方向的虚线,箭的模型元素客户依赖于箭头处的模型元素箭头上可带有表示依赖关系类型的关键字还可以有名 6- 26所示

  1. 3 ) 依赖与关联

依赖是使用关系,它表示了个事物说明的变可能影到使用它的另事物但反之未也就是服务使用者以某方式依赖于提供者而关联是一结构关系它详述了个事物的对象与另个事物的对象相互联系

       依赖与关联最关键的区在于,存在依赖关系的两个类 A B,类 B 不 是 类 A 成员变,如图 6- 27 所示

而存在关联关系的两个类 A BA 中肯定有一个类 B 类型的成员变量,如6- 28 所示


6.  4    总    结

     前面已经提到建立类模型是整个软件分析和开发中最为重要个环节本章 层层深入、系统阐述了 U M L 类图建模方法的个基本建模元素(类、关系和约束) 的图示和语法

   在实际软件开发项目中,不需 要在建立每个 U M L 类图时都详细地描述类的所有属性、方法和关系记住类图建模是题的抽象,对 类图述的详细程度取决于所关注类的层次例如,在建立域模型(Doma i n Mode l) 时 ,关 注的 是实现需求的基本功能点是什么,以及组成这些基本功能点的基本单位是什么,所以,这时关心的是类的选择,而不是类的属性如图6-1 个典 型 的 域模 型类图但是,在建立软件的设计模型(Des ig n Mode l) 时 ,关 注的是软件的质量(Q ua lit y ) ,需 要设计每个类及类与类之间关系的细节,这时,图 6-1 就显得粗糙了,需要 建 立更为详细的类图来层层深入地描述每个类的内部结构由类的属性和方法组 成以及类之间的关系。