一、识别类图与对象的方法

1.对象与类

1)概念与表示法

l对象:是系统中用来描述客观事物的一个实体,是具有明确语义边界的实体;作为构成系统的一个基本单位,一个对象有一组属性和对这组属性进行操作的一组服务构成。

l类:是具有相同属性、服务、关系和语义的一组对象的集合。它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。

l类与对象的关系+模版与实例;类的实例是对象。类的外延是其所产生的对象集。

类的内涵

2一般地说,类中的元素总是具有某种共同的性质的,这就是类的元素的同质性。

2一个类的所有元素所共同具有的、而且是这个类的元素所独有的性质(也就是说不是该类的元素就不具有该性质)称为该类的内涵。

2类的内涵与外延之间存在着直观的“反比关系”:类的内涵越多,其外延越小;内涵越小,其外延越大。

有一个类生成的一个对象可以扮演不同的角色。

2角色:一个类的一个角色是在特定的语境下该类的对象所呈现的行为。

2主动对象:是拥有线程或进程并能够启动控制活动的对象。是用于描述具有主动行为的事物。

2主动类:主动对象所属于的类叫做主动类。

2特征标记:服务的名称及其后的位于括号内的参数列表叫做特征标记(或基调)。

setColor(String aColor)

       类的各种表示法

wKiom1M9EF6RiWz7AANuU3hmsbE736.jpg

2)识别对象与类的方法

研究用户需求,明确系统责任

2阅读:阅读一切与用户需求有关的书面材料

2交流:澄清一点,指导需求

2调查:到现场调查

2记录、整理:产生需求文档(补充用况图)

研究问题域

2亲临现场调查,掌握第一手资料

2听取问题域专家的见解

2阅读与问题域有关的材料

2借鉴相同或类似问题域已有的系统开发经验及文档

考虑系统边界(参考者)

2参与者启发作为系统中的类的条件

管理信息

模拟行为

建立通讯

考虑系统责任

2对照系统责任所要求的每一项功能,查看是否可以由现有的对象完成这些功能。

2如果发现某些功能在现有的任何对象中都不能提供,则可启发我们发现问题域中某些遗漏的对象。

名词技术

2从名词到对象或类通常有一对一的映射。

2用单个的专有名词或代词以及直接引用的名词识别对象。

2用复数名词以及不同名词类识别类。

2可以启发分析员发现对象的因素包括:人员、组织、物品、设备、事件、表格、日志、报告、结构等。

3)审查与筛选

舍弃无用的对象

2通过属性判断:

n是否通过属性记录了妙霞有用的信息?

2通过服务判断:

n是否通过服务提供了某些有用的功能?

2二者都不是——无用

2在应用中,一个对象应该为一些其他的对象提供服务

精简对象

2只有一个属性的对象

wKioL1M9EITSbG3IAAB_Y3bzHF4597.jpg

2只有一个服务的对象

wKiom1M9EMSQwATkAAB_JBNCtpQ733.jpg

2总体上,对象必须具有多个属性和服务。也存在对象没有属性仅提供服务,或属性无服务的情况。

与实现条件有关的对象,推迟到OOD考虑

2系统责任所要求的某些功能

n例如系统安装、配置、信息备份、浏览——可能无法从问题域中找到相应的对象来提供这些功能,可在设计阶段考虑专门为它们增加一些对象,既把它们推迟到设计阶段考虑。

2系统责任要求的某些功能可能与实现环境有关,也推迟到设计阶段考虑。

n与图形用户界面(GUI)系统、数据管理系统、硬件和操作系统有关的对象。

4)识别主动对象

考虑问题域和系统责任

2哪些对象需呈现主动行为?--按定义

从需求考虑系统的执行情况

2如果一切对象服务都是顺序执行的,那么首先执行的服务在哪个对象(唯一)?

2如果需要并发执行,每条控制线程的起点在哪个对象?这样的对象都是主动对象。

考虑系统边界

2哪些对象与参与者交互?

n如果一个交互是由参与者发起的,

n第一个处理该交互的对象是主动对象

5)类的命名

