要在 Squeak 中实现这个设想,我们首先做一个新的类种类SesameStreet,增加 Monster 和 CookieMonster类,并定义和测试所有方法。所有这些动作可以在一个浏览器中进行,而使用工作空间和一个新类型的视图叫做检查器来进行测试。图3.15 展示了如何增加一个新类种类(就是通过在最左的窗格的按钮菜单中选择“additem”并在回应的打开的一个查询框中键入一个字符串。


让我们假定已经成功的对两个 monster进行了定义所有类和实例方法,并且这模型的状态反映在下图中,它还在浏览器的底部窗格中展示了CookieMonster 的 isFull 方法的代码。
译注:出于方便余录入了芝麻街的类定义,请使用文件列表的“file-In”导入。

下图演示同时使用多于一个浏览器的可能性。实际上,在桌面上的视图数目只受到可利用的内存的限制。经常使用多个浏览器来同时察看代码的不同特征,排除经常来回滚动的需要。通过裁剪和粘贴,还可以在视图之间传送信息。在图中的第一个浏览器察看Monster 当前定义的建立方法。我们需要重写 Object的标准实例建立方法来确保我们的 monster的胃和颜色被正确的初始化。注意向上箭头符号(“^”)指示新建造的 monster将作为这个方法生成的值来返回。super 是两个所谓的“伪变量”之一(另一个是 self),它们提供到当前执行对象(通过self)的句柄和它的超类的消息协议(通过 super)。“^ super new initialize”将强制发送 new 到类 Monster,随后是发送消息 initialize 到新建造的 monster,并接着返回这个实例,它有一般的 monster颜色(就是绿色 :)和一个空包作为它的胃。第二个浏览器叫做类浏览器,它可以通过在系统浏览器的类窗格中访问的菜单选项中选择“browse class”来获得。类浏览器限制自己的观察范围为选择的类的协议(这里是类Monster)而它们的按钮菜单同于系统菜单的相应的窗格。在这个浏览器中展示的 eat: 方法获得到 monster的胃的一个引用并向其中填充一些食物。因为 Smalltalk 是一个"动态类型"语言,你必须细心察看文档获知一种方法希望那种类型的对象作为它的参数。良好的Smalltalk 风格为此使用前缀为“a”或“some”的(比如 “anInteger”、“someMonster”)类型名字,而不是更少描述性的标识符如“x”、“y”或“fred”。这个命名参数约定使用这个方法接受的这些对象的最一般类的名字。如果我们不想做任何用途的假定可以使用:“someObject”或“someItem”。尽管它只是一个约定而 Smalltalk不强制使用它,这个方案很好的充任模拟“层级”类型系统的文档特征。

尽管 Monster意图充当一个抽象类,我们可能希望在测试它的协议的过程中建立实例。一般的增加到类的所有方法在被定义之后都必须立即测试。工作空间和检查器支持这种活动。上图展示了如何计算一个表达式(键入到一个工作空间)来制作一个 monster并喂它一个 #nail。要信服我们的表达式被实现了我们要检查最后的结果。这将使用一个所谓的检查器的视图,叫做“Monster”,在其中我们可以查看我们要研究的对象的当前绑定到所有实例变量上的值。可以安心的注意到monster 的胃真的含有一个 #nail。可以以各种方式激发检查器。浏览器允许我们遍历过程的空间,而检查器允许我们遍历 Smalltalk 的数据空间。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28676-7.html
福喜都不知道把肉送去检测太单纯了