《面向对象分析与设计》一2.2 面向对象分析综述

2.2 面向对象分析综述

系统分析就是研究问题域,产生一个满足用户需求的系统分析模型。这个模型应能正确地描述问题域和系统责任,使后续开发阶段的有关人员能根据这个模型继续进行工作。
自软件工程学问世以来,已出现过多种分析方法,其中有影响的是功能分解法、数据流法、信息建模法和20世纪80年代后期兴起的面向对象方法。前三种分析方法在历史上发挥过应有的作用,用它们也建立过许多成功的系统,直到今天仍然被一些开发者所采用。我们在谈到这些方法的缺点时不是要否定它们,而是针对具体问题进行讨论。应该指出,面向对象的分析正是在许多方面借鉴了以往的分析方法。
面向对象的分析,强调用对象的概念对问题域中的事物进行完整的描述,刻画事物的性质和行为,同时也要如实地反映问题域中的事物之间的各种关系,包括分类关系、组装关系等静态关系以及动态关系。
自20世纪80年代后期以来,相继出现了多种流派的OOA及OOD方法。各种方法的共同点是,都基于面向对象的基本概念与原则,但是在概念与表示法、系统模型和开发过程等方面又各有差别。统一建模语言UML的出现,使面向对象建模概念及表示法趋于统一。我国的软件行业标准“面向对象的软件建模规范——概念与表示法”就是参照UML制定的。下面分别阐述在OOA阶段本书所使用的概念与表示法、OOA模型及过程指导。
1概念与表示法
在OOA阶段所使用的概念包括对象、属性、操作、类、继承、聚合和关联等,这些概念属于UML的核心内容,且表示法也是相一致的。
2OOA模型
OOA模型就是通过面向对象的分析所建立的系统分析模型,表达了在OOA阶段所认识到的系统成分及彼此之间的关系。在可视化方面,用建模概念所对应的表示法绘制相应种类的图。
目前的各种OOA方法所产生的OOA模型从整体形态、结构框架到具体内容都有较大的差异。OOA模型的差异集中地体现在各种方法所强调的重点和主要特色方面。一般来说,各种方法只把它认为最重要的信息放在模型中表示,其他信息则放到详细说明中,作为对模型的补充描述和后续开发阶段的实施细则。
图22所示的OOA模型是按照图加相关文档这种方式组织的。在第14章要对模型和图进行详细阐述。

使用用况图来捕获与描述用户的要求,即系统的需求,从而建立系统的需求模型(用况模型)。尽管有关建立用况模型的内容并不是面向对象的,但在UML中详细地规定了这方面的内容,且用况模型已经被人们普遍地接受,因而本书把建立用况模型的有关知识和技术放在OOA中讲述。按照某些做法,也可以在OOA之前利用用况模型对系统的需求进行捕获与描述。在开发系统时,上述两种做法是不矛盾的,这只是一个阶段划分问题。
用类图构建的模型是系统的基本模型,主要是因为类图为面向对象编程提供了最直接的依据。基本模型为系统的静态模型,它描述系统的结构特征。类图的主要构成成分是:类、属性、操作、泛化、关联和依赖。这些成分所表达的模型信息可以从以下三个层次来看待:
 对象层:给出系统中所有反映问题域与系统责任的对象。用类符号表达属于一个类的对象的集合。类作为对象的抽象描述,是构成系统的基本单位。
 特征层:给出每一个类(及其所代表的对象)的内部特征,即给出每个类的属性与操作。该层要以分析阶段所能达到的程度为限给出类的内部特征的细节。
 关系层:给出各个类(及其所代表的对象)彼此之间的关系。这些关系包括泛化、关联和依赖。该层描述了对象与外部的联系。
概括地讲,OOA基本模型的三个层次分别描述了:1)系统中应设立哪几类对象;2)每类对象的内部构成;3)每类对象与外部的关系。三个层次的信息(包括图形符号和文字)叠加在一起,形成完整的类图。
按照UML的做法,可以建立对象图,以作为类图的补充。
为建立系统的行为模型,需要建立交互图、活动图或状态机图。交互图主要有两种形式:顺序图和通信图,每种形式强调了同一个交互的不同方面。顺序图表示按时间顺序排列的交互,通信图表示围绕着角色所组织的交互以及角色之间的链。与顺序图不同,通信图着重表示扮演不同角色的对象之间的连接。活动图展示从活动到活动的控制流和数据流,通常用于对业务过程和操作的算法建模。状态机图展示对象在其生命周期内由于响应事件而经历的一系列状态,以及对这些事件做出的反应。
包图用于组织系统的模型,其中的包是在模型之上附加的控制复杂性的机制。通过对关系密切的元素进行打包,有助于理解和组织系统模型。
相对基本模型来说,系统的行为模型和用包图建立的系统组织模型,都作为系统的辅助模型。
以图的方式建立模型是不够的。对各种图中的建模元素,还要按一定的要求进行规约(即详细描述)。通过用图表示的模型加上模型规约的方式,构成完整的模型。有关模型规约的具体格式,参见附录B。
3OOA过程

