文档详情

1.3 面向对象的分析方法

飞***
实名认证
店铺
DOC
173.50KB
约25页
文档ID:28217821
1.3 面向对象的分析方法_第1页
1/25

1. 3 面向对象的分析方法面向对象分析作为一个比较全面的方法,面向对象分析由五个主要步骤组成,即确定类与对象,识别结构,识别主题,定义属性和定义方法一旦建立了模型,就可以由五个层次来表示,它们是:主题层 主题给出分析模型的总体概貌对象层 对象是数据及其处理的抽象它反映了系统保存和处理现实世界中某些事物的信息的能力结构层 结构表示问题域的复杂性类—成员结构反映了一般——特殊关系,整体——部分结构反映了整体和部分的关系属性层 属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出并在对象的存储中定义方法层 方法是在收到消息后必须进行的处理,在图上定义它并在对象的存储中指定一、 确定类与对象1、什么是类、对象在面向对象分析中对象是一个封装体和抽象体,即是属性和处理这些属性的方法的封装体以及问题域的抽象体类是对一个以上对象的共同属性和方法集合的描述,包括如何在一个类中建立新对象的描述属性以及处理这些属性的方法的封装体对面向对象分析模型的稳定性影响很大首先,封装性是可以将属性和方法看成一个不可分割的整体的基础第二,封装性有助于减少重复劳动在面向对象分析中,对问题域中某件事情的抽象是很重要的。

事实上,在每次分析活动中,分析人员必须首先理解要分析的问题域而将对象定义为现实世界的抽象,这样有助于深刻理解问题域,从而获得系统模型这种模型至少可以产生一个现实的 可观察且可管理的模型层集合,包括主题、对象、结构、属性和方法系统模型还为上下文的初始表示奠定了基础上下文树是由系统分析人员在分析过程中画出来用于技术决策的系统上下文表明该系统包含有几个问题域、要保存什么样的数据、处理的复杂程度如何等系统上下文有着“四重约束” ,即预算、进度、性能和人员为了使一个项目顺利进行,必须满足所有这四个约束2、为什么要识别对象识别对象的主要目的是为了使一个系统的技术表示同现实世界更为接近这种分析的表示和策略是依据人类的 3 种基本分析方法的,即对象和属性,类与成员,以及整体和部分识别对象的另一个目的是希望建立考察问题领域和了解需求的稳定框架对象只是相对稳定的,但分析问题的框架却是稳定的最后一个动机是希望在从系统分析向系统设计过渡时不要改变所采用的表示法如多年来在分析中使用的是网络组织(数据流程图) ,而在设计中使用的则是层次组织(结构图) 这一状况使开发者感到十分不便,无法跟踪开发过程为此可以通过在分析、设计和实现三个阶段均采用面向对象的表示法来改进这一局面。

3、如何定义对象1)、表示法类-&-对象 类(2)何处去确定对象问题域、文字说明和图形表示都是有助于确定对象的素材首先应该观察问题域并研究问题域本身问题域是用户的世界,用户一般在问题域中给出或隐含地给出某种形式的需求,这些需求可能是几句话的描述,也可能是大段的叙述其次是研究文字说明材料让用户提供一个详细的专题报告,并从专业书籍中找到该问题域的权威描述,这种方法有助于了解某个专题的基本知识和术语,同时这样一种调研也可尽快掌握问题域的概貌在阅读时,重点注意名词,但不能简单地把这些名词声明为对象最后是要仔细地观察各种图形表示收集所能拿到的任何图形表示,包括方块图、接口图、系统部件图和高层次的数据/控制流程图等,并用图符和它们之间的连线的方式画出问题域的草图3)哪些可以作为对象为了确定潜在的对象,需要首先确定问题域的结构、有关系统、装置、所记忆的事件、所起的作用、地点和组织机构下面按其用途的大小不依次考虑这些问题 问题域中的结构对确定对象和表示问题域层十分重要在面向对象分析中,有专门的一个识别结构的步骤在结构当中,最为重要的就是泛化——特化结构和整体——部分结构(后面详细叙述) 。

