程序原本(五十五):程序设计的核心思想——对象系统:表达、使用与模式(继承和多态都是多余的概念)

阅读数:36 2019 年 10 月 1 日 16:07

程序原本(五十五):程序设计的核心思想——对象系统:表达、使用与模式(继承和多态都是多余的概念)

对象是带有一系列相关性质的数据。除此之外,它不带有任何必须附加的概念。明确这一点,有利于我们看到对象系统的本质与构建过程。

在《结构程序设计》中,达尔4用一种非常奇特的方式来定义了类与对象之间的关系,即:如果一个过程能够产生比调用语句存活得更久的数据实体,则我们称该过程为;这样的数据实体(实例,instance),我们称之为对象。更有趣的是,《结构程序设计》将这样构建对象系统的过程称为“层次程序结构5”。不过这其中的“层次”却并不是指类的继承层次,而仅仅是指“按层次的方式构造和分析”去处理系统的复杂性问题。达尔在书中强调了“层次方式”是唯一有效的办法,但并没有认为系统的逐层分解与对象的继承之间存有某种必然联系。

4 奥利—约翰•达尔(Ole-Johan Dah)与霍尔合写了该书的第三篇。达尔被称为面向对象之父,是 2002 年图灵奖得主。霍尔同时是该书第二篇的作者,是 1980 年图灵奖获得者。

5 这里的“结构”更适宜理解为动词。

事实上在 Simula 67 最初的“面向对象”观念中,对象只是一种(相对于一般数据类型而言)更为高级的数据抽象形式。直到 1971 年 SmallTalk 才提出了继承性概念。如今,对象的 PME(Property-Method-Event,即属性、方法、事件)模型,以及 EIP(Encapsulation-Inheritance-polymiorphism,即封装、继承、多态)构成了完整的面向对象编程的概念集。

但这些都并不是对象这一概念抽象的本义,而是实现对象系统过程中的一些实践。例如,我们可以将基于继承的对象系统6,视作是通过层次方式来处理系统复杂性的一个实践。准确地说,它通过类属关系从开发目标复杂无序的数据中抽取了一部分出来,使它们成为一个可编程的、(在一定程度上)可复用的对象集。正因为这一过程只处理了具有类属关系的层次数据,所以——必然地——下面这些问题也就局限了基于继承的面向对象系统的应用:

6 注意我们并没有强调是类继承的对象系统 ,这是因为类只是实现继承的方法之一。其它的继承方式包括原型继承、元类继承等。

  • 无类属关系的数据;或
  • 非层次的数据;或
  • 系统中的逻辑需求。

评论

发布