(6)控制结构 条件选择一般形式是 布尔子表达式 ifTrue:['真’块执行 iffalse:[v假’块执行 可以不出现” 如: numbers(0 ifTrue: LabsValue+number negated iffalse: labsvaluet-number] 条件重复一般形式是 [布尔块表达式] whiletrue:| wliefalse:[重复块 如:[ indexlistsize] whileFalse: [list at: index put: 0o index← index+1
(6) 控制结构 条件选择一般形式是: 布尔子表达式 ifTrue:[‘真’块执行] ifFalse:[‘假’块执行] “可以不出现” 如:number<0 ifTrue:[absValue←number negated] ifFalse:[absValue←number] 条件重复一般形式是: [布尔块表达式] whileTrue:|wlieFalse:[重复块] 如:[index>listSize] whileFalse:[list at:index put:0。 index←index+1 ]
(7)消息/方法 消息模式|临时变量语句组 nawAt: initialLocation newBox I newBox← self new. newBox setLoc: initiaPLocation tilt: Size: 100 scribe: pen new. newbox show. setLoc: newloc tilt: newTilt size: newSize seribe: newScribe Loc← newLoc.titl← new Tilt size← newsize. scribe← new Scribe
(7) 消息/方法 消息模式 | 临时变量 | 语句组 nawAt:initialLocation|newBox| newBox←self new. newBox setLoc:initiaPLocation tilt:0size:100 scribe:pen new. newBox show. setLoc:newLoc tilt:newTilt size:newSize seribe:newScribe| | Loc←newLoc. titl←newTilt. size←newSize. scribe← new Scribe
414 Smalltalk文件系统与虚机 Smalltalk是编译—解释执行的,sna1 ltalk源程序经编 译器得到虚映象( irtual image),虚映象由字节代码中 间语言编写,由sna1]talk虚机解释执行。相应的文件系 统管理三种文件:源文件、变更文件、映象文件。 由于sna1]talk是交互式的,被编译的方法在执行期间出 了问题要反应到源程序,则要对映象文件施行反编译 (decompilation) Smalltalk的虚机是一个新软件,它有三个功能部分 存储管理器 虚映象解释器 基本例程用汇编码写出的底层方法实现
Smalltalk是编译—解释执行的,Smalltalk源程序经编 译器得到虚映象(Virtual image),虚映象由字节代码中 间语言编写,由Smalltalk虚机解释执行。相应的文件系 统管理三种文件:源文件、变更文件、映象文件。 由于Smalltalk是交互式的,被编译的方法在执行期间出 了问题要反应到源程序,则要对映象文件施行反编译 (decompliation) Smalltalk的虚机是一个新软件,它有三个功能部分: ·存储管理器 ·虚映象解释器 ·基本例程 用汇编码写出的底层方法实现 4.1.4 Smalltalk文件系统与虚机
415 Smalltalk程序设计范型 程序设计在类的层次上进行,由类静态(于工作空间指 明向类发出消息)或动态(方法运行时)生成实例对象 每个对象当接受某消息并执行其方法的消息表达式时 都是在自向其它对象发消息
4.1.5 Smalltalk程序设计范型 • 程序设计在类的层次上进行,由类静态(于工作空间指 明向类发出消息)或动态(方法运行时)生成实例对象。 每个对象当接受某消息并执行其方法的消息表达式时 都是在自向其它对象发消息
411个简单的 Smalltalk程序 统计字母出现频率 lsf“定义了两个临时变量” s← Prompter prompt:‘ enter line′ default: s是 Prompter的实例,将关键字表达式的结果束定于s N意即输入一行字符串,若不输入,S为空串” f← Bag new.Nf是Bag的实例” s do: [ :cc isLetter ifTure: [f add: c asLowerCaseJ s在 Prompter中找方法do:的模式,若找不到,找 prompter的” “父类直到 Object.C是块变量,意从S中拿出某字符, isLetter′ 是消息模式,判C是否字符,若为真执行内块”。 “内块中f找add:消息模式,从Bag直至上层父类,找到先执” 行右边子表达式”。 c slower Case是单目表达式,同样要在 Prompter中找 asLowerCase匹配,也是 不成向上找。它返回是“第k个”小写字母,add:把它发送到对象f的第k个位置上 并与原数相加 ↑f N返回f中的值” 这个程序一共四句。如果掀鼠标使菜单项‘doit’工作并输入: Smalltalk is a programming language for developing soluions to both simple and complex problem. 则输出的f值是: 1124151517447336321 a bc d ef g h i k n。 r s t u
4.1.5.1 一个简单的Smalltalk程序 统计字母出现频率 |s f| “定义了两个临时变量” s←Prompter prompt: ‘enter line’ default: ‘’. “s是Prompter的实例,将关键字表达式的结果束定于s” “意即输入一行字符串,若不输入,S为空串” f←Bag new. “f是Bag的实例” s do:[:c|c isLetter ifTure:[f add:c asLowerCase]] “s在Prompter中找方法do:的模式,若找不到,找prompter的” “父类直到Object. C是块变量,意从S中拿出某字符,isLetter” “是消息模式,判C是否字符,若为真执行内块”。 “内块中f找add:消息模式,从Bag直至上层父类,找到先执” “行右边子表达式”。 c asLowerCase是单目表达式,同样要在Prompter中找asLowerCase匹配,也是 不成向上找。它返回是“第k个”小写字母,add:把它发送到对象f的第k个位置上 并与原数相加。 ↑f “返回f中的值”. 这个程序一共四句。如果掀鼠标使菜单项‘doit’工作并输入: “Smalltalk is a programming Language for developing soluions to both simple and complex problem.” 则输出的f值是: 7 1 1 2 4 1 5 1 5 1 7 4 4 7 3 3 6 3 2 1 a b c d e f g h i k l m n o p r s t u v