您的位置:知识库 » 编程语言

Smalltalk 简介

发布时间: 2011-06-04 10:06  阅读: 1185 次  推荐: 0   [收藏]  

  Smalltalk 被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境 (IDE)。由Alan Kay, Dan Ingalls, Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC开发。Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:Objective-C,Actor, Java 和Ruby等。90年代的许多软件开发思想得益于Smalltalk,例如Design Patterns, Extreme Programming(XP)和Refactoring等。

  什么是 Smalltalk ?

  Smalltalk和许多程序设计语言不同,它不仅仅是一门语言。

  一种面向对象的程序设计语言:它是一种面向对象的语言,包含语言的语法和语义。一些编译器可以通过Smalltalk源程序产生可执行文件。这些编译器通常产生一种能在虚拟机上运行的二进制代码。Smalltalk语言本身非常精炼。

  一种程序设计环境:这里指的是一种提供许多对象的系统,而不是某种特殊的开发环境。和许多语言不同(包括C++),Smalltalk附带有一个巨大的、相当标准的类库。这些类使得开发Smalltalk程序的效率非常高。在其它语言(例如 Ada , C 和 Pascal )中通常被作为语言的一部分的功能(例如条件判断,循环等),在Smalltalk由特定的类提供。

   一个应用开发环境(ADE):由于Smalltalk的历史原因,它具有一个非常优秀的高度集成、开放的应用开发环境。由于开发环境中的浏览器、监视器以及调试器都由同样的源程序衍生出来的,不同的版本之间也具有相当好的兼容性。此外,这些工具的源程序都可以在ADE直接存取。

  Smalltalk中的对象

  在Smalltalk中所有的东西都是对象,或者应该被当作对象处理。

  例如下面的表达式:

  2 + 3

  应当被理解为:向对象2发送消息+,参数为对象3。

  纯面向对象使得Smalltalk在语言结构方面有许多与其他语言不同的特点,例如在Smalltalk语言中没有条件语句,取而代之的是一些发送给对象true或者false的消息,因此它们不属于语言部分,而属于Smalltalk的类库;也没有循环重复语句(C语言中的for while),Smalltalk用向数字对象或块对象发送消息来实现重复执行。

  Smalltalk的历史

  最早的Smalltalk原型由Alan Kay于70年代初提出。类(来自Simula-67)、海龟绘图(来自MIT的 LOGO )以及图形界面等概念的有机组合,构成了Smalltalk的最初的蓝图。

  在1971年到1975年之间,Kay在Xerox PARC的小组设计并实现了第一个真正的Smalltalk语言系统。这个系统具有以下几个技术创新:

  语言完全基于Simula的类和消息的概念。

  语言没有固定的语法,语法分析由类本身完成。

  开发环境的革新相当迅速。

  虽然当时的位图显示器十分昂贵,但是Kay却说服了PARC让他使用这些位图显示器,这使得Kay和他的小组能够实现不同大小和字体的文字,使用多窗口环境,以及一些对图像处理的高端支持。

  1975-76年间,Kay小组认识到应当对执行效率和规模进行优化。于是他们在许多重要方面重新设计了Smalltalk系统,在语言上:

  引入了继承和子类的概念。

  确定了语言的语法,这使得编译器能够产生高效、可执行、精炼的二进制代码。

  Larry Tesler设计了浏览器,这极大地提高了Smalltalk程序员的编程效率。

  前述的所有Smalltalk系统都是在特殊的硬件上实现的,直到1977-78年,Bruce Horn 和 Ted Kaehler 把Smalltalk-76移植到由Intel 8086处理器和自定显示器所组成的硬件环境(被称为NoteTaker)上。虽然这种硬件环境只生产了10台,但是它证明了在通常的处理器上实现Smalltalk的可能性。

  Smalltalk-80

  在1979-80年,部分受NoteTaker项目的影响,Smalltalk小组的注意力转移到Smalltalk的销售可行性上。小组设计并实现了新一代的Smalltalk系统,这次修改的目标着重于在标准硬件上的移植性等方面,包括:

  采取 ASCII 码集,摒弃了原先在Smalltalk-72和-76中使用的特殊字符。

  取消了原始(primitive)方法直接存取内存的能力。取而代之的是引入一系列的原始方法提供相应的功能。

  引入了元类的概念。

  引入MVC(Model-View-Controller)系统以方便交互式应用软件的开发。

  程序实例

  数学计算:

  (15 * 19) + (37 squared)

  可以理解为:向15发送消息'*',参数为19;向37发送消息squared; 最后向15*19的结果发送消息'+',参数为37 squared的结果。

  Smalltalk 的五大基本特征

  Alan Kay 总结了Smalltalk 的五大基本特征。这是第一种成功的面向对象程序设计语言,也是Java 的基础语言。通过这些特征,我们可理解“纯粹”的面向对象程序设计方法是什么样的:

  (1) 所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。理论上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象。

  (2) 程序是一大堆对象的组合。通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个对象“发送一条消息”。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程或函数。

  (3) 每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。

  (4) 每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。一个类最重要的特征就是“能将什么消息发给它?”。

  (5) 同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法,大家不久便能理解。由于类型为“圆”(Circle)的一个对象也属于类型为“形状”(Shape)的一个对象,所以一个圆完全能接收形状消息。这意味着可让程序代码统一指挥“形状”,令其自动控制所有符合“形状”描述的对象,其中自然包括“圆”。这一特性称为对象的“可替换性”,是OOP最重要的概念之一。

0
0
标签:Smalltalk

编程语言热门文章

    编程语言最新文章

      最新新闻

        热门新闻