从结构化到面向对象程序设计的模型转换
结构化和面向对象的系统分析设计方法的对比

结构化方法和面向对象方法的对比1 结构化和面向对象的方法1.1 结构化方法结构化方法基于功能分解设计系统结构,通过不断把复杂的处理逐层分解来简化问题,它从内部功能上模拟客观世界。
用结构化开发能提高软件的运行效率,且能够增加软件系统的可靠性。
结构是指系统内各个组成要素之间的相互联系、相互作用的框架。
结构化的系统分析设计方法是一种传统的系统开发方法。
针对软件生存周期各个不同的阶段,有结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)等方法。
它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。
1.1.1 结构化分析结构化分析是面向数据流进行需求分析的方法,主要采用数据流图DFD (Data Flow Diagram)来描述边界和数据处理过程的关系。
结构化分析的主要工作是使用数据流程图、数据字典、结构化语言、判定表和判定树等工具,来建立一种新的、称为结构化说明书的目标文档-需求规格说明书。
1.1.2 结构化设计结构化设计是将数据流图表示的信息转换成程序结构的设计描述,和功能的实现方法,并且采用系统结构图表示系统所具有的功能和功能之间的关系。
结构化设计过程分两步完成,第一步以需求分析的结果作为出发点,构造出一个具体的系统设计方案,决定系统的模块结构(包括决定模块的划分、模块间的数据传递及调用关系)。
第二步详细设计,即过程设计。
在总体设计的基础上,确定每个模块的内部结构和算法,最终产生每个模块的程序流程图1.2 面向对象方法面向对象方法是从内部结构上模拟客观世界,其基本思想为:对象是对现实世界客观实体的描述,均由其属性和相关操作组成,是系统描述的基本单位。
面向对象方法更强调运用人类在日常的逻辑思维中经常采用的思想方法和原则,例如抽象、分类、继承、聚合、封装等,这使得软件开发者能更有效地思考问题,并以其他人也能看得懂的方式把自己的认识表达出来。
结构化程序设计与面向对象程序设计的简述

结构化程序设计与面向对象程序设计的简述结构化程序设计与面向对象程序设计的简述1. 简介结构化程序设计和面向对象程序设计是两种常用的软件开发方法学。
通过合理的软件结构化和程序设计,可以提高代码的可读性、可维护性和可扩展性。
本文将对结构化程序设计和面向对象程序设计进行简单概述。
2. 结构化程序设计结构化程序设计是一种基于顺序、选择和循环的编程范式。
它的目标是通过合理的程序分解、模块化和控制流程设计,使程序更易于理解和维护。
结构化程序设计强调以下几个原则:2.1 分解结构化程序设计将复杂的问题分解为多个简单的子问题,通过将问题分解为模块化的部分,在模块内部解决小问题,并将这些模块组合起来解决整个问题。
2.2 模块化模块化是结构化程序设计的核心思想之一。
模块化将程序划分为独立的、可复用的模块,每个模块都有特定的功能,可以独立进行设计、编码和,提高代码的可读性、可维护性和可重用性。
2.3 控制流程设计结构化程序设计通过使用顺序、选择和循环结构,对程序的控制流程进行设计。
合理的控制流程设计可以使程序具有良好的结构,易于理解和维护。
3. 面向对象程序设计面向对象程序设计是一种以对象为基础的编程范式。
它从现实世界的对象角度出发,将对象抽象为类,通过类的封装、继承和多态性,实现软件的模块化、可复用和灵活性。
面向对象程序设计的主要特点包括:3.1 封装封装将数据和操作封装在类的内部,对外部提供公共接口。
封装可以隐藏内部实现细节,提供更好的安全性和可维护性。
3.2 继承继承可以创建新的类,并从现有的类继承属性和方法。
通过继承,可以实现类的层次结构,提高代码的复用性和可扩展性。
3.3 多态性多态性允许不同类的对象使用相同的接口,实现相同的方法。
通过多态性,可以在不修改原有代码的情况下,增加新的功能。
4. 结构化程序设计与面向对象程序设计的比较结构化程序设计和面向对象程序设计都是常用的软件开发方法学,但在某些方面有所不同。
结构化方法与面向对象方法的介绍与对比

