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

2.1 分析面临的主要问题

自从软件工程学问世以来,先后出现过多种分析方法。各种分析方法从不同的观点提出了认识问题域并建立系统模型的理论与技术,使软件开发走上了工程化和规范化的轨道。然而,分析工作仍然面临着许多难题。随着时代的发展和科技的进步,人们对软件的要求越来越高,分析所面临的问题也越来越突出。主要的问题包括:对问题域和系统责任的正确理解、人与人之间的正确交流、如何应对需求的不断变化以及软件复用对分析的要求。
1问题域和系统责任
在过去的几十年中,人们都认为大规模的软件开发是一项冒险的活动。人们之所以这么认为,其根本原因在于软件的复杂性,而且这种复杂性还在不断地增长。
软件的复杂性首先源于问题域(problem domain)和系统责任(system responsibility)的复杂性。
问题域:被开发系统的应用领域,即在现实世界中这个系统所涉及的业务范围。
系统责任:被开发系统应该具备的职能。
这两个术语的含义在很大部分上是重合的,但不一定完全相同。例如,要为银行开发一个金融业务处理系统,银行就是这个系统的问题域。银行的日常业务(如金融业务、个人储蓄、国债发行和投资管理等)、内部管理及与此有关的人和物都属于问题域。尽管银行内部的人事管理属于问题域,但是在当前的这个系统中它并不属于系统责任。

像对计算机信息的定期备份这样的功能属于系统责任,但不属于问题域。图21是对本例的一个图示。

图21中,左边的椭圆所示的范围为问题域部分,右边的椭圆所示的范围为系统责任部分,二者之间有很大的交集。
对问题域和系统责任进行深入的调查研究,产生准确透彻的理解是成功地开发一个系统的首要前提,也是开发工作中的第一个难点。这项工作之所以困难是由于以下原因:
 软件开发人员要迅速、准确、深入地掌握领域知识。
俗话讲,隔行如隔山。要开发出正确而完整的系统,就要求软件开发人员必须迅速地了解领域知识,而不能要求领域专家懂得全部的软件开发知识。这对软件开发人员来说是一个挑战。不但如此,分析员对问题域的理解往往需要比这个领域的工作人员更加深入和准确。许多领域的工作人员长期从事某一领域的业务,却很少考虑他们司空见惯的事物所包含的信息和行为,以及它们如何构成一个有机的系统。系统分析员则必须透彻地了解这些。此外,软件开发人员还要考虑如何充分发挥计算机处理的优势,对现实业务系统的运作方式进行改造,这需要系统分析员具有比领域专家更高明的见解。这是因为许多系统的开发并不局限于简单地模拟问题域中的业务处理并用计算机代替人工操作,还要在计算机的支持下,对现行系统的业务处理方式做必要的改进。
 现今的系统所面临的问题域比以往更为广阔和复杂,系统比以往更为庞大。
随着计算机硬件性能的提高和价格的下降,以及软件技术的发展使得开发效率的不断提高,人们把越来越多、越来越复杂的问题交给计算机解决。相对而言,问题域和系统责任的复杂化对需求分析的压力比其他开发阶段更为巨大。
OOA强调从问题域中的实际事物以及与系统责任有关的概念出发来构造系统模型。这使得系统中的对象、对象的分类、对象的内部结构以及对象之间的关系能良好地与问题域中的事物相对应。因此,OOA非常有利于对问题域和系统责任的正确理解。
2交流问题
如果分析阶段所产生的文档使得分析员以外的其他人员都难以读懂,那就不利于交流,随之而来的是各方对问题的理解会产生歧义。这会使彼此的思想不易沟通,并容易隐藏许多错误。对软件系统建模涉及如下人员之间的交流:
 开发人员与用户及领域专家间的交流。为了准确地掌握系统需求,双方需要采用共同的语言来理解和描述问题域。以往多采用自然语言描述需求,效果并不理想。
 开发人员之间的交流。分析人员在系统建模时经常需要分工协作,对问题要进行磋商,并要考虑系统内各部分的衔接问题。分析人员与设计人员之间也存在着工作交接问题,这种交接主要通过分析文档来表达,也不排除口头的说明和相互讨论。这些要求所采用的建模语言和开发方法应该一致,且不要过于复杂。
 开发人员与管理人员之间的交流。管理人员要对开发人员的工作进行审核、确认、进度检查和计划调整等。这就需要有一套便于交流的共同语言。这里“语言”是广义的,它包括术语、表示符号、系统模型和文档书写格式等。
