ch53面向对象软件开发方法

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

软件工程——面向对象软件开发方法1/139面向对象方法概述面向对象(OO,ObjectOriented)技术是软件工程领域中的重要技术,这种软件开发思想比较自然地模拟了人类认识客观世界的方式,成为当前计算机软件工程学中的主流方法“面向对象”(Object-Oriented)是针对“面向过程”一词提出的,是从本质上区别于传统的结构化方法的一种新方法,新思路应该特别强调的是,面向对象技术不仅仅是一种程序设计方法,更重要的是一种对真实世界的抽象思维方式软件工程——面向对象软件开发方法2/139面向对象方法概述——背景传统开发方法由一整套过程、方法和工具作为支撑,在一定时期内对解决软件危机起了很大作用,曾指导开发出很多成功的系统,但其缺点也日益显现传统软件开发方法不能完全消除软件危机,并且生产率的提高不能满足需要从50年代到80年代,美国的软件生产率翻了两翻。但社会对软件的需求每年以两位数字的百分比在增长。软件的开发已成为影响计算机应用的瓶颈软件工程——面向对象软件开发方法3/139面向对象方法概述——背景(1)传统开发方法存在的问题软件维护系统是围绕着如何实现一定的行为来进行的,当系统行为易变,需要常常修改时,修改极为困难软件结构严重依赖于系统功能,基于功能分解的系统结构将很难进行修改和扩充用户功能需求的改变将导致软件结构的相应改变,给软件的开发及维护造成很大困难数据和对数据的处理操作是分离的,对数据的修改将影响某个功能的实现传统开发方法的软件维护比软件开发效率低几十倍。80年代,美国一年花费的软件维护费用高达300多亿美元。90年代,软件维护费用占系统研制、开发总费用的70%。软件工程——面向对象软件开发方法4/139面向对象方法概述——背景(2)传统开发方法存在的问题自顶向下功能分解的分析方法极大地限制了软件的可重用性结构化分析、设计技术的本质是功能分析从代表目标系统整体功能的单个处理着手,自顶向下不断把复杂的处理分解为子处理,层层分解下去,直至仅剩下若干个容易实现的子处理为止传统方法通过建立标准函数库和子程序库实现软件的可重用性,然而标准函数库等只是对建立在数学模型基础上的应用问题有可重用的功效,而对其它实际应用问题则不能很好地进行软件重用软件工程——面向对象软件开发方法5/139面向对象方法概述——背景(3)传统开发方法存在的问题以输入-处理-输出为核心的分析和设计方法不符合人类的思维方式软件不能真正了解用户的需要,以致开发出的软件系统与用户预期的系统不一致,不能满足用户的需要功能与数据分离的软件设计结构与人类的现实世界环境很不一样,和人的自然思维也就很不一致,因此对现实世界的认识与编程之间存在着一道很深的理解上的鸿沟Standish94报告中指出:31%软件项目没有完全完成,53%的项目花费最先预算的200%之多,并且估计美国的公司和政府机构在1995年为了取消软件项目的生产而花费了810亿美元软件工程——面向对象软件开发方法6/139面向对象方法概述——背景(4)传统开发方法存在的问题系统中模块之间控制作用的重要影响在系统中,实际控制发生的根源来自分散的各个模块之中时,由于在“好的模块结构”中的模块间的控制作用只能通过上下之间的调用关系来进行,造成信息传递路径过长,效率低,易受干扰,甚至出错软件工程——面向对象软件开发方法7/139面向对象方法概述——背景(5)为了解决传统开发方法的问题,在软件开发实践中人们提出了许多针对具体开发的方法快速原型法面向对象方法…….诞生了面向对象程序设计语言,并基于面向对象思想诞生了面向对象软件开发方法软件工程——面向对象软件开发方法8/139面向对象方法概述——发展历程面向对象的思想最初出现于挪威奥斯陆大学和挪威计算中心于60年代末共同研制推出的S1mula67语言中,该语言首先引入了类的概念和继承机制80年代,美国加利福尼亚Xerox研究中心推出的Smalltalk-76和Smalltalk-80语言,它具备了面向对象语言的继承和封装的主要特征,比较完善地实现了面向对象的程序设计,推动了面向对象技术的飞速发展软件工程——面向对象软件开发方法9/139面向对象方法概述——发展历程(1)从80年代中期到90年代,面向对象语言十分热门,涌现出大批比较实用的面向对象编程语言如C++、ObjectPascal等随着面向对象编程语言走向实用,开始了对面向对象分析和面向对象设计的研究面向对象的分析和设计技术逐渐走向实用,最终形成了由分析、设计到编程、测试与维护一整套的软件工程体系组成的面向对象软件开发方法软件工程——面向对象软件开发方法10/139面向对象方法概述——发展历程(2)在面向对象软件开发方法发展中,出现了很多方法,典型的以发明者命名的方法有:Booch法、Rambaugh法、Jacobson法、Coad和Yourdon法、Wirfs-Broch法等1995年,GradyBooch、IvarJacobson和JamesRumbaugh一起合作,将各自的方法组合成一种统一的方法,称为“统一建模语言”,即(UnifiedModelingLanguage,UML)1997年提出UML1.0版本UML现已在整个行业使用软件工程——面向对象软件开发方法11/139OO技术的基本原理按照问题域的基本事物实现自然分割,按人们通常的思维方式建立问题域的模型,设计尽可能直接自然表现问题求解的软件系统。OO技术引入了对象(object)概念来表现事物;用消息(message)传递建立事物间的联系;用类(class)和继承(inheritance)作为适应人们一般思维方式的描述模型;用方法(method)表示作用在对象上的各种操作。软件工程——面向对象软件开发方法12/139OO技术的基本原理(1)传统的程序设计方法,针对的是数学模型,出发点是“怎样做(How)?”用计算机求解一个实际问题应该怎样做?从实际问题到求解模型(数学模型)的抽象都是围绕怎样做?去进行的面向对象(OO)方法的出发点是“是什么(What)?”要求解的实际问题,到底是什么?用对象表现现实世界中的某个具体的事物软件工程——面向对象软件开发方法13/139OO技术的基本原理(2)面向对象(OO)方法的出发点是“(What)?”由物质组成现实世界物体多样化的表现形式构成问题域(Domain)人认识事物的规律:首先认识问题域是什么?当物体反映到头脑中后,变成意识形成抽象的概念,既逻辑世界由对象组成逻辑世界对象在具体的逻辑世界中担当一定的角色,并完成一定的功能(动作)对象有自己的属性和动作。对象表现现实世界中的某个具体的事物。软件工程——面向对象软件开发方法14/139OO技术的基本原理(3)基本思想客观世界是由对象组成的任何复杂的软件都是由简单的对象组合而成的面向对象的软件系统同样是由对象组成的具有相同数据和相同操作的对象可以归并为一个类类具有封装性,其数据和操作等对外界是不可见的,外界只能通过消息请求进行某些操作,提供所需要的服务所有对象都可以划分为不同的对象类每个对象类都有自己特定的数据和方法对象是对象类的一个实例软件工程——面向对象软件开发方法15/139OO技术的基本原理(4)基本思想对象类具有层次结构上层的类称为“父类”或“基类”,下层的类称为“子类”或“派生类”父类可以派生出子类,子类继承父类的全部特性(数据和操作),又可以有自己的新特性子类与父类形成类的层次结构对象之间通过消息机制传递相互联系软件工程——面向对象软件开发方法16/139OO技术的基本原理(5)思想的精髓是按照对象(事物、概念、实体)的观点考虑问题域和逻辑解决方案“面向对象”技术追求的是软件系统对现实世界的直接模拟尽量实现将现实世界中的事物直接映射到软件系统的解空间软件工程——面向对象软件开发方法17/139OO技术的基本原理(6)软件工程学家Codd和Yourdon认为面向对象的程序设计技术是以对象为基础,以消息驱动对象实现操作的一种全新的程序设计方法如果一个软件系统使用这些概念来建立模型并予以实现,那么它采用的就是面向对象软件开发方法面向对象=对象+类+继承+通信软件工程——面向对象软件开发方法18/139面向对象方法组成(1)与结构化软件开发方法类似,面向对象软件开发方法也由三部分组成面向对象分析方法(OOA)重点在于发现并描述问题域中的对象(或概念)例如:图书馆信息系统中的书(book)面向对象设计方法(OOD)重点在于定义能最终面向对象程序设计语言的实现的逻辑软件对象软件对象具有方法和属性例如:对象书(book)具有一个题目属性(title)和一个打印方法(print)面向对象程序设计方法(OOP)软件工程——面向对象软件开发方法19/139面向对象方法组成(2)与结构化软件开发方法类似,面向对象软件开发方法也由三部分组成面向对象程序设计方法(OOP)实现所设计的构件例如采用c++、Java语言编写一个book类软件工程——面向对象软件开发方法20/139面向对象方法组成(3)面向对象思想强调的是对象的表示领域概念用面向对象的程序设计语言表示分析过程中概念的表示booktitlePublicclassbook{publicvoidprint();…..privateStringtitle;}软件工程——面向对象软件开发方法21/139面向对象方法组成(4)面向对象程序设计方法(OOP)——被一些人称为“面向对象变成之父”的AlanKay,确定了以下关于OOP[Kay1993]的基本特征任何事物是一个对象通过互相联系的对象请求其他对象执行一定的行为来完成计算对象通过发送和接收消息进行通信消息是指对特定行为的请求,并且伴随着完成这项任务所需要的参数每个对象都有自己的存储空间,用来储存其他对象软件工程——面向对象软件开发方法22/139面向对象方法组成(5)面向对象程序设计方法(OOP)——被一些人称为“面向对象变成之父”的AlanKay,确定了以下关于OOP[Kay1993]的基本特征每个对象都是一个类的实例,类用来代表一组相似的对象例如:整数、链表等类可以看作是存储仓库,用来保存与一个对象相关的行为同一个类的多个实例对象能够执行相同的行为类可以组织成一个单根树状结构,成为继成层次在该结构中,一个类实例的存储空间和行为自动地被其派生类使用软件工程——面向对象软件开发方法23/139面向对象与面向功能的分析与设计软件项目是复杂的分而治之是处理复杂问题的主要策略将问题分解为易于管理和控制的单元结构化的分析与设计(前,流行)对问题的分解尺度主要依据功能和过程处理问题的结果是将一个复杂的过程分解为一系列具有层次关系的字过程面向对象的分析与设计(现,流行)以对象为尺度分解问题空间软件工程——面向对象软件开发方法24/139面向对象与面向功能的分析与设计(1)以图书馆信息系统为例图书馆信息系统面向对象的分析与设计按对象或概念分解CatalogLibrarianBookLibrary结构化的分析与设计按功能或过程分解SystemRecordLoansAddResourcesReportFines软件工程——面向对象软件开发方法25/139面向对象方法优点与人类的思维习惯相一致所开发出的系统部件可重用性好系统可维护性强生产率得到了大幅提高人的认识过程是从一般到特殊的渐进思维过程,是从是什么开始,认识事物及其本质规律,主观随意性受到限制。而传统方法是从”怎样做?“开始,到做什么?反认识规律而动,主观随意性太多。OO方法采用封装机制和信息隐藏机制,使其内部实现与外界完全隔离,具有较强的独立性(对象对外界而言,好象一个”黑匣子“)。较好地解决了“软件复杂性控制”问题。OO方法中类的继承性是一种代

1 / 139
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功