一、面向对象编程和面向对象编程语言
我们先来看看两个概念——面向对象编程(OOP,Object Oriented Programming)和面向对象编程语言(OOPL,Object Oriented Programming Language)。
面向对象编程中有两个重要概念——类(class)和对象(object)。从第一个真正意义上的面向对象编程语言 Smalltalk 出现到 C++ 带动面向对象编程的流行,时至今日,如果不按严格定义,大部分编程语言都是面向对象编程语言。大部分程序员在开发项目时都是基于面向对象编程语言进行面向对象编程。
面向对象编程是一种编程范式,或者说编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性作为代码设计和实现的基石。
面向对象编程语言则是支持类和对象的语法机制,而且具有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。
一般来说,面向对象编程都是使用面向对象编程语言进行的,但这并非必须。要明确一点,面向对象编程是一种风格,它和编程语言并非绝对绑定的关系。使用 C 语言,一样可以面向对象编程。使用 Java 写出的代码也可能不是面向对象的。
我们这里说面向对象编程有四大特性(也有说四大基石、四大支柱等):封装、抽象、继承、多态。但还有一种说法是三大特性,剔除了抽象。后面我们再来详细说为什么可以把抽象排除在外。实际上,没必要纠结三和四,关键是理解每种特性的内容、意义和应用。
二、如何判断编程语言是否是面向对象编程语言
从字面上理解,面向对象编程就是把类和对象作为代码组织的基本单元的一种编程范式,并不需要四大特性。但在实际编程中发现,有了这四大特性,才能更方便地实现各种面向对象的代码设计。
前面说不按严格定义,大部分编程语言都是面向对象编程语言。这是因为,只要是以类和对象作为组织代码的基本单元,就可以粗略地认为它是面向对象编程语言,不必对四大特性过于死板。譬如 Go 语言因为继承容易造成层次不行而去掉了继承特性,不能因为它做了优化就将其踢出队伍。
三、面向对象分析和面向对象设计
面向对象分析(OOA,Object Oriented Analysis)和面向对象设计(OOD,Object Oriented Design)也是面向对象的两个重要概念。OOA、OOD、OOP 连起来就是面向对象分析、设计、编程,这就是面向对象软件开发的三个阶段。
之所以在分析和设计前加上“面向对象”,是因为我们要围绕着类和对象来做需求分析和设计。OOA、OOD 的最终产出是类的设计,譬如程序被拆解为哪些类,每个类有哪些属性、方法,类与类如何交互等。它们比其他的分析和设计更具体,贴近编码。这意味着它们容易落地,能够顺利过渡到 OOP 环节。
简而言之,OOA 就是分析要搞清楚什么,OOD 就是搞清楚怎么做,OOP 就是把 OOA 和 OOD 的结果翻译成具体代码。
四、UML
UML(统一建模语言,Unified Model Language)。这种语言通常用于画图表达面向对象或设计模式的设计思路。
UML 比较复杂,包括类图、用例图、顺序图、活动图、状态图、组件图等。UML 还定义了很多类间关系,譬如泛化、实现、关联、聚合、组合、依赖等。想完全掌握 UML 还是比较消耗精力的。此外,即使我们按照 UML 规范作图,对于不熟悉的人,想看懂也比较困难。
基于以上现实,UML 在实际的项目开发中,用途并不是那么大。通常在文档化或者讨论时,都是随手画不那么规范的草图,达到沟通表达的效果即可。