美文网首页
第一章 快速浏览

第一章 快速浏览

作者: _火魂_ | 来源:发表于2016-05-10 17:12 被阅读0次

    本章我们站在较高的层次快速浏览器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定义

    相关文章

      网友评论

          本文标题:第一章 快速浏览

          本文链接:https://www.haomeiwen.com/subject/lslyrttx.html