`
01robert
  • 浏览: 73192 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

面向对象编程 VS 过程式编程

阅读更多

这几天都在为这件事烦恼,感觉到了摆在自己同别人之间的巨大的鸿沟。其中一件事是我们做的系统中,每一张表都对应着在一个entityBean, 因为每个entityBean都会有一个主键ID属性,但它们的实际名称各不一样,如有orderId,itemId, appleId,  这样我就自然而然的想到应该给它们抽象出一个类口来IEntityBean来统一处理, 但做设计的人却说这样不好,不应该由每个类来实现这个接口,而是应该用if-else的方法出处理。

更具体一点,有四张表对应四个bean:
FruitBox{boxid,...},
Apple{appleId, ...},
Peach{peachId,...},
Orange{orangeId,...}
BoxFruitMatch{boxId, fruitId, fruitType,...},

现在需要一个向盒子中放水果的方法,用过程式的方法是这样写:
addFruit(Object obj){
...
if (obj instanceof Apple){
 match.fruitId=obj.appleId;
 match.fruitType="apple";}
}else if(obj instanceof Peach){
 match.fruitId=obj.peachId;
 match.fruitType="peach";}
}else if(obj instanceof Orange){
 match.fruitId=obj.orangeId;
 match.fruitType="orange";}
}
...
}

用面向对象的方法则是抽象出一个接口
interface IFruitEntity{
 public Integer furitId;
 public String furitType;
}
各个Fruit类实现这个类,然后在addFruit这样写:
addFruit(IFruitEntity fruit){
 ...
 match.fruitId=fruit.fruitId;
 match.fruitType=fruit.fruitType;
 ... 
}

从代码量上看,面向对象的方法将没有什么优势,相反似乎更复杂一点。其实它的优势在于面对未来变化的能力,面向对象的FruitBox可以装所有种类的水果,只要它是一个水果(实现了IFruitEntity接口)就可以向FruitBox中放,但过程式的fruitBox只能装apple、peach、orange,如果要装的是pear或banana就不行了,必须对fruitBox进行修改和改造。


这种优势看上去不是很大的优势,实际上是致命的。 当我们用过程式的方法做一个系统时,刚开始一切都很好,但随着时间的推移系统的变大,原来写的很好的程序也不得不进行修改,即使我们修改很小心,但时间的向后推移,再好的代码也会改得面目全非,注定有天会完全腐烂掉。但面向对象的代码则不一样,它如果写的好的话,不管系统变多么大,对象也不需要变化,即使刚开始代码写的不好也没关系,因为随时间的推移,也很容易对这个对象不断进行改时,最后让它趋于完美。
从本质上看,面向对象有一种天生的解耦能力,自成一体,能自我完善,不像过程式程序同外界有剪不断理还乱的联系。所以结构化很难写出一个大型系统,而向面对象则可以构建出大型系统来。

这不得不提到前一段一时间一个IBM工程师将软件工程同土朩工程的对比。咱们中国的土朩工程的祖师爷鲁班聪明绝顶,制造了无数的大家津津乐道的桥梁房屋,据说还用朩头制造出了能自动飞翔的鸟,但二千年过去了,也没见到咱们有什么真正值得骄傲的屹立百年的大厦桥梁,我们的土朩方法就同结构化写代码类似,凭一两个能工巧匠能出个精致灵珑的作品来,但想制造出经风吹雨打屹立百年不倒的摩天大厦,只能靠现代的力学、工程学等系统化的方法来完成。而我们软件制作中的系统的方法学就是面向对象的方法,以及面向对象淤生出来的设计模式等。

虽然我们上个世纪就已经用上了面向对象语言,但今天绝大部分人依然用过程式的思想来写代码,并且阻碍别人用面向对象的方法来写代码,真的很泄气。 



分享到:
评论

相关推荐

    java面向对象编程源码

    其最大特色是以六条主线贯穿全书:面向对象编程思想、Java语言的语法、Java虚拟机执行Java程序的原理、在实际项目中的运用、设计模式和性能优化技巧。同时,本书还贯穿了Sun公司的SCJP(Sun Cer......

    java面向对象编程pdf

    面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序设计看作是对象的交互,对象之间的关系和行为。 一、对象和类 在Java中,对象是指具有某些特征和行为的实体,例如人、学生、大象、冰箱...

    c++面向对象编程实例大全

    《C++面向对象编程实例大全》是一本专为初级学习者设计的教程,旨在通过丰富的实例深入浅出地讲解C++的面向对象编程概念。面向对象编程(Object-Oriented Programming,简称OOP)是C++的核心特性,也是现代软件开发...

    Labview面向对象编程

    Labview面向对象编程是NI...通过学习和掌握Labview面向对象编程,开发者可以构建出更复杂、更易于维护的应用程序,适应不断变化的需求,并利用Labview的强大功能进行数据分析、控制工程、测试测量等领域的项目开发。

    面向对象编程与非面向对象编程

    面向对象编程(Object-Oriented Programming,简称OOP)与非面向对象编程是两种不同的编程范式,它们在软件开发中的应用和设计理念有着显著的区别。本文将深入探讨这两种编程范式的概念、特点及其在实际软件工程中的...

    matlab面向对象编程.pdf

    面向对象编程在设计、测试和维护大型应用程序方面尤其有用。通过封装,可以隐藏不必要的信息,从而简化类的使用。继承促进了代码重用,并提供了一种自然的方式来模拟现实世界的层次结构。而多态性允许在软件中添加新...

    plc面向对象编程架构与实现

    面向对象编程是计算机语言的一种先进的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多特点如“继承”,甚至于它根本就不具备面向对象编程语言的特点,但面向对象编程...

    C#面向对象编程期末参考题

    【描述】提到“期末开卷参考题”,暗示我们将探讨一些学生在学习过程中可能遇到的实际问题或考试题目,这些题目可能会涵盖C#面向对象编程的基本原理、类与对象、继承、封装、多态等关键概念。 在C#中,面向对象编程...

    PLC的面向对象编程

    面向对象编程在PLC程序设计中具有明显的优越性,主要表现在以下方面: 1. 标准化:将输入输出参数、状态变量等中间变量统一到类中,提高代码的可读性和可维护性。尽管与高级编程语言在某些方面存在差异,但通过遵循...

    Matlab面向对象编程

    Matlab面向对象编程是一种在MATLAB环境下通过面向对象的方法来组织和构造程序代码的技术。面向对象编程(OOP)的基本特征包括抽象、封装、继承和多态。以下是根据给定的文件信息,对这些知识点的详细解释: 1. 抽象:...

    漫画面向对象编程 Java

    借助于漫画展示的形式,面向对象的简、由类创建一个对象的方法、类的编写与对象的创建、类的构造函数、类的方法、修饰符、... 可以在轻松幽默的氛围中对面向对象编程产生浓厚的兴趣,从而为后续的编程进阶树立信心。

    Python 3面向对象编程

    《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念和原则。, 《Python 3面向对象编程》不是Python 的入门书籍,适合...

    第16章 LabVIEW中的面向对象编程,labview面向对象的框架,LabView

    在LabVIEW中实现面向对象编程(Object-Oriented Programming, OOP)可以提升代码的可重用性、可维护性和组织性。本章将深入探讨LabVIEW中的面向对象编程框架及其应用。 面向对象编程的核心概念包括类(Class)、...

    《C++面向对象程序设计》第2版编程题答案

    《C++面向对象程序设计》是C++编程领域的一本经典教材,由清华大学出版社出版,龚晓庆、付丽娜等多位专家共同编著...通过对比答案,找出自己编程过程中的不足,可以有针对性地进行改进,加深对C++面向对象编程的理解。

    面向对象编程思想

    面向对象编程思想 ...面向对象编程思想是一种新兴的程序设计方法,它可以提高软件的重用性和可维护性,提高软件的开发效率和质量。它已经成为当前计算机界关心的重点,并且在软件开发领域中有着广泛的应用前景。

    LabVIEW面向对象编程技术.pdf

    LabVIEW面向对象编程技术是 LabVIEW 软件开发工具中的一种编程技术,旨在解决大型 LabVIEW 程序的开发和维护问题。该技术基于面向对象编程思想,引入了类和对象的概念,通过类的定义和实例化来实现数据的封装和继承...

    面向过程、面向对象、面向组件、面向服务软件架构的分析与比较

    面向对象编程,如C++、Java、C#等语言,是一种更为高级的编程范式,它将数据和操作数据的方法封装在一起,形成对象。面向对象强调的是数据的封装、继承和多态,通过类和对象的概念,提供了更好的代码组织方式和重用...

    JAVA面向对象程序设计(期末考试试题及答案)

    JAVA面向对象程序设计是 Java 编程语言的核心 contents,涵盖了面向对象编程的基本概念、语法规则、编程技术和实际应用等方面的知识。本文总结了 JAVA面向对象程序设计的知识点,涵盖了 Java 语言的基本语法、面向...

    《面向对象的程序设计》期末试卷(A)答案.pdf

    类(Class)是面向对象编程的基本单元,它是一个蓝图,描述了创建对象时共有的属性和方法。对象(Object)是类的实例,具有类定义的属性和方法的副本。类的属性和方法称为成员(Members)。 2. 封装 封装...

Global site tag (gtag.js) - Google Analytics