(转载)什么是面向对象思想

声明

本文转载自百度知道的网友回答,共两篇回答,答主用了具体例子解释了面向对象思想。
本人认为答主解答较为清楚,故摘录于此,方便自己随时查看,并分享给更多对于面向对象思想有困惑的码农朋友。

百度知道网页链接分别为:
第一篇回答
第二篇回答

如有侵权,请联系作者删除文章
如有错误,请联系作者更改

第一篇回答(答主:java118)

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

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

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

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

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

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

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

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

结束…

第二篇回答(答主:龙248558244)

思想要转化,首先得看你是否理解了面向对象,其实过了这个坎,你会发现以后编程中面向对象已经变成了习惯。

什么是类?什么是对象 ? 你是否完全明白他们所代表的含义?
在真实世界中做对比的例子:人类=类,张三=对象 ;狗=类;我们家前几年死的大黄=对象 ;中国人=类;刘德华=对象 … 很多很多例子,类的概念可以很大,也可以范围小一些,比如你可以把人类当做类,也可以把中国人、美国人或者男人、女人当做类,这就涉及到类的继承的概念了。
所以,不难理解,类和对象的关系就是“群体”和“个体”之间的关系,一个是概念,一个是实体,用时下很流行的“宫”的台词来诠释类:“你见或者不见我,类就在那里,不增不减~~~你用或者不用我,对象就在那里,不悲不喜…” ,明白了,你日常生活的时候你会说你想和中国人交谈,想和美国人喝茶吗 ?不会吧? 你一定会是想和某个具体的人来一起工作、生活、交流吧,同样的道理,在面向对象编程的时候,和业务直接相关的一定是对象,而不是类,类只是用来负责定义对象的形态,如何定义??类里的变量和常量表明了这个类以后的对象具备什么样的属性,相当于定义了人有四肢、有鼻子有眼睛… ;类里的函数(方法)表明了以后对象具备什么样的能力,或者说是能做什么~!就像人具备吃饭喝水做爱的能力一样。

我觉得理解了对象和类之间的简明关系,你的问题就不难解决了,什么时候需要创建类?
1.根据业务创建模型的时候,即你要写一个程序把大象放到冰箱里,那么你起码得创建三个类吧:一个大象类,一个冰箱类,还有一个能把大象放进冰箱里的某生物类吧
2.能在你的业务中被抽象出概念化业务的代码,可以组织成类。比如你的业务需要大量的开方、求阶乘等数学逻辑运算,虽然java的API都可以实现,但你每次使用都需要调用API自己写方法,那么当你发现你可以把你这些常用的方法写成公用的时候,你就会想为什么不把这些帮助性的工具函数封装在一个类里呢,调用的时候不也方便统一吗,这时候,你就抽象出了自己业务里的工具类,这个类,对你的业务来说,就是一个工具箱,完全符合以上说的类的特点。
3.和以上的工具类类似,有的时候一个业务处理是需要抽象一个类出来的,最后你的项目就会由上面说的这样大大小小无数个模型类、业务处理类、工具类所组成,仔细想想,这样是一个很棒的模式,就像流水线工厂里的流水线机器一样,各自做着自己专长的事情,不用考虑其他环节,我们所需要做的,就是如何将这些环节有效的组织在一起。

全手打,希望对你有所帮助,不追90分太对不起我了~~~

(以上是之前我给别人回答过的,确实是手打,不过是以前打的…)

结束…

作者结语

上述两位答主都给出了自己的观点,而且较为符合面向对象思想的含义。
需要清楚的是,面向对象是一种思想,面向对象语言(C++、JAVA)是一种工具。并不是说使用面向对象语言进行代码编写就是面向对象编程。面向对象编程应是利用面向对象语言,结合面向对象思想进行编程。
假如没有采用面向对象的思想,即使是利用面向对象语言,仍有可能会写出面向过程的算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值