适合该类及其特殊类的全部对象实例

2汽车加摩托->机动车;还有马车->车辆

反映个体而不是群体

2-书籍;船-船舶

使用名词,避免无意义的符号

使用问题域通用、规范的词汇

在中国:可用中、英文双重命名

6)建立类图的对象层

用类符号表示每个对象类

填写类描述模板

若发现新的属性与服务、关系,可以随时加到类符号中。

二、识别属性和操作的方法

1)概念与表示法

实例属性:是类的一个已命名的性质,它描述该性质的一个实例可以取的值的范围。

2抽象为属性的性质是与问题域相关的

2从技术观点上,从技术观点上,属性是一些变量(数据项或状态信息),包含它的每一个对象(实例)都具有自己的值。

2按照面向对象方法的封装原则,一个对象的属性和服务是紧密结合的,对象的属性只能由这个对象的服务存取。

类属性:是描述类的所有对象共同特征的一个数据项,对于任何对象实例,它的属性值都是相同的。

2)属性的特征

ShlaerMellor(1992)提出,Richard C.Lee增补

特征0:属性必须捕获与其对象所在的语义域相一致的特征。

特征1:任何时间一个实例为其每一个属性都精确地给出一个值。

特征2:不能包含内部的结构。

人的姓+

         特征3:属性必须是整个实体的特征。

             计算机的屏幕尺寸?显示器的屏幕尺寸

特征4:对象的属性必须与该对象相关。

油罐油瓶的容器中的容积属性

特征5:对象的属性值不能是与其有关的对象的值以其关系的值。

人的薪水结婚日期

2.识别服务

1)概念与表示法

操作:是类的行为特征,用于描述为了引发相关行为的名称、类型、参数与约束。

2有名字和参数表; 有可见性和返回类型。

2可见性的取值为+(公有的)#(受保护的)-(私有的)~(包内的)

2可见性、参数表和返回类型可在类描述模板中描述。

2抽象操作:把在一个类中没有实现的操作(即没有提供方法)。

服务:一个类为其他类所做的工作。一个对象的服务是当其他对象借助消息传递机制请求它时,它愿意执行的所公布的或公开的工作。

方法:是操作的实现。当一个对象请求另一个对象的服务时对象完成的详细的动作集合(算法、过程)。

对象行为分类

系统行为

例:创建、删除、复制、转存

对象自身的行为——算法简单的服务

例:读、写属性值

对象自身的行为——算法复杂的服务

计算或监控

           表示法:

类范围的操作用带下划线的名字和类型表达式串表示。实例范围的操作是默认的,对其不用标记。

抽象操作带有标记“{abstract}”,或者把操作的特征标记写成斜体来表示它是抽象的。

wKiom1M9EPXjq8tTAAEorXEMRy8301.jpg

2)识别服务

OOA不考虑算法简单服务

去创建、连接、访问、断开连接、删除等等。

考虑算法复杂的服务

由对象提供的、在算法上复杂的业务服务(如要进行某些计算或监控操作)

3)审查与调整

审查对象的每个服务

是否真正有用

是否直接提供系统责任所要求的某项功能?

或者

响应其它服务的请求间接地完成这种功能的某些局部操作?

调整——取消无用的服务

是不是高内聚的

一个服务只完成一项单一的、完整的功能

调整——拆分或合并

4)认识对象的主动行为

2考虑问题域对象行为是被引发的,还是主动呈现的?

2与参与者交互的对象服务

2完成最外层功能的对象服务外层与内层是请求与被请求的关系

2服务执行路线逆向追踪找到了主动服务就等于找到了主动对象。

5)服务的命名和定位

命名:动词或动宾结构; 外向性

定位:

与实际事物一致

例:售货员——售货,商品——售出

在泛化中的位置

  ——适合类的全部对象实例

6)描述服务

把每个对象的服务都填写到相应的类符号中。

2在类描述模板中,写出:

2说明服务的职责

2服务原型(消息的格式)

2消息发送(指出在这个服务执行时,需要请求哪些别的对象服务,即接收消息的对象类名以及执行这个消息的服务名)

