Skip to content

04 | 理论一:当谈论面向对象的时候,我们到底在谈论什么?

什么是面向对象编程和面向对象编程语言?

Tips

  • 面向对象编程的英文缩写是 OOP,全称是 Object Oriented Programming。
  • 面向对象编程语言的英文缩写是 OOPL,全称是 Object Oriented Programming Language。

面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石。

面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。

Attention

  • 面向对象编程的四大特性分别是:封装、抽象、继承、多态。不过,也有另外一种说法,那就是只包含三大特性:封装、继承、多态,不包含抽象。
  • 在技术圈里,封装、抽象、继承、多态也并不是固定地被叫作“四大特性”(features),也有人称它们为面向对象编程的四大概念(concepts)、四大基石 (cornerstones)、四大基础(fundamentals)、四大支柱(pillars)等等。

如何判定某编程语言是否是面向对象编程语言?

实际上,对于什么是面向对象编程、什么是面向对象编程语言,并没有一个官方的、统一的定义。

只要某种编程语言支持类或对象的语法概念,并且以此作为组织代码的基本单元,那就可以被粗略地认为它就是面向对象编程语言了。至于是否有现成的语法机制,完全地支持了面向对象编程的四大特性、是否对四大特性有所取舍和优化,可以不作为判定的标准。

因此,如果不按照严格的定义来说,大部分编程语言都是面向对象编程语言,比如 Java、C++、Go、Python、C#、Ruby、JavaScript、Objective-C、Scala、PHP、Perl 等等。

什么是面向对象分析和面向对象设计?

面向对象分析,英文缩写是 OOA,全称是 Object Oriented Analysis;

面向对象设计,英文缩写是 OOD,全称是 Object Oriented Design。

OOA、OOD、OOP 三个连在一起就是面向对象分析、设计、编程(实现),正好是面向对象软件开发要经历的三个阶段。

OOA 和 OOD 两个阶段最终的产出是类的设计,包括程序被拆解为哪些类,每个类有哪些属性方法,类与类之间如何交互等等。它们比其他的分析和设计更加具体、更加落地、更加贴近编码,更能够顺利地过渡到面向对象编程环节。这也是面向对象分析和设计,与其他分析和设计最大的不同点。

Tips

  • 面向对象分析,就是要搞清楚做什么
  • 面向对象设计,就是要搞清楚怎么做
  • 面向对象编程,就是将分析和设计的的结果翻译成代码的过程。

什么是 UML?我们是否需要 UML?

UML(Unified Model Language),统一建模语言。很多讲解面向对象或设计模式的书籍,常用它来画图,以此表达面向对象或设计模式的设计思路。

UML 学习成本高

实际上, UML 是一种非常复杂的东西。它不仅仅包含我们常提到类图,还有用例图、顺序图、活动图、状态图、组件图等。即便仅仅使用类图,学习成本也是很高的。就单说类之间的关系, UML 就定义了很多种,比如泛化、实现、关联、聚合、组合、依赖等。

UML 沟通成本也高

UML 作为一种沟通工具,即便你能完全按照 UML 规范来画类图,可对于不熟悉的人来说,看懂的成本也还是很高。

从实际开发经验来看,UML 的用途可能不大

从实际开发经验来说, UML 在互联网公司的项目开发中,用处可能并不大。为了文档化软件设计或者方便讨论软件设计,大部分情况下,我们随手画个不那么规范的草图,能够达意,方便沟通就够了,而完全按照 UML 规范来将草图标准化,所付出的代价是不值得的。

Note

专栏中的很多类图,并没有完全遵守 UML 的规范标准。而是为了兼顾图的表达能力和你的学习成本,对 UML 类图规范做了简化,并配上了详细的文字解释,力图让你一眼就能看懂。毕竟,本专栏并不是一个讲方法论的教程,专栏中的所有类图,本质是让你更清晰地理解设计。

重点回顾

  1. 什么是面向对象编程?

面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石。

  1. 什么是面向对象编程语言?

面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。

  1. 如何判定一个编程语言是否是面向对象编程语言?

如果按照严格的的定义,需要有现成的语法支持类、对象、四大特性才能叫作面向对象编程语言。

如果放宽要求的话,只要某种编程语言支持类、对象语法机制,那基本上就可以说这种编程语言是面向对象编程语言了,不一定非得要求具有所有的四大特性。

  1. 面向对象编程和面向对象编程语言之间有何关系?

面向对象编程一般使用面向对象编程语言来进行,但是,不用面向对象编程语言,我们照样可以进行面向对象编程。

反过来讲,即便我们使用面向对象编程语言,写出来的代码也不一定是面向对象编程风格的,也有可能是面向过程编程风格的。

  1. 什么是面向对象分析和面向对象设计?

面向对象分析就是要搞清楚做什么,面向对象设计就是要搞清楚怎么做。

两个阶段最终的产出是类的设计,包括程序被拆解为哪些类,每个类有哪些属性方法、类与类之间如何交互等等。