OOA充分运用人类日常活动中采用的思维方法和构造策略来认识和描述问题域,构造系统模型,并且在模型中采用了直接来自问题域的概念。因此,OOA为改进各类人员之间的交流提供了最基本的条件——共同的思维方式和共同的概念。
3需求的不断变化
社会的发展是迅速的,这就要求软件系统也要不断地随之变化。此外,客户的主客观因素、市场竞争因素、经费与技术因素,都会影响需求的变化。显然,软件开发者必须以合作的态度满足用户需求。于是系统的应变能力的强弱,便是衡量一种分析方法优劣的重要标准。那么,系统中哪些因素是容易变化的?哪些因素是比较稳定的?人们在实践中发现:当需求发生变化时,系统中最容易变化的部分是功能部分(对OO方法而言则是对象的操作或操作的协作部分);其次是对外的接口部分;第三是描述问题域事物的数据(对OO方法而言即对象的属性);相对稳定的部分是对象。
OOA之所以对变化比较有弹性,主要是获益于封装和信息隐蔽原则。它以相对稳定的成分(对象)作为构成系统的基本单位,而把容易变化的成分(属性及部分操作)封装并隐藏在对象之中,它们的变化主要影响到对象内部。对象只通过接口对外部产生有限的影响。这样就有效地限制了一处修改处处受牵连的“波动效应”。从整体范围看,OOA以对象作为系统的基本构成单位,对象的稳定性和相对独立性使系统具有一种宏观的稳定效果。即使需要增加或减少某些对象,其余的对象仍能保持相对稳定。
4软件复用的要求
软件复用是提高软件开发效率、改善软件质量的重要途径。20世纪80年代中期以前的软件复用,主要着眼于程序(包括源程序和可执行程序)的复用。到20世纪80年代末期,人们已开始提出对软件复用的广义理解,注意到分析结果和设计结果的复用将产生更显著的效果。分析结果的复用是指把分析模型中的可复用部分用于多个系统的开发,并要求一个分析模型可在多组条件下予以设计与实现。此外,还可以在把一个老系统改造为基于新的软硬件支持的新系统时,尽量地复用旧的分析结果。
OO方法的继承本身就是一种支持复用的机制,它使特殊类中不必重复定义一般类中已经定义的属性与操作。无论是在分析、设计,还是编程阶段,继承对复用带来的贡献都是显而易见的。
由于OOA模型中的一个类完整地描述了问题域中的一类客观事物,并且它是独立的封装实体,它很适合作为一个可复用成分。由一组关系密切的类(如具有一般—特殊结构、整体—部分结构或一组相互关联的类)可以构成一个粒度更大的可复用成分。在OO开发中,先在OOA阶段建立的是一个符合问题域、满足用户需求的OOA模型,然后再根据具体实现条件进行系统设计,这样针对一个分析模型可有多个实现,使得OOA结果能够通过复用而扩展为一个系统族。

时间: 2024-09-20 15:24:49

《面向对象分析与设计》一2.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

面向对象分析与设计—四色原型模式(彩色建模、领域无关模型)

面向对象分析与设计-四色原型模式(彩色建模.领域无关模型) 1.背景介绍 至今我都清楚的记得我第一次被面试官问起什么叫"建模"技术时的情景,那是好 几年前的事情了,当时是胸有成竹的去面试一个有关系统分析.设计的.NET高级软件工程师岗位.面试官几乎没问我有关.NET方面的任何技术实现,他就简 单的问了问:"你如何把握你所分析出来的系统的正确性?",我当时有点小激动,觉得这个问题应该很简单嘛,都是概念而已,让他直接点问,结果他来一句: "你懂建模吗?,能给我