当前位置:文档之家› OO2分析3-类图

OO2分析3-类图


在尚未确定是不是主动对象之前,暂时用普通对象的类符号表示。
2019/9/19
15
类的命名
适合该类及其特殊类的全部对象实例*
汽车加摩托车->机动车;还有马车->车辆
反映个体而不是群体*
书-书籍;船-船舶*
使用名词,或带有定语的名词 ,避免无意义的符号
如线装书
考虑使用适当种类的语言文字对类命名。
它代表属于该类的全部对象实例。
类名 属性 操作
对象名:类名
普通类
对象
识别对象与类
在识别对象与类时,问题域和系统责任仍是 工作的基础。因为二者从不同的角度告诉分 析员应该设立哪些对象。
研究问题域
侧重于客观存在的事物与系统中对象的映射。 可以启发分析员发现对象的因素包括:人员、组 织机构、物品、设备、事件(如索赔、上访、交易) 、表格、日志、报告和结构等。 其中的结构可能是多种多样的,例如,在概念类 别上,汽车之上有车辆,之下可细分为客车和轿车, 左右有摩托车和拖拉机,之内有发动机。它还可作成 车队的一个成分。
人员
设备
外系统
从不同的角 度考虑人员 和设备
考虑系统责任
对照系统责任所要求的每一项功能,查看是否可以由现有的对 象完成这些功能。这可启发我们发现问题域中某些遗漏的对象。
如果已经建立了用况模型,考虑执行下列的附加步骤: ■ 使用用例产生场景。 ■ 使用场景寻找已错过的类。
名词技术
从名词到对象或类通常有一对一的映射。运用名词、代词和名
划线的方式,表示类范围的属性,否则属性 是实例范围的。
属性1 ······ 属性n
操作1 ······ 操作m
普通类
识别属性
按常识这个对象应该有哪些属性? 在当前的问题域中,对象应该有哪些属性? 根据系统责任,这个对象应具有哪些属性*?
如信用卡的使用 建立这个对象是为了保存和管理哪些信息? 对象为了完成其功能,需要增设哪些属性? 对象是否需要通过专设的属性区别其状态*?
在中国:可用中、英文双重命名*
建立类图的对象层
用类符号表示每个对象类 填写类描述模板 若发现新的属性与操作、关系,可以随时加到类符号中。
第四章 建立基本模型—类图
2 定义属性与操作
2019/9/19
17
17
定义属性
属性是用来描述对象静态特征的一个数据项 。 注意:属性是与问题高度相关的。 从技术观点上,属性是一些变量(数据项或状态信息), 包含它的每一个对象(实例)都具有自己的值。 按照面向对象方法的封装原则,一个对象的属性和操作是 紧密结合的,对象的属性只能由这个对象的操作存取。
在类描述模板中,写出:
说明操作的职责
操作原型(消息的格式)
消息发送(指出在这个操作执行时,需要请求哪些别的 对象操作,即接收消息的对象类名以及执行这个消息的 操作名)
约束条件:如果该操作的执行有前置条件、后置条件, 以及执行时间的要求等其它需要说明的事项,则在这里 加以说明。
实现操作的方法(文字、活动图或流程图)。
类是对一组具有相同属性和操作的一组对象的抽象描述。 一个类的所有对象具有相同的属性。 各个对象的属性值则可以互不相同,并且随着程序的执行而 变化。 操作,对于一个类的所有对象都是一样的。 由一个类生成的一个对象可以扮演不同的角色。 一个类的一个角色是在特定的语境下该类的对象所呈现的行 为。
表示法:在模型中用类符号来表示一个类,
在OOA中,只对识别那些必须由对象提供的、在算法上复杂 的业务操作(如要进行某些计算或监控操作 )感兴趣。
定义操作的策略与启发
(1)考虑系统责任 有哪些功能要求在本对象提供*?
(2)考虑问题域 对象在问题域对应的事物有哪些行为* ?
(3)分析对象状态 在每种状态下对象可能发生什么行为?对象状态的转换,是 由哪些操作引起的?--状态图讲述
如属性必须是整个实体的特征,而不是其成分的特征*
是否可通过继承得到? 可以从其他属性直接导出的属性; 与实现有关的因素,推迟到OOD考虑(规范化、对象标识、性 能问题)
属性的命名和定位
命名:原则与类的命名相同 定位:针对所描述的对象,适合全部对象实例。
属性的详细说明
把每个属性都填写到相应的类符号中去,并在相应的类 描述模板中进行详细说明。
(1)舍弃无用的对象 通过属性判断: 是否通过属性记录了某些有用的信息? 通过操作判断: 是否通过操作提供了某些有用的功能*? 二者都不是——无用 但是,也存在这样的对象,没有属性仅提供操作,或有属
性无操作的情况。
(2)对象的精简 只有一个属性的对象
班级 …… 1 ……
班主任
1
姓名
只有一个操作的对象
是不是高内聚的 一个操作应该只完成一项单一的、相对完整的功 能
调整——拆分 或 合并
2019/9/19
27
27
操作的命名和定位
命名:动词或动宾结构
定位: 与实际事物一致 例:售货员——售货*,商品——售出* 在泛化中的位置 ——适合类的全部对象实例
描述操作
把每个对象的操作都填写到相应的类符号中。
例如人的通信地址,包括国家、省、城市、街道、门牌号码等内容,但这些内容在通信地址 这个概念上是不可分的。在定义“人员”对象的属性时,应该使用一个属性“通信地址”,而不 应把有关通信地址的各项内容拆散开用多个属性来描述。
若一个对象与另一个对象有关系,其属性必须捕获该对象的性 质,而不是关系或关系中的其他对象的性质;
(4)追踪操作的执行路线 模拟操作的执行,并在整个系统中跟踪* 。
(5)用动词识别操作 (6)查看每一个属性,因为要用对象的操作来对其进行操纵
审查与调整
审查对象的每个操作 是否真正有用 是否直接提供系统责任所要求的某项功能? 或者 响应其它操作的请求,间接地完成某种功能的某 些局部操作? 调整——取消无用的操作
认识对象的主动行为并识别主动对象
主动对象是具有主动行为的对象,在设计阶段是拥有线 程或进程并能够启动控制活动的对象。主动类是其实例 为主动对象的类。 识别主动对象的策略: (1)考虑问题域
哪些对象需呈现主动行为*?--按定义
(2)考虑系统责任
根据系统责任观察系统功能的构成层次,重点考虑完成最外层 功能的对象是否应定义为主动对象。
词短语识别对象和类(寻找“现实世界”的对象和类)。
用单个的专有名词或代词(Jim、他、她、雇员号5、我的工作 站、我的家)以及直接引用的名词(第六个参赛者、第一百万次购 买)识别对象。
用复数名词(人们、顾客们、开发商们、用户们)以及普通名
词(人、顾客、雇员、工作站)来识别类。
2019/9/19
8
审查与筛选
(即捕获不同的概念),就需要把这样的概念作为不同的对象。
2019/9/19
12
抽象出类
对象分类 先使用问题域知识从对象中识别出类。
对类进行调整 (1)类的属性或操作不适合该类的全部对象 例:“汽车”类的“乘客限量”属性,不适合于吊车、铲车 问题:分类不够详细——进一步划分特殊类 (2)属性及操作相同的类 ——考虑能否合并为一个类,如计算机与吸尘器 (3)属性及操作相似的类 ——考虑能否提升出一个一般类,或形成整体部分结构。 例:轿车、货车,抽象出汽车;机床与鼓风机用电机做成分. (4)同一事物的重复描述 例:“职员”和“工作证” ——取消其中一个
[可见性] 属性名[‘:’类型][‘ =’初始值]
可见性分为+(公有的)、#(受保护的)或 -(私有的) 、 ~(包,只有在同一包中声明的类能够使用这一属性)。
在对象/类中,必须给每一个属性一个唯一的名字。 属性的类型可以是常见的基本数据类型,也可以是自己定 义的类型。
OO方法中有“实例属性”和“类属性”的概念之分。上
第四章 建立基本模型—类图
1 定义对象与类 2 定义属性与操作 3 定义关系 4 定义接口
2019/9/19
1
1
第四章 建立基本模型—类图
1 定义对象与类
2019/9/19
2
2
概念与表示法
对象是具有明确语义边界并封装了状态和行为的实体,由一 组属性和作用在这组属性上的一组操作构成,是构成系统的一 个基本单位,它用于描述客观事物。
如果想要在OOA阶段记录方法的详细文字描述或算法,则把 它们放在类描述模板中,如有必要也可放在注释中。该项工作应 该在OOD阶段完成。
识别操作
诸如创建(创建并初始化一个新对象)、连接(将一个对象 与另一个对象连接)、访问(得到或设置属性值)、断开连接( 将一个对象与另一个对象的连接断开)和删除一个对象之类的操 作都属于在算法上是简单的操作,在OOA不予以考虑。
操作
对象行为分类
(1)系统行为 例:创建、删除、复制、转存
(2)对象自身的行为——算法简单的操作 例:读、写属性值
(3)对象自身的行为——算法复杂的操作 计算或监控
2019/9/19
23
23
概念与表示法
操作是类的对象被要求执行的服务。
[可见性] 操作名[‘(‘参数列表’)’][‘:’返回类型]
可见性:+(公有的)、#(受保护的) 、-(私有的)或~(包) 。 内部操作和外部操作, 特征标记 类范围操作(静态操作)是用来创造实例或者操纵静态属性的 操作。 例如C++中的前面冠以static的成员函数,就是类范围操作。 表示法 类范围的操作用带下划线的名字和类型表达式串表示。实例 范围操作是默认的,对其不用标记。
问题域中的某些事物实际上是另一种事物的附属品和一定意 义上的抽象。例如,工作证对职员、车辆执照对车辆、图书索引 卡片对图书都是这样的关系。
有些时候,用相同的名词捕获两个不同的概念;这就必须产 生一个新词(补充对象),以确保每一个词捕获一个概念或“事 物”。
相关主题