首页 > 代码库 > 结构化方法与面向对象方法之比较
结构化方法与面向对象方法之比较
结构化方法与面向对象方法之比较
随着计算机软硬件各方面的飞速发展,计算机领域的观念和方法日新月异。面向对象方法始于20世纪60年代挪威奥斯陆大学和挪威计算机中心共同研究的SMULA语言。70 年代,人们都认为结构化方法是最好的系统开发方法,直到现在仍有许多系统是用它开发的。然而,随着计算机应用技术的不断发展,结构化方法越来越不能适应日益复杂庞大且高速发展的信息系统的建设。80年代以来,面向对象方法正引起越来越强烈的关注和重视,并在业内掀起一股新的面向对象编程浪潮。面向对象方法是在结构化方法、信息建模方法等基础上发展起来的,现已呈现出取代结构化方法的趋势。本文具体分析两者在软件开发中的差别以及面向对象方法的优越性。
结构化方法:
结构化方法是计算学科的一种典型的系统开发方法,是对现实世界的应用问题进行分解,面向过程设计问题空间的解域,强调自顶向下、逐步求精、模块化设计。
结构化方法的建模技术包括DFD(数据流图)、DD(数据字典)、ERD(实体一联系图)和SC(结构图)。
(1)数据流图:数据流图是 SA 和 SD 的核心技术, 它采用面向处理过程的思想 来描述系统,它是一种描述信息流和数据从输入到输出变换的应用图 形技术。 模拟系统的一个大致边界,并展示系统和外部的接口、数据的 输入和输出以及数据的存储。
(2)数据字典:数据字典是一个包含所有系统数据元素定义的仓库。 数据元素的 定义必须是精确的、严格的和明确的。 一个实体一般应包括以下几个 部分的内容: ①名字; ②别名; ③用途; ④内容描述; ⑤备注信息。
(3)实体-联系图:实体-联系模型被用来模拟系统数据部件之问的相互关系。 实体-联系模型独立于当前的系统状态,并与具体的计算机程序设计语言无关。
(4)结构图:准确的表明程序结构,它能描述出各个模块之间的联系和关系。与数据流图不同,结构图描述的是控制流的情况。结构图的主要成分有:模块;模块间的调用关系,箭头指向的是被调用模块;模块间的通讯,在表示调用关系的箭头旁边的一个小箭头表示;辅助控制符号,当模块A有条件的调用模块B时候,在箭头的起始点加上一个菱形,当模块A反复调用模块B的时候,在箭头的中间加上一个环形。
结构化方法包括结构化分析(Structured Analysis,简称SA)、结构化设计(Structured Design,简称SD)和结构化程序设计(Structured Program Design,简称SP)三部分内容。
SA具体是面向应用,分解需求。方法步骤为:分析当前的情况,做出当前物理模型的DFD;推导出等价的逻辑模型的DFD;设计新的逻辑系统,生成数据字典和基元描述;建立人机接口,确定目标系统物理模型的DFD。
SD是细化分析结果,过渡软件结构。方法步骤为:评审和细化DFD;确定DFD类型;把DFD映射到软件模块结构,设计出上层结构;基于DFD逐步分解高层模块,设计中下层模块;对模块结构进行优化,得到更为合理的软件结构;描述模块接口。
SP是进行系统设计。
面向对象方法:
面向对象方法是使用现实世界的概念抽象地思考问题从而自然的解决问题。强调模拟现实世界中的概念而不强调过程或算法,支持重用。主要有OOA和OOD模型。其中OOA 主要属于学 科抽象方面的内容,OOD 主要属于学科设计方面的内容。
(1)OOA 模型:(立足应用,刻画问题)
OOA 关心的是构建现实世界的模型问题。 如何解决现实世界的 建模问题呢?根据系统科学的思想,首先需要对复杂的系统进行分解, 最常用的分解方法就是分层。 关于OOA 模型的分层方法有不少,现采用P.Coad和E.Yourdon的分层方法。该方法将 OOA 模型划分为5个层次,即:主题层、对象层、结构层、属性层和服务层。OOA 的主要任务就是要在问题 域上构建具有这5个层次内容的 OOA 模型。
1)主题层:主题给出 OOA 模型中各图的概况, 为分析员和用户提供了一个 相互交流的机制,有助于人们理解复杂系统的模型构成。
2)对象层:对象是属性及其专用服务的一个封装体, 是对问题域中的人、事和物等客观实体进行的抽象描述。 对象由类创建,类是对一个或多个 对象的一种描述,这些对象能用一组同样的属性和服务来刻画。
3)结构层:在OO方法中,组装结构和分类结构是两种重要的结构类型,它 们分别刻画“整体与部分”组织以及“一般与特殊”组织。组装结构(即整体与部分)遵循了人类思维普遍采用的第2个基本法 则,即区分整体对象及其组成部分。分类结构(即一般与特殊)遵循了人类思维普遍采用的第3个法 则,在OO方法中,是类、成员和它们之间的区别。
4)属性层:属性是描述对象或分类结构实例的数据单元,类中的每个对象都 具有它的属性值,属性值就是一些状态的信息数据。
5)服务层:一个服务就是收到一条信息后所执行的处理(操作)。服务是对模型化的现实世界的进一步抽象。
(2)OOD模型:(细化分析结果、补充现实相关)
OOA 与 OOD 不存在转换的问题。OOD根据设计的需要, 仅对OOA在问题域方面建立的 5个抽象层次进行必要的增补和调整。方法步骤为改进和完善系统分析的结果;设计交互过程和用户接口;设计任务管理,以及子系统以及任务之间的协调方式;设计全局资源,确定任务或子系统的资源分配;对象设计。同时,OOD还必须对人机交互、任务管理和数据管理3个部分的内容进 行抽象,最后建立完整的OOD模型。
结构化方法和面向对象方法优缺点比较:
(一)从执行效率来说。结构化方法比面向对象方法产生的可执行代 码更直接, 更高。所以对于一些嵌入式的系统, 结构化方法产生的系统 更小, 运行效率更高。
(二)从重用性方面来说。采用结构化方法的系统难以修改和扩充。 结构化分析与设计清楚定义了系统的接口, 当系统对外界接口发生变 动时, 往往造成系统结构较大变动, 难以扩充新的功能接口。采用结构 化方法的系统可复用性较差。结构化方法将数据和操作分离, 导致一些 可重用的软件构件在特定具体应用环境才能应用, 降低了软件的可重 用性。面向对象方法具有很好的重用性。在遇到类似的问题, 通过应用 了抽象继承等技术, 来重用代码。
(三)从程序语言编译器来说。面向对象方法, 通过编译器实现代码 的面向对象性。也就是说经过编译器后, 代码会被翻译为相对应的结构 化代码。所以要熟练开发, 还要懂一定的结构化方法做为基础。
(四)从掌握难度来说, 面向对象方法比结构化对象方法复杂,难于 理解。面象对象方法的内容广, 概念多, 而且很多都是难于理解, 做到精 通更加不易。应用面向对象方法, 常常需要一种支持的分析, 设计方法, 如 RUP 方法, 敏捷方法等。这些知识抽象枯燥,难于掌握。面象对象方法 要经过长期的开发实践才能很好的理解, 掌握。相比之下, 结构化方法 知识内容少, 容易上手。
(五)从应用的范围看, 结构化方法适用于数据少而操作多的问题。 实践证明对于像操作系统这样的以功能为主的系统, 结构化方法比较 适应它。面向对象方法正好相反, 对于数据库, 信息管理等以数据为主 的而操作较少的系统, 用面向对象方法描述要好于结构化方法。
总之各有利弊,具体使用什么方法还需要根据具体情境而定。
引用文档:
百度百科结构化方法-----
http://baike.baidu.com/link?url=4lVpuDxpyAWR6fvyp94pw0ad9B1Tu1vBMKByom8NQCWJGzCJ7WHZLYYySCqSwyqVSuJVKCo0-kpEsNGfPf0ioIyBGN6KJ2xwaxA5d7a2oD0iwhnyzVgM0ODPTZdIr6KyWyr9-nmEoXer1RlvZFvwGq
百度百科------
http://baike.baidu.com/item/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E6%96%B9%E6%B3%95/216078
结构化程序设计方法与面向对象程序设计方法之比较-------喻梅
面向对象方法与结构化方法------ 贺启宝,王军
结构化方法与面向对象方法之比较