结构化⽅法与⾯向对象⽅法的介绍与对⽐结构化⽅法与⾯向对象⽅法的介绍与对⽐结构化和⾯向对象,这两个概念在计算机领域的中应⽤⼗分⼴泛。
在软件⼯程中,结构化和⾯向对象的思想也占有重要地位,产⽣了结构化⽅法和⾯向对象⽅法,⽤来指导软件⽣产。
⼀、结构化⽅法结构是指系统内各个组成要素之间的相互联系、相互作⽤的框架。
结构化⽅法强调开发⽅法的结构合理性以及所开发软件的结构合理性。
针对软件⽣存周期各个不同阶段,可以分为结构化分析(SA)、结构化设计(SD)、结构化程序设计(SP)等⽅法。
1.1结构化分析⽅法结构化分析⽅法是⾯向数据流的分析⽅法,是70年代由Yourdon、Constaintine及DeMarco 等⼈提出和发展,并得到⼴泛的应⽤,其基本思想为分解和抽象。
结构化分析⽅法的设计原则有:(1)使每个模块尽量只执⾏⼀个功能(坚持功能性内聚);(2)每个模块⽤过程语句(或函数⽅式等)调⽤其他模块;(3)模块间传送的参数作数据⽤;(4)模块间共⽤的信息(如参数等)尽量少。
在结构化分析⽅法中,常⽤的⼯具有:数据流图数据流图(Data Flow Diagram,简称DFD)是描述系统中数据流程的图形⼯具,它标识了⼀个系统的逻辑输⼊和逻辑输出,以及把逻辑输⼊转换逻辑输出所需的加⼯处理。
通常,⼀个系统的DFD图会进⾏分层设计,使数据处理过程更加有层次,逻辑更加清晰。
DFD图的设计原则为:数据守恒与数据封闭原则、加⼯分解的原则、⼦图与⽗图的平衡、合理使⽤⽂件。
数据字典分层数据流图只是表达了系统的“分解”,为了完整地描述这个系统,还需借助“数据词典”(data dictionary)对图中的每个数据和加⼯给出解释。
对数据流图中包含的所有元素的定义的集合构成了数据词典。
它有四类条⽬:数据流、数据项、⽂件及基本加⼯。
在定义数据流或⽂件时,使⽤下表给出的符号,将这些条⽬按照⼀定的规则组织起来,构成数据词典。
在以上⼯具的辅助下,我们可以进⾏完整的结构化分析,⼀个典型的结构化分析过程为:①分析当前的情况,做出反映当前物理模型的DFD;②推导出等价的逻辑模型的DFD;③设计新的逻辑系统,⽣成数据字典和基元描述;④建⽴⼈机接⼝,提出可供选择的⽬标系统物理模型的DFD;⑤确定各种⽅案的成本和风险等级,据此对各种⽅案进⾏分析;⑥选择⼀种⽅案;⑦建⽴完整的需求规约。
结构化编程和面向对象编程