各种OOA方法一般都要规定一些进行实际分析工作的具体步骤,指出每个步骤应该做什么以及如何做,并给出一些启发策略,用以告诉使用者对各种情况应该怎样处理以及从哪些方面去思考能有助于实现自己的目标。

现在还没有关于面向对象的软件建模过程指导方面的国际规范,各种OOA方法在建立模型的过程方面都有差别,且详简也有所不同。本书所使用的建模过程指导,是从由数十家高校、科研院所和软件企业参加的国家重点科技攻关计划“青鸟工程”所研发的面向对象软件开发规范中总结出来的,图23给出了其具体内容。

图23给出的是OOA过程模型,其中只给出了过程中的活动,而没有展示过程角色和资源等因素。图中的箭头表明建模活动是可以回溯的,也可以交替进行。例如,在发现了一些(并非全部)对象之后,就可以开始定义它们的属性与操作;此时若认识到某些关系,可以及时建立这些关系;在建立关系时得到某种启发,联想到其他对象,又可及时转到发现对象的活动。在CASE工具的支持下,各种活动之间的切换可以相当灵活。有些软件开发组织习惯于规定一个基本的活动次序,使OOA过程按这种次序一步一步地执行,这也是可以的。其实各软件开发组织应该依据或参照经过检验的开发过程,建立适合自己需要的开发过程。
以下是对实施OOA过程的几点建议:
1)把建立需求模型放在分析工作的开始。通过定义用况和建立用况图来对用户需求进行规范化描述。
2)把建立基本模型的三个活动安排得比较接近,根据需要随时从一个活动切换到另一个活动。
3)建立交互图、状态机图或活动图的活动可以安排在基本模型建立之后,但也可以与基本模型的活动同时进行,即在认识清楚了若干对象后,就开始绘制反映系统动态行为的模型图。
4)建立模型规约的活动应该分散地进行,结合在其他活动之中。最后作一次集中的审查与补充。
5)原型开发可反复地进行。在认识了基本模型中一些主要的对象之后就可以做一个最初的原型,随着分析工作的深入不断地进行增量式的原型开发。原型开发的工作还可以提前到建立需求模型的阶段进行。在开发的早期阶段建立的原型,主要用于捕获与证实用户的需求。
6)在分析较小的系统时可以省略划分包的活动,或把该活动放在基本模型建立之后进行。在分析大中型系统时,可以按需求先划分包,根据包进行分工,然后开始通常的分析;在分析的过程中,若需要仍可以用包来组织模型元素。

习题
1简述OOA模型及OOA过程。
2为什么要进行OOA?
3简述问题域与系统责任间的关系。
4 OOA是如何应对需求变化性的?
5为什么把用类图构建的模型称为基本模型?
6你对本章讲述的分析面临的主要问题有过什么实际感受?请举例说明。

时间: 2024-09-29 15:09:35

《面向对象分析与设计》一2.2 面向对象分析综述的相关文章

《面向对象分析与设计》一2.1 分析面临的主要问题

2.1 分析面临的主要问题 自从软件工程学问世以来,先后出现过多种分析方法.各种分析方法从不同的观点提出了认识问题域并建立系统模型的理论与技术,使软件开发走上了工程化和规范化的轨道.然而,分析工作仍然面临着许多难题.随着时代的发展和科技的进步,人们对软件的要求越来越高,分析所面临的问题也越来越突出.主要的问题包括:对问题域和系统责任的正确理解.人与人之间的正确交流.如何应对需求的不断变化以及软件复用对分析的要求.1问题域和系统责任在过去的几十年中,人们都认为大规模的软件开发是一项冒险的活动.人

面向对象的分析与设计

面向对象的范式是思考程序设计时一种新的.而且全然不同的方式,许多人最开始都会在如何构造一个项目上皱起了眉头.事实上,我们可以作出一个"好"的设计,它能充分利用OOP提供的所有优点. 有关OOP分析与设计的书籍大多数都不尽如人意.其中的大多数书都充斥着莫名其妙的话语.笨拙的笔调以及许多听起来似乎很重要的声明(注释⑨).我认为这种书最好压缩到一章左右的空间,至多写成一本非常薄的书.具有讽剌意味的是,那些特别专注于复杂事物管理的人往往在写一些浅显.明白的书上面大费周章!如果不能说得简单和直接

uml学习入门 2 面向对象方法分析与设计

