`
it_zacard
  • 浏览: 466 次
  • 性别: 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变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

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

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

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

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

相关推荐

    转载面向对象的理解

    在软件开发领域,编程范式是组织代码的方式,常见的编程范式包括面向过程编程(Procedural Programming)和面向对象编程(Object-Oriented Programming,简称OOP)。这两种编程范式在解决问题时有着不同的思维方式和...

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

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

    转载:软件开发者面试百问

    - 多态与委派:在面向对象编程中,多态提供了动态绑定,委派用于委托任务给其他对象。 5. **算法与数据结构**: - 判断2的幂、奇偶性:基础算法应用。 - 链表操作:查找中间元素等,体现链表的特性。 - 文件...

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

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

    JSP网上招标系统源码

    论文首先较为详尽地介绍了面向对象分析与设计的有关概念与技术,特别深入介绍了在本系统中运用到的知识,如:面向对象的分析设计流程;系统中所用到的开发技术JSP以及java的特点、结构框架以及使用方法。接着对下沙...

    JS 拼图游戏 面向对象,注释完整。

    该文档强调游戏的实现是“面向对象”的,并且“注释完整”,这表明作者在编写代码时遵循了面向对象的原则,并且为了便于理解和维护,在代码中添加了详细的注释。文档中还提到了原创作者为“sunxing007”,并提供了...

    c++知识点,内有笔记,包含一些写的教案

    它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。 C++是C语言的继承,进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。C++这个词在中国大陆的程序员圈子中通常被读...

    《易学C++》PDF

    本书旨在通过循序渐进的方式帮助读者掌握C++的基本语法和面向对象的编程思想。全书分为三大部分,覆盖了从基础语法到面向对象的高级主题。 #### 二、书籍结构 1. **第一篇:过程化的程序设计** - **第1章:良好的...

    软件需求分析文档模版(转载自国家计算机标准和文件模板)

    此外,该标准还特别强调了面向对象软件的文档编制,这对于当前广泛应用面向对象编程方法的软件项目尤为重要。通过遵循这一规范,可以有效地促进软件开发团队之间的沟通与协作,确保项目的顺利进行。

    Agile Java (EN)

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

    C++的学习方法及书籍推荐 (转载).doc

    C++支持四种基本的程序设计范型:过程式编程、结构化编程、面向对象编程和泛型编程。过程式编程主要体现在C++的"better C"部分,即基础的C语言特性,如函数重载和引用。函数重载允许在同一作用域内使用相同名字但...

    Java程序员面试的试题集(1_122)帮助初学者的技术问题(转载)

    在面向对象编程中,有四个核心概念:抽象、继承、封装和多态性。 1. **抽象**:抽象是面向对象编程的一个关键概念,它关注于事物的核心特征,忽略不相关的细节。在Java中,抽象可以通过抽象类和接口来实现,使...

    arthas命令总结(转载)

    5. `dump`:打印对象的字段值和引用关系。 6. `expr`:执行Java表达式并返回结果。 7. `jad`:反编译字节码为Java源代码。 8. `jad2smali`:将字节码反编译为Smali代码。 9. `monitor`:监控方法调用,记录方法的...

    Dojo 教程 笔记 (转载)

    在开始学习Dojo之前,建议先掌握JavaScript的基础知识,特别是面向对象的概念,这将有助于更好地理解和使用Dojo的源代码。 在Dojo中,模块和包是核心概念。模块类似于Java的包,它们是代码的逻辑单元,可以包含类...

    骆昊JAVA面试题全集2018博客文章整理

    编译时的多态性(方法重载)和运行时的多态性(方法重写)是其实现方式,后者是面向对象的核心特性,需要通过子类方法重写和对象造型来实现。 2. **访问修饰符的区别**: - **public**:公共访问,可以在任何地方...

    俄罗斯方块C#版转载

    C#是一种现代化、面向对象的编程语言,由微软公司开发,广泛应用于Windows平台上的应用程序,尤其是游戏开发。通过学习这个项目,我们可以深入了解C#的基本语法、面向对象编程的概念以及游戏开发的原理。 首先,...

    转载,若依快速开发框架很不错,详情请看https://www.ruoyi.vip/

    Java以其跨平台、面向对象的特性,成为构建大型企业级应用的首选语言。RuoYi框架可能采用了Spring Boot、MyBatis等流行Java框架,这些框架简化了开发流程,提高了开发效率。 2. **Spring Boot**:Spring Boot是Java...

Global site tag (gtag.js) - Google Analytics