面向对象技术之系统分析:类图
一、识别类图与对象的方法
目前创新互联公司已为数千家的企业提供了网站建设、域名、虚拟空间、网站托管、企业网站设计、珠山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
1.对象与类
1)概念与表示法
l对象:是系统中用来描述客观事物的一个实体,是具有明确语义边界的实体;作为构成系统的一个基本单位,一个对象有一组属性和对这组属性进行操作的一组服务构成。
l类:是具有相同属性、服务、关系和语义的一组对象的集合。它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。
l类与对象的关系+模版与实例;类的实例是对象。类的外延是其所产生的对象集。
类的内涵
2一般地说,类中的元素总是具有某种共同的性质的,这就是类的元素的同质性。
2一个类的所有元素所共同具有的、而且是这个类的元素所独有的性质(也就是说不是该类的元素就不具有该性质)称为该类的内涵。
2类的内涵与外延之间存在着直观的“反比关系”:类的内涵越多,其外延越小;内涵越小,其外延越大。
有一个类生成的一个对象可以扮演不同的角色。
2角色:一个类的一个角色是在特定的语境下该类的对象所呈现的行为。
2主动对象:是拥有线程或进程并能够启动控制活动的对象。是用于描述具有主动行为的事物。
2主动类:主动对象所属于的类叫做主动类。
2特征标记:服务的名称及其后的位于括号内的参数列表叫做特征标记(或基调)。
setColor(String aColor)
类的各种表示法
2)识别对象与类的方法
研究用户需求,明确系统责任
2阅读:阅读一切与用户需求有关的书面材料
2交流:澄清一点,指导需求
2调查:到现场调查
2记录、整理:产生需求文档(补充用况图)
研究问题域
2亲临现场调查,掌握第一手资料
2听取问题域专家的见解
2阅读与问题域有关的材料
2借鉴相同或类似问题域已有的系统开发经验及文档
考虑系统边界(参考者)
2参与者启发作为系统中的类的条件
管理信息
模拟行为
建立通讯
考虑系统责任
2对照系统责任所要求的每一项功能,查看是否可以由现有的对象完成这些功能。
2如果发现某些功能在现有的任何对象中都不能提供,则可启发我们发现问题域中某些遗漏的对象。
名词技术
2从名词到对象或类通常有一对一的映射。
2用单个的专有名词或代词以及直接引用的名词识别对象。
2用复数名词以及不同名词类识别类。
2可以启发分析员发现对象的因素包括:人员、组织、物品、设备、事件、表格、日志、报告、结构等。
3)审查与筛选
舍弃无用的对象
2通过属性判断:
n是否通过属性记录了妙霞有用的信息?
2通过服务判断:
n是否通过服务提供了某些有用的功能?
2二者都不是——无用
2在应用中,一个对象应该为一些其他的对象提供服务
精简对象
2只有一个属性的对象
2只有一个服务的对象
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}”,或者把操作的特征标记写成斜体来表示它是抽象的。
2)识别服务
– OOA不考虑算法简单服务
去创建、连接、访问、断开连接、删除等等。
–考虑算法复杂的服务
由对象提供的、在算法上复杂的业务服务(如要进行某些计算或监控操作)
3)审查与调整
–审查对象的每个服务
是否真正有用
是否直接提供系统责任所要求的某项功能?
或者
响应其它服务的请求间接地完成这种功能的某些局部操作?
调整——取消无用的服务
是不是高内聚的
一个服务只完成一项单一的、完整的功能
调整——拆分或合并
4)认识对象的主动行为
2考虑问题域对象行为是被引发的,还是主动呈现的?
2与参与者交互的对象服务
2完成最外层功能的对象服务外层与内层是请求与被请求的关系
2服务执行路线逆向追踪找到了主动服务就等于找到了主动对象。
5)服务的命名和定位
命名:动词或动宾结构; 外向性
定位:
与实际事物一致
例:售货员——售货,商品——售出
在泛化中的位置
——适合类的全部对象实例
6)描述服务
把每个对象的服务都填写到相应的类符号中。
2在类描述模板中,写出:
2说明服务的职责
2服务原型(消息的格式)
2消息发送(指出在这个服务执行时,需要请求哪些别的对象服务,即接收消息的对象类名以及执行这个消息的服务名)
2约束条件:如果该服务的执行有前置条件、后置条件,以及执行时间的要求等其它需要说明的事项,则在这里加以说明。
2实现服务的方法(文字、活动图或流程图)。
三、识别关系——泛化关系
1.定义:
2如果类A具有类B的全部属性和全部操作,而且还具有自己特有的一些属性或操作,则A叫B的B的特殊类,B叫做A的一般类,A与B之间的关系成为泛化关系。
2如果类A的全部对象都是类B的对象,且类B中存在不属于类A的对象,则A是B的特殊类,B是A的一般类,A与B之间的关系成为泛化关系。
2.性质:
后代将具有祖先的所有的关联。
a)反对称性
如果对象A是对象B的后代,那么B将不会与A有“是一个”关系(对象B不是对象A的后代)。例如,Employee是一个Person,但并不是所有人都是雇员。
b)传递性
如果对象A“是一个”对象B,对象B“是一个”对象C,那么对象A“是一个”对象C。
在OOA模型中建立泛化,是为了使系统模型更清晰地映射问题域中事物的分类关系。它把具有泛化关系的类组织在一起,可以简化我们对复杂系统的认识,从而增加了软件的可维护性和适应变化的灵活性。
3.基本表示法
4.泛化集(GeneralizationSet)
用来定义泛化关系中子集的集合。
泛化集的约束
2{complete,disjoint}
表明泛化集是覆盖的,并且某些特殊类没有共同的实例
2{incomplete,disjoint}
表明泛化集不是覆盖的,并且某些特殊类没有共同实例
2{complete,overlapping}
表明泛化集是覆盖的,并且某些特殊类具有共同的实例
2{incomplete,overlapping}
表明泛化集不是覆盖的,并且某些特殊类具有共同实例
2默认{incomplete,disjoint}
举例:
四、泛化关系的识别策略
1)学习当前领域的分类学知识
2)按常识考虑事物的分类
3)利用泛化的定义
两个类
集合包含
特征包含
4)看两个类的对象之间是否有“是一个”关系
Is A 关系表
考察A是一个B,B是一个A?
若都是——同义
若都从来不是——没有泛化关系
A总是B,B有时是A,则A是一个B
5)考察类的属性与服务
6)考虑领域范围内的复用
审查与调整
问题域与系统责任是否需要这样的分类?
(例:书—善本书(内容有用,流传稀少,校刻精良,具有文物、学术或艺术价值之本)
是否符合分类学的常识?
是否构成了继承关系?(确实继承了一些属性或服务)
一般-特殊结构的简化
(1)取消没有特殊性的特殊类
从一般类划分出太多的特殊类,使系统中类的设置太多,增加了系统的复杂性;
建立过深的继承层次,增加了系统的理解难度和处理开销。
(2)增加属性简化一般-特殊结构
(3)取消用途单一的一般类,减少继承层次
一般类存在的理由
有两个或两个上以上的特殊类
需要用它创建对象实例
有助于软件复用
调整对象层和特征层
定义泛化的活动,将使分析员对系统中的对象类及其特征有更深入的认识。在很多情况下,随着泛化的建立,需要对类图的对象层和特征层作某些修改,包括增加、删除、合并或分开某些类,以及增、删某些属性与服务或把它们移到其它类。
五、关联关系的分类与识别策略
1.概念与表示法
2关联
n关联描述了引用类的实例的元组的集合。
n两个类之间可以存在多个关联
2链
n链是对象引用的元组。在最常见的情况下,它是一对对象引用。它是关联的一个实例。
例:
2.多重性
2多重性是非负整数集的一个子集。
2另一端上的多重性是指,对于本端的一个对象,需要另一端对象的个数。
2其中的下限和上限都是文字整型值,说明从下限到上限的整数闭区间。此外星号(*)可以用于上限,表明不限制上限。
2如果多重性规约由单个的(*)构成,那么它就表明了无穷的非负正整数的范围,也即它等价于0..*。
3.角色
2在关联的每一个端点上有一个角色。每一个角色具有一个角色名,用来描述其类被其他的类看作是什么。
2当需要强调一个类在一个关联的确切含义时,使用关联角色名。
2如果使用角色名,就可以省略关联名。
2角色名也决定了其类的多重性;就是说,该类与其他类的一个实例相关联的实例的数量。
例:
4.导航性
2导航性限制了关联上的访问方向
2双向的导航不必画箭头
UML2.0中对导航性的表示
5.关联的类型
2关联类
n具有关联和类的特征的建模元素。关联类既可以被看作是具有类的性质的关联,也可以被看作为具有关联性质的类。
n把关联类表示成一个用虚线连接到关联路径的类符号。
n关联和关联类符号表示同模型元素,它们的名字相同。名字可以放置在关联上或类符号中(但它们的名字必须相同)。
n如果一个类的一个属性可以同时有多个值,就考虑使用关联类。
例如,一个人的薪水。
关联类到二元关联的转换
2限定关联(Qualifier)
二元关联的属性或者属性列表,在此关联中,属性的值从整个对象集合里选择一个唯一的关联对象或者关联对象集.
限定关联(Qualifier)
n限定符可以是目标类的一个属性
n但通常是关联的属性
n该属性的值限定了关联
2异或关联
2有序关联
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若问题域中找不到相应的类,可构想一个
六、分析模式简介
通用分析模式
Accountability责任(party OrganizationHierarchies Organization structure …)
Observation and Measurements观察与测量
Rederring to Objects对象的引用
领域分析模式
财务领域
规划
商业
…
分析模式Party
分析模式Organization Hierarchies(组织层次)
分析模式Organization structure(组织结构)
七、聚合与组合关系
1.概念与表示法
2聚合(aggregation)是关联的一种特殊形式,表示整体和部分之间的“整体-部分”关系。
2聚集(aggregate)是聚合关系中作为“整体”的类,而把作为“部分”的类称为成分或部分。
2类与类之间的聚合关系指的是,一个类的对象实例,以另一个类的对象实例作为其组成部分,是种“a part of”或“has a”;也可理解为,一个类定义引用另一个类定义。
2组合(Composition)是聚合的一种形式,其中,其部分和整体之间具有很强的“属于”关系,并且它们的生存期是一致的。这种聚集末端的多重性不能超过1。
2组合对象是组合类的实例。
表示法:
性质
2结构性质
部分必须与它们所构建的整体有某些结构上或功能上的关系。
2数学性质
a.反对称性
如果对象A是对象B的一部分,那么对象B就不能是对象A的一部分。
b.传递性
如果对象A是对象B的一部分,对象B是对象C的一部分,那么对象A是对象C的一部分。
分类
整体部分关系的性质
构造性:整体部分之间存是否存在功能或结构上的关系
同质性:整体部分之间的类型是否相同
不变性:整体部分之间的是否不可分离性
根据性质的不同可将整体部分关系分为以下几类:
识别策略
2物理上的整体事物和它的组成部分
例:机器、设备和它的零部件
2组织机构和它的下级组织及部门
例:公司与子公司、部门
2团体(组织)与成员
例:公司与职员
2一种事物在空间上包容其它事物
例:生产车间与机器
2抽象事物的整体与部分
例:学科与分支学科、法律与法律条款
2具体事物和它的某个抽象方面
例:人员与身份、履历
2在材料上的组成关系
例如,面包由面粉、糖和酵母组成,汽车是由钢、塑料和玻璃组成。
审查与筛选
2是否属于问题域或系统责任?
例:公司职员与家庭
2部分对象是否有一个以上的属性?
例:汽车与轮胎(规格)
2是否有明显的整体-部分关系?
例:学生与课程,谁是整体?部分?
八、依赖与实现关系
一个依赖规约了两个或多个模型元素(或两个模型元素集合)之间的一种语义关系,对目标元素的改变可能需要改变该依赖中的源元素。
下面种类的依赖是预定义的:
access--访问;derive --派生;import --移入;refine--精化
trace--跟踪;use--使用
include–包含; extend—扩展
表示法:
把依赖表示为两个模型元素之间的虚线箭头。在箭头尾部的模型元素(客户)依赖箭头头部的模型元素(提供者)。箭头可以用放在书名号内的字符串标识。
可能会有一组元素作为客户或提供者。在这种情况下,一个或多个尾部在客户端的箭头被连接到头部在提供者端的一个或多个箭头的尾部。如果需要,可以在连接处放置小的圆点。依赖的注释应该依附在连接点上。用没有箭头的虚线表示注释或约束与它应用到的元素之间的连接。这不是依赖。
不同类型的依赖
新闻标题:面向对象技术之系统分析:类图
本文来源:http://hbruida.cn/article/pohppd.html