我正在参加「掘金·启航计划」
举个例子
什么是对象,什么又是面向对象? 世间万物都可以是对象,看你怎么定义,一辆自行车是一个对象,一个自行车轮胎也是一个对象,车胎上的钢丝也是一个对象。这取决于你站在什么维度,什么层次去看待,如果你只是想骑自行车,那么自行车就是一个对象,你所面对的对象就是自行车,而不需要关心自行车内部的东西,比如车链轮胎之类的。如果你是一个自行车组装工,那么你的对象就是轮子、车链、把手等等。如果你是生产车轮的工人,那么你关注的对象就是钢丝、外胎内胎。每个人只需要关心自己的对象,只需要面向自己的对象运作。
我们来看看一台最简单的自行车需要什么?两个轮子、一个脚踏板和链条传送结构,一个车架。这就是一台最简单的自行车,但凡再少一个东西,它就不是自行车了。那么现在我想造一辆自行车,除了前面说的最基本结构,我还想要个刹车功能,那么我就在原来的设计基础上加个刹车,便是一辆新的车了。我不用关心前人为什么这样子设计自行车,是两个轮子而不是五个轮子,因为这一套东西已经经过前人的大量论证了,是切实可行的,我就不用花时间区考虑这些设计,把这个最简单的单车设计封装成一个整体,我不关心它内部为何如此设计,我只需要把这个整体继承或者说复制过来,然后在原来基础上增加设计一个制动功能。这样我就在原基础上创造了一辆新车,看着这个设计图,我不喜欢它设计的传动装置,它的传动装置太简单了,于是我把它原来的拆了下来,换上一个可以换挡的传送装置,只需将传动装置换上,而不需要对自行车其他部件进行大改动,传动装置都是用来让自行车动起来的,为了实现自行车动起来,我可以用不同的传动装置,为了实现这个功能,可以用不同形态的传送装置,这便是多态。
从上面的例子我们很容易看出面向对象的优点:
继承:避免做重复工作,直接使用已有的东西,所有东西都模块化。
封装:将不关心的东西封装起来,减少可能出现的错误,避免每个人都去改。
多态:方便扩展,我只定义了轮子这个概念,你可以用任何不同掉轮子非常容易维护,所有的东西都是对象,我只需要维护属于我的那部分对象。
方便建模,我需要组装一台自行车,我直接去买各个大部件就好了,不用自己从零开始设计。
如何建立面向对象的思维呢?
1、先整体,再局部(维度要从高维度往低维度渐进,首先设计的是自行车这个对象,整个功能架构设计好之后再去考 虑用什么轮子,轮子怎么做,由整体向局部推进)
2、先抽象,再具体(所谓抽象,其实就是他所需要实现的功能,具体则指的是实现这个功能的方式。比如自行车必须要有传动功能,至于是什么传动装置,你可以有N种选择,但是你必须要实现这个功能)
从上面的例子也可以看出,面向对象有三个特性: 封装 继承 多态
关于面向对象的这三个特性,我们下一篇详细讲。