有关系统 所考虑的系统将以何种方式同有关的系统和外部终端交互?如无线或者是有线 所考虑的系统需要同何种装置进行交互(交换数据和控制信息) 要注意的是不要从实现上而应从功能上来考虑,以便出在具体实现变化时,无须作太多的重复性劳动 应记忆的事件 系统是否有必要观测和记录时间点和历史事件人所起的作用 在所考虑的系统中,人起什么作用?代表人的对象有两种:系统用户;并不与系统直接交互,但系统有其记录的人他们在系统中起的作用不同,后面的属性和方法的探讨将更详细地揭示这种区别 所考虑的系统需要什么样的地理知识?组织结构 人属于哪个机构?(4)应考虑那些内容假设已经找到一个候选对象,这时又发现另一个可能成为对象的东西,那么是否应该将它作为对象放到模型中去?这时应该考虑以下问题:①必要的记忆(属性)是否该系统需要记忆某个对象的所有情况?能否描述该对象的实例?该对象潜在的属性是什么?是否真实事物的知识对所考虑的系统有用?是否系统需要记忆与该对象有关的情况?如果一切的回答是否定的,则该对象存在的合法性和必要性就值得怀疑记住:现实世界中存在许多对象,但仅可以讨论而已,不能都纳入系统中去②必要的方法系统是否需要该对象提供的方法?只要必要的记忆中所述的不完全是否定的,则也必定需要方法,因此最低限度也要维持该对象的一次出现,即有一个合适的对象。

有时某个对象可能要求有方法,但不要求有记忆(属性) 如可能在问题域中找到一个“用户”对象,但系统并不要求保存该用户的任何信息,但是系统确实需要监视用户、响应请求和定时提供信息因此由于需要方法,不得不将一个相应的对象加到问题域的模型中去③一个以上的属性在分析人员考虑不周的地方,该准则能帮助他筛选潜在的对象如果一个对象(如“地点” )有一个名字相同的属性,就让人费解这时“地点”最好作为属性用到其他的对象中去,而不是单独作为一个对象关键是要详细到何种程度:对象是用属性来描述的,而属性则又可在属性字典中描述④共同属性能否识别一组每个对象都有的属性?每次当系统产生一个对象时,它应该为所有的共同属性赋值如果只有部分属性可用,则表明还存在一个泛化——特化结构(后面讨论) ⑤共同的方法能识别一组共同的方法吗?即可用到某个对象的所有实例的处理操作这些处理操作可能用来创建对象的实例,在对象之间建立联系如果每个实例的方法都是相同的,那还好办但是如果方法是随实例的类型而变化的,则表明还存在一个泛化――特化结构⑥基本需求基本需求是指那些系统必须具备的要求,如在考虑“雷达”和“传感器”对象时,不管最终采用何种计算机技术,最终的目标还是“雷达”和“传感器”对象。

至于其他的都只是设计和实现上的考虑5)对什么提出否定意见①并非必要的记忆; ②并非必要的方法;③单个实例;④冗余信息首先,如果系统并不需要保存某个对象的信息也不需要为它提供方法,则去掉该对象这种情况在同用户讨论和评价初始模型时经常发生其次,对只有单个实例的对象提出异议当然如果某个(只有单个实例的对象)确反映了问题域的真实情况,则不必管它最后,考虑冗余信息的模型在基本需求模型中,冗余信息会使一切变得十分繁杂混乱因此尽量少地保存属于冗余信息的派生结果6)如何命名对象原则上,对象名应该能描述对象的实例的基本特征,因此,为对象命名的主要方法可以是:①用单个名词或者形容词加名词作为对象名;②采用标准名称作为对象名;③尽量采用可读性好的名字二、识别结构本节研究泛化——特化结构和整体——部分结构1、 什么是结构在面向对象分析中,结构是问题域复杂关系的表示,它与系统的任务直接相关结构有一般——特殊结构和整体——部分结构它们是面向对象分析方法和重要组成部分2、为什么要定义结构泛化—特化结构和整体—部分结构能使分析人员和领域专家的注意力集中在具有多个类和对象的复杂问题上也可以考虑到问题的边缘,揭示那些尚未发现的类和对象。

