从结构化到面向对象程序设计的模型转换

合集下载

结构化和面向对象的系统分析设计方法的对比

结构化和面向对象的系统分析设计方法的对比

结构化方法和面向对象方法的对比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面向对象方法

软件⼯程:结构化⽅法VS⾯向对象⽅法⼀、基本概念1、结构化⽅法 结构化⽅法是⼀种传统的软件开发⽅法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合⽽成的。

基本思想:把⼀个复杂问题的求解过程分阶段进⾏,⽽且这种分解是⾃顶向下,逐层分解,使得每个阶段处理的问题都控制在⼈们容易理解和处理的范围内。

2、⾯向对象⽅法 ⾯向对象⽅法是⼀种把⾯向对象的思想应⽤于软件开发过程中,指导开发活动的系统⽅法,简称OO,是建⽴在“对象”概念基础上的⽅法学。

对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,⼀个对象类定义了具有相似性质的⼀组对象。

基本思想:尽可能模拟⼈类习惯的思维⽅式,使开发软件的⽅法与过程尽可能接近⼈类认识世界、解决问题的⽅法与过程, 也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能⼀致。

⼆、两者对⽐1、基本单位不同 结构化⽅法的基本单位是模块。

⾯向对象⽅法的基本单位是对象。

2、分析⽅法不同 结构化分析⽅法是⼀种⾯向数据流⽽基于功能分解的分析⽅法, 在该阶段主要通过采⽤数据流程图、编制数据字典等⼯具, 描述边界和数据处理过程的关系, ⼒求寻找功能及功能之间的说明。

⾯向对象分析是把对问题域和系统的认识理解, 正确地抽象为规范的对象( 包括类、继承层次) 和消息传递联系, 最终建⽴起问题域的简洁、精确、可理解的⾯向对象模型, 为后续的⾯向对象设计和⾯向对象编程提供指导。

⾯向对象分析通常建⽴三种模型: 对象模型、动态模型、功能模型。

其中, 对象模型描述了系统的静态结构,确定类的名称和类间的关系;动态模型表⽰瞬时的、⾏为化的系统的“ 控制”性质, 规定了对象模型中的对象的合法变化序列;功能模型表明了系统中数据之间的依赖关系, 以及有关数据的处理功能。

3、各⾃局限(1)结构化⽅法 i.不能直接反映问题域: 结构化分析⽅法以数据流为中⼼, 强调数据的流动及每⼀个处理过程, 不是以问题域中的各事物为基础, 打破了各事物的界限, 分析结果不能直接反映问题域, 容易隐蔽⼀些对问题域的理解偏差。

软件工程第三版课后习题

软件工程第三版课后习题

第一章一、判断题1.S WE B O KV3分两大类,共有15个知识域。

(Y)2.软件工程的提出起源于软件危机,其目的是最终解决软件的生产工程化。

(Y)3.软件工程学一般包括软件开发技术和软件工程管理两方面的内容,软件开发方法学和软件工程环境属于软件开发技术的内容,软件工程经济学属于软件工程管理。

(N)4.软件开发中的最大问题不是管理问题,而是技术问题。

(N)5.X P(e X t r e me P r o g r a mm i n g,极限编程)是由K e n t B e c k提出的一套针对业务需求和软件开发实践的规则,包括13个核心实践。

(Y)二、选择题1.下列所述不是敏捷生存期模型的是(C)。

A.S c r u mB.X PC.V模型D.O P E NU P2.软件工程的出现主要是由于(C)。

A.程序设计方法学的影响C.软件危机的出现B.其他工程学科的影响D.计算机的发展3.以下(C)不是软件危机的表现形式。

A.开发的软件不满足用户的需要B.开发的软件可维护性差C.开发的软件价格便宜D.开发的软件可靠性差4.以下不是S WE B O KV3的软件工程实践中的知识域的是(B)。

A.软件需求B.工程基础C.软件构造D.软件设计5.下列所述不是软件组成的是(D)。

A.程序B.数据C.界面D.文档6.下列对“计算机软件”描述正确的是(A)。

A.是计算机系统的组成部分B.不能作为商品参加交易C.是在计算机硬件设备生产过程中生产出来的D.之存在语计算机系统工作时7.软件工程方法的提出源于软件危机,其目的应该是最终解决软件的(D)问题。

