直面 Java 第 001 期
什么是面向过程
面向过程是以函数为中心, 要解决一个问题, 需要把问题分解为一个个的步骤, 然后定义一系列的流程, 用特定的输入经过函数的处理, 最终输出特定的结果.
什么是面向对象
面向对象是对象为中心, 对每一个步骤抽象形成对象, 在对象中封装好需要解决问题的方法, 强调了代码的复用.
两者的区分
比如说现在要实现一个开车的功能.
对于面向过程来说, 实现驾驶员开车, 需要定义一系列的流程, 比如说挂挡 -> 踩离合 -> 踩油门等等, 此外如果现在有一个其他的车, 就需要重新定义一下流程.
对于面向对象来说, 实现这个功能, 可以先定义一个基本的车类型, 封装一些共有的属性和方法, 然后定义一个特定的车类型, 在其中定义驾驶这个车需要的方法, 以后要用的时候直接调用这个对象的方法就可以了, 如果有其他的车需要驾驶, 也可以通过继承来公用一些都有的属性方法, 增加了代码的复用性.
三大基本特征
封装
就是把一个对象所拥有的属性和方法融合进一个结构中, 对外只显示定义者想给外界看的东西.
对于属性, 比如说一个车, 可能会有大小, 材质, 颜色等属性, 一般不直接对外公开, 提供一个方法来决定给外界什么的属性操作权限.
对于方法, 比如说车中会有前进, 后退, 转弯等方法, 一般是用来定义这个对象的一些操作行为, 提供给外界使用.
继承
通过 A 类继承来继承 B 类, 使得 A 类来重用一些 B 类的属性和方法.
例如一开始定义了一个车子类型, 里面有所有车子都有的颜色, 材质等属性, 前进, 后退等行为, 现在有一个私家车类型, 只要继承了前面的车类型, 就已经拥有了父类所定义的这些, 还可以重载来使得其变得拥有自身的属性方法.
多态
多态一般通过类继承和接口实现指向子类来实现, 使得通过父类引用来操作子类对象.
- # 这样就可以用父类的引用来调用子类
- Vehicle vehicle = new Vehicle();
- vehicle.move();
五大基本原则
单一职责原则
一个类应该有且只有一个去改变它的理由
比如说求一个图形的面积并返回给用户, 这个方法需要定义如何求面积和如何返回的话, 就违反了「单一职责原则」, 日后如果返回格式变了, 就需要重新定义方法, 就违背了原则. 因此我们只需要定义求面积, 具体如何返回, 交给其他的方法来操作.
开放封闭原则
对象或实体应该对扩展开放, 对修改封闭.
对于求一个图形的面积, 如果我们已经定义好了, 此时需要求其他的图形, 不能在原先定义的方法里面修改, 应该拓展一个其他方法来求解.
里式代换原则
对父类的调用同样适用于子类
子类应当可以替换父类并出现在父类能够出现的任何地方. 因为父类拥有的东西子类都有, 因此可以替换.
接口隔离原则
不应强迫客户端实现一个它用不上的接口, 或是说客户端不应该被迫依赖它们不使用的方法
对于一个立体图形来说, 拥有求体积的的功能, 现在有一个平面图像, 就不能实现这个接口, 因为平面图形不求体积.
依赖反转原则
高层次模块不应依赖于低层次模块.
应该把低层次模块中的特定功能抽象成接口, 然后实现这个接口, 这样高层模块就可以调用接口来实现解耦, 日后低层次模块修改了, 高层次模块不用改变.
参考资料:
http://blog.jobbole.com/86267/
Hollis 知识星球
来源: http://www.bubuko.com/infodetail-2877802.html