javascript|10.混合对象「类」

javascript|10.混合对象「类」

10.混合对象「类」这章自然介绍和类相关的面向对象编程 , 研究类的具体机制之前 , 我们首先会介绍面向类的设计模式:实例化、继承和多态 。


本章用很大的篇幅介绍了面向对象编程理论 , 在后半章介绍混入时会把这些概念到 JavaScript 代码上 。 但是首先我们看到许多概念和伪代码 , 因为千万不要迷路——跟紧了!
类理论类/继承描述了一种代码的组织结构形式——一种软件中对真实世界问题领域的建模方法 。
【javascript|10.混合对象「类」】面向对象编程强调的数据和操作数据的行为本质是互相关联的 , 因此好的设计就是把数据以及和它的行为打包起来 。 这在正式的计算机科学中有时被称为数据结构 。
举例来说 , 用来表示一个单词或者短语的一串字符通常被称为字符串 。 字符就是数据 。 但是你关心的往往不是数据是什么 , 而是可以对数据做什么 , 所以可以应用在这种数据上的行为都被设计成 String 类的方法 。
所以字符串都是 String 类的一个实例 , 也就是说它是一个包裹 , 包含字符串和我们可以应用在数据上的函数 。
我们来看一个常见的例子 , 「汽车」可以被看作「交通工具」的一种特例 , 后者是更广泛的类 。
我们可以在软件中定义一个 Vehicle 类一个 Car 类来对这种关系进行建模 。
Vehcle 的定义可能包含推进器(比如引擎)、载人能力等等 , 这些都是 Vehicle 的行为 。 我们在 Vehicle 中定义的是所有类型的交通工具都包含的东西
在我们的软件中 , 对不同的交通工具重复定义「载人能力」是没有多余的 。 相反 , 我们只需要在 Vehicle 中定义一次 , 定义 car 时 , 只要声明它继承了 Vehicle 的这个基础定义就行 。 Car 的定义就是对通用 Vehicle 定义的特殊化 。
虽然 Vehicle 和 Car 会定义相同的方法 , 但是实例中的数据可能是不同的 , 比如每辆车有独一无二的车辆识别号码等等 。
这就是类 , 继承和实例化 。
类的另一个核心是多态 , 这个概念我们可以说父类通用的行为可以被子类用更特殊的行为重写 。 实际上 , 相对多态性允许我们从重写行为中引用基础行为 。
类理论强烈建议父类和子类使用相同的方法名来定义特定的行为 , 从而让子类重写父类 。 我们之后会看到 , 在 JavaScript 代码中这种做会降低代码代码的可读性和健壮性 。

介绍了类——一种结构化组织代码的形式 。 以及面向对象编程的几种性质:继承、实例化、多态 。
以及一个新论点:多态在 JavaScript 表现并不优秀 。
「类」的设计你可能从来没有把类作为设计模式来看待 , 讨论的最多的是面向对象的设计模式 , 比如迭代器模式、观察者模式、工厂模式、单例模式等等 。 从这个角度来说 , 我们似乎是在低级面向对象的基础上实现了所有高级设计模式 , 似乎面向对象是优秀代码的基础 。

提出质疑:面对对象是优秀代码的基础吗?
如果你以前接触过正规的编程教育的话 , 可能还会听说过「过程化编程」 , 这种代码只包含了过程函数的调用 , 没有高层的抽象 。 或许老师还教你最好使用类把过程化的「意大利面代码」转换成结构清晰 , 组织良好的代码 。

明褒暗贬 , 作者似乎对面对对象编程和类编程是优秀代码规范这个观点 , 提出了自己的质疑