结构化开发方法v.s.面向对象开发方法

关于结构化和面向对象的程序设计方法的概念对比的讨论已经不是一个很新颖的话题,然而对于刚开始接触了解软件工程开发的新手,了解学习其不同的开发特点,参与其利弊的讨论,对于新的更好的编程范式的产生具有积极意义。而在在本文中,我们从该面向对象的程序和结构化程序的特征讨论区分。

 


 

结构化编程

 Structured programming can be viewed as the pulling together, or synthesization of such ideas as program modularity and top down design, and the concrete representation of them at the program-coding level. It is a manner of coding and organizing programs that makes them easier to understand, to test and to modify. Results have demonstrated that employed together with other improved programming technologies, can lead to spectacular increases in programmer productivity and correspondingly spectacular decreases in the error rate of resultant code

  Champeaux, 1990 and Istatkova, 2001    


 

开发方式的选择,对于开发的效率提升,code质量的保证有着极大的影响,在Champeaux, 1990 and Istatkova, 2001的相应文章中,也鲜明的给出了诸如此类的事实证明。而结构化的设计模式着力于尝试解决程序设计逻辑中的unconditional transfer的问题,从而使得程序开发者易于把握程序的整体逻辑。

结构化编程可以被看作是种以组合的方式将针对需求的具体想法采取自顶向下方式,综合化,模块化,具体的思路在coding层面就是典型一种表现。同时,作为程序开发者的常用的coding manner,用以管理组织程序设计使之易懂,易于调试和修改。

实际开发中,程序的复杂性来源于程序业务逻辑中的包含的jump逻辑,随着开发调试的进行,

除了核心的business logic 的产生的依赖,测试和维护阶段也会引入大量的跳转逻辑。而在结构化编程中,通过一些约束来减少这种依赖。比如,编程中不提倡Goto类的语言元素, 反之,更加鼓励开发者使用blocks, modularity, top-down design approach和模块的reusability. 这样,开发出的程序更容易阅读和更值得信赖。同时,用于结构化的优点,开发阶段可以实现多人参与,并发实现,由此带来成本的大幅降低和效率的大幅提升,而且更加利于维护。

modular design

模块化设计,简单地说就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序、子程序、子过程等框架把软件的主要结构和流程描述出来,并定义和调试好各个框架之间的输入、输出链接关系。逐步求精的结果是得到一系列以功能块为单位的算法描述。以功能块为单位进行程序设计,实现其求解算法的方法称为模块化。模块化的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化.

top-down approach 

所谓自顶向下的设计,就是设计者首先从整体上规划整个系统的功能和性能,然后对系统进行划分,分解为规模较小、功能较为简单的局部模块,并确立它们之间的相互关系,
这种划分过程可以不断地进行下去,直到划分得到的单元可以映射到简单的coding实现。

 

面向对象编程

面向对象编程的核心概念是对象,它也是一种模块设计,对象包含数据和子程序。一个对象是一种自足实体,具有内部状态(数据包含),并且可以响应消息(调用它子程序)。面向对象的编程方法应用在软件工程是从识别涉及问题的对象,以及确认哪些对象应该响应哪些消息开始的。结果是对象的集合,每个对象有自己的数据和自己的一套责任。对象通过向每个对象发送消息来进行交互。

OOP的性质

数据抽象,封装,继承和多态性。

 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。比如,我们要设计一个学生成绩管理系统,考察学生这个对象时,我们只关心他的班级、学号、成绩等,而不用去关心他的身高、体重这些信息。抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个的实体看待,尽管这个操作实际上可能由一系列更低级的操作来完成。数据抽象定义了数据类型和施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。

继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。这也体现了大自然中一般与特殊的关系。继承性很好的解决了软件的可重用性问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性.

封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。一旦定义了一个对象的特性,则有必要决定这些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态。在这个阶段定义对象的接口。通常,应禁止直接访问一个对象的实际表示,而应通过操作接口访问对象,这称为信息隐藏。事实上,信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。

多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑-粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题.

结构化编程v.s.面向对象编程

 

Structured Programming

Object Oriented Programming

Structured Programming is designed which focuses on process/ logical structure and then data required for that process. Object Oriented Programming is designed which focuses on data.
Structured programming follows top-down approach. Object oriented programming follows bottom-up approach.
Structured Programming is also known as Modular Programming and a subset of procedural programming language. Object Oriented Programming supports inheritance, encapsulation, abstractionpolymorphism, etc.
In Structured Programming, Programs are divided into small self contained functions. In Object Oriented Programming, Programs are divided into small entities called objects.
Structured Programming is less secure as there is no way of data hiding. Object Oriented Programming is more secure as having data hiding feature.
Structured Programming can solve moderatelycomplex programs. Object Oriented Programming can solve any complex programs.
Structured Programming provides less reusability, more function dependency. Object Oriented Programming provides more reusability, less function dependency.
Less abstraction and less flexibility. More abstraction and more flexibility.

结构化编程方式通过更好的组织和编码的管理,提供易于易于理解和修改的便利,而面向对象的方法编程(OOP)核心由一组可以动态地变化,并且具有相互交互能力的对象组成。以大致相同的方式,最大的趋同现实世界对象事物交互逻辑(即模拟真实世界的相互作用对象)。普遍地,面向对象的方法使程序有了更加直观的设计,更快的发展,更方便的修改,也更容易理解。与传统的,程序导向/结构编程,程序描述要执行的一系列步骤(算法),在面向对象的编程视图里,由对象模块封装数据和处理,同时做到很好地隐藏调用的对象的内在的复杂性。

 

posted @ 2016-12-12 12:14  ZeGao  阅读(273)  评论(0编辑  收藏  举报