追求代码的和平稳定,我是peace,学了面向对象这么久,发现很少去总结,今天我们就来谈谈面向对象,我习惯把一个知识分为三个维度去学习(是什么? 为什么?怎么做?)
追求代码的和平稳定,我是peace,学了面向对象这么久,发现很少去总结,今天我们就来谈谈面向对象,我习惯把一个知识分为三个维度去学习(是什么? 为什么?怎么做?)
面向对象是什么?
面向对象是一种思想,也是我们常说的“OO思想”(Object Oriented),而面向对象程序设计就是使用面向对象思想去进行编程设计,也是我们常说的OOP(Object Oriented Programming),它并不是一种计算机语言所特有的思想,而是很多计算机语言都借鉴了这种思想(比如java,C++)。
而说到面向对象,那我们就得提一提面向过程,因为面向对象是从面向过程演变过来的,使用面向过程思想的计算机有C语言。单从两个词的表面意思来看,面向过程注重的是过程和细节,而面向对象注重的是结果。我们来举个栗子:
比如一个人想吃一道番茄炒蛋的菜,这两种思想就会有不同做法
- 面向过程:买菜、洗菜、切菜、炒菜、得到一份番茄炒蛋
- 面向对象:走到饭店里大喊一声“老板来份番茄炒蛋”
通过上面例子的对比,我们可以清楚的感觉到这两种思想的不同。面向过程就是什么事都自己一步一步按部就班来做,而面向对象就是把自己想做的事交给专业的对象来做,自己不在乎制作的细节与过程。
这也可以类比穷人和富豪,穷人就是自己能做的事就都自己做,绝不花钱雇人做。而富豪则是相反,想要打扫卫生就雇个保姆,想吃饭就雇个厨师。如果把保姆和厨师比作程序里面的代码模块的话,那就是你想做什么事,就去调用哪个模块就好。至于这件事要怎么做和细节是什么我们都无需关心,只要坐等验收成果就好。但很可惜,我是个穷人。
所谓大道至简,最后我们在来总结一下面向过程和面向对象:
面向过程:什么事我都自己按部就班的做,怎么做的的细节我都清楚。
面向对象:什么事我都找专业的对象来做,我只要清楚怎么去调用他们就好。
为什么要使用面向对象?
说到为什么要使用面向对象,就不得不提一提面向对象的优缺点,这里主要说的是面向对象在程序设计中的优缺点,并且我们也要跟面向过程做一下类比学习。
面向过程的性能是优于面向对象的,因为在抽像出对象时是需要消耗性能的,就好比你想请别人做事是需要花钱的。而面向对象具有易维护、易复用、易扩展和耦合性低的优点,就好比我每次想吃饭就去调用厨师就好,厨师是可以重复调用的,但我不用重复的去进行做饭的工序,而我想吃新的菜式只要告诉厨师就好,所以更易于扩展出很多菜色。而这是面向过程不具备的,所以看起来这两个思想是互补的。
再回到为什么要是有面向对象的问题,其实这个问题的核心是使用场景问题,在大多数软件开发中开发易维护、易复用和易扩展的程序的是比较重要,牺牲一些性能是无关紧要的,所以使用面向对象设计。而对于一些底层程序的开发,比如操作系统、嵌入式开发等,这些程序是性能是最为重要的,所以需要使用面向过程程序设计。所以两种思想并没有好与坏,只有面对不同开发场景,用哪种思想比较好的问题。
大道至简,我们再来总结下面向对象和面向过程的优缺点:
面向过程:
- 优点:性能高,可以了解到程序的各种细节
- 缺点:缺乏维护性、复用性、扩展性和耦合度高
面向对象:
- 优点:具有维护性、复用性、扩展性和耦合度低
- 缺点:性能比较低
怎么去使用面向对象?
如何使用面向对象这里主要是简单谈一下在程序设计中如何运用到这种思想,这里我以java为例,但大家明白的一点是java并不等同于面向对象,而是java这门语言可以使用面向对象的思想。
在java中我们可以通过类(Class)来提取抽象的对象,类中的包含了该对象的属性和方法。只要类被我们抽取出来后,我们就可以在我们需要的时候复用它,因为类本身具有模块化,所以我们也能更好去维护代码。
如果要更好的发挥面向对象的优点,就不得不提一提面对象的三大特性和面向对象的设计原则。
面向对象的三大特性:
面向对象的六大设计原则:
利用面向对象的三大特性和面向对象的六大设计原则可以更充分的发挥面向对象的优点,也就是提高程序的维护性、复用性、扩展性和降低耦合度低。
大道至简,我们再来总结下如何使用面向对象进行程序设计:
以一门计算机语言为基础,利用面向对象的三大特性来进行编程,并遵循面向对象的六大设计原则,以此来充分发挥面向对象的优点。
由于不想篇幅太长,所以对三大特性和设计原则的的详细探讨等留到下次再聊,也欢迎大家一起讨论学习。