什么是面向对象编程
面向对象是一种编程规范或编程风格,它以类(class)或对象(object) 作为组织代码的基本单元,并结合封装、抽象、继承、多态四种特性作为代码设计和实现的基石。
什么是面向对象编程语言
面向对象是一种风格,那么面向对象语言就是能够支持这种风格的语言。换句话说你能容易的使用面向对象语言写出想象对象的代码。
面向对象编程语言支持类和对象的语法机制,并且有着现成的语法机制,能够方便的实现面向对象的四大特性(封装、抽象、继承、多态)。
面向对象编程和面向对象编程语言的关系
一般来说,面向对象编程一般是由面向对象编程语言实现的,但二者并不是一一对应的,后者写出来的代码并不一定就是面向对象风格的。同理,使用不是面向对象编程的语言照样可以写出面向对象风格的代码。
极客时间:04 | 理论一:当谈论面向对象的时候,我们到底在谈论什么?
面向对象四大特性(what/how/why)
封装
-
what:信息隐藏和数据访问保护。
-
how:外界仅能通过类提供的有限的外部接口来访问类的内部信息和数据,该特性需要语言提供数据访问权限的语法机制来实现。
-
why:
- 提高了代码的可维护性
- 通过向外界提供必要的访问接口,使得调用者不必了解类内部复杂的实现细节,只需要调用类提供的接口就行了,降低了接口的复杂度,提高了类的易用性。
抽象
-
what:隐藏方法的具体实现,调用者只需要了解方法提供的功能是哪些,而不需要知道方法的具体实现。
-
how:利用接口类或者抽象类来实现,但并不是一定需要这些特殊的语法机制才能实现,作为一种指导思想,只需要函数这一基本的语法机制就可以实现抽象特性。
-
why:
- 和封装一样,抽象隐藏了方法的实现细节,降低了系统的复杂度,提供代码的易用性。
- 将方法的定义和具体实现解耦,可以方便的修改类的实现细节,提高代码的可维护性、可扩展性。
继承
-
what:表示类之间的 is - a 关系。分为单继承和多继承
-
how:需要语言提供语法机制来实现继承。
-
why:
- 子类可以复用父类的方法和属性,提高了代码的可复用性。
- 利用继承来表示类之间的 is - a 关系,不仅符合人的认知,也具有结构上的设计美感。
多态
-
what:子类可以替换父类,即一个父类引用可以指向其任意一个子类实例。
-
how:需要语法机制支持父类对象引用其子类对象、继承、子类可以重写父类的方法,利用这三种语法机制就可以实现多态特性。除此之外,还可以利用接口类语法或者duck-typing语法(python)
-
why:
- 提高代码的可扩展性和复用性。
极客时间:05 | 理论二:封装、抽象、继承、多态分别可以解决哪些编程问题?