面向对象语言和面向对象特性总结

233 阅读3分钟

什么是面向对象编程

面向对象是一种编程规范编程风格,它以类(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 | 理论二:封装、抽象、继承、多态分别可以解决哪些编程问题?