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

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

专栏正文的第一个模块, 我会讲一些设计原则、 设计思想, 比如,面向对象设计思想、 经典设计原则以及重构相关的知识, 为之后学习设计模式做铺垫。

在第一个模块中, 我们又首先会讲到面向对象相关的理论知识。 提到面向对象, 我相信很多人都不陌生, 随口都可以说出面向对象的四大特性: 封装、 抽象、 继承、 多态。 实际上, 面向对象这个概念包含的内容还不止这些。 

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

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

面向对象编程中有两个非常重要、 非常基础的概念, 那就是类(class) 和对象(object) 。 

那究竟什么是面向对象编程? 什么语言才算是面向对象编程语言呢? 如果非得给出一个定义的话, 我觉得可以用下面两句话来概括。

  • 面向对象编程是一种编程范式或编程风格。 它以类或对象作为组织代码的基本单元, 并将封装、 抽象、 继承、 多态四个特性, 作为代码设计和实现的基石 。
  • 面向对象编程语言是支持类或对象的语法机制, 并有现成的语法机制, 能方便地实现面向对象编程四大特性(封装、 抽象、 继承、 多态) 的编程语言。

  除此之外, 从定义中, 我们还可以发现, 理解面向对象编程及面向对象编程语言两个概念, 其中最关键的一点就是理解面向对象编程的四大特性。 这四大特性分别是: 封装、 抽象、 继承、 多态。 不过, 关于面向对象编程的特性, 也有另外一种说法, 那就是只包含三大特性: 封装、 继承、 多态, 不包含抽象。 为什么会有这种分歧呢? 抽象为什么可以排除在面向对象编程特性之外呢? 关于这个问题, 在下一节课详细讲解这四大特性的时候, 我还会再拿出来说一下。 不过, 话说回来, 实际上, 我们没必要纠结到底是四大特性还是三大特性, 关键还是理解每种特性讲的是什么内容、 存在的意义以及能解决什么问题。

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

  实际上, 我个人觉得, 只要某种编程语言支持类或对象的语法概念, 并且以此作为组织代码的基本单元, 那就可以被粗略地认为它就是面向对象编程语言了。 至于是否有现成的语法机制, 完全地支持了面向对象编程的四大特性、 是否对四大特性有所取舍和优化, 可以不作为判定的标准。基于此, 我们才有了前面的说法, 按照严格的定义, 很多语言都不能算得上面向对象编程语言, 但按照不严格的定义来讲, 现在流行的大部分编程语言都是面向对象编程语言。

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

  前面我们讲了面向对象编程(OOP) , 实际上, 跟面向对象编程经常放到一块儿来讲的还有另外两个概念, 那就是面向对象分析(OOA) 和面向对象设计(OOD) 。 面向对象分析英文缩写是OOA, 全称是Object Oriented Analysis; 面向对象设计的英文缩写是OOD, 全称是Object Oriented Design。 OOA、 OOD、 OOP三个连在一起就是面向对象分析、 设计、 编程(实现),正好是面向对象软件开发要经历的三个阶段

  看到这里, 你可能会问, 那面向对象分析、 设计、 编程到底都负责做哪些工作呢? 简单点讲, 面向对象分析就是要搞清楚做什么, 面向对象设计就是要搞清楚怎么做, 面向对象编程就是将分析和设计的的结果翻译成代码的过程。 今天, 我们只是简单介绍一下概念, 不展开详细讲解。 在后面的面向对象实战环节中, 我会用两节课的时间, 通过一个实际例子, 详细讲解如何进行面向对象分析、 设计和编程。

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

UML(Unified Model Language),统一建模语言。.

重点回顾

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

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

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

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

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

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

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

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

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

简单点讲, 面向对象分析就是要搞清楚做什么, 面向对象设计就是要搞清楚怎么做。 两个阶段最终的产出是类的设计, 包括程序被拆解为哪些类, 每个类有哪些属性方法、 类与类之间如何交互等等。

课堂讨论

今天我们要讨论的话题有两个:

  1. 在文章中, 我讲到UML的学习成本很高, 沟通成本也不低, 不推荐在面向对象分析、 设计的过程中使用, 对此你有何看法?
  2. 有关面向对象的概念和知识点, 除了我们今天讲到的, 你还能想到其他哪些吗?

答案:

1、个人觉得,对于UML的学习属于软技能的学习。UML在编写项目需求文档、接口设计、流程图、表关系方面有着重要的作用,通过UML我们可以清楚的表示文档内容。为后面维护代码做铺垫。

 

posted @ 2020-02-16 21:41  源问三生  阅读(192)  评论(0)    收藏  举报