软件工程 比较结构化方法和面向对象
软件工程(简答题)
1、简述结构化范型和面向对象范型的要点,并分析它们的优缺点。
答:结构化范型要点:结构化范型也称生命周期方法学,属于传统方法学。
传统的软件开发方法大部分采用瀑布模型。
这种模型要求每一阶段都以前一阶段形成的文档为基础完成工作。
每一阶段将要完成时,都要求开发人员进行验证或确认。
瀑布模型要求在软件产品生成之前对用户需求进行尽可能精确的、完全的刻画。
但要完成这种任务相当困难。
优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度.缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化时,开发出的软件往往不成功;而且维护起来仍然很困难。
面向对象范型四个要点:(1)面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由简单的软件对象组合而成。
(2)所有对象划分成各种对象类,每个对象都定义了一组数据和一组方法。
(3)按照子类(派生类)和父类(基类)的关系,把若干个对象类组成一个层次结构的系统(类等级)。
在派生类中对某些特性又做了重新描述,则在派生类中的这些特性将以新描述为准,也就是说,低层的特性将屏蔽高层的同名特性。
(4)对象彼此之间仅能通过传递消息互相联系。
面向对象范型主要优点(1)按照人类习惯的思维方法,对软件开发过程所有阶段进行综合考虑;(2)软件生存期各阶段所使用的方法、技术具有高度的连续性;(3)软件开发各个阶段有机集成,有利于系统的稳定性】6、非渐增式测试与渐增式测试有什么区别?答:【区别:1、非渐增式测试方法把单元测试和集成测试分成两个不同的阶段,前一阶段完成模块的单元测试,后一阶段完成集成测试。
而渐增式测试往往把单元测试与集成测试和在一起,同时完成。
2、非渐增式需要更多的工作量,因为每个模块都需要驱动模块和桩模块,而渐增式利用已测试过的模块作为驱动模块或桩模块,因此工作量较少。
渐增式可以较早的发现接口之间的错误,非渐增式最后组装是才发现。
结构化方法与面向对象方法的介绍与对比
结构化⽅法与⾯向对象⽅法的介绍与对⽐结构化⽅法与⾯向对象⽅法的介绍与对⽐结构化和⾯向对象,这两个概念在计算机领域的中应⽤⼗分⼴泛。
在软件⼯程中,结构化和⾯向对象的思想也占有重要地位,产⽣了结构化⽅法和⾯向对象⽅法,⽤来指导软件⽣产。
⼀、结构化⽅法结构是指系统内各个组成要素之间的相互联系、相互作⽤的框架。
结构化⽅法强调开发⽅法的结构合理性以及所开发软件的结构合理性。
针对软件⽣存周期各个不同阶段,可以分为结构化分析(SA)、结构化设计(SD)、结构化程序设计(SP)等⽅法。
1.1结构化分析⽅法结构化分析⽅法是⾯向数据流的分析⽅法,是70年代由Yourdon、Constaintine及DeMarco 等⼈提出和发展,并得到⼴泛的应⽤,其基本思想为分解和抽象。
结构化分析⽅法的设计原则有:(1)使每个模块尽量只执⾏⼀个功能(坚持功能性内聚);(2)每个模块⽤过程语句(或函数⽅式等)调⽤其他模块;(3)模块间传送的参数作数据⽤;(4)模块间共⽤的信息(如参数等)尽量少。
在结构化分析⽅法中,常⽤的⼯具有:数据流图数据流图(Data Flow Diagram,简称DFD)是描述系统中数据流程的图形⼯具,它标识了⼀个系统的逻辑输⼊和逻辑输出,以及把逻辑输⼊转换逻辑输出所需的加⼯处理。
通常,⼀个系统的DFD图会进⾏分层设计,使数据处理过程更加有层次,逻辑更加清晰。
DFD图的设计原则为:数据守恒与数据封闭原则、加⼯分解的原则、⼦图与⽗图的平衡、合理使⽤⽂件。
数据字典分层数据流图只是表达了系统的“分解”,为了完整地描述这个系统,还需借助“数据词典”(data dictionary)对图中的每个数据和加⼯给出解释。
对数据流图中包含的所有元素的定义的集合构成了数据词典。
它有四类条⽬:数据流、数据项、⽂件及基本加⼯。
在定义数据流或⽂件时,使⽤下表给出的符号,将这些条⽬按照⼀定的规则组织起来,构成数据词典。
在以上⼯具的辅助下,我们可以进⾏完整的结构化分析,⼀个典型的结构化分析过程为:①分析当前的情况,做出反映当前物理模型的DFD;②推导出等价的逻辑模型的DFD;③设计新的逻辑系统,⽣成数据字典和基元描述;④建⽴⼈机接⼝,提出可供选择的⽬标系统物理模型的DFD;⑤确定各种⽅案的成本和风险等级,据此对各种⽅案进⾏分析;⑥选择⼀种⽅案;⑦建⽴完整的需求规约。
(附答案)软件工程重点大题
答:结构程序设计的概念最早是由E. W. Dijkstra提出来的,他指出:“可以从高级语言中取消GOTO语句,程序质量与程序中所包含的GOTO语句的数量成反比”。并指出结构程序设计并非简单的取消GOTO语句,而是创立一种新的程序设计思想、方法和风格,以显著提高软件生产率和质量。
●需求分析与规格说明(明确系统的规格和要求);
●设计(包括概要设计和详细设计,将系统分解为模块);
●编程(用程序语言实现每个模块,简单容易);
●测试(发现并改正错误,分为模块测试、集成测试和系统联调三级);
●运行维护(扩充功能、纠错等)。
5.如何画分层数据流图?有哪些基本原则?
答:总的原则是:至顶而下,逐层分解(画分层数据流图)。逐层分解的画法可以控制每一层的复杂度。
答:以集中式的仓库模型为例。其主要优点:
(1)数据由某个子系统产生,并且被存储到仓库中,以便为另外一些子系统共享;
(2)由于中央集中控制的缘故,共享数据能得到有效的管理,各子系统之间不需要通过复杂的机制来传递共享数据;
(3)一个子系统不必关心其他的子系统是怎么使用它产生的数据;
(4)所有的子系统都拥有一致的基于中央数据仓库的数据视图。如果新子系统也采用相同的规范,则将它集成于系统中是容易的。
模块是由边界元素限定的相邻的程序元素的序列,而且有一个总体标志符来代表它。
所谓模块化,即是将一个大任务分成若干个较小的任务,较小的任务又细分为更小的任务,直到更小的任务只能解决功能单一的任务为止,一个小任务称为一个模块。各个模块可以分别由不同的人编写和调试。把大任务逐步分解成小任务的过程可以称为是“自顶向下,逐步细化”的过程。
数据结构的复杂性。要根据不同语言构造数据结构类型的能力选取合适的语言。C++、Java这样的高级语言显然比汇编语言的表达能力要强。
软件工程课后答案吕云翔
软件工程课后答案吕云翔1.与计算机硬件相比,计算机软件有哪些特点,答:一、无法直接观察计算机软件的物理形态,只能通过观察它的实际运行情况来了解它的功能、特性和质量等;二、人们在分析、设计、开发、测试软件产品的过程中,以及在软件开发项目的管理过程中,渗透了大量的脑力劳动;三、不存在像硬件一样的磨损和老化现象,但存在着缺陷维护和技术更新的问题;四、软件的开发和运行必须依赖于特定的计算机系统环境;五、具有可复用性。
2. 为什么说软件工程的发展可以在一定程度上解决软件危机的各种弊端,答:因为,软件工程的提出是为了解决软件危机所带来的各种弊端。
具体地讲,软件工程的目标主要包括以下几点。
(1) 使软件开发的成本能够控制在预计的合理范围内。
(2) 使软件产品的各项功能和性能能够满足用户需求。
(3) 提高软件产品的质量。
(4) 提高软件产品的可靠性。
(5) 使生产出来的软件产品易于移植、维护、升级和使用。
(6) 使软件产品的开发周期能够控制在预计的合理时间范围内。
3. 请简述软件工程的基本原则。
答:(1) 将软件的生命周期划分为多个阶段,对各个阶段实行严格的项目管理。
(2) 坚持阶段评审制度,以确保软件产品的质量。
(3) 实施严格的产品控制,以适应软件规格的变更。
在软件开发的过程中,用户需求很可能不断发生变化。
(4) 采用现代程序设计技术。
(5) 开发出来的软件产品应该能够清楚地被审查。
(6) 合理地安排软件开发小组的人员,并且开发小组的人员要少而精。
(7) 不断地改进软件工程实践。
4. 如何理解软件生命周期的内在特征,答:软件产品的生命周期是指从设计该产品的构想开始,到软件需求的确定、软件设计、软件实现、产品测试与验收、投入使用以及产品版本的不断更新,到最终该产品被市场淘汰的全过程。
软件生命周期这个概念从时间的角度将软件的开发和维护的复杂过程分解为了若干个阶段,每个阶段都完成特定的相对独立的任务。
由于每个阶段的任务相对于总任务难度会大幅度降低,在资源分配、时间把握和项目管理上都会比较容易控制。
软件工程 比较结构化方法和面向对象
软件工程比较结构化方法和面向对象一、引言软件工程是一门关注软件开发过程的学科,它涉及到软件开发的各个方面,包括需求分析、设计、编码、测试和维护等。
在软件工程领域中,有两种主要的开发方法:比较结构化方法和面向对象方法。
本文将对这两种方法进行详细的比较和分析。
二、比较结构化方法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)性能开销:在一些性能要求较高的场景下,面向对象方法可能带来一些性能开销。
结合以上对结构化方法和面向对象方法的评估,我认为两种方法各有优劣。
在实际项目中,我们应根据项目的特点和需求来选择合适的方法,甚至可以结合两种方法的优点,定制出适合项目的开发方法。
软件工程:结构化方法VS面向对象方法
软件⼯程:结构化⽅法VS⾯向对象⽅法⼀、基本概念1、结构化⽅法 结构化⽅法是⼀种传统的软件开发⽅法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合⽽成的。
基本思想:把⼀个复杂问题的求解过程分阶段进⾏,⽽且这种分解是⾃顶向下,逐层分解,使得每个阶段处理的问题都控制在⼈们容易理解和处理的范围内。
2、⾯向对象⽅法 ⾯向对象⽅法是⼀种把⾯向对象的思想应⽤于软件开发过程中,指导开发活动的系统⽅法,简称OO,是建⽴在“对象”概念基础上的⽅法学。
对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,⼀个对象类定义了具有相似性质的⼀组对象。
基本思想:尽可能模拟⼈类习惯的思维⽅式,使开发软件的⽅法与过程尽可能接近⼈类认识世界、解决问题的⽅法与过程, 也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能⼀致。
⼆、两者对⽐1、基本单位不同 结构化⽅法的基本单位是模块。
⾯向对象⽅法的基本单位是对象。
2、分析⽅法不同 结构化分析⽅法是⼀种⾯向数据流⽽基于功能分解的分析⽅法, 在该阶段主要通过采⽤数据流程图、编制数据字典等⼯具, 描述边界和数据处理过程的关系, ⼒求寻找功能及功能之间的说明。
⾯向对象分析是把对问题域和系统的认识理解, 正确地抽象为规范的对象( 包括类、继承层次) 和消息传递联系, 最终建⽴起问题域的简洁、精确、可理解的⾯向对象模型, 为后续的⾯向对象设计和⾯向对象编程提供指导。
⾯向对象分析通常建⽴三种模型: 对象模型、动态模型、功能模型。
其中, 对象模型描述了系统的静态结构,确定类的名称和类间的关系;动态模型表⽰瞬时的、⾏为化的系统的“ 控制”性质, 规定了对象模型中的对象的合法变化序列;功能模型表明了系统中数据之间的依赖关系, 以及有关数据的处理功能。
3、各⾃局限(1)结构化⽅法 i.不能直接反映问题域: 结构化分析⽅法以数据流为中⼼, 强调数据的流动及每⼀个处理过程, 不是以问题域中的各事物为基础, 打破了各事物的界限, 分析结果不能直接反映问题域, 容易隐蔽⼀些对问题域的理解偏差。
软件工程方法之异同
软件工程方法之异同软件工程方法是软件工程学科的核心内容,而软件工程方法以结构化方法和面向对象方法为主要两个阵营。
两种方法的发展都为软件开发历史做出了巨大的贡献,它们各有特点,互相区别。
两者的联系:面向对象程序设计主要克服了结构化程序设计中存在的问题。
面向对象程序设计出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计。
在面向过程程序设计中,问题被看作一系列需要完成的任务,函数(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数。
其中函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。
在多函数程序中,许多重要的数据被放置在全局数据区,这样它们可以被所有的函数访问。
每个函数都可以具有它们自己的局部数据。
这种结构很容易造成全局数据在无意中被其他函数改动,因而程序的正确性不易保证。
面向对象程序设计的出发点之一就是弥补面向过程程序设计中的一些缺点:对象是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。
结构化方法:结构化程序设计方法主张按功能来分析系统需求, 原则有自顶向下, 逐步求精, 模块化等.结构化程序设计首先采用结构化分析(SA)方法对系统进行需求分析, 然后采用结构化设计(SD)方法对系统进行概要设计,详细设计, 最后采用结构化编程(SP)方法实现系统.结构化程序设计按功能来把系统逐步细化, 因此又叫做面向功能的程序设计方法.结构化程序设计的每个功能都负责对数据的接收,处理,输出,这种方式又称为面向数据流的处理方式用DFD(数据流图)表示.结构化程序设计里最小的程序单元是函数.整个程序由一个个函数组成, 而整个程序的入口是一个主函数(main()), 由主函数调用其他函数,函数之间的依赖来构成整个程序的功能.结构化程序设计的局限性:设计不够直观,与人类的思维不一致.适应性差,可扩展性不强.程序的三种基本结构:结构化程序设计非常强调某个功能的算法.算法由一系列操作组成. 任何简单或复杂的算法都可以由顺序结构,选择结构,循环结构这三种基本结构来构成.面向对象方法:面向对象的基本思想是使用类, 对象, 继承, 封装, 消息等基本概念进行程序设计.在系统构造中尽可能的利用人类的自然思维方式,强调以现实世界中的事物(对象)为中心来思考,认识问题,并根据这些事物的本质特征,把它们抽象表示为系统中的类.这使得软件系统的组件可以直接的映像到客观世界,并保持客观世界中事物及其相互关系的本来面貌.面向对象方法的三个基本特征:封装性:将对象的实现细节隐藏起来, 通过一些公共的接口方法来供外部调用对象的功能.继承性:是面向对象实现的的重要手段,子类继承父类, 子类直接获得父类的非private属性和方法.多态性:子类对象可以赋值给父类对象引用, 但运行的时候仍然表现出子类的行为特征,同一个类型的对象在执行同一个方法时, 可能表现出不同的特征.面向对象还支持如下特点:对象是面向对象最基本的概念, 它的基本特点有:标识唯一性,分类性,多态性,封装性,模块独立性好.类是具有公共属性公共方法的一类事物.类是对象的抽象, 对象是类的实例化. 类的封装提高了类的内聚性, 降低了对象之间的耦合性.对象间的相互合作需要一个机制协助进行, 这样的机制称为"消息", 消息是一个实例与另一个实例之间的相互通信的机制.面向对象方法中,类之间的共享属性和共享方法的机制称为继承.继承具有传递性.继承分为多继承和单继承."基于对象"和面向对象面向对象和"基于对象"都实现了"封装"的概念, 但是面向对象实现了"继承和多态", 而"基于对象"没有实现.两者比较:显而易见,结构化方法和面向对象方法在设计程序的时候的思想是有着本质的不同的。
面向对象方法与结构化方法的比较
类 演绎 过程 。与结 构化 相 比 ,面 向对 象更接 近人们 的
认 识事 物 和解决 问题 的过 程和思 维方法 。 软件 开 发的 过程 就是 人们使用 各 种计算 机语 言将 人 幻关心 的现 实 世界 ( 问题域 )映射到 计算 机 世界 的
过程 ,可描述 为 :
r ———— ——] r— ——— ——] r— ——— ] — ——— ———— ——— — 一
结 构化 方法 基本思 想是 自顶 向下 、逐 步求 精 ,采 取模 块 化技 术 、分而治 之 的方法 ,将 系统 按功 能分 解
为若 干模块 ;模 块 内部 由顺 序 、分支 、循 环基 本控 制
结构 组成 ,应 用子 程序实 现 模块 化 。 结构化 方法强调功能抽 象和模块性 , 将问题求 解看 作是一个过 程 。由于采 用 了模 块分解 和功能 分解 ,从而 可 以有效地将 一个较 复杂的系统分解成 更小 的任务 . 最 后 的子任 务都 可 以独立 编写成子程序模块 。 结构化程序 的模 块是 高度功 能性 的, 很强 的内聚力 , 各模块 的 有 但 数 据处 于实 现功能的从 属地位 ,因此 , 各模 块与数据 间 的相 关性就差 , 无论把数据 分放在单个模块 里还是 作为
结 构化 方法 和 面向对象 方法 是 当前最 重要 的 两种 软件设计 方法 。 构化 程序 设计 方法 于2 结 O世 纪7 O年 代
实体 .程 序 员在编 程时 必须 时刻 考虑 到所要处 理 的数 据 的格式 。对 于不 同的数据格 式 做相 同的处理 或对 于 相 同的数 据 格 式 做 不 同 的处 理 都 需 要 编 写不 同 的 程 序 ,因此结 构化程 序的 可重用 性不 好 。另 一方 面 ,当 数据 与过程 相互 独立 时 ,总存 在错 误的数据 调用 正确 的程序 模块 的可 能性 。 因此 要使 数据 与程序 始终 保持
软件工程之结构化方法与面向对象方法之比较与结合
软件⼯程之结构化⽅法与⾯向对象⽅法之⽐较与结合 软件开发⽅法指,在项⽬投资规模和时间限制内,设计、实现符合⽤户需求的⾼质量软件,根据软件开发的特点,提出的多种软件开发的策略。
随着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模型的的基础上,进⾏数据库设计得到数据库结构。
理解结构化和面向对象的区别
理解结构化和⾯向对象的区别结构化⽅法 结构化程序设计⽅法包含结构化分析(SA)、结构化设计(SD)、结构化程序设计(SP)三个⽅⾯,分别对应了软件开发中的分析、设计和编码阶段。
结构化分析是由DeMarco和Yourdon在20世纪70年代所倡导的。
结构化分析是⼀种基于功能分解的分析⽅法,在分析过程中使⽤了各种⼯具,例如数据流图等,这些⼯具本质上是⼀个对⽤户需求的解读,也是⾯向⽤户展⽰的⼀个“说明书”,⽬的在于使软件真正符合⽤户的需求。
结构化设计⾯向数据流,其最⼤的着⼒点在于设计系统各个组成部分之间的内部联系,以满⾜软件所需要的层次和结构。
结构化设计中,软件被⾃顶向下地不断细分,并谨慎地对待数据流通软件时的每⼀个步骤。
David Hay曾经说过(1999):"信息⼯程是1970年代开发的结构化技术的逻辑延伸。
结构化编程导致结构化设计,这⼜导致结构化系统分析。
这些技术的特点是使⽤图表,例如为结构化设计的产⽣的结构图和为结构化分析⽽产⽣的数据流图,这些图表都是为了帮助⽤户与开发者之间的交流,以及规范化分析、开发过程⽽产⽣的。
在20世纪80年代,各种⼯具开始出现,它们⾃动绘制图表,并跟踪在数据字典中描述的东西。
"[1] 例如CAD/CAM这样的CASE⼯具。
⾯向对象⽅法 和结构化设计类似,⾯向对象技术包括⾯向对象分析(OOA)、⾯向对象设计(OOD)和⾯向对象编程(OOP)三部分。
⾯向对象⽅法有⼏个需要遵循的基本原则:即抽象、封装、继承和多态。
在⾯向对象建模中,代码和数据被合并成⼀个单⼀的不可拆分的单元,也就是⼀个对象。
这样的特性允许对象保持像⼀个⿊盒⼦,也就是说没有⼈需要看到⾥⾯的具体原理。
⽽为了达到这⼀点,对任何对象的所有修改是通过作⽤于对象的消息来完成的,并且实际上所有对象都从消息中获得它们的动作。
在⾯向对象建模中,这种特性被称为封装性,它⼤⼤便利了软件部件、包或者库的调⽤,并且更便于重⽤。
对结构化方法和面向对象方法的对比和讨论
① 基 于 映 射 : 把现 实世 界 的 工 作 过程
从 超 类 继 承 属 性 和 操 作 ; 超 类 — — 也 称 作 基 类 ,是 一 组 相 关 类 的泛 化 。 () 向 对 象 的 特 点 2面
结 构 化 方 法 是 强 调 开 发 方法 的 结 构合 理 性 以及 所 开 发 软 件 的 结 构 合 理 性 的 软 件 开 发 方 法 。 结 构 化 分 析 方 法 给 出 一 组 帮 助 系 统
进 行 仿 真 , 引 入 了类 概 念 和 继 承 机 。 7 年 代 0
结 构 化 方 法 是 强 调 开 发 方 法 的 结 构 合 理 性 以及 所 开 发 软 件 的 结 构 合 理 性 的 软 件 开 发
末 ,另 一个专用 的面 向对象语 言S a 1 a k m l t l 开 始进 行设 计 ,并在8 年提 出一个 完善 版本 。 O 但 这时只 在实 验室和 科研 活动 中使用 。随着 软件 复 杂程度 的进 一步提 高 ,低 耦 合、高 内
实体有 直接对 应关 系 ,一 个对 象类定 义 了具 有相似 性质 的一组 对象 。而每 继承性 是对 具 有层次 关系 的类 的属性和 操作 进行共 享 的一
种方式 。所 谓面 向对象就 是基 于对象 概念 , 以对 象 为 中心 , 以 类 和 继 承 为 构 造 机 制 , 来 认 识 、理 解 、 刻 画 客 观 世 界 和 设 计 、 构 建 相 应 的 软件 系 统 。
面 向对 象 的 思 想 应 用 于 软 件 开 发 过 程 中 , 指 导 开 发 活 动 的 系 统 方 法 , 简 称 O 方 法 ,是 建 O 立 在 “ 象 ” 概 念 基 础 上 的 方 法 学 。 对 象 是 对 由数 据 和 容 许 的 操 作 组 成 的 封 装 体 , 与 客 观
结构化方法与面向对象方法
结构化方法与面向对象方法一、概述结构化方法和面向对象方法是软件开发中两种不同的编程思想。
结构化方法强调程序的流程控制,将程序划分为多个模块,每个模块完成特定的功能。
面向对象方法则强调数据和行为的封装,将数据和操作数据的函数封装在一个类中,通过类来描述问题。
二、结构化方法1. 模块化设计结构化方法将程序划分为多个模块,每个模块完成特定的功能。
在设计过程中需要考虑模块之间的接口和数据传递方式。
通常采用自顶向下或自底向上的设计方式。
2. 顺序、选择和循环控制结构结构化方法强调程序的流程控制,其中顺序、选择和循环控制结构是最基本的三种控制结构。
在编写代码时需要根据实际情况选择合适的控制结构。
3. 结构体和数组结构体是一种用户定义类型,在一个结构体中可以包含多个不同类型的变量。
数组是一种相同类型变量组成的集合。
在处理大量数据时可以使用数组来简化代码。
4. 函数和指针函数是一段可重复使用的代码,可以接受参数并返回值。
指针是一种特殊的变量,它存储的是内存地址。
在结构化方法中,函数和指针是非常重要的概念。
三、面向对象方法1. 类和对象面向对象方法强调数据和行为的封装,将数据和操作数据的函数封装在一个类中。
类是一种用户定义类型,它描述了一组属性和方法。
对象则是类的一个实例。
2. 继承继承是面向对象编程中最重要的概念之一。
通过继承可以实现代码复用和层次关系描述。
派生类可以继承基类中所有公有成员,并且可以添加自己的成员。
3. 多态多态是指同一操作作用于不同的对象上面时,可以产生不同的解释和不同的执行结果。
多态性分为静态多态性和动态多态性两种形式。
4. 封装封装是将数据和行为包装在一个单元中,并保护其内部状态不被外部访问或修改。
通过封装可以提高代码重用性、可读性和可维护性。
四、结构化方法与面向对象方法比较1. 设计思路不同结构化方法强调程序流程控制,而面向对象方法强调数据和行为的封装。
2. 技术实现不同结构化方法主要采用模块化设计、顺序、选择和循环控制结构、结构体和数组、函数和指针等技术实现。
软件开发方法——结构化方法与面向对象方法比较
【 src] o ue ow r o e sineadtcnlg e otn s tsa drl, a eo eteifr t nsceyo ek y AbtatC mptrsf aei m dm cec n h ooyi vr i r t t u n oe hsb cm h omai oit fh e t n e s y mp a a n o t
( ) 据 字典 1数 数 据 字 典是 一 个 包 含 所 有 系 统数 据 元 素 定 义 的仓 库 。 据 元 素 的 数
言 , 种 发 展 趋 势 具 有 十 分 重 要 的意 义 , 使 那 些 富有 生 命 力 的新 方 这 它 定 义 必须 是 精 确 的 、 格 的 和 明确 的 。一 个 实 体 一 般 应 包 括 以 下几 个 严 法 和新 技 术 就 此 形 成 自己 系统 化 的 技 术 体 系 , 它极 大地 推 动 了计 算机 部 分 的 内容 : 软 件技 术 的发 展 。 ①名字 ; ②别名 ; ③用途; 内容描述 ; ④ ⑤备注信息。 结 构 化 方 法 和 面 向对 象 方 法 都 是 计 算 技术 中 常 用 的 软 件 开 发 方 ( ) 据 流 图 2数 法 , 种 开 发 方 法 目前 都 非 常 流 行 , 择 哪 一种 方 法 要 根 据 分 析 者 的 两 选 数据 流 图是 S 和 S 的 核 心技 术 .它 采 用 面 向处 理 过 程 的思 想 A D 熟 练程 度 和 项 目的类 型 而定 。就 目前 而 言 , 十全 十美 的开 发 方 法 是 不 来 描 述 系 统 。 是 一 种 描述 信 息 流 和 数 据从 输 入 到输 出变 换 的应 用 图 它 存 在 的 , 正 实 用 的 系统 开 发 方 法 往 往 是 多种 开 发 方 法 的结 合 。如 何 真 形 技 术 。 拟 系 统 的 一 个大 致 边 界 , 展 示 系统 和外 部 的 接 口、 据 的 模 并 数 综 合应 用 , 根 据 开 发 系统 的规 模 、 统 的 复杂 程 度 、 统 开 发 方 法 的 输 入 和输 出 以及 数 据 的存 储 。 要 系 系 特点 , 以及 所 能使 用 的计 算 机 软 件 等诸 多 因素 综 合 考 虑后 决 定 。 ( ) 态 变 迁 图 3状 状 态 变 迁 图及 时地 描 述 了 对 象 的状 态 , 着 重 系 统 的 时 间 依 赖 行 它 2 结 构 化 方 法 为 。 态 变 迁 图源 于 实 时 系统 的建 模 。状 态 变 迁 图 看 起来 非 常像 数 据 状 结 构 化 方 法 ftJtrdMehdlg) 计 算 学 科 的 一 种 典 型 的 系 流 图 , 而 , Sncue toooy是 然 它们 之 间却 存 在 着 本 质 的不 同 。 据 流 图 着重 于数 据 流 和 数 统开发方法。 它采 用 了系 统 科 学 的思 想 方 法 , 层 次 的 角度 , 从 自顶 向下 数 据 转 换 的过 程 , 状 态变 迁 图 着 重 于 状 态 的 描 述 , 而 如激 励 发 生 时 的 地 分 析 和 设计 系统 。结 构 化 方 法 包括 结 构 化 分 析 (t c rdA ayi, 开 始 状 态 和 系统 执 行 响 应 后 的 结果 状 态 。 态 变 迁 图 的条 件 和一 个 过 Sr t e n l s u u s 状
结构化与面向对象的程序设计方法比较
摘
要 : 序设 计的基 本方 法 包括早期 的 结 构化 程序 设计 方 法 和 面向对 象的程序 设 计 方 法. 程 程 从
序设 计的 角度看 , 结构化 方法和 面向对 象方 法各有优 缺点. 从提 高程 序 的重用性和 可维护 性的 角度 看, 面向对 象方 法有较好 的应 用前景. 面 向对 象程 序设 计方 法 的基础 仍 然是 结构化 程序 设 计 , 但 即
收稿 日期 :0 0—1 2 2 1 2— 5
面 向对 象方 法 与结 构 化方 法不 同 , 把数 据 和 它
行为看成 同等重 要. 它是 一种 以数据 为主线 , 把数据
和对数据 的操作 紧密地 结合 在一起 的方法 .
2 1 面向对 象方 法的特 点 .
把 面 向对象 作为融 合 了数 据及 在数据 上的操作
一
1 结构化 程序设 计方 法
1 1 结构化程序 设计 的提 出 .
步分解 , 进入另 一个抽 象层次 . 12 2 基本 控制结 构 .. 用顺 序 方式 确 定各 部分 的执行 顺序 ,选 择方 用
计算 机软件 是伴 随着计算 机硬件 的发展 而发展
的. 早期 的程序 多为个人 的设计 产 品 , 开发者 和维 护
结构 化程 序设 计 的原 则 可 表 示 为 : 序 =( 程 算
法 ) 数据 结构 ) +( . 算 法 是 一 个 独 立 的 整 体 , 据 结 构 ( 含 数 数 包 据类 型 与 数 据 ) 是 一 个 独 立 的 整 体 . 者 分 开 也 两 设计 , 以算 法 ( 函数 或 过 程 ) 主 . 具 体 结 构 见 为 其 图 13( 中 的虚 线 表 示 上 面 的算 法 与 下 面 的 数 _ 图 据是 分 离 的 , 双箭 头 表 示 函数 或 过 程 对 数 据 的 输
面向对象和面向结构区别联系
面向对象方法与结构化方法比较答:分析是问题抽象 (做什么),设计是问题求解 (怎么做),实现是问题的解 (结果)。
在问题抽象阶段,结构化方法面向过程,按照数据变换的过程寻找问题的结点,对问题进行分解。
因此,与面向对象方法强调的对象模型不同,描述数据变换的功能模型是结构化方法的重点。
如果问题世界的功能比数据更复杂或者更重要,那么结构化方法仍然应是首选的方法学。
如果数据结构复杂且变换并不多,那么如以过程主导分析和设计,一旦有系统变更就会给下游开发带来极大混乱。
由于对过程的理解不同,面向过程的功能细分所分割出的功能模块有时会因人而异。
而面向对象的对象细分,从同一问题领域的对象出发,不同人得出相同结论的比率较高。
在设计上,结构化方法学产生自顶向下、结构清晰的系统结构。
每个模块有可能保持较强的独立性,但它往往与数据库结构相独立,功能模块与数据库逻辑模式间没有映射关系,程序与数据结构很难封装在一起。
如果数据结构复杂,模块独立性很难保证。
面向对象方法抽象的系统结构往往并不比结构化方法产生的系统结构简单,但它能映射到数据库结构中,很容易实现程序与数据结构的封装。
在软件工程基本原则中有一条“形式化原则”,即对问题世界的抽象结论应该以形式化语言 (图形语言、伪码语言等) 表述出来。
结构化方法可以用数据流图、系统结构图、数据辞典、状态转移图、实体关系图来进行系统逻辑模型的描述;而面向对象方法可以使用对象模型图、数据辞典、动态模型图、功能模型图。
其中对象模型图近似系统结构图与实体关系图的结合,动态模型图类似状态迁移图,功能模型图类似数据流图。
结构化方法三大模型:分析模型;设计模型;实现模型面向对象方法三大模型:对象模型;动态模型;功能模型等价划分的基本思想是什么?答:根据程序的输入特性,将程序的定义域划分为有限个等价区段—“等价类”,从等价类中选择出的用例具有“代表性”,即测试某个等价类的代表值就等价于对这一类其它值的测试。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程
一、引言
在当今信息技术高速发展的时代,软件的开发和维护变得越来越重要。
为了有效管理软件项目,提高开发效率和质量,软件工程的概念应运而生。
软件工程是一门研究如何按照系统化、规范化、定量化和可重复性的方式开发和维护软件的学科。
在软件工程中,结构化方法和面向对象是两种常用的开发方法。
本文将对结构化方法和面向对象进行比较,并探讨它们在软件工程中的优劣和适用场景。
二、结构化方法
2.1 定义和特点
结构化方法是一种基于数据流和流程的软件开发方法。
它将软件系统视为一系列逐步细化的模块,通过分析数据流和流程来设计和实现软件系统。
结构化方法强调模块化、层次化和自顶向下的设计思想,以确保程序逻辑清晰、易于理解和修改。
2.2 优点
1.结构化方法强调模块化,将软件系统分解为多个模块,每个模块负责特定的
功能。
这种模块化的设计使得程序易于理解、修改和测试,提高了软件的可维护性和可测试性。
2.结构化方法采用自顶向下的设计思想,先设计系统的总体框架,再逐步细化
到具体的模块。
这种逐步细化的设计方式使得开发过程更加可控,项目管理更加容易。
同时,自顶向下的设计过程也便于团队协作和分工。
3.结构化方法将程序逻辑分解为一系列有序的步骤,每个步骤都有明确的输入
和输出。
这种严格的输入输出规定使得程序的设计和测试更加方便。
4.结构化方法在软件开发初期就明确定义了数据流和流程,使得开发人员能够
更好地理解和掌握软件系统的整体架构,从而减少了项目失败的风险。
2.3 缺点
1.结构化方法的设计过程较为复杂,需要详细分析系统的数据流和流程。
对于
较大规模的软件系统,分析和设计的工作量较大,容易导致项目开发周期延长。
2.结构化方法强调模块化,但对于一些复杂的问题,模块化的设计可能不够灵
活和强大。
这就需要在设计阶段尽可能考虑全部的需求和功能,否则可能会在后期的修改过程中遇到困难。
三、面向对象
3.1 定义和特点
面向对象是一种以对象为基础的软件开发方法。
在面向对象方法中,软件系统由一组相互作用的对象组成。
每个对象都有自己的属性和方法,对象通过消息传递进行通信和协作。
面向对象方法强调对象的封装、继承和多态性,以实现代码的重用和系统的扩展。
3.2 优点
1.面向对象方法提供了更高级别的抽象,能够更好地反映现实世界的问题域。
开发人员可以通过对象的方式理解问题,并将问题转化为对象和类的设计,提高了开发效率和软件质量。
2.面向对象方法通过封装、继承和多态性实现了代码的重用性。
在系统开发过
程中,可以通过继承和组合来构建复杂的对象和类,从而减少了重复编写代码的工作量。
3.面向对象方法支持系统的扩展和维护。
通过继承和多态性,可以方便地引入
新的功能,并与原有代码进行无缝集成。
这种灵活性使得系统能够适应不断变化的需求。
3.3 缺点
1.面向对象方法需要较高的抽象能力和设计水平。
开发人员需要理解对象、类
和继承等概念,并能够将问题转化为适合的对象和类设计。
这对于一些初学者来说可能会有一定的学习曲线。
2.面向对象方法在设计阶段可能会增加一定的复杂性。
系统的对象和类之间的
关系需要仔细考虑和设计,否则可能会导致系统的耦合度过高或者继承关系混乱等问题。
四、结构化方法与面向对象的比较
4.1 设计思想
•结构化方法强调自顶向下的设计思想,逐步细化系统的模块和函数。
•面向对象方法强调从抽象到具体的设计思想,通过对象和类的设计来解决问题。
4.2 程序设计
•结构化方法将程序逻辑分解为一系列步骤和函数,通过数据流和流程来控制程序的执行。
•面向对象方法将程序分解为一组相互作用的对象,通过消息传递和方法调用来控制程序的执行。
4.3 代码重用性
•结构化方法通过函数的抽象和模块的设计提高代码的重用性。
•面向对象方法通过继承和组合提高代码的重用性。
4.4 系统扩展性
•结构化方法在系统设计之初需要考虑更多的细节,可能会导致系统扩展的困难。
•面向对象方法通过继承和多态性实现了系统的扩展性,可以方便地引入新的功能。
五、结论
综上所述,结构化方法和面向对象方法都是常用的软件开发方法。
结构化方法适合于较小规模的简单系统,它强调模块化和自顶向下的设计思想,适用于需求相对固定的项目。
面向对象方法适合于较大规模的复杂系统,它强调对象和类的设计,能够更好地应对需求变化和系统扩展的问题。
在实际软件开发中,可以根据项目的需求和特点选择合适的开发方法,或者结合两种方法的优点进行综合开发。