Files
endorphin-tabularium-docs/content/docs/smalltalk/11-reference.md
T

3.9 KiB

术语、练习与原书对照

来源范围:全书主要章节;各主题的精确印刷页与 PDF 页见总览。本篇练习和术语释义为整理者编写。

术语速查

原词 本文译法 区分要点
object 对象 有身份、状态和行为的实体
receiver 接收者 本次消息发给谁
message 消息 对接收者的行为请求
selector 选择子 消息的名称,如 at:put:
method 方法 某类提供的响应实现
class / instance 类 / 实例 行为组织与由其描述的对象
metaclass 元类 类对象所属的类
protocol 协议 一组协作消息;Browser 中也用于分类
block 块 延迟求值的计算对象
cascade 级联 以分号向同一接收者继续发送
primitive 原语 由虚拟机支持的底层操作
identity / equality 身份 / 相等 同一对象与值意义上的相等
shallow copy 浅复制 复制外层但可能共享内部对象
dependent 依赖者 注册后接收模型变化通知的对象
image 镜像 保存并运行对象系统的状态载体
workspace 工作区 编辑与求值表达式的工具
browser 类浏览器 查看、编辑类与方法的工具
inspector 对象检查器 查看具体对象状态的工具
window / viewport 坐标窗口 / 视口 自身坐标范围与显示映射区域

预测结果

以下是语义练习,答案为推演,未运行。

问题 答案与原因
2 + 3 * 4 20,二元消息从左到右
2 + (3 * 4) 14,括号改变次序
`[ :x x + 2 ] value: 5`
方法只有 count := 9 时返回什么? 接收者,方法无显式返回
B 中的方法对 C 实例发送 super 消息,从哪查找? 从 B 的父类开始,接收者仍是 C 实例
浅复制后替换副本某个槽位,是否替换原件槽位? 不会;修改共享子对象才可能双方可见
do: 能否代替 collect: 收集块结果? 不能直接代替,两者协议目的不同
给模型发送 changed: 是否自动修改模型数据? 不应这样理解;先完成修改,再通知依赖者

三次源码阅读练习

消息路线:选择一个集合的 size,找实际定义类,再查看一个发送者;记录“接收者类 → 继承链 → 方法”。

状态路线:创建两个指向同一集合的变量,画引用图;再复制外层容器,比较替换槽位与修改子对象的差别。

界面路线:对原书曲线案例画出选择、修改模型、通知、重绘与显示变换,注明每一步所在对象。

完成实验时另记镜像名称、版本、源代码、实际输出和差异。本次任务只完成文档整理,没有运行这些实验。

扫描校勘与适用边界

扫描问题 本文处理
箭头被识别成 <-、字母或感叹号 赋值统一为 :=,返回统一为 ^
Smalltalk-80 被识别成 Smalltalk-SO 依据书名与语境规范化
选择子被拆开、类名大小写混淆 行文合并;具体 API 安装前再核对原页
第 4 章个别科学计数法示例数位不一致 不沿用异常数值作为例题
后部 GUI 源码嵌在截图中 解释调用结构,不将 OCR 文本冒充可运行源码

原书是学习 Smalltalk-80 系统的资料,不是本文对所有 Smalltalk 方言兼容性的承诺。全文以语义重述和新增短例组织;没有把原始扫描件、OCR 全文或本机下载路径发布到网站。

后续核验清单

准备目标镜像后,可分别验证类定义消息、初始化约定、块返回边界、数值除法、集合返回类型、信号量时序,以及 MVC 选择子与坐标变换。核验结果应与本文的语义推演分别记录,避免把“读过”写成“运行通过”。