A.软件危机B.质量保证C.开发效率D.生产工程化8.软件工程设计软件开发技术和项目管理等方面内容,下述内容中(D)不属于开发技术的范畴。

A.软件开发方法B.软件开发工具C.软件工程环境D.软件工程经济第二章一、判断题1.面向对象开发过程是多次重复和迭代的演化过程,(需要补充:面向对象开发方法是)在概念和表示方法是的一致性保证了各项开发活动之间的平滑过渡。

面向对象程序设计历史及发展

面向对象程序设计历史及发展

面向对象程序设计的历史及发展姓名:郭一恒班级:0901学号:2009302540014自从计算机发展以来,程序设计的方法为了适应越来越复杂的程序设计的需要而发生了急剧的变化。

计算机刚问世时.程序设计是通过计算机的控制板用二进制机器指令打孔完成的。

随着程序设计的发展,产生了汇编语言,程序员用助记符号代替机器指令,能够处理更大更复杂的程序。

随着计算机处理事物的越来越多,产生了高级程序设计语言,它们给程序员提供更多的处理复杂事务的工具。

但它们不是支持结构清晰、易于读懂的程序设计语言。

60年代诞生了结构化的程序语言,这就是者如c语言和Pascal语言支持的方法。

结构化程序设计语言的应用使得有可能较容易地编写复杂程度适中的程序。

一旦达到一定的复杂程度度,使用结构比的程序语言也会无法控制,其复杂程度已远远超过了程序员的管理所及。

如今,许多程序没汁语言已经或达到了结构化程序设汁方法的极限。

应运而生的面向对象的程序设汁方法就是为了解决这类问题的。

面向对象的程序设汁方法汲取了结构化程序设计方法的先进的思想,并把它同支持用户用新方法进行程序设计的概念结合起来。

所有的面向对象的程序设计语言一般都包含三个最基本的概念:对象、继承性和多态性。

一、面向对象程序设计的历史面向对象程序设计方法作为90年代程序设计的新思想、新方法,已经和正在给计算机界带来一场深刻的革命。

实际上,对面向对象程序设计方法的研究由来已久。

早在本世纪40年代,在对数字模拟的分析研究中就引入了“对象”的概念,随后在对模拟系统的分析中,大量的模拟仿真语言,如Simscript、GPSS、CSL和SimulaⅡ,为此应运而生。

在Simula Ⅱ中的“活动(Activity)、过程(Process)”概念正是如今OOPL中“类”和“对象”概念的雏型。

60年代中期,随着SimulaI中不断引入子类、模块、封装等新概念,导致了Simula67,Modula—2等具有OOP特点的一些模拟仿真语言的出现,它们被称为OOPL的祖先或前身。

软件工程之结构化方法与面向对象方法之比较与结合

软件工程之结构化方法与面向对象方法之比较与结合

软件⼯程之结构化⽅法与⾯向对象⽅法之⽐较与结合 软件开发⽅法指,在项⽬投资规模和时间限制内,设计、实现符合⽤户需求的⾼质量软件,根据软件开发的特点,提出的多种软件开发的策略。

随着20世纪60年代,计算机软件、硬件发展不均衡,使⼤型软件的开发过程中出现了复杂程度⾼、研制周期长、正确性难以保证的三⼤难题,引发了“软件危机”。

为了同时提⾼软件效率和质量,软件开发⽅法不断⾰新。

经过⼏⼗年的研究和应⽤,两种基于相应的程序设计思想和语⾔的软件开发⽅法,结构化⽅法与⾯向对象⽅法,成为了主流的开发⽅法之⼀,⼴泛地使⽤于软件⼯程。

结构化⽅法包括结构化分析(Structured Analysis,简称SA)、结构化设计(Structured Design,简称SD)和结构化程序设计(Structured Program Design,简称SP)三部分内容。

相应地,⾯向对象⽅法包括⾯向对象分析(Object-Oriented Analysis,简称OOA)、⾯向对象设计(Object—Oriented Design,简称OOD)和⾯向对象程序语⾔(Object-Oriented Program Design,简称OOP)。

两种软件开发⽅法从起源、思想、分析、设计,到程序设计、扩展重⽤、应⽤等各个⽅⾯有着许多的联系和区别,下⽂我将对⼆者进⾏⽐较分析。

