`
it_zacard
  • 浏览: 439 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

转载:面向对象和面向过程的区别

阅读更多
出处:http://www.cnblogs.com/Vegaslee/archive/2008/07/29/1255598.html
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。

而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

功能上的统一保证了面向对象设计的可扩展性。比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。

再比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样,但是你会觉得这是一个难题吗?直接在棋盘对象中进行一番小改动就可以了。)而下棋的大致步骤从面向对象的角度来看没有任何变化。

当然,要达到改动只是局部的需要设计的人有足够的经验,使用对象不能保证你的程序就是面向对象,初学者或者很蹩脚的程序员很可能以面向对象之虚而行面向过程之实,这样设计出来的所谓面向对象的程序很难有良好的可移植性和可扩展性。
分享到:
评论

相关推荐

    关于面向对象跟面向过程的本质区别以及讲解.index.html

    本文写的是关于面向对象跟面向过程的本质区别以及讲解,从这篇文章中学到了很多知识,希望看到的人也能学习到知识

    转载面向对象的理解

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

    Python(面向对象编程语言) v3.4.0.zip

    面向对象————Python即支持面向过程的编程也支持面向对象的编程。在“面向过程”的语 言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建...

    Agile Java (EN)

    书后是这样介绍的:掌握java5.0,面向对象设计和测试驱动开发。本书将三者编织在一起,形成一种旨在构建一种专业健壮的软件系统的统一连贯的方法。 Agile java 讲了一种我之前没有遇到的程序设计思想——测试驱动...

    项目综合案例采用两年所学的内容

    学的课程有java初级 Java高级 java的面向对象 java的面向过程 java的封装 继承 多态 jdbc JavaScript初级内容 Html Css 这个学期开始前端的第二部分 jquery的基础操作 jquery的选择器 事件 效果 Css3 Html5新的属性 ...

    心理咨询网站设计方案(1).doc

    3、利于学生与教师交流、互动的通道 4、利于管理人员统一管理信息发布及使用者信息的平台 2、系统总体设计 2.1 面向对象或面向过程开发设计 根据不同的应用类型,采用面向对象或面向过程的系统分析与设计方法。...

    二十三种设计模式【PDF版】

    所以很少存在简单重复的工作,加上Java 代码的精炼性和面向对象纯洁性(设计模式是 java 的灵魂),编程工作将变成一个让你时刻 体验创造快感的激动人心的过程. 为能和大家能共同探讨"设计模式",我将自己在学习中的心得...

    短信平台设计方案.pdf

    2.1.2 面向对象或面向过程的设计与开发 根据不同的应用类型,采用面向对象或面向过程的系统分析与设计方 法。 传统的软件工程以软件的工程化为目标,强调方法论,工具与环境, 质量保证体系,项目管理,配置管理,...

    Python访问Mysql数据库

    Python 既支持面向过程的编程也支持面向对象的编程。在 面向过程的语言中,程序是由过程或仅仅是可重用代码的函数 构建起来的。在面向对象的语言中,程序是由数据和功能组合 而成的对象构建起来的。与其他主要的语言...

    计算机二级C语言考试题预测

    (46) 面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是(C) A. 模拟现实世界中不同事物之间的联系 B. 强调模拟现实世界中的算法而不强调概念 C. 使用现实世界的概念抽象地思考问题从而自然地...

    网上转载JAVA面试基本大全

    1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括...

    jdbc连接数据库的方式2

    如果利用Oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式,不但Java应用程序可以使用应用软件的对象...

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

    关于Scala那些事儿

    Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在Java虚拟机上,并兼容现有的Java程序。java、Scala都是基于JVM的编程语言(文件编译成class...

    java设计模式CatalogDAOFactory是典型的工厂方法

    面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样,就会将风险分散,以后如果需要修改,只要更改每段,不会再...

    工业4.0智能制造方案及流程图.docx

    实际上,我们是做软件出身的,软件编程的发展也有几个阶段:面向机器、面向过程、面向结构程序化设计、面向对象、面向网络,我也在想是不是也有智能化的编程工具,安卓是智能手机的操作系统,为开发者提供了很好的...

    c++ 面试题 总结

    说明上面三种描述的区别; 如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量; 如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。 (1)const char *p 一个...

    我国GIS软件的发展现状

    ----以面向对象技术为基础的商品化软件工具在90年代大量出现,为人们提供了方便的构造面向对象软件的手段。长期以来,传统的GIS软件很难将人们积累的对地理要素的研究成果直接在计算机中表达出来,而采用面向对象的...

    OpenFOAM研究博文集

    8. 面向对象—我的一点理解 .......................................................................... 9. 如何搞多面体网格 ..................................................................................

Global site tag (gtag.js) - Google Analytics