4面向对象方法学
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 1 页
第四讲 面向对象方法学
生命周期方法学回顾
1、 生命周期方法学的特点
生命周期方法学是一种传统的软件工程方法学,其主要特点是:
严格的分阶段计划
以时间分解为基础来控制和管理整个软件开发过程的,将软件开发过程划分为许多首尾相接、相互独立的阶段。
“瀑布式”开发模式
软件开发阶段在时间上严格地实施顺序,不能反复。每个阶段完成后才进行下一个阶段的工作,并且前一个阶段的成果作为下一个阶段工作开始的依据。
严格的技术审查和管理复审
在软件开发的每一个阶段结束后,进行严格的技术审查和管理复审,排除所有潜在的错误,保证瀑布模型的实施,并从成本和进度上管理和控制软件开发。
结构化技术
结构化技术内涵为“自上而下,逐步求精”,生命周期方法学在各个阶段采用结构化技术,包括结构化分析、结构化设计、结构化程序设计等。
从以上特点可以看出,生命周期方法学是以软件功能为基础来进行软件开发的,面向的软件实体由一段段可执行的程序代码组成,并以模块作为基本的软件结构体,可以由程序代码的运行来实现所需的软件功能,满足用户的需求。 也正是由于生命周期方法学的以上特点,使得它在软件工程实践中也暴露出
了许多问题:
对功能需求分析的依赖
生命周期方法学的软件开发成果对于功能需求分析有很强的依赖性,要求需求分析阶段的结果一定要全面、准确、清晰,不能有任何错误或模糊的东西。而一旦对需求分析中确定的需求进行了任何改变,都会直接影响到整个软件的设计和实现,对软件进行的修改要付出很大的代价。
但是在实际操作过程中,一方面用户很难一次性地写出既完善又正确无误的功能要求,另一方面所确定的功能要求,又有可能随着时间的变化或者用户对系统理解的逐步深入发生变化。这种软件功能需求的变化在实际软件项目的开发过程中是不可避免和屡见不鲜的,但它对生命周期方法学来说又是灾难性的,这使
得生命周期方法学在软件开发实践中往往处于被动的地位。
软件重用性差
如果某个软件开发中的成果不能够保存下来,并且在其它软件的开发过程中得到应用,那么对于软件开发的生产力来说,就是一种极大的浪费。使软件开发中产生的成果能够被别的软件项目所利用,称为软件的重用性。
在生命周期方法学中,对软件进行模块划分,是致力于提高软件重用性的一种努力。软件模块具有相对独立的功能,能够完成对信息的某一种处理,因此理论上可以被别的用到相同功能的软件所使用。但各种不同的软件系统中,完全相同的功能是很难见到的,总会因为数据类型、处理细节、允许范围等等原因存在
第 2 页
一定的差异。这样,除了一些非常基础的函数运算以外,大量的功能模块并不直接被利用到别的软件中去,而必需要进行一定的修改。这些修改的工作既要在理解原来程序的基础上进行,又要保证对该模块的修改不会影响到与这个模块有耦合关系的其它模块,所以并不简单。生命周期方法学并没有很好地解决软件重用性的问题,也就直接影响了软件生产率的提高。
维护的代价高
任何软件在它的生命周期中,都必然会包含长期的、大量的维护工作。对软件进行维护就是对软件进行修改,但是在生命周期方法学开发软件的过程中,任何对软件的修改都会返回到软件开发的前面阶段中去,因此都需要很大的分析、修改、测试的代价。
虽然使用了生命周期方法学后,软件的文档齐备、可理解性增强,能够进行维护,但是瀑布式开发模式的限制使得每一次维护工作都变成了一次小型的软件开发工作,并且功能模块之间的耦合关系使得维护工作给原来的软件引入了新的不确定因素,降低了软件的可靠性,这样的软件结构还是不容易实现维护要求的。
与现实世界的差异
现实世界是一个复杂的系统,它由许多相互独立的元素组成,这些元素之间互相作用、互相影响,共同构成系统整体。每个元素的内部特性并不受到系统的完全控制,相互间的通讯和协同才是系统整体功能产生的原因。
而在采用生命周期方法学中,整个软件系统是按照一个统一的功能整体来考虑的,所有的功能模块是这个功能整体的某个从属部分,完成功能整体的某一部分内容,自身并不具有独立性和自主性。因此,整个软件系统可以说是一个受到“完全控制”的整体,不管在开发过程中还是在系统的实际运行过程中,每一个细节都是受到完全的、透明的控制的。这种软件系统和它对应的现实世界模型的不同结构,使得必需要经过某种转换才能够实现互相沟通,降低了软件系统的可理解性。
与硬件和运行平台发展趋势的分歧
开发出高性能的计算机系统一直是技术人员的愿望。最初的计算机采用串行的“诺意曼”方式,其后硬件技术中逐渐产生了并行处理技术。并行处理技术是指一个计算机系统同时能够进行多项处理,这些处理互相独立,共同完成某一项复杂的处理任务。
虽然并行处理技术在目前的多数场合还是转换成为实现高性能的“诺意曼”方式计算机的一种工具,但是这种思想对软件运行平台产生了积极的影响。为了提高硬件利用的效率,很多软件运行平台均开始支持多任务。所谓多任务,就是同一套计算机系统能够“同时”进行多项任务的处理。硬件和运行平台的并行、多任务特性,事实上使某个大任务的执行过程变成了多个互相独立、又互相作用的小任务组成的系统,这和生命周期方法学面向过程,
统一调度控制软件的运行流程的思想出现了越来越大的分歧。
数据与处理过程的分离
任何软件系统都是信息处理系统,也就是数据处理系统。特别是随着商业、行政事务领域对软件需求的迅速增加,数据在软件系统中的重要性也随之增加。而在生命周期方法学中,对于系统的分析和设计,都是基于功能的,也就是说,是基于对数据的处理算法、处理过程的,由处理过程和数据结构构成整个软件系统的实体,而数据只是处理过程所操作的对象而已。数据本身的静态性和被动性,
使得整个软件系统的数据变成了一些“死”的数据,只能根据功能操作产生变化,自身不具有任何独立性。这和以数据为中心的任务需求是不相符合的,也不利于对数据的应用和保护。这种数据与处理过程的分离还使得整个软件系统分裂成为了软件实体(由处理过程组成)与数据两大部分,互相之间的关系变得错综复杂,不仅不利于理解,也增加了软件开发本身的难度。
正是因为生命周期方法学存在这样一些问题,已经不能很好地适应软件产业的发展,所以面向对象方法学才被引入软件工程中来。
一、面向对象方法学的基础知识
1、面向对象方法学的基本概念
(1)对象
对象是现实世界中系统组成元素在软件中的对应物。每个实际的系统是由许多相互独立又相互作用的元素共同构成的,这些元素的性质和行为构成了系统的基本内容。将实际系统中每个元素抽象出来,在解决实际系统某个问题的软件中,对应给予一个元素进行模拟,称之为对象。
这个对象的概念是一个非常广义的概念,在不同的任务中它所指的内容并不相同。比如要考察一个公司的人际关系,那么公司内的每一个个人就可以抽象为一个对象;如果要考察的是公司的经营情况,那么可能公司内的每一个部门会抽象为一个对象。以什么元素抽象作为对象,要看所要考察的系统的实际内容,和所要考察的项目的实际要求。
实际系统中,每一个元素都是相对独立,又相互作用的。也可以说,是主动的,或者说是“活”的。这些元素既具有自己的性质,又具有自己的行为。它们的性质是由表明某方面状态的数据来表现的,而它们的行为则是通过它们对其它元素某方面状态的影响,或者其它元素对它们自身某方面状态的影响来表现的。因此,可以认为实际系统中的元素既具有数据又具有对自身数据的操作,数据和操作构成一个整体。同样,在对应于实际系统的软件系统中,对应于实际元素的对象也同时具有数据和操作这两种特性,并且二者结合在一起,共同构成一个在软件系统中独立的“活”的元素。
实际系统中的元素的性质不可能直接被改变,其它的元素只能通过与它之间的作用才能使它的性质发生改变。软件中的对象也具有同样的特性,就是它所具有的数据只能通过它所具有的操作才能改变,而不能直接被别的对象改写。对象的所有数据都被看作是私有的、局部的,外界不能直接访问。其它对象只能够通过它提供给外界的操作来影响所包含的数据,并且数据的变化是由对象自己根据操作和进行操作时的条件完成的。对象的这种特性称为“封装”。因此,对象有如下定义:
定义:对象是软件系统中对实际系统的元素的一种抽象,它由表示属性的数据
和对这些数据的操作封装而成。
根据对象的定义,它有这样一些特点:
以数据为核心
对象的核心是它的数据,数据的不同表明了对象的不同状态,也对应了实际系统中元素的不同性质。对象的操作是对这些数据的变动,是肯定与对象的某些数据有关。
第 3 页