精华内容
参与话题
问答
  • Smalltalk 介绍

    2013-09-03 23:04:09
    http://www.aqee.net/why-i-love-smalltalk/ C,C++,Python等,这些算是传统的语言吧,我从这些语言上学会了基本的编程技术。这之后,又有四种语言,它们让我学到了一些新的...Smalltalk Lisp Erlang Has

    http://www.aqee.net/why-i-love-smalltalk/


    C,C++,Python等,这些算是传统的语言吧,我从这些语言上学会了基本的编程技术。这之后,又有四种语言,它们让我学到了一些新的东西。这些语言改变了我思考的模式,虽然我从来没有使用过它们,但它们都是绝对值得你学习一下的。它们是:

    • Smalltalk
    • Lisp
    • Erlang
    • Haskell

    你也许还会把Prolog加入这个列表中,但我没有学过Prolog。本文是关于Smalltalk这种语言的。

    我的目的并不是教大家怎么使用Smalltalk,而是向你展示一些Smalltalk能做到、而其它语言做不到的一些事情(声明:有些语言也能做到,它们都是Smalltalk的一些方言)。不用说,我需要向你先介绍一下这种语言的一些基本知识,之后我才能向你展示更有价值的东西,那么就开始吧,第一个程序:

    1 + 1

    很显然,计算的结果是2.如果你想把它存到一个变量里,这样做:

    m := 1 + 1

    句子都要以点号(句号)结尾,像这样:

    m := 1.
    m := m + 1

    Squeak——这是Smalltalk语言的一种版本实现——里,有一个对象叫做Transcript,你把消息发送给它,它能把消息显示到屏幕上。它很像一个Log窗口。你要这样去用它:

    Transcript show: 'Hello world'

    运行的效果会是这样:

    Squeak transcript showing the result of Transcript show: 'Hello World'

    Smalltalk的这种语法非常的独特。消息(message)——这在其它语言里也叫做“方法”——是show: (包括冒号),它接受一个参数。我们用下面的写法可以让这个句子运行10遍:

    10 timesRepeat: [
      Transcript show: 'Hello world'
    ]

    现在你开始能看出Smalltalk的独特之处了。我把消息timesRepeat:发送到对象“10”——一个Integer类。这N次的循环操作是由这个Integer来执行的,你认真想想,其实很有道理。

    第二个有趣的部分是代码段落(block),是在方括号里面的部分。你可能认为它跟其他种语言里的代码段落语法是同样的道理,比如Java的:

    for(int i=1; i<11; i++) {
      System.out.println("Hello world");
    }

    但你要是从Smalltalk的视角来看,你会发现它强大的多。它实际上是个闭包(closure)。看这段:

    t := [
      Transcript show: 'Hello world'
    ]

    现在,我有了一个叫做t的变量,它的类型是BlockClosure,通过这个变量,我可以做我想做的任何事情。如果我向它发送class消息,它会返回它的class类型:

    t class

    如果我向它发送value消息,它会运行,会在Transcript里留下“Hello World”字符:

    t value

    让我们多看几段程序。一个没有任何参数的消息:

    10 printString

    带有一个参数的消息:

    10 printStringBase: 2

    带有两个参数的消息:

    10 printStringBase: 2 nDigits: 10

    很可爱,不是吗?这个方法叫做printStringBase:nDigits:。我没在其它地方见过这样的语法;只有Objective-C是个例外,因为它是从Smalltalk承袭过来的。

    小玩意已经说的不少了,现在说点复杂点儿的东西。我们来创建一个类:

    Object subclass: #MyClass
           instanceVariableNames: ''
           classVariableNames: ''
           poolDictionaries: ''
           category: 'Pupeno'

    注意,一个类的创建是通过向其它类发送消息—包括名字和一些参数,告诉它我要继承它。这是一个消息,跟其它类型的方法调用一样。对象是类,类也是对象。Smalltalk的对象模式非常的优雅,但这是另外一个 话题。

    现在我们有了一个类,我们来创建一个方法,叫做greet:就在这个类里。

    greet: name
      "Greets the user named name"
    
      | message |
    
      message := 'Hello ', name.
      Transcript show: message.

    在方法定义里,首先我们给这个方法加了一个注释,然后是管道 (“|”)包着的本地变量,然后是方法的实现,我把”Hello“放到了变量message里,然后用逗号符把它和变量name连接起来。然后我把它发送到Transcript里。

    运行起来的结果像这样:

    MyClass greet method

    好了,我们来用一用它:

    m := MyClass new.
    m greet: 'Pupeno'

    为了创建一个类MyClass的对象,我们向这个类发送new消息。这个new并不是像Java里的关键字。new是一个方法。你可以看它的源代码,覆盖它,等等。不要动它,除非你十分清楚你在做什么。

    事实上,如果你想一下,你会发现我们没有看到任何的关键字。看看我们写过的这些代码,没有什么要记住的关键字!更重要的,目前为止,你已经基本的认识Smalltalk了。Smalltalk就是这些,但就像是一个小积木块,这些小块能让你搭建出你想要的任何东西。

    不错,就这些,我要说的就这些。我们看到了,Smalltalk里没有循环,它有整数类,这个类里实现了timesRepeat:消息,可以用来把事情重复执行N次。像这样用于循环操作的方法到处都是。

    你会问,有没有if这个关键字?Smalltalk里肯定有一个if关键字,不是吗?不,没有。你所谓的if语法在Smalltalk里可以用你刚才看到的类和消息传递的机制实现。为了好玩,我们来实现一个。

    我们从创建一个PBoolean类开始,然后两个继承它的类——PTrue 和 PFalse

    Object subclass: #PBoolean
           instanceVariableNames: ''
           classVariableNames: ''
           poolDictionaries: ''
           category: 'Pupeno'
    
    PBoolean subclass: #PTrue
           instanceVariableNames: ''
           classVariableNames: ''
           poolDictionaries: ''
           category: 'Pupeno'
    
    PBoolean subclass: #PFalse
           instanceVariableNames: ''
           classVariableNames: ''
           poolDictionaries: ''
           category: 'Pupeno'

    我们之前创建了一个类,MyClass,我们要给它定义一个equals:方法,它能返回true和false,也就是我们的PTrue 和 PFalse

    equals: other
      ^ PTrue new

    这个小帽子,^,是返回的意思。我写的是硬编码让它返回true。现在我们可以在程序来用它了:

    m1 := MyClass new.
    m2 := MyClass new.
    m1 equals: m2

    得到的是true。我们已经接近目标了,但还不是ifif应该是个什么样子?它的样子应该是这样:

    m1 := MyClass new.
    m2 := MyClass new.
    (m1 equals: m2) ifTrue: [
      Transcript show: 'They are equal'; cr
    ] else: [
      Transcript show: 'They are false'; cr
    ]

    估计你在想,怎么才能实现这样的效果。我在PTrue里加入了一个方法:

    ifTrue: do else: notdo
      ^ do value

    这个方法看上去是接受2个参数,但执行时接受第一个,忽略第二个。对于PFalse,正好相反:

    ifTrue: notdo else: do
      ^ do value

    这就可以了。一个可以用的if!如果让我说,我觉得这真的很神奇。如果你去检查Squeak了的代码,你会发现它里面的if就是这样实现的:

    True's ifTrue:ifFalse:

    如果你使用的编程语言能允许你创建像if条件这样的基本功能,那它就可以让你创建任何你想要的东西。


    展开全文
  • smalltalk与面向对象语言及发展史。

    千次阅读 2013-03-23 10:34:20
    Simula 面对对象语言的鼻祖。1967年5月20日,在挪威奥斯陆郊外的小镇莉沙布举行的IFIP TC-2 工作会议上,挪威科学家Ole-Johan Dahl和Kristen Nygaard正式发布了Simula 67语言。Simula 67被认为是最早的面向对象程序...

    Simula 面对对象语言的鼻祖。

    1967年5月20日,在挪威奥斯陆郊外的小镇莉沙布举行的IFIP TC-2 工作会议上,挪威科学家Ole-Johan Dahl和Kristen Nygaard正式发布了Simula 67语言。Simula 67被认为是最早的面向对象程序设计语言,它引入了所有后来面向对象程序设计语言所遵循的基础概念:对象、类、继承。之后,在1968年2月形成了Simula 67的正式文本。(模拟语言 :模拟人类语言的意思吗?不晓得??)
    20世纪60年代开发的Simula 67 ,是面向对象语言的鼻祖。 它首次提出了对象的概念
    挪威科学家Ole-Johan Dahl,Kristen Nygaard
    也是在1968年,荷兰教授E.W.Dijkstra提出了“GOTO语句是有害的”观点,指出程序的质量与程序中所包含的GOTO语句的数量成反比,认为应该在一切高级语言中取消GOTO语句。这一观点在计算机学术界激起了强烈的反响,引发了一场长达数年的广泛的论战,其直接结果是结构化程序设计方法的产生。
    相信当时没有任何人预见到当年发生的这两件事对后来计算机技术,特别是软件技术所产生的深远影响。尽管这两种方法的思想差异巨大,但是多年以后,无论是Ole-Johan Dahl和Kristen Nygaard,还是E.W.Dijkstra,都因其在这一年所取得的成就,获得了计算机界的诺贝尔奖——图灵奖。 为了纪念挪威的这两位科学家的卓越贡献,在挪威研究基金会(Norwegian Research Council)的筹划下,Simula研究所 (Simula Research Laboratory)于2001年1月正式成立。
    随着计算机技术的迅猛发展,硬件成本不断降低,而软件成本却不断增加,因此,如何缩短软件生产周期和提高维护效率,研制出高质量的软件产品成为一个重要课题。

    Smalltalk:面向对象语言思想

    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,让你更加了解面向对象。
    我感觉Delphi也学习了很多smalltalk的思想。Objective -c ,Delphi,java而且比较接近smalltalk
    
    
    
    
    ===============================================================================

    Smalltalk 超简明教程2707人阅读

    http://wenku.baidu.com/view/187ca0717fd5360cba1adbd8.html
    

    Smalltalk开发环境 Pharo

    http://www.oschina.net/p/pharo
    
    
    
    展开全文
  • Smalltalk入门级教程

    千次阅读 2019-03-03 20:12:01
    1.了解Smalltalk 官方网站:www.smalltalk.org 还有一个也不错:http://www.whysmalltalk.com 在上面可以大概了解一下Smalltalk的新闻历史以及相关资讯 2.获得Smalltalk IDE安装包 可以选择的很多,不过看下来好像也...

    1.了解Smalltalk
    官方网站:www.smalltalk.org
    还有一个也不错:http://www.whysmalltalk.com
    在上面可以大概了解一下Smalltalk的新闻历史以及相关资讯

    2.获得Smalltalk IDE安装包
    可以选择的很多,不过看下来好像也就Squark和VisualWorks比较合适
    我先下载了Squark,不过实在太卡通,没用
    我还是选择了VisualWorks

    下载地址:
    http://smalltalk.cincom.com/downloads/index.ssp?content=smalltalk
    要先注册,然后才能下载,都不难的
    431M的安装包,:)还是蛮大的

    3.安装
    相信大家都没问题的,不多说了

    4.教程
    VW7打开以后会有两个窗口,一个是控制台,title是VisualWorks NonCommercial,另一个是title为Welcome to VisualWorks的WorkSpace窗口,将Tab切换到Introduction,这是一篇不错的教程Introduction to VisualWorks Smalltalk,花些时间应该很容易入门的。

    要是连英文都不想看的话,汗!
    我就好人做到底,准备花些时间来翻译个简单的入门教程
    --------------------- 
    作者:h705c 
    来源:CSDN 
    原文:https://blog.csdn.net/nonocast/article/details/332560 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • Smalltalk pdf 电子书

    2019-01-15 10:35:01
    简单实用的smalltalk教程,pdf格式,有代码有实例,分章节讲解
  • 什么是Smalltalk

    2010-02-08 23:47:00
     Smalltalk和许多程序设计语言不同,它不仅仅是一门语言。下面我们从几个不同的角度来解释Smalltalk。一种面向对象的程序设计语言:它是一种面向对象的语言,包含语言的语法和语义。一些编译器可以通过Smalltalk源...

    引用地址:http://www.smalltalk.org.cn/language/whatissmalltalk.html

     

    Smalltalk和许多程序设计语言不同,它不仅仅是一门语言。下面我们从几个不同的角度来解释Smalltalk。

    • 一种面向对象的程序设计语言:它是一种面向对象的语言,包含语言的语法和语义。一些编译器可以通过Smalltalk源程序产生可执行文件。这些编译器通常产生一种能在虚拟机上运行的二进制代码。Smalltalk语言本身非常精炼。
    • 一种程序设计环境:这里指的是一种提供许多对象 的系统,而不是某种特殊的开发环境。和许多语言不同(包括C++ ),Smalltalk附带有一个巨大的、相当标准的类库。这些 使得开发Smalltalk程序的效率非常高。在其它语言(例如AdaCPascal )中通常被作为语言的一部分的功能(例如条件判断,循环等),在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)系统以方便交互式应用软件的开发。

    程序实例

    数学计算

    <code>(15 * 19) + (37 squared)</code>

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

    展开全文
  • Smalltalk的辉煌时代

    2020-02-23 14:17:46
    Smalltalk和其创作人alan kay都是IT界的一个传奇,值得后人了解和称赞。什么是Smalltalk,它取得了哪些成就呢?估计你在百度百科可以搜到,但是不够详细,不够丰满。 下面是一篇来自外国网友Richard Eng关于“what ...
  • Smalltalk简史

    千次阅读 2012-10-10 12:26:15
    Smalltalk 的根源可回溯到七十年代早期,那时在 Xerox Palo Alto 研究中心 (Parc) 的 Dynabook 计划的环境下探索出的许多想法被结合到 Smalltalk/ObjectWorks 编程系统中。这个 "Dynabook" 基于一个梦想:成人和儿童...
  • Smalltalk

    2019-08-10 07:12:59
    Smalltalk中所有的东西都是对象,或者应该被当作对象处理。  例如下面的表达式:  2 + 3  应当被理解为:向对象2发送消息+,参数为对象3。  (15 * 19) + (37 squared)  可以理解为:向15发送...
  • 初次使用Smalltalk

    千次阅读 2014-04-25 15:24:16
    标题为何不是’初次学习Smalltalk“呢?因为有这样一个公式: Smalltalk=theLanguage(语言)+theClassLibrary(类库)+theDevelopmentEnvironment(开发环境) 这里说的便是作为”theDevelopmentEnvironment“的...
  • smalltalk

    千次阅读 2012-03-20 14:57:46
      ... 如果我们能够重回1980年, 回望整个计算机编程语言领域, 特别是工业界编程, 打死也不会想到日后 Java 这种无名小卒, 以及 C++ 这个又面向对象又支持过程的双面间谍能够红得发紫. 当年最流行的语言,
  • 通过Smalltalk回到未来

    2018-03-06 07:33:07
    小号 oftware发展,在古代技术陷入了几十年。 今天,我们创建软件的方式与1960年代和1970年代的软件方式并没有太大不同。 那时,我们使用了文本编程语言,例如FORTRAN,LISP,COBOL,BASIC,Pascal和C,其程序是使用...
  • Smalltalk 语言的地位为何一落千丈?

    千次阅读 2020-06-14 13:00:00
    【CSDN编者按】“我们有这么多珍贵、优雅、给了我许多快乐的语法,为什么你们还在使用那些劣质的语法?你们怎么能这么盲目、这么愚蠢?”这类争论永远没有胜者,建议不要尝试。—— Alan ...
  • smalltalk 小号 oftware发展,在古代技术陷入了几十年。 今天,我们创建软件的方式与1960年代和1970年代的软件方式并没有太大不同。 那时,我们使用了文本编程语言,例如FORTRAN,LISP,COBOL,BASIC,Pascal和C...
  • Smalltalk语言

    万次阅读 2015-05-19 16:46:01
    Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境 (IDE)。 Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,  主要有:  Objective-C,Java 等。 90年代...
  • This classic book is the definitive real-world style guide for better Smalltalk programming. This author presents a set of patterns that organize all the informal experience successful Smalltalk ...
  • Smalltalk的变量

    千次阅读 2004-10-31 18:18:00
    ST80的变量可以分为两大类:私有变量和公有变量。私有变量包括实例变量和临时变量两种。实例变量允许实例的所有函数(方法)访问,临时变量则是某一个函数的私有变量。一个类的子类的实例也可以访问实例变量。...
  • Pharo是一个纯粹的面向对象编程语言和强大的开发环境,目标是提供一个简洁新颖的开源Smalltalk开发环境。现已提供最新版本的下载。 Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发...
  • SmallTalk教程

    2013-12-05 21:12:17
    简单实用的smalltalk教程,有代码有实例,系统详细
  • 如何阅读Smalltalk程序

    千次阅读 2018-02-04 22:33:59
    本文简单介绍了Smalltalk语言的一些语法规则,Smalltalk语言中使用MVC模式来构建用户界面,即MVC模式是起源于Smalltalk语言的,不过Smalltalk的中文资料太少,这篇翻译文章也是为我自己将要写的续集文章——浅谈MVC...
  • 去迅雷搜素一下,输入visualworks ,下载一个 CST 2007 NC VisualWorks 7.5 (560 MB)。安装很简单,按照提示一步一步搞定即可,基本不用改任何设置。我是今天刚开始学习,都是英文资料,我只是按照字面意思翻译一下...
  • smalltalkKyle Brown, IBM Fellow, CTO Cloud Architecture, IBM Cloud and Cognitive SoftwareKyle Brown,IBM研究员,CTO云架构,IBM Cloud和认知软件 The last year has not been kind to a book that I believe ...
  • C++和Java程序员的Smalltalk入门收藏

    千次阅读 2008-09-18 14:02:00
    C++和Java程序员的Smalltalk入门收藏 新一篇: 原来可以用中文写代码,可以编译 | 旧一篇: 由一个Bug看ifstream中read()与readsome()的区别 function StorePage(){d=document;t=d.selection?(d.selection.type!=...
  • C++和Java程序员的Smalltalk入门

    千次阅读 2004-12-14 11:27:00
    原文标题:I Can Read C++ and Java But I Can’t Read Smalltalk原文作者:Wilf LaLonde原文链接:http://www.eli.sdsu.edu/courses/spring01/cs635/readingSmalltalk.pdf 简介 有很多人告诉我他很熟悉C++或Java...
  • smalltalk 上手

    千次阅读 2005-03-27 15:13:00
    在www.smalltalk.org上晃了一圈,了解一下情况,然后下载了Squeak和VisualWorks,开始还对Squeak有些好感,比较小巧,对它的评价不错,不过打开才发现Squeak的界面也太花哨了吧,花哨的让我有点没方向,大概是我太笨...
  • Design Patterns in Smalltalk MVC在Smalltalk的MVC设计模式   The Model/View/Controller (MVC) triad ofclasses [KP88] is used to build user interfaces in Smalltalk-80. Looking at thedesign patterns ...
  • Smalltalk 是19世纪70年代由 Alan Kay 设计的,第一个以面向对象(Object-Orientation)为主要范式的编程语言 1。Smalltalk 具有大量首创的特性,深刻影响了其之后的编程语言、开发环境和软件过程。 由 Smalltalk ...
  • BUPT OJ144 SmallTalk

    2014-03-15 16:47:05
    Smalltalk is an object-oriented, dynamically typed, reflective programming language. Smalltalk was created as the language to underpin the "new world" of computing exemplified by "human–computer
  • 我能读懂C++和Java但是读不懂Smalltalk

    千次阅读 2015-06-20 07:51:57
    译序 初学一样东西容易拿了一片树叶,却掩了整座泰山。面向对象编程是现在业界事实上的主流。自打接触面向对象编程那天起,就不断的见到或听到绝大多数人对它的溢美;言必曰对象,行定从OO。更有面向对象的狂热分子...

空空如也

1 2 3 4 5 ... 20
收藏数 24,149
精华内容 9,659
关键字:

Smalltalk