结构化编程和⾯向对象编程结构化设计:结构化程序设计⽅法主张按功能来分析系统需求, 原则有⾃顶向下, 逐步求精, 模块化等.结构化程序设计⾸先采⽤结构化分析(SA)⽅法对系统进⾏需求分析, 然后采⽤结构化设计(SD)⽅法对系统进⾏概要设计,详细设计, 最后采⽤结构化编程(SP)⽅法实现系统.结构化程序设计按功能来把系统逐步细化, 因此⼜叫做⾯向功能的程序设计⽅法.结构化程序设计的每个功能都负责对数据的接收,处理,输出,这种⽅式⼜称为⾯向数据流的处理⽅式⽤DFD(数据流图)表⽰.结构化程序设计⾥最⼩的程序单元是函数.整个程序由⼀个个函数组成, ⽽整个程序的⼊⼝是⼀个主函数(main()), 由主函数调⽤其他函数,函数之间的依赖来构成整个程序的功能.结构化程序设计的局限性:设计不够直观,与⼈类的思维不⼀致.适应性差,可扩展性不强.程序的三种基本结构:结构化程序设计⾮常强调某个功能的算法.算法由⼀系列操作组成. 任何简单或复杂的算法都可以由顺序结构,选择结构,循环结构这三种基本结构来构成.顺序结构: 顺序结构表⽰程序中的各操作是按照它们在代码中的排列顺序依次执⾏的.选择结构: 选择结构表⽰程序的处理需要根据某个特定的条件选择其中的⼀个分⽀执⾏(单选,双选,多选).循环结构: 循环结构表⽰程序反复执⾏某个或某些操作,直到某条件为假(或为真)时才停⽌循环(直到循环, 当循环).当型循环: 当条件为真时循环. 直到型循环: 直到条件为假时结束循环.结构化程序设计中的任何结构都具有唯⼀的⼊⼝和出⼝. java的⽅法⾥⾯则是⼀种结构化设计.⾯向对象设计:⾯向对象的基本思想是使⽤类, 对象, 继承, 封装, 消息等基本概念进⾏程序设计.在系统构造中尽可能的利⽤⼈类的⾃然思维⽅式,强调以现实世界中的事物(对象)为中⼼来思考,认识问题,并根据这些事物的本质特征,把它们抽象表⽰为系统中的类.这使得软件系统的组件可以直接的映像到客观世界,并保持客观世界中事物及其相互关系的本来⾯貌.⾯向对象⽅法的三个基本特征:封装性:将对象的实现细节隐藏起来, 通过⼀些公共的接⼝⽅法来供外部调⽤对象的功能.继承性:是⾯向对象实现的的重要⼿段,⼦类继承⽗类, ⼦类直接获得⽗类的⾮private属性和⽅法.多态性:⼦类对象可以赋值给⽗类对象引⽤, 但运⾏的时候仍然表现出⼦类的⾏为特征,同⼀个类型的对象在执⾏同⼀个⽅法时, 可能表现出不同的特征.⾯向对象还⽀持如下特点:对象是⾯向对象最基本的概念, 它的基本特点有:标识唯⼀性,分类性,多态性,封装性,模块独⽴性好.类是具有公共属性公共⽅法的⼀类事物.类是对象的抽象, 对象是类的实例化. 类的封装提⾼了类的内聚性, 降低了对象之间的耦合性.对象间的相互合作需要⼀个机制协助进⾏, 这样的机制称为"消息", 消息是⼀个实例与另⼀个实例之间的相互通信的机制.⾯向对象⽅法中,类之间的共享属性和共享⽅法的机制称为继承.继承具有传递性.继承分为多继承和单继承(java不⽀持多继承)."基于对象"和⾯向对象⾯向对象和"基于对象"都实现了"封装"的概念, 但是⾯向对象实现了"继承和多态", ⽽"基于对象"没有实现.⾯向对象的程序员按照分⼯分为: 类库的创建者和类库的使⽤者。
软件工程 比较结构化方法和面向对象

软件工程比较结构化方法和面向对象一、引言软件工程是一门关注软件开发过程的学科,它涉及到软件开发的各个方面,包括需求分析、设计、编码、测试和维护等。
在软件工程领域中,有两种主要的开发方法:比较结构化方法和面向对象方法。
本文将对这两种方法进行详细的比较和分析。
二、比较结构化方法1.概念结构化方法是一种基于模块化设计思想的软件开发方法。
它将一个大型系统划分为多个小模块,每个模块都有明确的输入和输出,并且通过调用其他模块来实现其功能。
2.特点(1)强调程序流程控制;(2)采用自顶向下或自底向上的设计方式;(3)使用层次结构图表示程序流程;(4)采用数据流图表示数据流动情况;(5)模块之间通过参数传递来交换信息。
3.优缺点①易于理解和维护;②适合大型系统开发;③能够提高程序可读性。
(2)缺点:①不够灵活,难以应对需求变更;②不支持复杂的数据类型;③容易出现模块间的耦合。
三、面向对象方法1.概念面向对象方法是一种基于对象思想的软件开发方法。
它将一个系统看作是由多个对象组成,每个对象都有自己的属性和方法,并且通过消息传递来实现对象之间的交互。
2.特点(1)强调数据抽象和封装;(2)采用自下而上的设计方式;(3)使用类图表示程序结构;(4)采用序列图表示消息传递过程;(5)支持继承和多态等高级特性。
3.优缺点①能够提高代码重用性;②支持动态绑定,具有更好的灵活性;③能够提高系统可扩展性。
(2)缺点:①易于出现类爆炸问题;②需要掌握较为复杂的概念和技术。
四、比较分析1.设计思想不同结构化方法注重程序流程控制,通过模块化设计来实现程序结构清晰、易于维护。
而面向对象方法则注重数据抽象和封装,通过对象之间的交互来实现程序功能。
2.设计方式不同结构化方法采用自顶向下或自底向上的设计方式,通过层次结构图和数据流图来表示程序结构和数据流动情况。
而面向对象方法则采用自下而上的设计方式,通过类图和序列图来表示程序结构和消息传递过程。
结构化方法和面向对象方法的特点、优点与不足。

