第一章 快速浏览

本章我们站在较高的层次快速浏览器Squeak体系,熟悉其运行环境。其中包含大量的实践机会,因此最好在手头有个电脑可以用来输入测试

下面会使用一个特殊的标记作为练习实践的提示。在实践中,我们会启动Squeak,学习与其运行环境的交互方法,探索基础工具,掌握定义新的方法,对象和如何发送消息给对象

1.1 开始

Squeak在www.squeak.org提供免费下载。需要三部分下载,其中包含四个文件。

Squeak

(1) virtual machine(vm) 特定于不同操作系统与进程的Squeak虚拟机。大部分通用电脑操作系统都有对应的预编译的虚拟机
(2) sources文件包含了Squeak中所有基础实现部分。图中的版本是SqueakV39.sources。这个版本只可以用于3.9以及更高版本的Squeak。早期的版本需要使用对应的sources版本。Squeak的3.0到3.8需要使用SqueakV3
(3)system image是一个Squeak运行时静态快照镜像文件。主要包含两个文件.image文件包含Squeak系统中的所有对象的状态。.changes文件包含其他所有在系统对象上的变化。图中我们使用Squeak3.9-final-7067镜像文件

本书中例子使用的Squeak版本是Squeak-dev,可以在http://damien.cassou.free.fr/squeal-dev获取相关信息。这个版本包含丰富的预装工具,并且其他的扩展包可以通过点击安装。本书中的所有入门练习可以应用到任何版本,因此只需要安装其中的一个版本,就可以掌握在其他版本中的开发。当然在不同版本会有点细节的不同,不过仍然建议使用这个版本熟悉Squeak的基本应用

在Squeak开发中,镜像文件(.image,.changes)会发生变化,所以需要确保这两个文件是可写的。经常将这两个文件放在相同目录中。尽量不要使用纯文本编辑这两个文件,Squeak只是使用这两个文件保存对象的状态,以及对象发生变化的记录信息。在开始编程前最好将这两个文件进行备份,这样就可以随时从新的镜像文件开始变成

vm文件与sources文件通常是只读的,可以在不同的用户中共享。这些文件可以保存在相同目录,也可以保存在所有人都可以访问的目录下。接下来选择喜欢的操作系统即可开始享受Squeak编程的乐趣

Launching (启动)

Doit.image文件拖到虚拟机图标即可,或者双击.image文件,或者在命令行输入虚拟机名字与.image文件路径。

启动后,将会看到一个大窗口,包含大量的工作区间。Squeak使用上下文相关菜单。

First Interaction(初步交互)

Doit点击窗口的空白地方打开菜单栏,选择open...workspace创建一个新的工作区间

workspace

Squeak通常使用带有三个按键的鼠标进行操作。其中左侧的red button进行选择, 右侧的yellow button打开操作菜单。

Doit 在工作区间输入Time now。然后右击,选择print it

鼠标的第三个按钮blue button用来操作图形,保护一系列对屏幕图形对象的操作,如旋转缩放,

Doit点击鼠标滚轮,拖着其中按钮绕着工作区间旋转

可以自定义鼠标配置,修改其鼠标按钮实现不同功能。另外还可以使用alt按钮模拟鼠标按钮功能。使用苹果机,可以使用键盘相应按钮模拟鼠标。

可以配置鼠标的工作方式配合操作系统与鼠标驱动。Squeak包含一些通用的鼠标使用配置和键盘元键操作方式,可以使用Word菜单的open选项打开配置。在preference browser界面中, general选项包含swapMouseButtons可以用来切换鼠标按钮keyboard选项包含调整不同键盘按键功能

Doit打开preference browser试试搜索框找到swapMouseButtons选项

1.2 Word菜单

Doit 在Squeak空白地方点击打开Word菜单。默认情况下松开鼠标菜单消失。可以点击插针按钮放在桌面上,鼠标放开后也不会消失。可以拖着移动,直到点击菜单外地方或者进行选择后才会消失。

word菜单包含了Squeak提供的丰富的工具

Doit 选择open...选项。
接下来会看到一系列Squeak的核心工具,包括系统菜单和工作区间。在接下来的章节中会详细介绍它们

word>open

1.3 保存,关闭和重启Squeak会话

Doit返回word菜单,选择new morph...然后选择from alphabeitical list>A-C>BlobMorph 会打开一个图形

Doit选择word>save as...输入SBE 点击Accepts(s) 然后选择Word>save and quit

打开.image.changes文件所在目录,会发现SBE.imageSBE.changes文件包含在save and quit的一系列操作信息。可以将这两个文件移动到任意的硬盘空间,也可以发送到其他地方。

