@傻子都能理解的面向对象编程(OOP)
注!由于博客写的很少,排版不好还请见谅。
面向对象浅谈
讲几句题外话,我觉得面向对象的思想对于程序员而言很重要,就像我们做数学题的时候的解题思维能力,想想,要是做数学题连怎么思考都不会,这是一件可怕的事情。
1.什么是面向对象?
2.为什么要面向对象编程?
3.对象是什么?
4.这种技术是为了解决什么问题而出现?
往下看
面向程序设计
面向对象是面向程序设计中的分支,面向程序设计又是什么呢?在我看来,就是用计算机设计出各种项目,软件,或者你想设计的任何程序。但是计算机只能识别二进制,只由0 和1构成,可读性极差。于是后面就有了汇编语言,在然后面向过程,面向对象。我们编写汇编语言,而计算机会把汇编语言从高到底层一步步拆除,最后转换为二进制语言。
面向过程
在面向对象技术成熟之前,面向过程才是程序设计的主流思想。而面向对象是基于面向过程开发出的新技术。
什么是面向过程?怎么理解呢?
想起我刚开始接触的时候也懵懵懂懂,什么是面向过程,面向对象概念模糊。
这怎么理解?
见名知意,面向过程设计更注重过程。把一个问题分为很多小步骤,让计算机非常精确并且有序的按照我们规定好的顺序和步骤进行。打个小比方,问题是刷牙,简单的分为三步:
1,拿牙酸。
2,挤牙膏。
3,开始刷。
非常精确的按照步骤执行解决方案
面向对象
面向对象更重视整体,把一个问题分为很多小的构件,每个小构件都是一个对象,每个对象都有状态和行为,他们就像是分工清晰,各管其职的军队,每个对象只负责自己的那一块,每个对象都有特征和行为,他具有状态还有操作,就像一个生命体。
接下来再来看看那个问题,刷牙,你可以想想,用面向对象思想怎么思考?
问题中存在三个对象,人,牙膏,牙刷。
人 行为:拿,挤,晃动。
牙膏 行为:被挤压时可以出牙膏
牙刷 行为:粘牙膏
三个对象只管自己那块,做自己会做的事情,分工合作的“解决问题”。跟面向过程比较,更接近现实,而且也更容易理解。面对对象允许根据问题来描述问题,而不是根据运行解决方案的计算来描述问题。
差异
乍一看虽然面向对象跟容易理解,面向过程感觉也没啥毛病。都是描述问题。为什么我们要用面向对象而不用面向过程呢?其实是因为规模问题,当规模较小的时候用面向过程反而效率更高,但是当问题是大规模的时候,“步骤多如汗毛”,而且出现bug难以调试,所以才有了面向对象设计语言的出现。
面向对象五个基本特性
1,万物皆可对象
这个很好理解,就像一本书,一支笔,就像一个个个体。
2,程序是对象的集合,他们通过发送消息来告知彼此所要做的。
要想你想请求一个对象,必须给该对象发送一条消息,可以发消息理解为调用某个对象的方法的请求。就像你用人家的你得先征求人家的同意。
3,每个对象都有自己的由其他对象所构成的存储。
我的理解为对象中也可以包含别的对象,像人包含了手,jio,牙刷包含了毛还有牙刷棒。
4,每个对象都有其类型。
“每个对象都是某个类的一个实例”,每个类最重要的区别在于其他类的特征就是“可以发送什么消息给他”。像便宜的牙刷和贵的牙刷,他们都是牙刷类的对象,都属于牙膏类,而人属于高级动物类。
5,某一特定类型的所有对象都可以接收同样的消息。
例子牙刷,不管贵的还是便宜的都可以刷牙,都能回应刷牙的请求。尽管带来的刷牙体验各不相同。在比如,圆形类型同时也是几何型类型的对象,圆形也能接受发给几何类类型的消息,几何形型的行为我圆形也具有。这种可替代性,是面向对象的牛逼之处。
每个对象在内存当中有唯一的地址
优雅结束