第10章面向对象分析.ppt
《第10章面向对象分析.ppt》由会员分享,可在线阅读,更多相关《第10章面向对象分析.ppt(65页珍藏版)》请在三一文库上搜索。
1、第10章 面向对象分析 10.1 面向对象分析的基本过程 10.2 需求陈述 10.3 建立对象模型 10.4 建立动态模型 10.5 建立功能模型 10.6 定义服务 作业,不论采用哪种方法开发软件,分析的过程都是提取系统需求的过程。面向对象分析的关键是识别出问题域内的类与对象,分析确定它们之间的关系,最终建立起问题域的对象模型、动态模型和功能模型,它们是软件需求规格的重要组成成分。 分析工作主要包括3项内容:理解、表达、验证 首先,分析员通过与用户及领域专家的充分交流,力求充分理解用户需求和该应用领域的关键性背景知识。 接下来用某种无二义性的方式把这种理解表达成文档资料。(软件需求规格说明
2、),由于问题复杂,而且人与人之间的交流带有随意性和非形式化的特点,上述理解过程通常不能一次就达到理想的效果。因此,还必须进一步验证软件需求规格说明的正确性、完整性和有效性,如果发现了问题则进行修正。 显然,需求分析过程是系统分析员与用户及领域专家反复交流和多次修正的过程。 也就是说,理解和验证的过程通常交替进行,反复迭代,而且往往需要利用原形系统作为辅助工具。,10.1 面向对象分析的基本过程 10.1.1 概述 面向对象分析,就是抽取和整理用户需求并建立问题域精确模型的过程。通常,面向对象分析过程从分析陈述用户需求的文件开始。 需求陈述往往是不完整、不准确的,而且往往是非正式的。通过分析,应
3、该改正原始陈述中的二义性和不一致性,补充遗漏的内容,从而使需求陈述更完整、更准确。 在分析需求陈述的过程中,需要反复多次地与用户协商、讨论、交流信息,还应该通过调研了解现有的类似系统。 快速地建立起一个能在计算机上运行的原型系统,非常有助于分析员与用户之间的沟通,从而能更正确地提取出用户的需求。,接下来,分析员应该在深入理解用户需求的基础上,抽象出目标系统的本质属性,并利用模型精确地表示出来: 通过建立模型能够纠正在开发早期对问题域的误解 在面向对象建模的过程中,分析员必须认真向领域专家学习 此外,还应该仔细研究以前针对相同的或类似的问题域进行面向对象分析得到的结果,这些结果在当前项目中往往有
4、许多是可以重用的,10.1.2 3个子模型与5个层次 面向对象建立起来的模型包含系统的3个要素,即: 静态结构(对象模型) 交互次序(动态模型) 数据变换(功能模型) 解决的问题不同,这3个子模型的重要程度也不同: 几乎解决任何一个问题,都需要从客观世界实体及实体间相互关系抽象出极有价值的对象模型 当问题涉及交互作用和时序时,动态模型是重要的 解决运算量很大的问题,则涉及重要的功能模型 动态模型和功能模型中都包含了对象模型中的操作(即服务)。,复杂问题的对象模型的5个层次,复杂问题(大型系统)的对象模型通常由下述5个层次组成:,复杂问题的对象模型的5个层次对应着在面向对象分析过程中建立对象模型
5、的5项主要活动: 找出类与对象,识别结构,识别主题,定义属性,定义服务。 强调:这5项工作完全没有必要顺序完成,也无须彻底完成一项工作以后再开始另外一项工作。,在概念上可以认为,面向对象分析大体上按照下列顺序进行: 寻找类与对象识别结构识别主题定义属性建立动态模型建立功能模型定义服务 但是,分析不可能严格地按照预定顺序进行,大型复杂系统的模型需要反复构造多遍才能建成。 通常,先构造出模型的子集,然后逐渐扩充,直到充分地理解了整个问题,才能最终把完整的模型建立起来,10.2 需求陈述 通常包括:问题范围,功能需求,性能需求,应用环境及假设条件等 应该阐明“做什么”而不是“怎么做” 应该描述用户的
6、需求而不是提出解决问题的方法 应该指出哪些是系统必要的性质,哪些是任选的性质 应该避免对设计策略施加过多的约束,也不要描述系统的内部结构,否则将限制实现的灵活性 对系统性能及外界环境交互协议的描述是合适的需求,对采用的软件工程标准、模块构造准则、将来可能做的扩充以及可维护性要求等方面的描述,也都是适当的需求 书写需求陈述时,要尽力作到语法正确,而且应该慎重选用名词、动词、形容词和同义词 系统分析员必须与用户及领域专家密切配合协同工作,共同提炼和整理用户需求 在这个过程中,很可能需要快速建立起原型系统,以便与用户更有效地交流,ATM系统,10.3 建立对象模型 对象模型描述了现实世界中的“类与对
7、象”以及它们之间的关系,表示了目标系统的静态数据结构: 静态数据结构对应用细节依赖较少,比较容易确定 当用户的需求变化时,静态数据结构相对来说比较稳定 因此,用面向对象方法开发绝大多数软件时,都首先建立对象模型,然后再建立另外两个子模型。 建立对象模型是面向对象分析首要的工作,对象模型的主要信息来源:需求陈述、应用领域的专业知识以及关于客观世界的常识 10.3.1 确定类与对象 1. 找出候选的类与对象 对象是对问题域中有意义的事物的抽象,它们既可能是物理实体,也可能是抽象概念。 具体地说,大多数客观事物可分为下述5类: 可感知的物理实体,例如,飞机、汽车、书、房屋等等,人或组织的角色,例如,
8、医生、教师、雇主、雇员、信息系、教务处等等 应该记忆的事件,例如,飞行、演出、访问、交通事故等等 两个或多个对象的相互作用,通常具有交易或接触的性质,例如,购买、纳税、结婚等等 需要说明的概念,例如,政策、保险政策、版权法等等 在分析所面临的问题时,可以参照上列5类常见事物,找出在当前问题域中的候选类与对象。,另一种更简单的分析方法,是所谓的非正式分析,即: 以用自然语言书写的需求陈述为依据 把陈述中的名词作为类与对象的候选者 用形容词作为确定属性的线索 把动词作为服务(操作)的候选者,2. 筛选出正确的类与对象 依据以下6个标准,删除不正确或不必要的类与对象: 冗余如果两个名词(或名词短语)
9、代表同样的事物,则应该仅保留在此问题域中最富于描述力的名称。 无关现实世界中存在许多对象,不能把它们都纳入到系统中去,仅需要把本问题密切相关的对象放在目标系统中。 笼统在陈述需求时往往使用一些笼统的、泛指的名词,虽然在初步分析时把它们作为候选的对象列出来了,但是,要么系统无须记忆有关它们的信息,要么在需求陈述中有更明确更具体的名词对应它们所暗示的事物,因此,通常把这些笼统的或模糊的对象去掉。,属性在需求陈述中有些名词实际上描述的是其他对象的属性,应该把这些名词从候选对象中去掉。当然,如果某个性质具有很强的独立性,则应该把它们作为对象而不是作为属性。 操作在需求陈述中有时可能使用一些既作为名词,
10、又可作为动词的词,应该慎重考虑它们在问题中的含义,以便正确地决定把她们作为对象还是作为对象的操作。一般说来,本身具有属性需要独立存在的操作,应该作为对象;反之,应该作为对象的操作。 实现在分析阶段不应该过早地考虑怎样实现目标系统。因此,应该去掉仅和实现有关的候选对象。,10.3.2 确定关联 两个或多个对象之间相互作用、相互依赖的关系就是关联。在分析确定关联的过程中,不必花过多精力去区分关联和聚集。 1. 初步确定关联 在需求陈述中使用的描述性动词或动词词组,通常表示关联关系: 大多数关联可通过直接提取需求中的动词词组得出 分析需求陈述,还能发现一些隐含的关联 分析员还应该与用户及领域专家讨论
11、问题域实体间的相互依赖、相互作用关系,根据领域知识再进一步补充一些关联,2. 筛选 候选关联需经过进一步筛选,以去掉不正确的或不必要的关联。依据以下5个标准: 已删去的对象之间的关联如果在分析确定对象的过程中已经删掉了某个候选对象,则与这个对象有关的关联也应该删去,或用其他对象重新表达这个关联。 与问题无关的或应在实现阶段考虑的关联应该把处在本问题域之外的关联或与实现密切相关的关联删去。,瞬时事件关联应该描述问题域的静态结构,而不应该描述一个瞬时事件。 三元关联三个或三个以上对象之间的关联,大多可以分解为二元关联。 派生关联应该删除那些可以用其他关联定义的冗余关联。,3.进一步完善 正名应该仔
12、细选择含义更明确的名字作为关联名。 分解为了能适用于不同的关联,必要时应该分解以前确定的类与对象。 补充发现了遗漏的关联就应该及时补上。 标明重数应该初步判断各个关联的类型并粗略地确定关联的重数。,ATM系统原始的类图,10.3.3 划分主题 在开发很小的系统时,可能根本无须引入主题层 对于含有较多对象的系统,则往往先识别出类与对象和关联,然后划分主题,并用它作为指导开发者和用户观察整个模型的一种机制 对于规模极大的系统,则首先由高级分析员粗略地识别对象和关联,然后初步划分主题,经进一步分析,对系统结构有风深入的了解之后,再进一步修改和精炼主题 应该按问题领域而不是用功能分解方法来确定主题 此
13、外,应该按照使不同主题内的对象相互间依赖和交互最少的原则来确定主题,10.3.4 确定属性 1. 分析 通常,在需求陈述中用名词词组表示属性(例如,汽车的颜色),用形容词表示可枚举的具体属性: 但不可能在需求陈述中找出全部属性,还必须借助于领域知识和常识才能分析得出需要的属性 属性的确定既与问题域有关,也和目标系统的任务有关 应该仅考虑与具体应用密切相关的属性,不要考虑那些超出所要解决的问题范围的属性,2. 选择 认真考虑经初步分析而确定下来的那些属性,从中删除不正确的或不必要的属性: 误把对象当作属性如果某个实体的独立存在比它的值更重要,则应把它作为一个对象而不是对象的属性。在具体应用领域中
14、具有自身性质的实体,必然是对象。 误把关联类的属性当作一般对象的属性如果某个性质依赖于某个关联链的存在,则该性质是关联类的属性。,把限定误当成属性如果把某个属性值固定下来以后能减少关联的重数,则应该把这个属性重新表述成一个限定词。 误把内部状态当成了属性如果某个性质是对象的非公开的内部状态,则应该从对象模型中删除这个属性。 过于细化在分析阶段应该忽略那些对大多数操作都没有影响的属性。 存在不一致的属性类应该是简单而且一致的。如果得出一些看起来与其他实行毫不相关的属性,则应该考虑把该类分解成两个不同的类。,ATM系统对象模型中的属性,10.3.5 识别继承关系 确定了类中应有的属性之后,就可以利
15、用继承机制共享公共性质,并对系统中众多的类加以组织。继承关系的建立实质上是知识抽取过程,它应该反映出一定深度的领域知识,因此必须有领域专家密切配合才能完成。可以使用下述两种方法建立继承关系: 自底向上:抽象出现有类的公共属性泛化出父类,这个过程实质上模拟了人类的归纳思维过程。 自顶向下:把现有类细化成更具体的子类,这模拟了人类的演绎思维过程。 使用多重继承机制时,应该指定一个主要父类,从它继承大部分属性和行为,次要父类再作补充。,带有继承关系的ATM对象模型,10.3.6 反复修改 仅仅经过一次建模过程很难得到完全正确的对象模型: 事实上,软件开发过程就是一个多次反复修改、逐步完善过程 在建模
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 面向 对象 分析
链接地址:https://www.31doc.com/p-3418420.html