此外,泛化—特化结构具有继承性,泛化类和对象的属性和方法一旦被识别,即可在特化类和对象中使用3、如何定义结构(1)如何定义泛化——特化结构首先给出泛化——特化结构的表示法和策略,然后给出它的层次①表示法泛化——特化结构用下图表示:顶部是一个泛化类,下面是几个特化类,它们之间用线连接一个半圆型的标记表明图形泛化——特化结构这种表示法是有向的,从半圆弧中心画一条线所指的是泛化类一般来说,泛化类总是放在上部,而特化类放在下部泛化——特化结构线的端点位置表明这是类(而不是对象)之间的映射每个特化类的名字必须能充分地反映它自己的物征比较合适的特化类名字可由相应的泛化类名加上能描述该特化类性质的形容词来组成如对于名为Sensor(传感器)的泛化类,其特化类可称为 StandardSensor (标准传感器)或 CriticalSensor (精密传感器)而不称为 Critical(标准) 所有最底部的特化类必须使用“类—& —对象”符号,而其他地方即可用“类—&—对象”符号也可用类符号如下图所示的实例②定义一般——特殊结构的策略将每个类看成一般类针对它的潜在特殊类提出以下问题:a、它是属于该问题域吗?b、它是该系统的任务吗?c、存在继承性吗?d、特殊类满足类—&—与对象的准则吗?以类似的方式,将每个类考虑为特殊类,并对它的潜在泛化类提出同样的问题。

尤其是与以前类似问题的面向对象分析结果比较来寻找可以直接重用的泛化——特化结构并吸取有关教训如果存在许多特化类,则首先考虑最简单的和最复杂的特化类,然后处理其他的如考虑对象“飞机” ,它可以按不同的分类方式来进行特化:军用和民用,喷气和普通,固定机翼与可变机翼,商用和私人,在航行中的和在地面上的在每一种情况下,查看潜在的属性和方法检查特化对象之间的区别;同时检验它们是否是真实的特化类如汽车和飞机另外还要考虑是否该特化类属于该问题域其次,将某个类看作特化类那么,是否从该问题域中的其他类就能找到一个泛化类,且它能表示共同的属性、方法或两者呢?是否泛化对象反映了真实的泛化?是否泛化对象本身仍在问题域的范围内?采用继承来显式表达属性和方法的共同部分,可以实现在一般 特殊结构中恰当地分配 属性和方法将共同的属性和方法放在上层,而将特有的属性和方法放在下层泛化——特化结构的准则之一就是它是否反映了问题域中的泛化——特化关系③层次与网络每个一般特殊结构均形成层次或网络在实践中,泛化——特化结构的最普通形式就是层次(如下图所示) 在本例中,Person (人)是 Owner(所有者) 、或 Clerk(工作人员)或是一个 Clerk 兼 Owner,这一层次的特化类中就存在着一些冗余信息。

借助于泛化——特化网络还可以研究其他问题域的持化类,而且还可以显式地表示更多属性和方法的公共部分下图中的例子表明在某个问题域中的 Person 是一个 Owner、一个 Clerk 或两者特化类 OwnerClerkPerson 描述了一个有着多重直接泛化类的类,它表明一个对象继承了来自其祖先的属性和方法而且如果这个类本身还有属性和方法,则它们将出现在特化类 OwnerClerkPerson 中因此,网络能描述复杂的特殊类;能有效地表示公共部分;对模型的复杂程度影响较少随着特化类的增加,网络结构将变得非常复杂此时可考虑将网络的某一部分重新组合为另一个层次同时要注意到在一个以上的直接泛化类中使用相同的属性名会导致类—&—对象规范的严重混乱泛化——特化结构网络可以表示两个不同泛化——特化结构的重叠或者组合(如下图所示) 2) 、如何定义整体—部分结构在面向对象分析中,整体——部分关系对于在问题域和系统任务的边界区域中识别类—&—对象是非常有用的同时它还能将具有特殊的整体——部分关系的类—&—对象组织到一起①表示法整体——部分结构可用下图表示:在顶部是一个整体对象(用类—&—对象符号表示的对象) ,下部是部分对象(用类—& —对象符号表示的对象) ,它们之间用线(结构线)连接。

下载提示
相似文档
正为您匹配相似的精品文档