两种⽅法针对不同的⼯作环境和应⽤场景,各具优势,也都有所不⾜,我也将讨论⼆者在软件⼯程中的结合,以期产⽣更好的效果。

(⼀)从起源上看 结构化⽅法与⾯向对象⽅法都起源于相应的程序设计思想和语⾔。

20世纪60年代后期,《程序结构理论》和《GOTO陈述有害论》的提出,证明了任何程序的逻辑结构都可以⽤顺序结构、选择结构和循环结构来表⽰,确⽴了结构化程序设计思想,产⽣了如FORTRAN、PASCAL、C等语⾔。

结构化⽅法把对程序的分析、设计,延伸⾄对项⽬⼯程的分析、设计,结合程序设计语⾔的技术⽀持,得以产⽣和发展。

结构化方法与面向对象方法之应用比较

结构化方法与面向对象方法之应用比较

结构化⽅法与⾯向对象⽅法之应⽤⽐较结构化⽅法与⾯向对象⽅法是最具代表性的,也是⽬前应⽤最为⼴泛的软件开发⽅法。

本⽂将分别对两者进⾏介绍和⽐较。

⼀、结构化⽅法 结构化⽅法(Structured Methodology)是计算机学科的⼀种典型的系统开发⽅法。

它采⽤系统科学的思想⽅法,从层次的⾓度,⾃顶向下地分析和设计系统。

基本思想是基于功能的分解和抽象,形成系统的模块结构,从⽽针对每个模块进⾏结构化设计及结构化编程来完成系统的开发。

结构化⽅法由结构化分析(SA)、结构化设计(SD)和结构化程序设计(SP)三者组成。

(⼀)结构化分析 结构化分析是⾯向数据流进⾏需求分析的⽅法。

采取的⼯具主要有数据流图、数据字典、实体关系图等。

数据流图(Data Flow Diagram,DFD)是⼀种分层的建⽴系统逻辑模型的⽅法,模拟系统的⼀个⼤致边界,并展⽰系统和外部的接⼝、数据的输⼊输出以及数据的存储。

它有四个基本要素:数据流、实体、数据加⼯和数据存储。

数据流图分层的思想体现为,⾸先确定系统和系统涉及到的外部实体之间的数据流,画出第0层数据流图(顶层图);其次在顶层图的基础上对系统的主要功能进⾏分析,抽象出功能作为系统的加⼯,确定实体和加⼯之间的数据流,将顶层图细化为第1层数据流图;依此类推,之后不断细化得到第2、3乃⾄更多层的数据流图,直到不能再细化为⽌。

数据字典(Data Dictionary)是⼀个包含所有系统数据元素定义的仓库。

数据元素的定义必须是精确的、严格的和明确的。

⼀个实体⼀般应包含以下⼏个部分的内容:名字、别名、⽤途、内容描述、备注信息。

实体关系图(E-R图)是数据库设计的基础,是指以实体、关系、属性三个基本概念概括数据的基本结构,从⽽描述静态数据结构的概念模式。

(⼆)结构化设计 结构化设计是指在结构化分析的基础上,映射分析模型到设计模型,得到系统的模块结构、数据库结构等。

如在数据流图的基础上,进⾏相应的变换分析和事务分析得到系统的模块结构,在ER模型的的基础上,进⾏数据库设计得到数据库结构。

面向对象和结构化程序设计的区别

面向对象和结构化程序设计的区别

⾯向对象和结构化程序设计的区别结构化编程强调功能模块。

结构化程序的概念⾸先是从以往编程过程中⽆限制地使⽤转移语句⽽提出的。

转移语句可以使程序的控制流程强制性的转向程序的任⼀处,在传统流程图中,就是⽤上节我们提到的"很随意"的流程线来描述这种转移功能。

如果⼀个程序中多处出现这种转移情况,将会导致程序流程⽆序可寻,程序结构杂乱⽆章,这样的程序是令⼈难以理解和接受的,并且容易出错。

尤其是在实际软件产品的开发中,更多的追求软件的可读性和可修改性,象这种结构和风格的程序是不允许出现的。

⽐如:C,FORTRAN,PASCAL等等结构化程序设计⽅法主要由以下三种逻辑结构组成:1)顺序结构:顺序结构是⼀种线性、有序的结构,它依次执⾏各语句模块。