结构化方法和面向对象方法的特点、优点与不足。
结构化方法和面向对象方法是两种重要的程序设计方法,它们分别有各自独特的特点、优点和不足。
在本篇文章中,我将对这两种方法进行全面评估,并据此撰写一篇有价值的文章,以便你能更深入地理解这个主题。
一、结构化方法1. 特点结构化方法是一种从任务分解的角度来思考问题的方法。
它强调程序的模块化和层次化设计,将整个系统划分成若干个较小的、相对独立的模块或功能单元,然后逐步细化这些模块,直至得到可直接转换成程序的模块为止。
2. 优点(1)易于理解和维护:结构化程序易于理解和维护,因为每个模块都相对独立,不会相互影响。
(2)适合大型项目:结构化方法适合大型项目的开发,因为它能够将复杂的系统分解成若干相对简单的模块,便于团队协作。
(3)代码重用:结构化方法能够促进代码的重用,提高开发效率。
3. 不足(1)难以处理复杂关联:结构化方法在处理复杂关联和交互较多的系统时,容易使得程序的结构变得复杂,不易理解和维护。
(2)不够灵活:结构化方法在应对需求变化时,不够灵活,需要重新调整模块之间的关系。
二、面向对象方法1. 特点面向对象方法是一种从对象抽象的角度来思考问题的方法。
它将系统中的各种实体抽象为对象,这些对象包含了数据和操作这些数据的方法,同时也能够与其他对象进行交互。
2. 优点(1)便于理解:面向对象方法更符合人类的思维模式,因此更容易理解。
(2)灵活性:面向对象方法更灵活,能够更好地应对需求变化。
(3)代码重用:面向对象方法通过继承和多态,能够更好地促进代码的重用。
3. 不足(1)学习曲线较陡:面向对象方法对程序员的抽象能力要求较高,因此刚开始学习时往往感到困难。
(2)性能开销:在一些性能要求较高的场景下,面向对象方法可能带来一些性能开销。
结合以上对结构化方法和面向对象方法的评估,我认为两种方法各有优劣。
在实际项目中,我们应根据项目的特点和需求来选择合适的方法,甚至可以结合两种方法的优点,定制出适合项目的开发方法。
软件工程 比较结构化方法和面向对象

软件工程一、引言在当今信息技术高速发展的时代,软件的开发和维护变得越来越重要。
为了有效管理软件项目,提高开发效率和质量,软件工程的概念应运而生。
软件工程是一门研究如何按照系统化、规范化、定量化和可重复性的方式开发和维护软件的学科。
在软件工程中,结构化方法和面向对象是两种常用的开发方法。
本文将对结构化方法和面向对象进行比较,并探讨它们在软件工程中的优劣和适用场景。
二、结构化方法2.1 定义和特点结构化方法是一种基于数据流和流程的软件开发方法。
它将软件系统视为一系列逐步细化的模块,通过分析数据流和流程来设计和实现软件系统。
结构化方法强调模块化、层次化和自顶向下的设计思想,以确保程序逻辑清晰、易于理解和修改。
2.2 优点1.结构化方法强调模块化,将软件系统分解为多个模块,每个模块负责特定的功能。
这种模块化的设计使得程序易于理解、修改和测试,提高了软件的可维护性和可测试性。
2.结构化方法采用自顶向下的设计思想,先设计系统的总体框架,再逐步细化到具体的模块。
这种逐步细化的设计方式使得开发过程更加可控,项目管理更加容易。
同时,自顶向下的设计过程也便于团队协作和分工。
3.结构化方法将程序逻辑分解为一系列有序的步骤,每个步骤都有明确的输入和输出。
这种严格的输入输出规定使得程序的设计和测试更加方便。
4.结构化方法在软件开发初期就明确定义了数据流和流程,使得开发人员能够更好地理解和掌握软件系统的整体架构,从而减少了项目失败的风险。
2.3 缺点1.结构化方法的设计过程较为复杂,需要详细分析系统的数据流和流程。
对于较大规模的软件系统,分析和设计的工作量较大,容易导致项目开发周期延长。
2.结构化方法强调模块化,但对于一些复杂的问题,模块化的设计可能不够灵活和强大。
这就需要在设计阶段尽可能考虑全部的需求和功能,否则可能会在后期的修改过程中遇到困难。
三、面向对象3.1 定义和特点面向对象是一种以对象为基础的软件开发方法。
在面向对象方法中,软件系统由一组相互作用的对象组成。
软件工程:结构化方法VS面向对象方法