Doit点击SBE.image文件再次启动Squeak
现在又返回到上次操作状态。

当第一次启动Squeak,Squeak虚拟机加载提供的image镜像文件,包含一系列对象的快照,随着在Squeak中的编程过程中,可以发生消息给这些对象,也可以创建新的对象,这些对象会随着销毁而进行内存自动回收

退出Squeak时,保存对象的快照。保存的快照将会覆盖原先的镜像文件。也可以以新的名字保存镜像文件

.image文件外还有一个.changes文件,包含使用系统工作在源代码基础上的操作,大部分时间不需要考虑这个文件。这个文件通常用来修正错误,后面会介绍

这个镜像文件是1970年的后期的Smalltalk-80镜像文件的一种变种。有些对象已经使用了数十年

也许会认为这些镜像文件是保存和管理软件工程的核心,其实并不是这样。后面会降到。还有大量的优秀工具用来管理和共享软件开发。镜像文件非常重要,需要慎重对待,可以使用Monticello来管理代码版本和共享代码

Doit 中击图形

会出现一系列对图形的操作,可以点击几个按钮试试效果

1.4 工作区间和脚本运行(Workspaces and Transcripts)

Doit 关闭打开的窗口,点击Tools工具栏,打开一个Transcriptsworkspaces,调整位置

可以直接拖拽边角实现缩放也可以中击选择缩放,
任何时候只有一个窗口是激活的。通常在最前面并且是高亮的。鼠标在这个窗口区域
transcript用来输出系统信息的对象,可以看做系统控制台system console 需要注意的是transcript会影响性能,打开与其交互会降低运行效率,另外这个工作并不是线程安全的,在多个操作发生时可能出现意外问题

workspace通常用来输入代码判断,用来测试。也可以用来记录文本内容。如todo列表或者使用镜像文件的姓名列表。通常用来显示一个镜像文件的文档。

Doit 在workspace输入下面的语句
Transcript show: 'hello world'; cr .

然后尝试在workspace进行双击,注意单词,文本被选中取决于点击的稳为主

Doit然后选择整个文件,右击,选择do it

transcript窗口将会显示hello world文本。再次运行,(d)表示可以使用CMD-d进行快捷操作

Do it

上面就是一个简单的Smalltalk表达式的计算过程。发送消息show 'hello wold'Transcript对象。然后发送消息crTranscript接着准备出来这些消息,查找show:方法和cr方法进行相应的响应

随着使用,会发现smalltalk并不会调用一个操作和方法只是简单的发送消息。这个集中体现了面向对象的编程思想。对象用来负责响应动作,只需要简单发送消息给对象即可。而不是命令对象做什么。对象负责查找方法来响应消息。

1.5 键盘快捷键

计算表达式时,不一定需要使用右击按钮。可以直接使用键盘快捷键。通常在菜单中使用(x)进行描述。根据不同操作平台,可以选择不同的快捷命令键

Doit 使用CMD-d快捷键,计算workspace其中的表达式。
还可以使用do it print it inspect itexplore it快捷方式。

Doit在workspace中输入3+4表达式,然后选择do it使用快捷键

可能会注意到并没有任何事情发生,仅仅是发送+ 3到数字对象4.结果对象7已经计算出来和得到返回。然而workspace并不会接受这个结果,丢弃这个响应。如果想要查看结果,需要选择print itprinit it编译表达式,执行编译结果,发送printSting到这个结果,显示这个结果信息

Doit 选择3+4 选择print it

Doit 删除高亮的7,然后选择3+4,选择inspect it

inspector

这样会打开一个新的inspector窗口,以SmallInteger:7作为标题,Inspector是一个非常有用的工作可以用来浏览与操作系统中的对象。标题表明表达式的运行结果。左侧允许我们浏览器对象的实例变量。右侧显示实例变量的信息。底层用户发送消息给这个对象来测试使用

Doit 在底层中输入self squared,选择print it
Doit 关闭inspector.在workspace输入表达式Object然后选择explore it

这次会打开一个以Object为标题的窗口如下


Exploring

可以点击对应的小箭头打开详细信息.

explorer可以用来查找对象的信息,输出一个树状信息。我们直接查找存储在Object中的信息,

1.6 包管理 SqueakMap

SqueakMap是一个基于web的应用与库包管理系统,这个包管理系统使用分布式,由不同地方的人负责管理与维护。

Doit选择Word>open..>SqueakMap package loader

package loader

可以在其中安装对应版本的应用与库包。

1.7 系统查看(The system Browser)

系统查看工具是开发中非常重要的工具,其中包含几个非常有用的窗口

Doit选择word>open..>class browser打开