2)循环结构:循环结构是重复执⾏⼀个或⼏个模块,直到满⾜某⼀条件为⽌。

3)选择结构:选择结构是根据条件成⽴与否选择程序执⾏的通路。

**采⽤结构化程序设计⽅法,程序结构清晰,易于阅读、测试、排错和修改。

由于每个模块执⾏单⼀功能,模块间联系较少,使程序编制⽐过去更简单,程序更可靠,⽽且增加了可维护性,每个模块可以独⽴编制、测试。

**⾯向对象程序语⾔中⽀持的对象具有三个明显得特征:封装、继承、多态;⽽Javascript在类别和副本上并没有明显地分界。

事实上,Javascript语⾔中所有的变量数据类型在JS中都是对象。

JS 总共⽀持4种对象:内置对象、⾃定义对象、浏览器程序对象和ActiveX对象。

return this只是返回该对象,以便别处引⽤,但并不是多出⼀个对象。

所以,⾯向过程的程序设计中:程序=算法+数据结构(数据和数据类型)数据结构和算法相分离的,所以,系统庞⼤后,它的控制、移植、重⽤就成了问题。

⽽在⾯向对象的程序设计中:对象=数据结构+算法程序=对象+对象+.....结构化程序设计从系统的功能⼊⼿(有的⽤户也成为⾯向过程的设计),按照⼯程的标准和严格的规范将系统分解为若⼲功能模块,系统是实现模块功能的函数和过程的集合。

管理信息系统(第二版)课后习题答案--第3章答案

管理信息系统(第二版)课后习题答案--第3章答案

管理信息系统(第二版)课后习题答案第3章答案第3章参考答案一、单项选择题1.A2.B3.B4.D5.D 6 7.C8.A9.A10.D11.A12.C13.D14.D15.C16 17.C18.A19.B20.D21.B22.D23 24 25.D二、多选题1. 2 3 4 5三、填空题1.自上而下,自下而上2.不能从整体上考虑问题3.整体性和逻辑性强4.小,大中5.结构化设计6.系统设计,系统实施7.自下而下8.面向对象的分析,面向对象的设计、面向对象的编程9.系统分析、系统设计、系统实施、系统运行维护和评价四、判断改错题1.F结构化生命周期法虽然开发周期较长,但目前还是一种比较普遍使用的方法。

2.T3.F在结构化生命周期法中,系统规划和分析是所有工作中的重中之重。

4.F原型法和生命周期法虽然思想不一样,但可以结合使用,先用原型化的过程获取需求,然后按照生命周期法的步骤进行设计实施。

5.T6.F系统分析阶段建立的是系统的逻辑模型。

7.T五、名词解释1.生命周期:任何系统都会经历一个由发生、发展、成熟、消亡、更新换代的过程,这个过程叫做系统的生命周期。

2.原型法:原型法是指系统开发人员在初步了解用户的基础上,借助功能强大的辅助系统开发工具,快速开发一个原型(初始模型),从而使用户与早地看到一个真实的应用系统。

在此基础上,利用原型不断提炼用户需求,不断改进原型设计,直至使原型变成最终系统。

3.对象:对象就是客观世界中的任何事物在计算机程序世界里的抽象表示,或者说,是现实世界中个体的数据抽象模型。

4.结构化系统开发方法:用系统工程的思想和工程化的方法,按用户至上的原则,结构化,模块化,自顶向下的对系统进行分析与设计。

具体来说就是先将整个信息系统开发过程化分为若干个独立的阶段,然后各阶段严格按步骤完成开发任务。

5.类,又称为对象类,是具有相同或相似结构、操作和约束规则的对象组成的集合,是一组对象的属性和行为特征的抽象描述。

第四讲结构化程序设计与面向对象程序设计

第四讲结构化程序设计与面向对象程序设计

第四讲结构化程序设计与面向对象程序设计在当今的计算机编程领域,结构化程序设计和面向对象程序设计是两种非常重要的编程方法。

它们各自有着独特的特点和优势,适用于不同的应用场景。

接下来,让我们一起深入了解这两种编程设计方法。

结构化程序设计诞生于 20 世纪 60 年代,它的出现是为了解决当时程序设计中存在的混乱和难以维护的问题。

