结构化方法和面向对象方法的比较
导语
结构化方法和面向对象方法这两种软件开发方法,我们都在短短的本科时间都接触过,面向对象这门课想必也给很多同学留下了深刻的印象, 到了大三,学习了数据库这门课,我们也对结构化分析这种方式有了新的认识,借着这次博客,相对这两种方式进行一些分析,希望看客对我的见解作出评价。
结构化方法
2.1结构化方法简介
首先讲结构化方法,结构化分析是 70 年代中期由 DeMarco 和 Yourdon 等倡导的一种基于功能分解的分析方法,即使用数据流程图、决策表、决策树等工具,来建立一种符合用 户需求的结构化说明书。
结构化技术包括结构化分析(S A )、结构化设计 (S D )、结构化程序设计(S P )3 方面内容,对应于软件开发时期的分析、设计和编码阶段。 结构化设计是一种面向数据流的设计方法,也就是采用最佳的可能方法设计系统的各个组成部分 以及各成分之间的内部联系的技术,目的在于提出 满足系统需求的最佳软件的结构,完成软件层次图 或软件结构图。
2.2 结构化方法的原则
结构化方法的基本思想就是将待解决的问题看作一个系统从而用系统科学的思想方法来分析和解决问题结构化方法遵循以下基本原则
(1)抽象原则
抽象原则是一切系统科学方法都必须遵循的基本原则它注重把握系统的本质内容而忽略与系统当前目标无关的内容它是一种基本的认知过程和思维方式
(2)分解原则
分解原则是结构化方法中最基本的原则它是一种先总体后局部的思想原则在构造信息系统模型时它采用自顶向下分层解决的方法
(3)模块化原则
模块化是结构化方法最基本的分解原则的具体应用它主要出现在结构化设计阶段中其目标是将系统分解成具有特定功能的若干模块从而完成系统指定的各项功能。
2.3 对结构化方法的个人看法
综上所属,结构化方法是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法。它一般利用图形表达用户需求,使用的手段主要有数据流图,数据字典,结构化语言,判定表,以及判定树等。这种方法的优点毋庸置疑,在很大程度上通过规定数据规格,数据关系,可以很好的限制整个系统在不同开发人员开发时会造成的冲突。也方便了整个系统的开发逻辑,但是缺点也是很明显的,随着软件规模的不断增长,也愈来愈暴露出它的不 足和缺陷。在传统的结构化程序设计中,数据存储分 离与程序代码还存在着一些弊端。所有的代码被书 写成结构化的,而不是模块。因为数据元素可以从任 何代码中访问,它可能在开发人员不知道的情况下 被修改。这可能会导致非常难于调试的运行错误。
3.面向对象方法
3.1面向对象方法简介
再来说面向对象方法,面向对象技术包括面向对象分 析(OOA )、面向对象设计(OOD )及面向对象程序 设计(OOP )3 部分内容。 OOP 是在结构化程序设计的基础上,于 8 0 年代 初涌现的一种程序设计方法,但其真正显示力量和 被产业界所重视还是最近几年的事。封装是整个 OOP 方法的基础,主要用于在数据段外围构造保护 层,以限制外界变化的影响,所有的数据访问都由保 护层内的过程间接处理。应用程序员不必再按照将 程序设计语言逐句拼装的方式来构造整个软件,只 需组合、重用由系统程序员开发、可供他人用来装配 的软件集成块即可。例如,java是一种 面向对象的程序设计语言,与以前用过的c语言不同,java是以类为单位编程的,尽管也有主函数,但是主函数也是一个类中的静态方法,在面向对象这门课程中,我们使用过java语言写过一些有趣的程序,也使用过各种测试工具来检验程序的正确性和鲁棒性,这个过程中,真的感觉面向对象的方法在很多时候能够更加清晰方便的帮助我们处理问题,很多时候在一些大型的c语言程序中,寻找对应的函数这件事十分令人苦恼,由于还有一些全局变量和局部变量还有可能有重名的情况发生, 每一次改动一定要对全局有着周算和考虑,无疑,这样的过程是无意义的浪费,不得不说,在这点上,面向对象方法不知道高到哪里去了!
3.2面向对象方法的特点
面向对象方法有以下特点:
(1)强调系统开发的整体性和全局性
(2)侧重于数据转换的过程而不是数据本身
(3)系统的开发周期长
(4)封装性
对象的概念突破了传统数据与操作分离的模式。对象作为独立存在的实体,将自由数据和操作封闭在一起,使自身的状态、行为局部化。
(5)继承性
继承是面向对象特有的,亦是最有力的机制。通过类继承可以弥补由封装对象而带来的诸如数据或操作冗余的问题,通过继承支持重用,实现软件资源共享、演化以及增强扩充。
(6)多态性
同一消息发送至不同类或对象可引起不同的操作,使软件开发设计更便利,编码更灵活。
(7)易维护性
面向对象的抽象封装使对象信息隐藏在局部。当对象进行修改,或对象自身产生错误的时候,由此带来的影响仅仅局限在对象内部而不会波及其他对象乃至整个系统环境,这极大方便了软件设计、构造和运行过程中的检错、修改。
4.总结与感悟
最后来说说个人对两种方法的理解,不得不否认,在很多情况下,比如用python处理一些数据,对文件进行操作,包括爬虫等事情的处理,我们如果使用面向对象方法来进行编程, 是很浪费时间的,而当我们处理一些稍微大型的程序,例如编译课上我们自己写一个c语言子集的编译器的时候,我选择使用c++,用面向对象的方式来进行编程,在这个过程中,能够很明显的感觉到由于面向对象这种设计方法的原因,我的编程效率大大提升,调试难度也随之降低,毕竟大多数操作都封装在了对象内部,通过调用对象子方法的形式来实现, 如果对象子方法有问题, 之需要修改一个地方,所有此对象的实例都可以正常运行,并且,通过把属性和一些中间值存储在对象实例的内部的方式,简化了数据逻辑,不需要为繁琐的命名方式而苦恼。这些都是面向对象的方法给我们带来的优势。但是,实际上,在每个对象子方法的内部,我们还是会采用结构化的方法来编程,也就是说,结构化方法已经过时了,已经不再被使用了这种说法是不切实际和不合理的,我们还是需要好的对象内部的结构化设计来辅助开发。对于软件工程来说,这两种方法截然不同的需求和程序运行图表示都是为了相同的目的,那就是让开发人员减少合并代码时候的冲突和简化每个人的开发任务,规定各个函数和变量功能的名字, 就算多人同时开发,也不会影响进度,在软件工程中实现最高效的并行操作。
引用文档
【1】结构化程序设计方法与面向对象的程序设计方法的比较王德军郝永芳

浙公网安备 33010602011771号