跳转至

面向对象编程

英文: Object-Oriented Programming.

三个特征

  • 封装: 提高了类的易用性.
  • 继承: 提高了代码的复用率.
  • 多态: 提高了程序的可拓展性.

不同编程语言实现三个特征的方式不同, 比如:

  • C++ 和 Java 是基于类(Class)的面向对象.
  • JavaScript 是基于原型(Prototype)的面向对象.
  • Lua 是基于原表(Meta Table)的面向对象.

优点

  • 易于维护.
  • 可重用性.
  • 可拓展性.

缺点

  • 不太适用于嵌入式开发.
  • 性能略低于面向过程编程.

教学

以下说明几个教学中普遍存在的问题:

  1. 比喻滥用

    使用生活中的经验与面向对象概念进行类比是一种常见的做法, 但部分例子虽然使用到了学生所熟悉的事务, 但却缺少和编程之间的联系.
    从而使学生感到疑惑, 进而增加理解难度.
    下面是此类不当比喻的常见例子:

    汽车类, 汽车有踩刹车和踩油门等操作, 具有颜色和重量等属性.

    在现实世界中, 软件无法通过修改属性来改变车辆的颜色或重量. 若该车辆位于虚拟世界中, 这个比喻将合理许多.

    面向对象是一种编程范式(programming paradigm), 而严重脱离编程实际的类比对学生理解核心概念没有帮助.

  2. 术语滥用

    面向对象存在较多的专业术语, 在讲解时应注意依赖关系. 确保由简到难, 由浅入深.
    部分教师故直接尝试使用高度抽象的描述和大量的专业术语来解释面向对象, 使学生一头雾水.

    不同领域同名术语可能具有不同的含义, 比如 C++ 的 "对象"1 和面向对象中的 "对象" 的定义是不同的.

  3. 边界模糊

    部分概念并不属于面向对象. 比如 "万物皆对象", 这一概念只适用于部分面向对象的编程语言 (如 Java).

    应该使学生认识到类只是实现面向对象的方法之一.

参见

  • 面向对象是怎样工作的(第2版).

  1. https://en.cppreference.com/w/cpp/language/object 

评论