结构化程序设计强调程序的清晰结构和逻辑流程,通过顺序、选择和循环这三种基本控制结构来构建程序。

顺序结构是最基本的,程序按照语句的先后顺序依次执行。

比如,我们先定义变量,然后进行计算,最后输出结果,这就是一个简单的顺序结构。

选择结构则用于根据不同的条件来决定程序的执行路径。

常见的有ifelse 语句和 switch 语句。

假设我们要判断一个数是奇数还是偶数,就可以使用 ifelse 语句,如果这个数除以 2 的余数为 0,就是偶数,否则就是奇数。

循环结构则允许我们重复执行一段代码,直到满足特定的条件。

比如 for 循环和 while 循环,当我们需要计算 1 到 100 的和时,就可以使用循环结构来实现。

结构化程序设计的优点是显而易见的。

它使得程序的逻辑更加清晰,易于理解和调试。

而且,由于程序的结构比较规范,代码的可读性和可维护性都得到了很大的提高。

然而,随着软件规模的不断扩大和复杂性的增加,结构化程序设计也逐渐暴露出一些局限性。

当程序变得非常复杂时,单纯依靠结构化程序设计可能会导致代码的重复度较高,模块之间的耦合度较大,不利于代码的复用和扩展。

为了解决这些问题,面向对象程序设计应运而生。

面向对象程序设计将数据和对数据的操作封装在一起,形成一个个对象。

对象具有自己的属性和方法,可以与其他对象进行交互。

在面向对象程序设计中,最重要的概念包括类、对象、封装、继承和多态。

类是对象的模板,它定义了对象所具有的属性和方法。

比如,我们可以定义一个“汽车”类,这个类包含了汽车的品牌、颜色、速度等属性,以及加速、刹车等方法。

三种系统开发方法的比较

三种系统开发方法的比较

三种系统开发方法的比较【摘要】信息系统的建设是现代信息工程发展的一个庞大课题,而完备高效的系统开发方法一直以来是各国系统开发组织和开发人员长期探究却无定论的话题。

本文以此为研究背景,介绍了系统开发过程中结构化开发、原型开发、面向对象开发三种目前应用较广的开发方法,并对结构化开发方法、原型开发方法和面向对象开发方法的基本思想、基本原理、开发过程、方法特点及适用范围,在系统中的开发过程中的应用进行了较为详尽的阐述和说明。

并根据这三种开发方法各自的基本思想、原理、开发阶段划分、方法的特点和适用范围的不同,做了比较、分析和总结,根据各自不同的特点简要分析了未来系统开发中开发方法的应用趋势,并对这三种开发方法的应用做了浅要的总结。

【关键字】系统开发结构化法原型化法面向对象法引言随着我国与世界信息高速公路的接轨,企业通过计算机网络获得信息必将为企业带来巨大的经济效益和社会效益,企业的办公及管理都将朝着高效、快速、无纸化的方向发展。

而在这其中,信息系统发挥着举足轻重的作用。

信息系统的建设是一个庞大的系统工程,它涉及到组织的内部结构、管理模式、生产加工、经营管理过程、数据的收集与处理过程、计算机硬件系统的管理与应用、软件系统的开发等各个方面。

这就增大了开发一个信息系统的工程规模和难度,需要研究出科学的开发方法和过程化的开发步骤,以确保整个开发过程能够顺利进行。

但是,至今还没有一种统一完备的开发方法。

传统的软件开发方法主要是生命周期法,它将软件开发过程大致划分为需求分析、系统设计、系统实施、系统测试等阶段,每一阶段的任务相对独立,对软件开发工作实施工程化管理。

虽然生命周期法提高了开发工作的效率,但它也存在缺点,例如在前期进行系统设计时就要进行比较全面的整体设计,这导致系统开发周期变长,耗费变大。

随着软件技术的发展,又引入了原型化方法和面向对象方法等。

原型化方法是近年来提出的一种以计算机为基础的系统开发方法,它首先构造一个功能简单的原型系统,然后通过对原型系统逐步求精,不断扩充完善得到最终的软件系统。

面向对象设计与结构化设计

