前言:
理论一: 当谈论面向对象的时候, 我们到底在谈论什么?
提到面向对象, 大部分程序员都不会感到陌生, 并且能够说出面向对象的四大特性: 封装, 抽象, 继承, 多态.
一. 什么是面向对象编程和面向对象编程语言?
面向对象编程中最重要的2个概念: 类和对象
- 面向对象编程: 缩写: OOP(Object Oriented Programming)
- 面向对象编程语言: 缩写: OOPL(Object Oriented Programming Language)
1.1 面向对象编程
面向对象编程是一种编程范式或编程风格. 它以类或对象作为组织代码的基本单元; 运用封装, 抽象, 继承, 多态四大特性, 作为代码设计和实现的基石.
1.2 面向对象编程语言
面向对象编程语言是支持类或对象的语法机制, 有现成的语法机制能方便地实现面向对象编程的四大特性(封装, 抽象, 继承, 多态).
1.3 感悟
一般来说, 面向对象编程都是通过面向对象编程语言进行的, 但是, 不用面向对象编程语言, 我们照样可以进行面向对象编程. 反之, 我们使用面向对象编程语言, 写出来的代码也不一定是面向对象编程风格的, 可能是面向过程编程风格.
面向对象编程有说法是4大特性, 也有人说3大特性, 其实这都不重要, 重要的是我们要理解每种特性讲的是什么内容, 存在的意义, 以及解决了什么问题.
二. 如何判定某编程语言是否面向对象编程语言?
面向对象编程最简单, 最原始的方式理解: 将对象or类作为代码组织的基本单元, 并不一定需要封装, 抽象, 继承, 多态这四大特性的支持.
但是, 有了以上四个特性, 能更容易实现面向对象的代码设计思路. 比如: 面向对象编程的过程中, 我们进程遇到is-a这种关系(狗是一种动物), 而继承这个特性就很好的支持这种is-a的代码思路, 并解决了代码复用的问题.所以继承是面向对象编程语言的四大特性之一.
随着编程语言的不断迭代, 演化, 人们发现继承这种特性很容易造成层次不清, 代码混乱, 所以后面很多编程语言就摒弃了, 比如: go
总结: 只要某种编程语言支持类或对象的语法概念, 以此作为组织代码的基本单元, 那么我们就可以认为该编程语言是面向对象编程语言.
三. 什么是面向对象分析和面向对象设计?
面向对象分析: 缩写: OOA(Object Oriented Analysis)
面向对象设计: 缩写: OOD(Object Oriented Design)
OOA --> OOD --> OOP, 面向对象分析, 设计, 编程(实现), 正好是面向对象软件开发要经历的三个阶段, 以类和对象作为单元, 搞清楚做什么 --> 怎么做 --> 做
面向对象分析: 做什么
面向对象设计: 怎么做
面向对象编程: 将分析和设计的结果翻译成代码的过程(做)
四. 什么是UML? 我们是否需要UML?
UML: Unified Model Language, 统一建模语言
常常用它来画图表达面向对象或设计模式的设计思路.
UML的学习成本很高, 对不熟悉的人来说, 看懂的成本也会很高, 我们在时间紧急的情况下, 可以用不那么规范的草图, 表达意思, 方便沟通即可.
五. 课堂讨论
5.1 第一道题
在文章中, 讲到UML学习成本高, 沟通成本不低, 不推荐在面向对象分析, 设计的过程中使用, 对此你的看法?
答: 有的时候还是需要, 看场景, 如果是团队内部小范围沟通, 怎么简单直接怎么来; 如果是大型项目, 涉及的人员较多, 越规范越好, 因为时间成本是值得花的, 目的都是为了减少沟通成本.
5.2 第二道题
有关面向对象的概念和知识点, 除了我们今天讲到的, 你还能想到其他哪些吗?
答: 组合? 接口? 以类和对象作为代码的基石, 还要能灵活的支持组合特性才算不严谨的面向对象编程.