`
ladymaidu
  • 浏览: 673916 次
文章分类
社区版块
存档分类
最新评论

对面向对象和面向过程的一些新理解

 
阅读更多

作者:朱金灿
来源:
http://blog.csdn.net/clever101

前天看一个系统的代码,突然对面向对象和面向过程有了一些新的理解。简而言之,面向对象采用空间换时间的策略,面向过程采用时间换空间的策略,正因为采用不同的策略,就有了不同的应用场合。

比如让你设计一个图像读取库,其中要设计一个获取图像大小的接口。如果采用面向过程的方式设计,可能采用这样的设计:

你采用面向对象的方式设计,可能就会这样设计了,你定义一个CImage类,如下:

在这里你可以看出其中的一些区别,就是面向对象的设计实质上是把全局数据进行了封装,比如上面提到的图像的宽度和高度,就是当一打开图像后就把图像的宽度和高度保存起来,然后以后再用的时候才取出来;而面向过程则要费一番力气从文件中获取。也就是应了之前我说的:面向对象采用空间换时间的策略,而面向过程采用时间换空间的策略。从历史的角度来看,面向对象的诞生是有其必然性。早期电脑配置低,内存小,如何节省内存成了首要任务,哪怕需要运行的时间更长,所以采用时间换空间的策略是必须的,但是随着硬件技术的进步,硬件逐渐不再策划成为瓶颈,相反更好的模拟现实世界、系统的可维护性等问题凸显出来,于是面向对象的设计便应需而生。现在我们也可以理解,面向对象和面向过程设计都有不同的用武之地,比如应用在PC机上的一般应用系统,由于不太需要考虑硬件的限制,而系统的可维护性等方面的要求更高,所以一般采用面向对象的方式进行设计;而内存限制有要求的嵌入式系统,则多采用面向过程的方式进行设计。

同时我们也应该看到在使用面向对象方式设计时,有时会犯一个错:就是表面采用面向对象的设计,但骨子里还是面向过程的。比如上面提到的例子,在编写CImage:: GetImgSize函数的实现时,有些人往往还要从文件句柄中费一番功夫获取图像的宽度和高度。GetImgSize函数在外部往往是多次调用,其结果是降低了程序的运行效率。在我看来,这无疑是虽然采用了面向对象方式的设计,但是实质还是面向过程的。

后记:可能有些朋友不太明白我的意思,后来我想了一个自认还可以的比喻来说明我的意思。我们设想这样一个情景:假如在造纸术刚刚出来的时候,纸张的产量还很少,纸张只能用于记录国家机密等重要信息,于是人口普查官员去普查人口。他要去询问每个人的年龄,由于纸张有限,只能用于记录每个人的姓名,假如人口普查官员忘记了某人的姓名,他不得不根据人名去找到这个人,询问这个人的年龄,随着造纸术的成熟,纸张产量得到了很大的提高,这样就有足够的纸张去记录人的年龄信息,这样人口普查官员就方便多了,即使他忘记了某个人的年龄也不用去找这个人去询问他了,他只须拿起记录这个人的那张表就一清二楚了。如果你把上面的人口普查官员替换为电脑,把纸张替换为内存,你就会明白我文中所表达的意思了。

分享到:
评论

相关推荐

    深入理解面向对象

    由面向过程到面向对象,是一个很大的转折,怎么去理解面向对象呢?

    Java零基础-面向对象和面向过程.md

    建议通过编写和执行一些简单的示例代码,加深对面向对象编程和面向过程编程的理解。 如有疑问,可以参考Java官方文档或搜索相关资料,进一步扩展学习。 推荐深入学习和实践面向对象编程的概念、原则和设计模式,以...

    深刻理解对象设计及面向对象设计

    这是本人在实践和阅读名著中对面向对象设计的深刻理解,可以帮助大家从本质上看待如何理解对象设计及面向对象设计的原理,全是自己的心得和体会(当然是在巨人的基础上的),希望对大家有帮助。

    java学习 面向对象

    java学习好材料,面向对象从软件建模方法论的角度上看,应用软件系统的开发方法已...部化的特点使面向对象的方法更有利于改善软件质量、理解和维护软件系统。面 向对象的方法和一些过程方法结合,组成完整的开发方法。

    转载面向对象的理解

    面向过程: 为了把大象装进冰箱,需要3个过程。 1) 把冰箱门打开(得到打开门的冰箱) 2) 把大象装进去(打开门后,得到里面装着大象的冰箱) 3) 把冰箱门关上(打开门、装好大象后,获得关好门的冰箱) 每个过程有...

    JAVA面向对象编程_孙卫琴2.pdf

    本章首先简要介绍了结构化的软件开发过程,然后介绍面向对象的软件开发过程,对面向对象的一些核心思想和概念做了阐述。本章列举了不少形象的例子,来帮助读者理解面向对象的开发思想,并且以一个画板Panel软件系统...

    面向对象方法5.ppt

    第五章 面向对象软件开发过程 学习目的: ① 了解面向对象软件开发过程 ② 理解OOD与OOA的区别 面向对象分析 面向对象设计 面向对象程序设计

    面向对象程序设计课程设计——学生成绩管理系统

    设计功能:使用面向对象的程序设计方法,程序的功能主要包括:对学生成绩信息的增、删、查、改等基本功能,并能够按照学号或姓名及成绩等进行排序和筛选,使用文件进行数据的存储和维护,能够按照班级或专业进行分类...

    OC面向对象编程基础

    面向对象,以及区别与面向过程,理解类和对象的概念,设有的实验

    面向对象软件工程

    《面向对象软件工程》 作者:Stephen.R.Schach 学校:(美)范德比尔特大学 书名原名:Objected-Oriented Software Engineering 目录: 第一部分 面向对象软件工程简介  第一章 面向对象软件工程的范畴  第二章 ...

    面向对象的思维过程

    本文是关于面向对象思维过程系列文章的第一部分,选择这个主题作为书籍或专栏的标题是一个重大的决定,做出这个选择并不简单,因为已经有很多面向对象主题的好书和文章了,包括面向对象分析、面向对象设计、面向对象...

    设计模式:可复用面向对象软件的基础--详细书签版

    你将拥有一种深刻的洞察力,以帮助你设计出更加灵活的、模块化的、可复用的和易理解的软件—这也是你为何着迷于面向对象技术的源动力,不是吗?    当然还有一些提示和鼓励:第一次阅读此书时你可能不会完全理解...

    java零钱通简单项目 面向过程 面向对象 两种代码

    通过简单java零钱通项目 理解面向过程和面向对象的区别

    JAVA面向过程的程序设计

    1. 面向过程的程序设计 面向过程——面向机器 –其中心思想是用计算机能够理解的逻辑来描述和表达待解决的问题及其具体的解决过程。–算法+数据结构 l数据结构利用计算机的离散逻辑来量化表达需要解决的问题。 l –...

    漫谈设计模式:从面向对象开始(带书签扫描版).刘济华.pdf

    本书主要从最基本的设计模式入手,并结合一些J2EE开发过程经常遇见的技术和概念,你将全面理解这10多个设计模式,并在开发过程中,让你真正体会和思考面向对象编程的思想,也只有掌握这些,你才会能成为一位真正的...

    什么是面向对象的程序设计

    面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:...

    在“魔兽争霸”游戏中学习面向对象的思想

    在本人学习的过程中,本人直到最近对面向对象思想有了一个大突破后才发现原来在玩 “魔兽争霸”这个游戏的过程中就已经包含了深刻的面向对象的思想,现在根据自己对面向对象思想的理解结合“魔兽争霸”这个游戏进行...

    设计模式可复用面向对象软件的基础

    你将拥有一种深刻的洞察力,以帮助你设计出更加灵活的、模块化的、可复用的和易理解的软件—这也是你为何着迷于面向对象技术的源动力,不是吗? 当然还有一些提示和鼓励:第一次阅读此书时你可能不会完全理解它,...

    10. 理解面向对象编程11

    1. 能用面向过程的编程思维去解决问题或完成任务 2. 能用面向对象的编程思维去解决问题或完成任务 3. 能阐述清楚面向对象与面向过程的区别 4. 能清楚的对问

    C#面向对象基础教程

    C#面向对象基础教程 电子书 《C#面向对象基础教程》以C#语言面向对象的知识...在介绍C#语言的过程中,始终贯穿了面向对象的编程思想,力求使读者在学习C#语言的同时,深刻体会和理解面向对象编程的精髓和强大的功能。

Global site tag (gtag.js) - Google Analytics