面向对象 - 图1

什么是面向对象?

面向对象编程,简单来说,就是将对象或类作为代码组织的基本单元,来进行编程的一种编程范式或者编程风格,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石 。但并不一定需要封装、抽象、继承、多态这四大特性的支持。只是,在进行面向对象编程的过程中,人们不停地总结发现,有了这四大特性,我们就能更容易地实现各种面向对象的代码设计思路。

比如,我们在面向对象编程的过程中,经常会遇到 is-a 这种类关系(比如狗是一种动物),而继承这个特性就能很好地支持这种 is-a 的代码设计思路,并且解决代码复用的问题,所以,继承就成了面向对象编程的四大特性之一。但是随着编程语言的不断迭代、演化,人们发现继承这种特性容易造成层次不清、代码混乱,所以,很多编程语言在设计的时候就开始摒弃继承特性,比如 Go 语言。但是,我们并不能因为它摒弃了继承特性,就一刀切地认为它不是面向对象编程语言了。

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

面向对象软件开发的三个阶段

  • 面向对象分析(OOA)

面向对象分析的产出是详细的需求描述。

  • 面向对象设计(OOD)

面向对象设计的产出是类。在面向对象设计这一环节中,我们将需求描述转化为具体的类的设计。这个环节的工作可以拆分为下面四个部分。

  1. 划分职责进而识别出哪些类

根据需求描述,我们把其中涉及的功能点,一个一个罗列出来,然后再去看哪些功能点职责相近,操作同样的属性,可否归为同一个类。

  1. 定义类及其属性和方法

我们识别出需求描述中的动词,作为候选的方法,再进一步过滤筛选出真正的方法,把功能点中涉及的名词,作为候选属性,然后同样再进行过滤筛选。

  1. 定义类与类之间的交互关系

一般分为:泛化、实现、关联、聚合、组合、依赖

  1. 将类组装起来并提供执行入口

我们要将所有的类组装在一起,提供一个执行入口。这个入口可能是一个 main() 函数,也可能是一组给外部用的 API 接口。通过这个入口,我们能触发整个代码跑起来。

  • 面向对象编程(OOP)