面向对象和面向过程的区别

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

来源自网络。。。

转载于:https://www.cnblogs.com/StanBlogs/archive/2011/07/19/2111077.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode—284. 顶端迭代器

284. 顶端迭代器 题目描述: 请你在设计一个迭代器,在集成现有迭代器拥有的 hasNext 和 next 操作的基础上,还额外支持 peek 操作。 实现 PeekingIterator 类: PeekingIterator(Iterator nums) 使用指定整数迭代器 nums 初始化迭…

sql查询

连接查询(多表查询) from 表1 [连接方式] join 表2 [on 连接条件]; 交叉连接: select * from 表1 join 表2 交叉查询查出的数据比较混乱 所以用的比较少。 内连接: from 表1 [inner] join 表2 on 表1.字段1…

我想和你一起去这样一个地方

当我从网站看到这则图片,我不禁惊叹有这样一个世外桃源,可以这样漂亮这样水天一色,我是多渴望能够与深爱的人一起去这个地方,享受我们休闲的白天,度过我们浪漫的夜晚,就这样,我也愿意和你每天每夜呆在一起.当我看到这则相片的时候,我心里只想着他,想和他一起去度假,我很喜欢痴住…

LeetCode—50. Pow(x, n)

50. Pow(x, n) 题目描述: 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x^n )。 考察重点:倍乘,使用递归,每次addN取2,4,8,16…个数进行累乘,直到addN > n,则用n-ad…

Vue学习笔记(八) 组件进阶

1、插槽 &#xff08;1&#xff09;插槽内容 像 HTML 元素一样&#xff0c;我们常常需要给组件传递内容 比如在下面的例子中&#xff0c;我们给自定义组件 prompt-info 传入 出错啦 的文本 <!DOCTYPE html> <html><head><title>Demo</title><…

php结合jquery异步上传图片(ajaxSubmit)

2019独角兽企业重金招聘Python工程师标准>>> php结合jquery异步上传图片&#xff08;ajaxSubmit&#xff09;&#xff0c;以下为提交页面代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/T…

使 Framework 2.0 的程序集不用安装 Framework 就可以运行的工具免费发布了

感谢大家长时间以来对 MaxtoCode 的支持.Jason.NET 决定推出一款免费的 Framework 2.0 打包工具.它可以使你的 .NET 程序在不安装 Framework 的情况下依然正常运行. 下面有一个 著名的大型开源项目 SharpDevelop (C# 的 IDE) 的例子. 下载地址: http://www.maxtocode.com.cn/do…

LeetCode—287. 寻找重复数

287. 寻找重复数 题目描述&#xff1a; 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有一个重复的整数 &#xff0c;返回这个重复的数 。 你设计的…

发发牢骚,觉得走c#这条路,不该太浮躁

校园招聘结束了&#xff0c;腾讯&#xff0c;华为&#xff0c;百度&#xff0c;完美时空&#xff0c;网易&#xff0c;阿里&#xff0c;让我觉得.NET很受歧视。清一色的C/C,JAVA&#xff0c;只有网易有一点.Net的&#xff0c;但是都是非核心的运维工作。 不错&#xff0c;招.N…

Microsoft Windows Workflow Foundation 入门

Microsoft Windows Workflow Foundation 的包含在 .Net Framework 3.0 中&#xff0c;除此之外i&#xff0c;基于它做开发还要安装 Visual Studio 2005 Extensions for Windows Workflow Foundation 。本文撰写的对象为 Windows Workflow Foundation beta 1&#xff1a;开发人员…

套套

5.9 第一个跑入mc&#xff0c;人数不够&#xff0c;活动取消&#xff0c;未参加。5.12 网络断&#xff0c;在实验室开会5.14 网络断5.19 mc 1-9&#xff0c;20dkp&#xff0c;未拿东西5.26 mc 1-9 夜幕杀杀手护腿.-4 dkp5.30 购买 夜幕杀手护腕 100G6.2 和BWL活动冲突&#xff…

Typecho 新浪登陆插件 Sinauth

花了点时间弄了一个插件。 代码地址&#xff1a;https://github.com/web3d/plugins/tree/master/Sinauth Typecho的扩展机制还是比较完善的&#xff0c;可以自行增加Action、Route、扩展现有Widget功能、后台插件配置界面等。 偷懒&#xff0c;使用的是SAE中封装的sdk访问新浪开…

LeetCode—51. N 皇后(困难)

51. N 皇后&#xff08;困难&#xff09; 题目描述&#xff1a; n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击&#xff0c;即令其中任意两个皇后都不同列、同行和在一条斜线上。 给你一个整数 n &#xff0c;返回所有不…

使用javasript 遍历页面CheckBox

使用javasript 遍历页面CheckBox<html><head><script>function aaa(){var result"";for(var i0;i<checkform.checkboxlist.length;i){if(checkform.checkboxlist[i].checked){alert(checkform.checkboxlist[i].value);}else{……文章来源:http:…

unity 角色换装

unity角色换装的关键是更改角色部位上的物体的SkinnedMeshRenderer组件的属性&#xff1a; 更改mesh:mesh决定了部位的物体的外形&#xff0c;是主要的数据。 刷新骨骼&#xff1a;同一个部位下&#xff0c;不同的mesh受到的不同的骨骼的影响不同&#xff0c;因此更换mesh之后&…

Hadoop:pig 安装及入门示例

pig是hadoop的一个子项目&#xff0c;用于简化MapReduce的开发工作&#xff0c;可以用更人性化的脚本方式分析数据。 一、安装 a) 下载 从官网http://pig.apache.org下载最新版本(目前是0.14.0版本)&#xff0c;最新版本可以兼容hadop 0.x /1.x / 2.x版本&#xff0c;直接解压到…

SQL DISTINCT 多字段查询用法

使用distinct 的困惑: 我现在有一个表book有两个字段 作者 作品 auther article 记录值如下 张三 作品一 李四 作品二 张三 作品三 张三 作品四 李四 作品五 王五 作品六 我现在想读取每位作者的代表作和作者姓名 也就是如下数据 张三 作品一 李四 作品二 王五 作品六 如果用se…

LeetCode—289. 生命游戏

289. 生命游戏 题目描述&#xff1a; 根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一个初…

Java注解的基本概念和原理及其简单实用

一、注解的基本概念和原理及其简单实用 注解&#xff08;Annotation&#xff09;提供了一种安全的类似注释的机制&#xff0c;为我们在代码中添加信息提供了一种形式化得方法&#xff0c;使我们可以在稍后某个时刻方便的使用这些数据&#xff08;通过解析注解来使用这些数据&am…

js事件传参

阻止事件发生之前就执行了函数 除了创建匿名函数 function foo(a){console.log(a); } document.οnclickfoo(1) //document.οnclickfunction(){foo(1)}// document.addEventListener(click,foo(1),false)另外有bind() function foo(a){console.log(a); } document.οnclickfoo…