2约束条件:如果该服务的执行有前置条件、后置条件,以及执行时间的要求等其它需要说明的事项,则在这里加以说明。

2实现服务的方法(文字、活动图或流程图)。

三、识别关系——泛化关系

1.定义:

2如果类A具有类B的全部属性和全部操作,而且还具有自己特有的一些属性或操作,则ABB的特殊类,B叫做A的一般类,AB之间的关系成为泛化关系。

2如果类A的全部对象都是类B的对象,且类B中存在不属于类A的对象,则AB的特殊类,BA的一般类,AB之间的关系成为泛化关系。

wKiom1M9ESrTkEVVAAFI0y07WsU209.jpg

2.性质:

后代将具有祖先的所有的关联。

wKiom1M9EWTTkUq8AABh6Y8HxsI859.jpg

a)反对称性

如果对象A是对象B的后代,那么B将不会与A有“是一个”关系(对象B不是对象A的后代)。例如,Employee是一个Person,但并不是所有人都是雇员。

b)传递性

如果对象A“是一个”对象B,对象B“是一个”对象C,那么对象A“是一个”对象C

OOA模型中建立泛化,是为了使系统模型更清晰地映射问题域中事物的分类关系。它把具有泛化关系的类组织在一起,可以简化我们对复杂系统的认识,从而增加了软件的可维护性和适应变化的灵活性。

3.基本表示法

wKiom1M9EYriz4-OAACQCZGf6GY227.jpg

4.泛化集(GeneralizationSet

用来定义泛化关系中子集的集合。

wKiom1M9EdGzqO31AAITavyTFMU248.jpg

       泛化集的约束

2{complete,disjoint}

表明泛化集是覆盖的,并且某些特殊类没有共同的实例

2{incomplete,disjoint}

表明泛化集不是覆盖的,并且某些特殊类没有共同实例

2{complete,overlapping}

表明泛化集是覆盖的,并且某些特殊类具有共同的实例

2{incomplete,overlapping}

表明泛化集不是覆盖的,并且某些特殊类具有共同实例

2默认{incomplete,disjoint}

举例:

wKiom1M9EfPQC2MnAAEdee2UgMk814.jpg

四、泛化关系的识别策略

1)学习当前领域的分类学知识

2)按常识考虑事物的分类

3)利用泛化的定义

两个类

集合包含

特征包含

4)看两个类的对象之间是否有“是一个”关系

Is A 关系表

考察A是一个B,B是一个A?

若都是——同义

若都从来不是——没有泛化关系

  A总是B,B有时是A,A是一个B

5)考察类的属性与服务

wKioL1M9EfCCD-WnAABYTEAKZ5I636.jpgwKiom1M9EibDqGp6AABi-i90wOQ733.jpg

6)考虑领域范围内的复用

wKioL1M9Eh-SLjnGAADmdG8b0fE986.jpg

审查与调整

问题域与系统责任是否需要这样的分类?

(例:书—善本书(内容有用,流传稀少,校刻精良,具有文物、学术或艺术价值之本

是否符合分类学的常识?

是否构成了继承关系?(确实继承了一些属性或服务)

一般-特殊结构的简化

1)取消没有特殊性的特殊类

从一般类划分出太多的特殊类,使系统中类的设置太多,增加了系统的复杂性;

建立过深的继承层次,增加了系统的理解难度和处理开销。

wKiom1M9El_xNWLQAACfkea3dOk900.jpg

2)增加属性简化一般-特殊结构

wKioL1M9ElPSFd3PAACKlkqFcNY223.jpg

       (3)取消用途单一的一般类,减少继承层次

一般类存在的理由

有两个或两个上以上的特殊类

需要用它创建对象实例

有助于软件复用

wKioL1M9EnWD3eIJAADJXAOBIuQ791.jpg

       调整对象层和特征层

           定义泛化的活动,将使分析员对系统中的对象类及其特征有更深入的认识。在很多情况下,随着泛化的建立,需要对类图的对象层和特征层作某些修改,包括增加、删除、合并或分开某些类,以及增、删某些属性与服务或把它们移到其它类。