system browser

其中的标题显示了我们正在查看的对象类
系统查看工具打开时,所有面板都是空的,第一个面板是系统分类,包含所有的类

Doit在分类(Category-namespace)中选择Kernel-Objects

第二个面板显示分类(Category-namespace)下的类(class)

Doit在类(class)列表选择Object类

第三个面板显示当前类的功能接口协议(protocols-interface)。包含方法的分类。第四个面板默认显示所有的方法

Doit在协议(protocols)列表选择printing协议

可以滚动查找到这个协议,然后在第四个列表中出现所有相关的方法

Doit在方法(Method)列表查找printString方法

在底下会显示方法的源代码。

1.8 查看类(Finding Classes)

在Squeak中有多种方法可以用来查找一个类,首先可以使用系统查看器,查找

另外一种方法是发送browse消息到类,这个请求会打开一个类的查看器,

Doit 在workspace中输入Boolean browse,然后选择do it

这样会打开一个关于Boolean类的查看窗口

Doit使用键盘快捷方式查看Boolean类

值得注意的是类Boolean被选择后,协议与方法并么有进行选择。
最低下显示了两个面板,中间包含类的定义(class definition),包含需要发送给父类用来创建一个子类的源代码。这里包含创建一个命名为Boolean的子类,并没有包含任何实例变量,类变量或者字典信息。并且将Boolean类存储到Kernel-Objects 类分类下

最低层的面包包含类的注释(class comment),用来描述了id意义,可以单击类面板下的?号来查看

如果想查看继承链,可以使用hierarchy browser

Doit单击中间的hierarchy,查看Boolean类的继承链
打开一个继承链查看窗口,展示了Boolean的父类和子类信息。非直接父类和子类则关闭的

经常使用名称类查找一个类,另外还可以查找不知道名称或者忘记名称的类

Doit鼠标放置在系统查看器的类分类面板中,输cmd-f。或者选择find class(f)....输入Time

接下来会看到一系列包含time的类的列表,选择Time,可以查找其具体信息。切换另一个可以使用cmd-b。返回上次查找的类

1.9 查看方法(Finding Methods)

有时候只记得方法的名称或者方法名称的一部分。可以使用方法查找来获取其信息

Doit 选择method finder图标,然后输入now。按回车键

接下来方法查找其会显示一系列包含now的方法。滚动到now。右侧面板将会显示包含now方法的三个类。选择其中一个并打开它

now

有时候,仅仅指定有一个方法存在,不清楚具体名称。也可以使用方法查看器,比如,需要找到一个方法将字符串转换为大写,

Doit 在方法查找器中输入a.A
方法查找器将会返回可能需要的方法

uppercase

右侧面板显示复合条件的方法。星号表明所在的类,方法将会执行,返回需要的结果,没有星号的方法返回这个期望的结果,复合条件但是并么有得到执行

也可以使用参数来查找方法。比如可以查找一个方法用来查找两个数字的最大公因子。可以试着输入25.35.5作为例子。

1.10 定义新的方法

测试驱动开发已经改变了编写代码的方式,这个测试驱动的背后理念称为行为驱动开发或者TDD。通常编写一系列的例子来定义预期行为。来测试我们的代码。用来确保代码的严谨性

经常使用例子说明一个方法的意义

testShout
  self assert:('Dont"t painc' shout = 'DON"T PANIC!')

那么我们如何在Squeak里面定义一个新的方法。首先我们需要确定方法所在的类型。这个shout方法需要定义在String类中。对应的测试例子,我们使用StringTest

Doit查找StringTest类,选择一个合适的协议tests-converting。然后下面会提示一个模板来实现方法,删除,输入上面的代码,然后选择accept(s)进行编译保存。

因为缺少shout方法,这个窗口将会需要确认这个方法。可以用来进行类型检查,但是这个例子中,下面我们创建shout方法。

Doit为了运行创建的新的test。打开SUint TestRunner。word>open>test runner

打开的窗口的左侧显示系统类分类列表,

Doit选择Collections Tests-Text然后右侧会显示对应的测试类。选择其中的StringTest。点击下面的Run selected运行这些测试例子

Test runner

将会看到测试运行的信息。
可以使用调试器对其中的代码进行调试

debugger

Doit选择String类,然后选择converting协议,输入下面的方法定义,然后编译保存

Method定义
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,009评论 9 467
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,049评论 25 707
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • 1/ 说走就走:布拉格 说起布拉格,人们总会想起蔡依林的那首《布拉格广场》,我就站在布拉格黄昏的广场,在许愿池投下...
    寻找不同的蜜蜂阅读 768评论 14 21