可以通过对象发送消息到自己来定义递归结构。在下一章中我们将见到一些它们的例子。Smalltalk的强大的面向对象还允许以优雅的方式定义额外的控制结构,向守卫这个控制结构执行的类附加适当的方法。例如,如果我们想用一个数值值来控制一个选择或循环,则应向类 Number附加一个相应的方法。
建造一个应用程序: 类、属性、方法、浏览器和检查器
Smalltalk 的类描述的语法在浏览器窗口下面的窗格中展示。使用浏览器来观看现存的类和定义新类。与面向对象哲学相和谐,每个类充任它自己的命令语言的解释器,通过消息协议定义它的功能;就是说,对象可以响应的所有消息的集合。通过在对象的类自身中定义的方法与通过引用继承自超类的方法来理解消息。尽管在这门语言的早期版本中能获得用“挂钩”来实现多继承,Smalltalk-80支持继承的一个层次方案。Class 描述需要一个超类、实例&类变量(如果有的话)、和实例&类方法。这些部分都不是强制的并且类可以没有其中任何的部分,例如
Object subClass: #Dummy
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Sesame Street'
是完全正确的。“poolDictionaries”的概念与“pool变量”相关联,这个概念我们不进一步追究。注意我们已经讨论过了实例变量和实例方法之间与类变量和类方法之间的区别。

不同种类的浏览器在 Smalltalk 中扮演了重要角色。使用系统浏览器来访问所有类和方法的定义 -系统定义的和用户定义的 - Smalltalk知道的。还需要用它们定义新类和方法。在类的有关选集上可以打开任意数目的系统浏览器,而在开发期间编程者会经常在它们之间切换来查看、变更、剪切和复制代码。
系统浏览器占据了由五个窗格的一个窗口。上面四个窗格被用作导航通过一个定义空间的一个“路径”,而下面的窗格查看选择的定义自身。为了向在典型的 Smalltalk系统中可以找到的大量的类提供某种结构,所有的类都被组织入种类(category)中。首先我们必须输入一个类种类,这导致在右侧窗格中出现可归类到这个标签之下的类的一个可滚动的列表。从这个列表中选择一个类,缩小浏览器的焦点到它的所有方法上,它们现在对于检查是可访问的。在这个阶段我们还需要决定我们想要察看类还是实例方法。用与类相同的方式给方法分类,我们现在必须选择一个种类。这最终返回方法的一个列表,它现在可以被选择了 -此后在下面的窗格中展示有关的代码。每个窗格都有自己的“”按钮菜单,如下图展示的那样,提供各种选项。现在包含在底部窗格菜单中的选项可以应用到这些代码的所有或任何选择的部分。

从上面的讨论看来浏览器提供了一个非常强有力的工具来查看和访问代码,因为它们使Smalltalk 的所有东西对于检查和修改一律是可访问的。

让我们步入定义一个新应用程序的过程中。基于我们的领域,我们选择了Sesame Street 的一个小片断,它是一个众所周知的居住着许多非常奇异的人物的城市邻居关系。为了保持事物简单我们只集中于两类人物:Monster 和 CookieMonster。Monster 被用作一个抽象类,用来示范做子类。它描述对各种 monster都共有的一些特征。CookieMonster只是一种特殊情况,带有它们自己的特定怪癖。
基本上我们把 cookie monster 作为一种实体,它们不停的为了 cookie而唠叨,cookie是它们唯一的食物。一旦醒来立即饥饿只有吃饱才能使它们平静,此后它们将睡觉直到某个愚蠢的用户再次唤醒他们。为此monster 被特征化为一个颜色(colour)和一个胃(tummy)。 因为 monster有各种颜色,这个信息被存储为一个符号,并且在创建 monster的时候装备了一个空胃,用叫做包(Bag)的一个预先定义的数据结构来表示。除了访问这两个实例变量,monster拥有协议来吃和回答是否它们的胃是空的。有关的实例方法被分类为初始化、访问、查询和动作。CookieMonster进一步特殊化这个协议。不定义额外的类变量,但提供两个新实例变量,状态(state)和饥饿(hunger)。CookieMonster的状态是 #awake 或 #asleep,而它的饥饿在它们醒来时随机决定。我们提供一个类方法来建立这样的畜生,和实例方法来初始化、查询、访问和动作。CookieMonster与普通的 monster 在吃上有所不同,就是说,它们更加挑剔食物。普通monster 的吃方法被 eat:方法的一个新实现所摒弃。因为它们不是特别强壮它们还必须知道通过乞讨来祈求食物,而“唠叨”方法提供了这个功能。最后,还有方法用做在消化之前测试食物,和描述进行乞讨的特定方式。CookieMonster察看这些信息为属性,并标签上私有。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28676-6.html
从哪里开始
在伊拉克