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