先说概念,是什么?
面向过程把问题分解成一个个步骤,每个步骤用函数实现,以此调用即可。
我们在进行面向过程编程的时候,不需要考虑那么多,上来先定义一个函数,然后使用各种诸如if-else、for-each等函数进行代码执行。最典型的用法就是实现一个简单的算法,比如冒泡排序。
面向对象将问题分解成一个个步骤,对每个步骤进行相应的抽象封装来解决问题。比如想造一辆车,上来要先把车的各种属性定义出来,然后抽象成一个Car类。
再讲面向对象扩展
面向对象有三大基本特性和五大原则
三大基本特性
封装
封装就是把客观事物抽象成一个Java类,然后在类中存放属性和方法。
继承
继承的主要目的是复用。子类继承父类,这样就可以把父类的属性和方法都继承过来。Java中是单继承多实现的,但是接口是运行多继承的。
多态
多态是指父类中定义的方法被不同子类继承之后,可以通过重写父类方法,使得每个子类有不同的实现和含义。
五大基本原则
- 单一职责原则
- 开放封闭原则
- 里氏替换原则
- 依赖倒置原装
- 接口隔离原则
五大原则的举例(代码后续补上)
- 单一职责原则
假如有一个类用于日志消息的处理,但是这个类不仅仅负责创建日志消息,还负责将日志写入文件。根据单一职责原则,我们应该将这两个职责分开,让一个类专注于创建日志消息,而另一个类专注于日志消息的存储。
- 开放封闭原则
假如有一个图形绘制应用程序,其中有一个Shape类,再遵守开闭原则的情况下,如果要添加新的形状类型,应该做到扩展Shape类而无需修改Shape类的现有代码。这可以通过创建继承自Shape的新类来实现,即对修改封闭,对扩展开放,而继承正是这一原则的体现。
- 里氏替换原则
假设有一个函数接受Bird对象作为参数。根据历史替换原则,这个函数应该能够接受一个Bird的子类对象(比如麻雀类和企鹅类)。其实也是继承的体现。
- 依赖倒置原装
程序要依赖于抽象接口,而不是具体的实现。 比如构建一个电商应用程序时,一个高层的“订单处理”模块不应该会直接依赖于一个底层的“数据访问”模块。相反,他们应该依赖于抽象,或者依赖于一个接口。这样数据访问的具体实现可以随时改变,而不会影响订单处理模块。
- 接口隔离原则
使用多个小的专门的接口,而不要使用一个大的总接口,如果有个多功能打印机接口包括打印、扫描功能,那么只需要打印功能的客户端应该不必实现扫描和复制的接口。这可以通过将大接口分解为更小且更具体的接口来实现。也就是定义打印和扫描两个接口,再定义一个打印机类来实现打印和扫描接口。