面向对象分析全解
- 格式:doc
- 大小:447.50 KB
- 文档页数:25
面向对象分析方法名词解释
面向对象分析(Object-Oriented Analysis, 简称OOA),是一种基于软件工程中面向对象思
想的软件分析方法,旨在搭建软件需求分析基础模型,以识别、分析和实现客户软件需求,制定出对软件研发工作与设计有效的管理模型。
OOA 是拔高软件开发进程中最重要的步骤,它旨在满足客户对于软件的要求,使客户能够在满意的时间,满意的经费以及满意的套大成果得到期望的软件。
OOA 的拥有者一般是由软件项目经理控制的全职专职软件分析师,他们会使用OOA 快速获取软件要求信息,这
些信息是从客户的说明开始的形式,因此将比研发者在识别需求时所需要的时间更少。
OOA 的主要任务就是使软件发展过程更加高效。
Face-to-face(面对面)会谈,讲解,文
档研究以及运用建模工具等方法将客户提出的需求进行阐明,并把客户的大部分需求变成
客观的功能和属性的可操作的模型,因此OOA 的设计方法也称为可重用组件的设计(Reusable Components Design)。
OOA 的模型通常有以下几种:系统架构,逻辑和物理;在实现系统架构中,把客户提出的需求变成给定的抽象模型即为系统拓扑。
在逻辑模型中,将系统拓扑拆分为不同的构件,
以表达客户关心的系统服务和非功能性要求,而在物理模型中,关于客观和完整的描述系统结构,有细粒度的描述和定义每个构件的不同的属性。
面向对象分析也可以用于检验软件开发过程中的系统是否符合预期的情况,也可以用于发现并实施软件系统的改进与更新。
只要对OOA 方法有正确的运用,软件开发项目就容易
得到客户的满意和顺利实施。
第7章面向对象分析•7.1.1 面向对象分析过程面向对象的分析主要以用例模型为基础。
开发人员在收集到的原始需求的基础上,通过构建用例模型从而得到系统的需求。
进而再通过对用例模型的完善,使得需求得到改善。
所谓用例是指系统中的一个功能单元,可以描述为参与者与系统之间的一次交互。
用例常被用来收集用户的需求。
①首先要找到系统的操作者,即用例的参与者。
参与者是在系统之外,透过系统边界与系统进行有意义交互的任何事物。
②可以把参与者执行的每一个系统功能都看作一个用例。
可以说,用例描述了系统的功能,涉及系统为了实现一个功能目标而关联的参与者、对象和行为。
③确定了系统的所有用例之后,就可以开始识别目标系统中的对象和类了。
把具有相似属性和操作的对象定义为一个类。
边界类示意图控制类示意图目标系统的类可以划分为边界类、控制类和实体类。
Ø边界类代表了系统及其操参与者的边界,描述参与者与系统之间的交互。
它更加关注系统的职责,而不是实现职责的具体细节。
通常,界面控制类、系统和设备接口类都属于边界类。
Ø控制类代表了系统的逻辑控制,描述一个用例所具有的事件流的控制行为,实现对用例行为的封装。
通常,可以为每个用例定义一个控制类。
Ø实体类描述了系统中必须存储的信息及相关的行为,通常对应于现实世界中的事物。
确定了系统的类和对象之后,就可以分析类之间的关系了。
对象或类之间的关系有依赖、关联、聚合、组合、泛化和实现。
①依赖关系是“非结构化”的和短暂的关系,表明某个对象会影响另外一个对象的行为或服务。
②关联关系是“结构化”的关系,描述对象之间的连接。
③聚合关系和组合关系是特殊的关联关系,它们强调整体和部分之间的从属性,组合是聚合的一种形式,组合关系对应的整体和部分具有很强的归属关系和一致的生命期。
比如,计算机和显示器就属于聚合关系。
④泛化关系与类间的继承类似。
⑤实现关系是针对类与接口的关系。
明确了对象、类和类之间的层次关系之后,需要进一步识别出对象之间的动态交互行为,即系统响应外部事件或操作的工作过程。
面向对象分析与设计基础知识全掌握在软件开发领域,面向对象分析与设计(Object-Oriented Analysis and Design,简称OOAD)是一种广泛应用的方法论。
它以对象为核心,通过抽象、封装、继承和多态等特性,实现对软件系统的理解和构建。
本文将全面介绍面向对象分析与设计的基础知识,帮助读者全面掌握这一方法。
一、面向对象思想的基本概念面向对象思想是现代软件开发的基石,理解其中的基本概念对于深入学习面向对象分析与设计至关重要。
1.1 类和对象在面向对象的世界里,类是对象的抽象和模板,定义了对象的属性和行为。
类可以看作是一种数据类型的定义,它具有封装、继承和多态的特性。
而对象是类的实例,是具体的、可以被使用的实体。
1.2 封装封装(Encapsulation)指将数据和对数据的操作封装在一个类中,通过访问权限控制,隐藏对象的内部细节,仅向外部提供必要的接口。
封装提高了代码的安全性和复用性,减少了代码的耦合度。
1.3 继承继承(Inheritance)是面向对象编程中的重要概念,它允许我们创建新的类,从已存在的类中继承属性和方法。
继承可以提高代码的可扩展性和复用性,实现了代码的层次化组织。
1.4 多态多态(Polymorphism)是面向对象编程中的另一个重要概念,它允许不同类的对象对同一消息作出响应,实现了不同对象之间的互换使用。
多态提高了代码的灵活性和可维护性。
二、面向对象分析与设计的过程面向对象分析与设计是一种系统化的方法,它通过一系列步骤来分析和设计软件系统。
下面是面向对象分析与设计的基本过程。
2.1 需求获取需求获取是面向对象分析与设计的第一步,通过与用户沟通、分析文档等方式,准确地理解用户的需求和期望。
在这一阶段,我们需要收集用户需求并进行整理和分析。
2.2 需求分析需求分析是根据获取到的需求,进一步分析需求的优先级、相互关系和约束条件等。
通过需求分析,我们可以消除需求的模糊性和冲突,为后续的设计工作提供准确的依据。
面向对象分析:是确定需求或者业务的角度,按照面向对象的思想来分析业务。
例如:OOA只是对需求中描述的问题,进行模块化的处理,描述问题的本质,区别每个问题的不同点相同点,确定问题中的对象。
OOA与结构化分析有较大的区别。
OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。
基本步骤:
在用OOA具体地分析一个事物时,大致上遵循如下五个基本步骤:
第一步,确定对象和类。
这里所说的对象是对数据及其处理方式的抽象,它反映了系统保存和处理现实世界中某些事物的信息的能力。
类是多个对象的共同属性和方法集合的描述,它包括如何在一个类中建立一个新对象的描述。
第二步,确定结构(structure)。
结构是指问题域的复杂性和连接关系。
类成员结构反映了泛化-特化关系,整体-部分结构反映整体和局部之间的关系。
第三步,确定主题(subject)。
主题是指事物的总体概貌和总体分析模型。
第四步,确定属性(attribute)。
属性就是数据元素,可用来描述对象或分类结构的实例,可在图中给出,并在对象的存储中指定。
第五步,确定方法(method)。
方法是在收到消息后必须进行的一些处理方法:方法要在图中定义,并在对象的存储中指定。
对于每个对象和结构来说,那些用来增加、修改、删除和选择一个方法本身都是隐含的(虽然它们是要在对象的存储中定义的,但并不在图上给出),而有些则是显示的。
面向对象分析
面向对象分析是计算机科学领域中使用最广泛的一种分析技术,它是一种结构化的分析方法,是系统分析的更新与系统设计的预备工作。
面向对象分析可以帮助我们更好地理解和分析现有系统,并为系统重构提供指导。
面向对象分析是一种以对象为中心,以建模和分析实体、对象和对象之间的关系为主要任务的分析方法。
它的主要目的是将概念抽象为实体,然后利用视图及关系描述它们之间的关系。
面向对象分析包括分析、设计、建模过程,分析过程也称为面向对象分析(OOA)。
面向对象分析强调对对象的分析,对象可以看作对实际世界中的实际事物的抽象。
对象可以由属性和行为组成,属性描述了对象的内部状态,行为描述了它如何处理消息。
在面向对象分析中,这种抽象事物被描绘为类,每个类有一组共享的属性和行为。
面向对象分析和设计的主要工作是抽象建模,确定对象之间的关系,并利用抽象和关系建模系统。
建模可以帮助我们清楚地了解系统结构,以及每个系统元素之间的联系。
一旦建模完成,可以使用模型来设计、分析和实现高级的系统。
面向对象分析是一种结构化的分析方法,用于理解和描述系统的行为,从而有效地构建高质量的系统。
它的关键是建立系统的实体、关系和视图,从而提出系统的结构,并提出系统实现的可行方案。
总体而言,面向对象分析是一种重要而普遍应用的管理技术,它是系统分析和设计过程中的重要组成部分。
对对象的分析有助于进行
更好的系统设计,增强了系统容量,提高了系统灵活性和性能,为组建现代软件系统提供了可行的工具。
软考范文论面向对象分析朋友,今天咱们来唠唠面向对象分析这个超有趣的事儿。
一、面向对象分析是啥玩意儿呢?你可以把面向对象分析想象成是一场对软件世界的超级侦探之旅。
就好比你要建造一座超级酷炫的房子(软件系统),在这之前,你得先好好研究研究这房子里都得有些啥东西,它们是咋互相联系的,这就是面向对象分析的任务啦。
比如说,你要做一个动物园管理系统。
那这里面的动物、饲养员、游客啥的,就都是我们要分析的对象。
每个对象都有自己独特的属性和行为。
像老虎这个对象吧,它的属性可能有颜色、年龄、种类,行为呢就有睡觉、吼叫、捕食。
这就像是给每个东西都贴上了详细的标签,告诉大家这个东西到底是啥样的,会干啥。
二、为啥要进行面向对象分析呢?这就跟咱们出门要做计划一样重要。
如果不做面向对象分析,就像闭着眼睛盖房子,最后盖出来的可能就是个歪歪扭扭的怪物,根本没法用。
从开发的角度看,它能让开发团队里的小伙伴们都清楚要做啥。
就像大家一起做拼图,要是不知道每块拼图长啥样,那可咋拼啊?有了面向对象分析,程序员知道每个对象怎么定义、怎么交互,测试人员也知道要从哪些方面去测试这个对象的功能是不是正常。
而且啊,这对于软件的可维护性和扩展性也是超级重要的。
就拿那个动物园管理系统来说,如果以后要增加一种新的动物,比如说长颈鹿。
因为我们之前对动物这个对象已经有了清晰的分析,知道怎么去定义新动物的属性和行为,那加个长颈鹿就轻松多了,就像在房子里加个新房间,只要按照之前的建筑规则来,就不会搞乱整个结构。
三、面向对象分析的步骤有哪些呢?首先得找对象。
这就像在动物园里找各种角色一样。
你得把那些在系统里扮演重要角色的东西都挑出来。
还是说动物园,动物、游客、管理员这些一眼就能看出来是重要的对象。
然后呢,就是确定对象的属性。
这就像是给每个对象做个详细的体检。
动物的话,像老虎,我们刚刚说的颜色、年龄、种类这些属性得确定清楚。
这可不能马虎,要是把老虎的颜色都搞混了,那这个系统可就乱套了。
第10章面向对象分析10.1面向对象分析的基本过程不论采用哪种软件工程方法开发软件,需求分析的主要工作都是:理解需求、表达需求和验证需求,下面的图概括地表示了参照当前系统建立目标系统的过程。
图:参照当前系统建立目标系统面向对象分析(Object-Oriented Analysis,简称OOA)的关键就是识别出对象与类,并分析它们之间的关系,最终建立对象模型、动态模型和功能模型。
10.1.1 概述系统分析员要善于学习、勇于实践,更重要的是一切从实际出发。
[[注注]]“OOA 就是抽取和整理用户需求并建立问题域精精确确模模型型的过程。
”(P231)——这在一开始能做到吗?——扯蛋10.1.2 3个子模型与5个层次面向对象建模需建立包含系统的三个要素:1)静态结构(对象模型)、2)交互次序(动态模型)、3)数据交换(功能模型)。
建立系统模型的过程是一个迭代(iterations )式的自顶向下的求精过程。
对于一个大型复杂系统来说对对象象模模型型一般由下述5个层次组成:图10.2 复杂问题的对象模型的5个层次其中主题层是指从一个更高(高于“类”)的抽象层次来描述对象模型(即从一个相当高的层次上描述总体模型),通过划分“主题”把一个复杂系统的对象模型分解成几个不同的概念范畴。
其实上述5个层次就是OOA中建立对象模型的5项主要工作:找出类和对象,识别结构(类或对象之间的关系),识别主题、定义属性、定义服务。
我们知道动态模型和功能模型中都包含了对象模型中的操作,因此人们在定义每个类中的服务前,往往先建立起动态模型和功能模型,这样说来OOA大体上可按下列顺序进行:(1)确定类和对象(2)确定关联(3)划分主题(4)定义属性(5)确定继承关系(6)建立动态模型(7)建立功能模型(8)定义服务需要注意地是在这里我们根本不强调顺序,更不是谈什么步骤。
10.2需求陈述需求陈述的主要任务是准确地回答“系统必须做什么?”,而不是“系统应该怎么做?”10.2.1书写要点10.2.2例子我们用“ATM系统”(ATM是Automatic Teller Machine的缩写,意即自动柜员机)的开发作为OOA&OOD的实例。
图10.2ATM 系统10.3建立对象模型10.3.1确定类与对象1. 找出候候选选的类与对象(例:P236 ATM 系统) 一般来说,大千世界中的客观事物可分为5类:1)可感知的物理实体,如:飞机,汽车,房屋2)人或组织的角色,如:教师,医生,计算机系,学生处3)应该记忆的事件,如:飞行,演出,访问,交通事故4)对象的相互作用,如:购买,结婚,纳税5)概念,如:政策,刑法,泛化,集合2. 筛选出正确的类与对象我们需要确定的类与对象是:(1) 应该记录的对象(2) 需要它提供服务的对象同时要关注下述6个方面:1) 冗余: 去掉冗余的类(如“用户”)2) 无关: 去掉无关的类(如“储蓄所”)3) 笼统: 去掉笼统的类(如“银行”)4) 属性: 区分属性和类(某个性质若具有很强的独立性应当作为“类”)5) 操作: 区分操作和类(本身具有属性且需独立存在的“操作”应当作为“类”)6) 实现: 忽忽略略实实现现内内容容(应当去掉仅和实现有关的“类”,如“事务日志”)10.3.2确定关联对象之间的相互依赖、相互作用的关系就是关联。
在分析的起始阶段,我们不必花过多的精力去区分关联和聚集,聚集不过是一种特殊的关联,是关联的一个特例。
1. 初步确定关联通过分析动词词组我们可以得出大多数关联(例:P238 ATM 系统)2. 筛选筛选时要关注下述5个方面:1)已删去的类之间的关联也要删除2)无关的或在在实实现现阶阶段段考考虑虑的的关关联联要要删删除除3)描述瞬时事件的关系不应作为关联(关联应该描述问题域的静态结构)4)三个或三个以上对象的关联要作分解或描述成限定关联5)冗余关联要删除3. 进一步完善完善时要关注下述4个方面:1)正名:选择更明确的名字作为关联名2)分解:分解已确定的类以适用关联3)补充:及时补充遗漏关联4)标明重数:但无需花过多精力图10.3ATM系统原始的类图10.3.3划分主题按问题领域而不是用功能分解来高度概括主题10.3.4确定属性属性是类中所定义的数据,它表明了对象的性质。
一般来说,确定属性的过程包括分析和选择两个步骤:1. 分析通常用名词词组表示属性,如:“汽车的颜色”、“光标的位置”,而用形容词表示可枚举的具体属性,如:“红色的”、“白色的”。
在分析阶段应该仅考虑与具体应用直接相关的属性,而不不要要考考虑虑那那些些纯纯粹粹用用于于实实现现的的属属性性。
2. 选择选择时要关注下述6个方面:1) 区分对象与属性(仅关注其值的是属性);2) 区分关联类属性与对象属性(例:依赖某个关联链的性质是关联类属性);3) 区分限定词和属性(能用限定词更好)4) 区分内部状态和属性(例:某性质是对象的内部状态)5) 忽略无影响的属性(在分析阶段应该忽略对大多数操作无影响的属性)6) 注意属性的相关性(分解该“类”)图10.4ATM系统对象模型中的属性10.3.5识别继承关系确定了类中的属性之后,就可以利用继承机制共享公共性质,并对众多的类重新加以组织。
一般来说,可以应用两种方式建立继承(即泛化)关系:(1)自底向上:抽象出现有类的共同性质泛化出父类;(2)自顶向下:把现有类细化成更具体的子类。
图10.5带有继承关系的ATM对象模型10.3.6反复修改对象模型的建立是一个反复修改、逐步完善的迭代过程。
对于初学者来说,可尝试用面向对象方法开发几个较小系统,取得一定的经验后,再总结更适合自己的工作方式。
1. 分解“现金兑换卡”类2. “事务”由“更新”组成3. 把“分行”与“分行计算机”合并图10.6修改后的ATM对象模型10.4建立动态模型一般来说,建立动态模型的典型步骤如下:(1)编写脚本,确保不遗漏正常的交互行为;(2)从脚本中提取事件,确定每个事件的发送对象(触发该事件动作的对象)和接受对象;(3)画事件跟踪图(Sequence Diagram,时序图或顺序图,描述对象之间的时间顺序)(4)画状态图(5)审查状态图的完整性和一致性10.4.1编写脚本脚本是指系统在某一执行期间内出现的一系列事件(脚本描述事件序列,是用例的实例,是系统的一种实际使用方法。
),它描述用户(或其它外部设备)与系统之间的交互过程;对于每个事件,脚本都应该指明触发该事件的动作对象(如:系统、用户或其它外部事物)、接受事件的目标对象,以及该事件的参数。
[目的]编写脚本的目的是保证不遗漏重要的交互步骤。
[实质] 编写脚本的实质是分析用户对与系统交互过程的要求。
编写脚本时,首先编写正常情况的脚本,其次考虑特殊情况,最后考虑出错情况;如有可能还应该允许用户“异常操作”。
此外还应该提供“在线帮助”、状态查询等在基本交互行为之上的“通用”交互行为。
10.4.2设想用户界面用户界面是用户对系统的“第一感”,它往往对用户是否喜欢一个系统起很重要的作用,因此在分析阶段也不能完全忽略用户界面。
设计用户界面时重要的是用户和系统进行信息交换的方式。
图10.7 ATM的界面格式10.4.3画事件跟踪图脚本为建立动态模型(状态图)提供了很好的基础,但用自然语言书写的脚本还不够简明,并且会有二义性,因此在画状态图前,我们往往先画出事件跟踪图[简化的UML顺序图(Sequence Diagram,时序图)],为此需进一步明确事件(事件就是引起系统做动作或(和)转换状态的控制信息)及事件与对象的关系。
1. 确定事件事件包括系统与用户(或外部设备)交互的所有信号、输入、输出、中断、动作等,要注意的是(1)对象的动作也是事件;(2)对控制流产生相同效果的那些事件应作为一类事件。
经过分析要确定每类事件的发送对象和接受对象。
2. 画出事件跟踪图从脚本中提取出各类事件,并确定每类事件的发送对象和接受对象,就可以用事件跟踪图把事件序列以及事件与对象的关系表示出来,事件跟踪图是扩充的脚本,更是简化了的UML顺序图。
图10.8ATM系统正常情况脚本的事件跟踪图(时序图)10.4.4画状态图状态图描述了事件与对象状态(对象生命周期中的阶段)的关系。
UML用状态图来表示对象的动态行为,它确定了由事件序列引出的状态序列。
系统分析员应仅考虑系统内具有重要交互行为的哪些类,即每个主动发送事件的对象类的动态行为用一张状态图来表示,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型。
从一张事件跟踪图出发画状态图时,要关注影响一类对象的事件,即考虑指向某条竖线(对象)的箭头线,把这些事件作为状态图中的有向边(箭头线),边上标以事件名,两个事件之间的间隔就是一个状态。
图10.9 ATM类的状态图图10.10总行类的状态图图10.11分行类的状态图10.4.5审查动态模型各个类的状态图通过共享事件合并起来,就构成了系统的“动态模型”,应该细致审查动态模型的完整性和一致性10.5建立功能模型功能模型表明了系统中数据之间的依赖关系,以及有关的数据处理功能,它由一组DFD组成,其中处理功能可以用IPO图(或表)、伪码等描述。
10.5.1画出基本系统模型图[最高层的DFD]图10.12ATM系统的基本系统模型10.5.2画出功能级数据流图图10.13ATM系统的功能级数据流图10.5.3描述处理框功能10.6定义服务对象是由描述其属性的数据,以及可以对这些数据施加的操作,封装在一起构成的独立单元。
在确定类中的操作时,既要考虑该类实体的常规行为,又要考虑本系统中特殊的服务。
1.常规行为在分析阶段可以认为,类中定义的每个属性都是可以访问的,也就是类中已经定义了读、写该类每个属性的操作,而无需显式表示这些常规操作。
2. 从事件导出的操作状态图中若有发往对象的事件,该对象必须要有相应的操作。
3. 与数据流图中处理逻辑对应的操作DFD中的每个处理逻辑都与一个对象(或几个对象)上的操作相对应。
4. 利用继承减少冗余操作应尽量利用继承机制减少所需定义的操作。
10.7小结习题101. 用面向对象方法分析研究本书习题2第2题中描述的储蓄系统,试建立它的对象模型、动态模型和功能模型。
2. 用面向对象方法分析研究本书习题2第3题中描述的机票预订系统,试建立它的对象模型、动态模型和功能模型。
3. 用面向对象方法分析研究本书习题2第4题中描述的患者监护系统,试建立它的对象模型、动态模型和功能模型。
4. 下面是自动售货机系统的需求陈述,试建立它的对象模型、动态模型和功能模型:。