extrinsic 外部
a side effect 副作用
alternative to 替代于
ultimately 最终的
algorithmic 算法的
constraint – based 基于强制
exclusively 仅仅
manipulate 处理
restrictive 限制
domain 领域
object-oriented 面向对象
represent 描述
constraint 限制
flexible 灵活
analogy 类比
summarize 总结
Smaltalk 程序
Variable 变量
Component 要素
Parlance 术语
Synonymous 同义
Be guaranteed to 肯定会
Succinct 简明
Concrete 具体的
(concrete action)具体形状
Sense 理解
Simulation 模仿
Numerous 很多
Account 账户
面
《`
抽象的进步
所有程序语言都提供抽象概念。可以认为,你所解决问题的难以程度,直接取决于
你设计的抽象方法的种类和质量。我所指的“种类”,是指“你正在以什么为抽象?“汇编语言是对底层机器很小的抽象。那些称之为”命令”语言的语言,比如FORTRAN,BASIC,C,都是对汇编语言的抽象。对于汇编语言,这些语言无疑是巨大的进步,但是这些语言的基础抽象概念还是需要你去根据机器结构进行抽象,而不是根据你要解决问题的本身进行抽象。程序验必须建立基于“机器模型”和“解决问题模型”的抽象联系;其中机器模型是指,在你的方案空间,也就是你要处理实施执行这个问题的地方,比如电脑;“解决问题模型”空间,也就是那个问题存在的地方,比如你的业务。这就需要攻城狮做出极大的努力,然而事实上,做出的这些努力都是与程序编写无关的外部内容。这样的程序难于编写并且难于维护。由此而产生的副作用便是创造了“程序方法”这门学科。
替代机器模型的另一种方法,就是建立解决问题模型。早期语言,例如LISP,APL选择了一特殊角度看世界(所有问题最终都归于列表,或说所有问题最终都归于算法。)Prolog把所有问题都归于决策链。这些语言的程序创建都是基于强制性的,并且这些程序仅仅能处理图形符号。(后者更加具有限制性)基于本来就要用这些方法解决
的问题,他们显得很棒;但是当你跳出这个领域,他们就显的笨拙了。
面向对象的方法,给攻城狮提供了工具,让其可以在问题空间中把要解决的问题
描绘成一种元素,而这正式正中方法进步的地方。这种描述很广泛,不会让攻城狮受限于问题的种类。我们把问题空间的元素,和他们在方案空间所代表的物体,成为“对象”。当然也有一些对象在问题空间没有与之对应的类。程序为了解决问题,允许其自身接受新的类型对象不断调整。所以当你阅读解决方案的代码时,也就是你在阅读这个问题本身。对比于之前的语言,这是一个更灵活更nb的抽象语言。因此,面向对象的程序允许你基于问题本身描述问题,而不是描述计算机如何运行这个解决方案。不过他也有和计算机相联系的地方:也就是,每一个对象都像一个小型计算机——他有状态也有操作,并且你可以让他去实施。无论如何【thisdoesn't seem like such a bad analogy to objects in the realworld】,他们都有自己的属性和行为。
AlanKay总结了程序的五种基本特点。第一个成功的面向对象语言,并且Java也
是基于这个编写的。这些方法代表了纯粹的面向对象编程方法。:
1.所有东西都是对象 把对象想象成一种奇特的变量,它储存着数据,不过你可以作出要求,然她展现自身的操作。理论上讲,你可以把所有你要解决问题里的概念性的组件(比如狗,建筑,服务,等等)在程序中将其表达为一个对象。
2.程序是一堆对象的组合,通过发送信息,告诉彼此应该做什么。为了向对象提出请求,需要给该对象发送信息。更确切的讲,你可以把信息当做调用该对象特有的方法。
3.每一个对象都是由其他对象组成的储存空间。 用另一种方法讲,你创建的新的对象其
实就是把其他对象放到一个包里建立出来的。因此,尽管对象很简单,你也可以在程序
中建立起相当复杂的东西。
4.每一个对象都有一个类(type)。 用术语讲,每个对象(instance)都是类(class)的实例,这里的类(class)和(type)是同义的。一个类的最重要的属性区别就是,他能接收什么信息。
5.基于同一个类的对象可以接收相同的信息。这实际是一种【loadedstatement】,你在不就就会理解看到。圆这个类实际上也是形状这个类,一个圆肯定可以接收形状的信息。这也就意味着,你只需要编写形状这个代码,就可以自动控制符合形状描述的其他对象。【substituability】是面向对象的重要概念之一。
Booch给对象提供了一种更为简洁的描述:
"一个对象具有状态,行为和定义”
这也就意味着一个对象具有内在的数据(赋予它状态),方法(提供行为),并且每一个对象都是独特的以和其他对象区分开——具体的理解也就是,每一个对象在内存中都有一个特定的地址。