五、关联关系的分类与识别策略

1.概念与表示法

2关联

n关联描述了引用类的实例的元组的集合。

n两个类之间可以存在多个关联

2

n链是对象引用的元组。在最常见的情况下,它是一对对象引用。它是关联的一个实例。

例:

wKiom1M9ErmyFuujAAB5pj3tzJk665.jpg

2.多重性

2多重性是非负整数集的一个子集。

2另一端上的多重性是指,对于本端的一个对象,需要另一端对象的个数。

2其中的下限和上限都是文字整型值,说明从下限到上限的整数闭区间。此外星号(*)可以用于上限,表明不限制上限。

2如果多重性规约由单个的(*)构成,那么它就表明了无穷的非负正整数的范围,也即它等价于0..*

wKioL1M9EqOgeZUiAACX679SMuo876.jpg

wKiom1M9EuOzdF5yAAFl1-EkWG4504.jpg

3.角色

2在关联的每一个端点上有一个角色。每一个角色具有一个角色名,用来描述其类被其他的类看作是什么。

2当需要强调一个类在一个关联的确切含义时,使用关联角色名。

2如果使用角色名,就可以省略关联名。

2角色名也决定了其类的多重性;就是说,该类与其他类的一个实例相关联的实例的数量。

例:

wKioL1M9EtqAPt5SAABgUUllSnU986.jpg

4.导航性

2导航性限制了关联上的访问方向

2双向的导航不必画箭头

wKioL1M9EvHgNcu5AACAn2RMaBk658.jpg

UML2.0中对导航性的表示

wKiom1M9EzPy1vyvAAB_jws-1qs160.jpg

5.关联的类型

2关联类

n具有关联和类的特征的建模元素。关联类既可以被看作是具有类的性质的关联,也可以被看作为具有关联性质的类。

n把关联类表示成一个用虚线连接到关联路径的类符号。

n关联和关联类符号表示同模型元素,它们的名字相同。名字可以放置在关联上或类符号中(但它们的名字必须相同)。

n如果一个类的一个属性可以同时有多个值,就考虑使用关联类。

例如,一个人的薪水。

wKioL1M9EyKREnGHAACDDWSPipE490.jpg

   关联类到二元关联的转换

wKiom1M9E7LT3pl1AAA8YjV_q90618.jpg