软件⼯程:结构化⽅法VS⾯向对象⽅法⼀、基本概念1、结构化⽅法 结构化⽅法是⼀种传统的软件开发⽅法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合⽽成的。
基本思想:把⼀个复杂问题的求解过程分阶段进⾏,⽽且这种分解是⾃顶向下,逐层分解,使得每个阶段处理的问题都控制在⼈们容易理解和处理的范围内。
2、⾯向对象⽅法 ⾯向对象⽅法是⼀种把⾯向对象的思想应⽤于软件开发过程中,指导开发活动的系统⽅法,简称OO,是建⽴在“对象”概念基础上的⽅法学。
对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,⼀个对象类定义了具有相似性质的⼀组对象。
基本思想:尽可能模拟⼈类习惯的思维⽅式,使开发软件的⽅法与过程尽可能接近⼈类认识世界、解决问题的⽅法与过程, 也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能⼀致。
⼆、两者对⽐1、基本单位不同 结构化⽅法的基本单位是模块。
⾯向对象⽅法的基本单位是对象。
2、分析⽅法不同 结构化分析⽅法是⼀种⾯向数据流⽽基于功能分解的分析⽅法, 在该阶段主要通过采⽤数据流程图、编制数据字典等⼯具, 描述边界和数据处理过程的关系, ⼒求寻找功能及功能之间的说明。
⾯向对象分析是把对问题域和系统的认识理解, 正确地抽象为规范的对象( 包括类、继承层次) 和消息传递联系, 最终建⽴起问题域的简洁、精确、可理解的⾯向对象模型, 为后续的⾯向对象设计和⾯向对象编程提供指导。
⾯向对象分析通常建⽴三种模型: 对象模型、动态模型、功能模型。
其中, 对象模型描述了系统的静态结构,确定类的名称和类间的关系;动态模型表⽰瞬时的、⾏为化的系统的“ 控制”性质, 规定了对象模型中的对象的合法变化序列;功能模型表明了系统中数据之间的依赖关系, 以及有关数据的处理功能。
3、各⾃局限(1)结构化⽅法 i.不能直接反映问题域: 结构化分析⽅法以数据流为中⼼, 强调数据的流动及每⼀个处理过程, 不是以问题域中的各事物为基础, 打破了各事物的界限, 分析结果不能直接反映问题域, 容易隐蔽⼀些对问题域的理解偏差。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从结构化到面向对象程序设计的模型转换∗袁胜忠山东大学威海分校现代教育技术部 威海264209摘 要:随着软件系统内在复杂性的不断提高,面向对象技术已经取代结构化设计技术成为产业化软件开发的主流技术。
本文剖析对象模型与结构化设计瀑布模型队程序设计风格的影响,探讨导致面向对象软件工程失败的主要原因,论证了成功实施面向对象软件工程的关键技术,帮助软件工程师完成从结构化设计实践向面向对象分析和设计实践的进化。
关键词:对象模型 瀑布模型 迭代和增量式开发 面向对象软件工程Model Changing From Structured Design Style toObject-Oriented ProgrammingYUAN ShengzhongDepartment of Modern Education Technology of Shandong University at Weihai, Weihai,264209Abstract: In the past several years, with enhance of inherent complex of various systems, the object-oriented technology have actually become the main stream of industrial software development. Compared with traditional structured design style and the waterfall model, in this paper, we strength the correct understand to object model and discuss the main reasons for the failure of object-oriented development in order to promote the software engineers evolution from structured design to object-oriented analysis and design.Keywords: object model; waterfall model; iterative and incremental development; object-oriented software engineering1 引 言面向对象的技术可以分为:面向对象的程序设计语言,面向对象的数据库技术,面向对象的分析和设计方法。
对应用软件开发组而言,面向对象的分析和设计方法是一种新的方法,它比面向对象的程序设计语言和面向对象的数据库技术更加难以掌握。
因为它与开发组熟悉的结构化设计方法是两种完全不同的设计风格,在建立系统时,结构化设计方法利用算法作为基本构件,而面向对象方法利用类和对象作为基本构件。
二者要求开发组用不同的思考方法对待问题的分解,而且面向对象设计方法创造出来的软件体系结构大大超出了∗作者简介:袁胜忠:男,1965年出生,软件工程师,主要研究方向为应用软件开发,网络管理与优化。
结构化设计文化的领域。
在应用软件开发中,面向对象方法至今没有得到应有的使用。
正如Rentsch曾经准确地预料到的[1],“我猜想面向对象的编程将出现在20世纪的80年代,就像结构化编程出现在20世纪的70年代一样。
每一个人都会喜欢上它。
每个制造商都会改进自己的产品以支持它。
每个管理者都会在口头上承诺它。
每个编程人员都会(以不同方式)实践它。
但是没有一个人会知道它是什么”。
遗憾的是,在我们的开发过程中,Rentsch的预测至今仍然是正确的。
现在多数程序员都仅在结构化设计原则方面受过正规或非正规的训练,并利用这些结构化设计技术开发和实施了无数有用的软件系统。
他们即使认识到只使用算法分解可以应对的复杂性是有限的,必须转向面向对象的分解;他们即使想早日使用面向对象的技术,反复学习了C++或JA V A,但是,他们发现面向对象技术很难应用,面对问题领域的时候,设计一开始就不自觉地转换到结构化程序设计上了。
这一切都是因为他们还没有真正掌握面向对象的分析与设计方法,没有深刻认识面向对象的分析和设计方法与结构化设计方法的根本区别。
没有正确的方法指导,只学习面向对象的程序设计语言是远不足以成功实施面向对象应用软件开发的。
如果把C++和JA V A这样的语言作为传统的面向算法的语言来使用,就不仅不能利用它们所赋予的功能,而且结果比使用更早的语言如C或PASCAL 还差。
如果给一个根本不懂电的木匠一把电钻,他有可能把电钻当成锤子来用并在砸弯无数个钉子后认为电钻不如锤子好用。
本文在第二部分分析如何全面理解面向对象分析的模型,在分析的开始阶段,模型提供了一种组织大量信息的机制,这些信息起初使分析者无从下手。
此外,模型的规范化和系统化会暴露出系统种的不一致性和缺陷,从而指导后续的开发工作,所以,模型对于正确掌握面向对象的方法是很重要的。
在第三部分,作者结合自己的实践经验总结了导致面向对象开发失败的主要原因,用反证法论述了成功实施面向对象软件开发的关键概念和技术,希望帮助那些熟悉结构化设计方法的同行避开这些陷阱,顺利进化到面向对象的分析与设计开发。
第四部分是结论,阐述了什么情况下应该采用面向对象技术。
论述中经常用到的概念有[2]:(1) 面向对象分析(object-oriented analysis,有时称作OOA)。
OOA是一种分析方法,它以可在问题域的词汇表中找到的类和对象的观点来审视需求,强调利用面向对象的观点建立真实世界的模型。
(2) 面向对象设计(object-oriented design,有时称作OOD)。
OOD是一种设计方法,它包含面向对象分解的过程,以及一种表示方法,用来描写设计中的系统的逻辑模型与物理模型和静态模型与动态模型。
正是对面向对象分解的支持使得OOD与结构化设计大不一样:OOD使用类和对象抽象在逻辑上构建系统,而结构化设计使用的却是算法抽象。
上述两个概念的关系是:OOA的结果可以作为OOD开始的模型,接着利用面向对象编程实现。
OOD的结果可以作为完整实现一个系统的蓝图。
(3) 面向对象的开发(object-oriented development)。
面向对象的开发是一个迭代和增量式的开发过程。
其宏观过程为[2]:·建立核心需求(概念化)·开发要求的行为的模式(分析)·创立体系结构(设计)·演化实现(演化)·管理后续的演化(维护)微观过程为[2]:·识别一个给定的抽象层次上的类和对象·识别类和对象的语义·识别类和对象之间的关系·规定这些类和对象之间的接口,然后说明这些类和对象的实现。
2 深刻理解面向对象分析的模型面向对象的分析,其目的在于有效地描述与刻画问题领域的信息和行为。
实现这样一种描述,必须以一种全局的观点来考虑系统中的各种联系,系统的完整性和一致性。
同时,这种描述能够说明系统中各种操作的细节。
为达到面向对象分析的目的,面向对象的分析提供了有足够表达力的模型:逻辑模型(类结构、对象结构)和物理模型(模块体系结构、进程体系结构)。
对于一个给定的项目,分析和设计的结果都是通过这些模型表示出来。
其中,类结构的静态语义用类图表示、动态语义用状态转换图表示;对象结构的静态语义用对象图表示、动态语义用交互图表示;模块体系结构的静态语义用模块图表示、动态语义用子系统图表示;进程体系结构用进程图表示。
由此可见。
面向对象开发的表示法包括四个基本图:类图、对象图、模块图和进程图,以及两个补充图:状态转换图和交互图。
·类图用来显示类和它们的关系在系统的逻辑设计中的存在。
类图代表系统的类结构视图。
·对象图用来显示在系统的逻辑设计中存在的对象和它们的关系。
对象图通常用来表示场景。
·模块图用来显示在系统物理设计中分配给模块的类和对象。
模块图代表系统的模块体系结构的视图。
·进程图用来显示在系统物理设计中分配给处理器的进程。
进程图代表系统的进程体系结构的视图。
·状态转换图用来显示给定类的实例的状态空间,引起由一个状态向另一个状态转换的事件,以及由状态变化引起的动作。
·交互图用来跟踪与对象图同一个语境中的场景的执行。
在应用软件开发过程中,设计行为不是一种画图的行为,图只是被用来描绘一个设计。
面向对象方法从以上多个视图来观察设计是很重要的。
在面向对象的分析方法中,建立数据流图的作用,不如其它面向功能的方法明显。
因为数据流图中并没有添加任何新的信息[5],但是,建立动态模型可以使系统分析者对系统设计进行精化,把相同或相似的处理操作进行调整,使系统结构更加完善。
注意,面向对象的系统分析提供了一种独特的方法,它反映了软件问题的本质所在。
软件问题的本质在于数据处理,数据和处理是两件显然的事情,是我们进行软件设计要做的最基本的工作,在分析数据和信息的过程中分析其处理过程是我们本来应该这样做的。
将数据和处理人为地分离,可能会人为地制造系统分析的障碍。
面向对象的分析是一种以数据或信息为主线,数据和处理紧密结合的方法,这种方法是以建立对象模型为基础的。
3 导致面向对象开发失败的主要原因3.1 原因之一 ——在面向对象开发过程之上叠加瀑布型思维如果您的开发过程基本遵循(1)企图定义和稳定绝大部分的需求,然后签署开发协议;(2)基于需求,进行详细设计;(3)基于设计进行实现;(4)进行集成、系统测试和部署。
这是一个线性的、串行的瀑布型生命周期的典型例子,而且是一个最优先的导致面向对象开发完全失败的策略。
虽然我们接受了瀑布式模型教育,但是瀑布式开发模型没有得到任何统计意义上的证据支持。
更加重要的是,当前的软件项目失败研究结论性地表明[3],瀑布模型是风险最高、极易失败、低生产率以及高缺陷率的软件构建方法。
尽管它与20世纪60年代开发软件的随心所欲方式相比是相对合理的策略,但几代师生不假思索地学习和照搬它已经导致了很多软件开发的失败。
有些东西必须像建筑那样被建造,但是软件通常不属于这一类。
瀑布模型导致软件失败的最具有说服力的是一个错误的假定,即可以在项目的第一个阶段中定义绝大部分的需求。
Capers Jones等人的研究粉碎了这一神话,蔓延的需求(在项目开始时没有预见到)是软件开发中非常显著的事实,在普通项目中它大概占到25%,在大型项目中则占到50%。
瀑布模型竭力回避需求变化的现实,它假定需求和设计能够正确地被指明和冻结,这与项目的现实严重不符。