1.面向对象分析 面向对象分析的目的是知识客观世界并进行建模. 其实在面向对象的分析过程中也是对需求的分析和理解. 使用面向对象分析的过程一般如下: 获取问题陈述-->确定类-->准备数据字典-->确定关联-->使用继承来细化类型-->完善对象模型-->建立对象动态模型-->建系统功能模型 (1) 获取问题陈述就是与用户一起理解系统,搞清楚系统的业务逻辑,发现用户的需求,在这个时候我们应该以一个用户的身份去看待这些需求.很多设计人员在这个时候没有做足功能,导致最后

黑马程序员 十七、面试题之交通灯管理系统—面向对象的分析与设计、Road 类、Lamp 类、LampController 类、MainClass类)

Java帮帮-IT资源分享网  黑马程序员--面试题之交通灯管理系统 Road 类.Lamp 类.LampController 类.MainClass类   需求: 交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 ... Ø 信号灯忽略黄灯,只考虑红灯和绿灯. Ø 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制. Ø 具体信号灯控

《面向对象分析与设计》一1.5面向对象方法的发展史及现状简介

1.5面向对象方法的发展史及现状简介 在这里把面向对象方法的发展分为三个阶段:雏形阶段.完善阶段和繁荣阶段. (1) 雏形阶段 20世纪60年代挪威计算中心开发的Simula 67,首先引入了类的概念和继承机制,它是面向对象语言的先驱.该语言的诞生是面向对象发展史上的第一个里程碑.随后20世纪70年代的CLU.并发Pascal.Ada和Modula2等语言对抽象数据类型理论的发展起到了重要作用,它们支持数据与操作的封装.犹他大学的博士生Alan Kay设计出了一个实验性的语言Flex,该语言从

《面向对象分析与设计》一1.2 面向对象的基本思想

1.2 面向对象的基本思想 面向对象方法已深入到计算机软件领域的几乎所有分支.它不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并进行问题求解,以及如何进行软件系统构造的软件方法学.因而,面向对象方法有着自己的基本思想. 面向对象方法解决问题的思路是从现实世界中的客观对象(如人和事物)入手,尽量运用人类的自然思维方式从不同的抽象层次和方面来构造软件系统,这与传统开发方法构造系统的思想是不一样的.特别是,面向对象方法把一切都看成是对象.下面

《面向对象分析与设计》一第1章 面向对象方法概论

第1章 面向对象方法概论 本章首先简要地回顾传统软件开发方法中存在的问题,然后重点讨论面向对象的基本思想.主要概念和基本原则,论述面向对象方法的主要优点,并对面向对象方法的发展史和现状以及统一建模语言(Unified Modeling Language, UML)进行简介. 通过对本章的学习,读者要了解面向对象方法的主要内容,掌握基本知识,为进一步学习与应用面向对象分析和设计方法打下基础.

《面向对象分析与设计》一1.4面向对象方法的主要优点

1.4面向对象方法的主要优点 本节从认识论的角度和软件工程方法的角度看一下面向对象方法带来的益处,并把面向对象方法与传统方法进行比较,看面向对象方法有什么优点. 1. 从认识论的角度面向对象方法改变了开发软件的方式 面向对象方法从对象出发认识问题域,对象对应着问题域中的事物,其属性与操作分别刻画了事物的性质和行为,对象的类之间的继承.关联和依赖关系能够刻画问题域中事物之间实际存在的各种关系.因此,无论是系统的构成成分,还是通过这些成分之间的关系而体现的系统结构,都可直接地映射到问题域.这使得运用

《面向对象分析与设计》一1.6关于统一建模语言UML

1.6关于统一建模语言UML UML最初是在多种面向对象分析与设计方法相互融合的基础上形成的,后来发展成为也可以用于业务建模以及其他非软件系统建模的语言.它于1997年11月被对象管理组织(Object Management Group)采纳为建模语言规范,随后被产业界和学术界广泛接受. UML定义了建立系统模型所需要的概念并给出了表示法,但它并不涉及如何进行系统建模.因此它只是一种建模语言,而不是一种建模方法.UML是独立于开发过程的,也就是说它可以适用于不同的开发过程. UML 2.4规范由

《面向对象分析与设计》一3.5 检查与调整

3.5 检查与调整 对于各用况图应该综合考虑,进行检查与调整.下面针对参与者和用况给出一些需要注意的检查与调整原则. 1参与者 1) 确定系统环境中的所有角色,并都归入了相应的参与者. 2) 每个参与者都至少与一个用况相关联. 3) 若一个参与者是另一个参与者的一部分,或扮演了类似的角色,考虑把它们合并或在它们之间建立继承关系. 2用况 1) 每个用况都至少与一个参与者相关联. 2) 若两个用况有相同或相似的序列,可能需要合并它们,或抽取出一个新用况,在它们之间建立包含.扩展或继承关系. 3