面向对象设计与结构化设计
由于在类中封装了属性和方法,因此在面向对象的类设计中已经包 含了面向过程中的过程设计。此外,与面向过程中的数据设计所不同的 是,面向对象设计中的数据设计并不是独立进行的,面向对象设计中的 类图相当于数据的逻辑模型,可以很容易地转换成数据的物理模型。
9.2 面向对象设计与面向对象分析的关系
设计阶段的任务是及时把分析阶段得到的需求转变成符合各项要求 的系统实现方案。与传统的软件工程方法不同的是,面向对象的方法不 强调需求分析和软件设计的严格区分。实际上,面向对象的需求分析和 面向对象的设计活动是一个反复迭代的过程,从分析到设计的过渡,是 一个逐渐扩充、细化和完善分析阶段所得到的各种模型的过程。严格的 意义上来讲,从面向对象分析到面向对象设计不存在转换问题,而是同 一种表示方法在不同范围的运用。面向对象设计也不仅仅是对面向对象 分析模型进行细化。
9.3 面向对象设计的过程与规则
如图所示,与目标系统(即开发软件体系结构的 系统)交互的系统可以表示为:
➢ 上级系统:将目标系统作为某些高层处理方案的一 部分。
➢ 下级系统:被目标系统所使用,并且为完成目标系 统的功能提供必要的数据和处理。
➢ 同级系统:在对等的基础上相互作用(例如,信息 要么由目标系统和同级系统产生,要么被目标系统 和同级系统使用)。
• 现实的实体经常用指明其稳定特性的词来描述。大多数物理对象具有形状、重量、颜色和 材料类型等特性;人具有生日、父母、名字、肤色等特性,特性可被视为在类和某确定域 之间的二元关系。
面向对象的开发方法
• 传统的面向过程的开发方法是以过程为中心,以算法为驱动,因此,面向过程的编程语言 是程序=算法+数据
➢ 参与者:指通过产生和使用所需的信息,实现与目 标系统交互的实体(人、设备)。每个外部实体都通 过某一接口(带阴影的小矩形)与目标系统进行通 信。

结构化与面向对象的程序设计方法比较

结构化与面向对象的程序设计方法比较
( 封 大 学 a 机 电 工程 学 院 ;. 开 . b 软件 职业 技 术 学 院 , 南 开 封 4 5 0 ) 河 70 4

要 : 序设 计的基 本方 法 包括早期 的 结 构化 程序 设计 方 法 和 面向对 象的程序 设 计 方 法. 程 程 从
序设 计的 角度看 , 结构化 方法和 面向对 象方 法各有优 缺点. 从提 高程 序 的重用性和 可维护 性的 角度 看, 面向对 象方 法有较好 的应 用前景. 面 向对 象程 序设 计方 法 的基础 仍 然是 结构化 程序 设 计 , 但 即
收稿 日期 :0 0—1 2 2 1 2— 5
面 向对 象方 法 与结 构 化方 法不 同 , 把数 据 和 它
行为看成 同等重 要. 它是 一种 以数据 为主线 , 把数据
和对数据 的操作 紧密地 结合 在一起 的方法 .
2 1 面向对 象方 法的特 点 .
把 面 向对象 作为融 合 了数 据及 在数据 上的操作