2限定关联(Qualifier

二元关联的属性或者属性列表,在此关联中,属性的值从整个对象集合里选择一个唯一的关联对象或者关联对象集.

wKioL1M9E6KSia14AACVP-T7sHY235.jpg

限定关联(Qualifier

n限定符可以是目标类的一个属性

n但通常是关联的属性

n该属性的值限定了关联

2异或关联

wKiom1M9E9_ykKCqAABLQT-IRz8843.jpg


2有序关联

wKioL1M9E82S9CnZAAA7pq_CtCA801.jpg

2多元关联

2聚合

   建立关联的策略

 2认识对象之间的静态联系

n考虑问题域和系统责任——哪些类的对象实例之间的关系需要在系统中表达。

u物理位置或亲密度

u包含

u通信

u享受服务

u存储信息

 2认识关联的属性与操作

n对于考虑中的每一种关联,进一步分析它是否应该带有某些属性和操作。就是说,是否含有一些仅凭一个简单的关联不能充分表达的信息。

 2分析并表示实例连接的多重性

n从连接线的每一端,看本端的一个对象可能与另一端的几个对象发生连接,把结果标注到连接线的另一端。

 2对多对多的关联的处理

   多对多关联的问题

 2用面向对象语言实现为两个数组指针

 2用关系数据库实现为多对多的表

n多对多的表的信息是冗余的

n两个多对多关系转化为不符合第四范式的表

   降低多对多关联的多重性

 2限定关联

n用面向对象语言实现为带有参数的筛选函数

n用关系数据库实现为先筛选后连接

 2引入新的中间类

n切断多对多类

n从问题域中寻找新的中间类,它与双方都构成1对多关系

n若问题域中找不到相应的类,可构想一个

wKioL1M9E-mz3oMbAACPEuDkKp4129.jpg

wKiom1M9FDPC3SFNAAB4nROGGa0432.jpg

六、分析模式简介

   通用分析模式

  Accountability责任(party OrganizationHierarchies Organization structure …)

  Observation and Measurements观察与测量

  Rederring to Objects对象的引用

   领域分析模式

财务领域

规划

商业

    …


       分析模式Party

wKioL1M9FCrz6_--AADf5hnVseo273.jpg

       分析模式Organization Hierarchies(组织层次)

wKioL1M9FE_iLXcDAADpZkuWsSo060.jpg

       分析模式Organization structure(组织结构)

wKioL1M9FG7zxyovAADJCRKHqNw471.jpg

七、聚合与组合关系

1.概念与表示法

2聚合(aggregation)是关联的一种特殊形式,表示整体和部分之间的“整体-部分”关系。

2聚集(aggregate)是聚合关系中作为“整体”的类,而把作为“部分”的类称为成分或部分。

2类与类之间的聚合关系指的是,一个类的对象实例,以另一个类的对象实例作为其组成部分,是种“a part of”或“has a”;也可理解为,一个类定义引用另一个类定义。

2组合(Composition)是聚合的一种形式,其中,其部分和整体之间具有很强的“属于”关系,并且它们的生存期是一致的。这种聚集末端的多重性不能超过1

2组合对象是组合类的实例。

表示法:

wKiom1M9FLSxnYcfAAB9FsrCAJQ025.jpg

       性质

2结构性质

部分必须与它们所构建的整体有某些结构上或功能上的关系。

2数学性质

                     a.反对称性

如果对象A是对象B的一部分,那么对象B就不能是对象A的一部分。

                     b.传递性

如果对象A是对象B的一部分,对象B是对象C的一部分,那么对象A是对象C的一部分。

       分类

整体部分关系的性质

构造性:整体部分之间存是否存在功能或结构上的关系

同质性:整体部分之间的类型是否相同

不变性:整体部分之间的是否不可分离性

       根据性质的不同可将整体部分关系分为以下几类:

wKioL1M9FKKSleCSAAI9Ut1icj8884.jpg

       识别策略

2物理上的整体事物和它的组成部分

例:机器、设备和它的零部件

2组织机构和它的下级组织及部门

例:公司与子公司、部门

2团体(组织)与成员

例:公司与职员

2一种事物在空间上包容其它事物

例:生产车间与机器

2抽象事物的整体与部分

例:学科与分支学科、法律与法律条款

2具体事物和它的某个抽象方面

例:人员与身份、履历

2在材料上的组成关系

例如,面包由面粉、糖和酵母组成,汽车是由钢、塑料和玻璃组成。

       审查与筛选

2是否属于问题域或系统责任?

例:公司职员与家庭

2部分对象是否有一个以上的属性?

例:汽车与轮胎(规格)

2是否有明显的整体-部分关系?

例:学生与课程,谁是整体?部分?

八、依赖与实现关系

   一个依赖规约了两个或多个模型元素(或两个模型元素集合)之间的一种语义关系,对目标元素的改变可能需要改变该依赖中的源元素。

下面种类的依赖是预定义的:

            access--访问;derive --派生;import --移入;refine--精化

            trace--跟踪;use--使用

            include–包含; extend—扩展

           表示法:

       把依赖表示为两个模型元素之间的虚线箭头。在箭头尾部的模型元素(客户)依赖箭头头部的模型元素(提供者)。箭头可以用放在书名号内的字符串标识。

可能会有一组元素作为客户或提供者。在这种情况下,一个或多个尾部在客户端的箭头被连接到头部在提供者端的一个或多个箭头的尾部。如果需要,可以在连接处放置小的圆点。依赖的注释应该依附在连接点上。用没有箭头的虚线表示注释或约束与它应用到的元素之间的连接。这不是依赖。

wKiom1M9FOSSvUgYAAA9NT8qOtg138.jpg

           不同类型的依赖

wKioL1M9FNGCXJHXAACs3KNmedQ705.jpg