面向对象分析-第二节:面向对象分析之建立对象模型
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象分析-第二节:面向对象分析之建立对象模型相关的知识,希望对你有一定的参考价值。
文章目录
一: 基本概念
(1)对象模型
面向对象分析的首要工作就是建立问题域的对象模型。对象模型表示静态的、结构化的系统的数据性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。对象模型为建立动态模型和功能模型,提供了实质性的框架
(2)先建立对象模型的原因
- 静态数据结构对应用细节依赖较少,比较容易确定
- 当用户的需求变化时,静态数据结构相对来说比较稳定
(3)信息来源
需求陈述、应用领域的专业知识、客观世界的常识,是建立对象模型时的主要信息来源
(4)典型的建模步骤
- 确定对象类和关联(对于大型复杂问题还要进一步划分出若干个主题);
- 给类和关联增添属性,以进一步描述它们;
- 使用适当的继承关系进一步合并和组织类
二:确定类与对象
(1)找出候选的类与对象
A:客观事物分类
对象是对问题域中有意义的事物的抽象,它们既可能是物理实体,也可能是抽象概念。客观事物可分为下述5类:
- 可感知的物理实体;
- 人或组织的角色;
- 应该记忆的事件;
- 两个或多个对象的相互作用;
- 需要说明的概念
B:非正式分析
以用自然语言书写的需求陈述为依据,把陈述中的名词作为类与对象的候选者,用形容词作为确定属性的线索,把动词作为服务的候选者。这种方法确定的候选者是非常不准确的,其中往往包含大量不正确或不必要的事物,需要经过更进一步的严格筛选
C:提取隐含的类与对象
(2)筛选出正确的类与对象
- 如果两个类表达了同样的信息,则应该保留在此问题域中最富于描述力的名称
- 需要把与本问题密切相关的类与对象放进目标系统中
- 系统无须记忆笼统的、泛指的名词信息,把这些笼统的或模糊的类去掉
- 把描述的是其他对象属性的词从候选类与对象中去掉
- 慎重考虑既可作为名词,又可作为动词的词,以便正确地决定把它们作为类还是作为类中定义的操作。本身具有属性,需独立存在的操作,应该作为类与对象
- 应该去掉仅和实现有关的候选的类与对象
三:确定关联
(1)关联
A:定义
两个或多个对象之间的相互依赖、相互作用的关系就是关联。在需求陈述中使用的描述性动词或动词词组,通常表示关联关系
B:确定关联的重要性
分析确定关联,能促使分析员考虑问题域的边缘情况,有助于发现尚未被发现的类与对象
(2)步骤
A:初步确定关联
- 直接提取动词短语得出的关联
- 需求陈述中隐含的关联
- 根据问题域知识得出的关联
B:筛选
筛选时主要根据下述标准删除候选的关联:
-
已删去的类之间的关联:如果在分析确定类与对象的过程中已经删掉了某个候选类,则与这个类有关的关联也应该删去,或用其他类重新表达这个关联
-
与问题无关的或应在实现阶段考虑的关联:应该把处在本问题域之外的关联与实现密切相关的关联删去
-
瞬时事件:关联应该描述问题域的静态结构,而不应该是一个瞬时事件
-
三元关联:三个或三个以上对象间的关联,可分解为二元关联或用词组描述成限定的关联
-
派生关联:去掉那些可以用其他关联定义的冗余关联
C:改进
可以从以下几个方面进一步完善经筛选后余下的关联
- 正名:仔细选择含义更明确的名字作为关联名
- 分解:为了能够适用于不同的关联,必要时应该分解以前确定的类与对象
- 补充:发现了遗漏的关联就应该及时补上
- 标明重数:应该初步判定各个关联的类型,并粗略地确定关联的重数
四:划分主题
(1)定义
在开发大型、复杂系统的过程中,为了降低复杂程度,把系统再进一步划分成几个不同的主题,即在概念上把系统包含的内容分解成若干个范畴
(2)针对不同类型的方法
- 规模小的系统:可能无须引入主题层
- 含有较多对象的系统:首先识别出类与对象和关联,然后划分主题,并用它作为指导开发者和用户观察整个模型的一种机制
- 规模大的系统:首先由高级分析员粗略地识别对象和关联,然后初步划分主题,经进一步分析,对系统结构有更深入的了解之后,再进一步修改和精炼主题
(3)原则
- 按问题领域而不是用功能分解方法来确定主题
- 按照使不同主题内的对象相互间依赖和交互最少的原则来确定主题
五:确定属性
(1)属性
属性是对象的性质,借助于属性人们能对类与对象和结构有更深入更具体的认识
- 注意:在分析阶段不要用属性来表示对象间的关系,使用关联能够表示两个对象间的任何关系,而且把关系表示得更清晰、更醒目
(2)确定属性的步骤
A:分析
- 在需求陈述中用名词词组表示属性,用形容词表示可枚举的具体属性
- 借助于领域知识和常识分析需要的属性
- 仅考虑与具体应用直接相关的属性,不要考虑那些超出所要解决的问题范围的属性
- 首先找出最重要的属性,以后再逐渐把其余属性增添进去
- 不要考虑那些纯粹用于实现的属性
B:选择
从初步分析确定下来的属性中删掉不正确的或不必要的属性。有以下几种常见情况:
-
误把对象当作属性:如果某个实体的独立存在比它的值更重要,则应把它作为一个对象而不是对象的属性
-
误把关联类的属性当作一般对象的属性:如果某个性质依赖于某个关联链的存在,则该性质是关联类的属性,在分析阶段不应把它作为一般对象的属性
-
把限定误当成属性:如果把某个属性值固定下来以后能减少关联的重数,则应该考虑把这个属性重新表达成一个限定词。
-
误把内部状态当成了属性:如果某个性质是对象的非公开的内部状态,则应该从对象模型中删除这个属性。
-
过于细化:在分析阶段应该忽略那些对大多数操作都没有影响的属性
-
存在不一致的属性:类应该是简单而且一致的。如果得出一些看起来与其他属性毫不相关的属性,则应该考虑把类分解成两个不同的类
六:识别继承关系
(1)建立继承关系的方式
确定了类中应该定义的属性之后,就可以利用继承机制共享公共性质,并对系统中众多的类加以组织。可以使用以下两种方式建立继承关系
- 自底向上:抽象出现有类的共同性质泛化出父类,这个过程实质上模拟了人类归纳思维的过程
- 自顶向下:把现有类细化成更具体的子类,这模拟了人类的演绎思维过程。从应用域中常常能明显看出应该做的自顶向下的具体化工作
(2)多重继承
A:作用
利用多重继承可以提高共享程度,但增加了概念上以及实现时的复杂程度
B:要点
- 指定一个主要父类,从它继承大部分属性和行为;
- 次要父类只补充一些属性和行为
七:反复修改
(1)必要性
软件开发过程就是一个多次反复修改、逐步完善的过程。仅仅经过一次建模过程很难得到完全正确的对象模型
(2)面向对象在修改时的优点
面向对象的概念和符号在整个开发过程中都是一致的,比使用结构分析、设计技术更容易实现反复修改、逐步完善的过程
以上是关于面向对象分析-第二节:面向对象分析之建立对象模型的主要内容,如果未能解决你的问题,请参考以下文章