1 结构化 程序设 计方 法
1 1 结构化程序 设计 的提 出 .
步分解 , 进入另 一个抽 象层次 . 12 2 基本 控制结 构 .. 用顺 序 方式 确 定各 部分 的执行 顺序 ,选 择方 用
计算 机软件 是伴 随着计算 机硬件 的发展 而发展
的. 早期 的程序 多为个人 的设计 产 品 , 开发者 和维 护
结构 化程 序设 计 的原 则 可 表 示 为 : 序 =( 程 算
法 ) 数据 结构 ) +( . 算 法 是 一 个 独 立 的 整 体 , 据 结 构 ( 含 数 数 包 据类 型 与 数 据 ) 是 一 个 独 立 的 整 体 . 者 分 开 也 两 设计 , 以算 法 ( 函数 或 过 程 ) 主 . 具 体 结 构 见 为 其 图 13( 中 的虚 线 表 示 上 面 的算 法 与 下 面 的 数 _ 图 据是 分 离 的 , 双箭 头 表 示 函数 或 过 程 对 数 据 的 输

VFP第14部分面向对象概念

VFP第14部分面向对象概念

相对引用
可在表单或表单集中使用关键字 THIS(对象自身)、THISFORM (当前表单)等相对引用对象。
常用的相对引用关键字有:
Parent 对象的直接容器
THIS
对象或对象的过程或事件
THISFORM 包含对象的表单
THISFORMSET 包含对象的表单集
2)对象的属性、方法及引用 对象名.对象的属性、事件或方法程序
类属性 圆柱体.材质:(无)
对象
纸圆 柱体
大理石 圆柱体
木圆 柱体
对象属性
圆柱体.材质:纸质 圆柱体.材质:大理石 圆柱体.材质:木质
类定义了对象的基本属性、事件 和方法,从而决定了对象的属性和行 为。VFP提供了丰富的基类,用户可 以直接使用基类来创建自己的子类或 对象,从而简化了新类的创建。
(见教科书169图10.1)
命令按钮(command)
控件类
教科书P208 主要属性:Caption、Enabled 主要事件:Click
命令按钮组(commandGroup)
容器类
教科书P209 主要属性:ButtonCount、Value 主要事件:Click
文本框(text)
控件类
教科书P210 主要属性:PasswordChar、Value、 ControlSource 主要事件:Valid、GotFocus
建立、修改表单
表单(Form)在系统中是用户的 主要界面,也有人把它称为屏幕 (Screen)或窗口。但它不是一个 普通的窗口,因为其中的控件可以有 属性、事件和方法,并且表单和表单 集本身也是有属性、事件和方法的编 程对象。
在Visual FoxPro 系统中,表单 拥有多个属性,可以响应多种事件、 实现多种方法操作。

理解结构化和面向对象的区别

理解结构化和面向对象的区别

理解结构化和⾯向对象的区别结构化⽅法 结构化程序设计⽅法包含结构化分析(SA)、结构化设计(SD)、结构化程序设计(SP)三个⽅⾯,分别对应了软件开发中的分析、设计和编码阶段。

结构化分析是由DeMarco和Yourdon在20世纪70年代所倡导的。

结构化分析是⼀种基于功能分解的分析⽅法,在分析过程中使⽤了各种⼯具,例如数据流图等,这些⼯具本质上是⼀个对⽤户需求的解读,也是⾯向⽤户展⽰的⼀个“说明书”,⽬的在于使软件真正符合⽤户的需求。

结构化设计⾯向数据流,其最⼤的着⼒点在于设计系统各个组成部分之间的内部联系,以满⾜软件所需要的层次和结构。

结构化设计中,软件被⾃顶向下地不断细分,并谨慎地对待数据流通软件时的每⼀个步骤。

David Hay曾经说过(1999):"信息⼯程是1970年代开发的结构化技术的逻辑延伸。

结构化编程导致结构化设计,这⼜导致结构化系统分析。

这些技术的特点是使⽤图表,例如为结构化设计的产⽣的结构图和为结构化分析⽽产⽣的数据流图,这些图表都是为了帮助⽤户与开发者之间的交流,以及规范化分析、开发过程⽽产⽣的。

在20世纪80年代,各种⼯具开始出现,它们⾃动绘制图表,并跟踪在数据字典中描述的东西。

"[1] 例如CAD/CAM这样的CASE⼯具。

⾯向对象⽅法 和结构化设计类似,⾯向对象技术包括⾯向对象分析(OOA)、⾯向对象设计(OOD)和⾯向对象编程(OOP)三部分。

⾯向对象⽅法有⼏个需要遵循的基本原则:即抽象、封装、继承和多态。

在⾯向对象建模中,代码和数据被合并成⼀个单⼀的不可拆分的单元,也就是⼀个对象。

这样的特性允许对象保持像⼀个⿊盒⼦,也就是说没有⼈需要看到⾥⾯的具体原理。

⽽为了达到这⼀点,对任何对象的所有修改是通过作⽤于对象的消息来完成的,并且实际上所有对象都从消息中获得它们的动作。

在⾯向对象建模中,这种特性被称为封装性,它⼤⼤便利了软件部件、包或者库的调⽤,并且更便于重⽤。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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%。

瀑布模型竭力回避需求变化的现实,它假定需求和设计能够正确地被指明和冻结,这与项目的现实严重不符。

相关文档
最新文档