在每个技术出版物以及该站点上,人们总是将OO语言与Smalltalk进行比较。我的Java经验是:Smalltalk是否如此重要以至于我应该学习它?
Answers:
Smalltalk是最早的面向对象(OO)语言之一(与Simula和Eiffel等其他语言一样),并且可以说在OO方面非常“纯”:
int
s,boolean
s等)for
,while
,if
等)。听起来不可能,但这是真的!它还开创了其他一些现在很常见的东西:
还有与Smalltalk相关的其他东西,它们并没有真正成为主流:
可以说Java集合API和apache-commons集合API受Smalltalk的影响很大。
我不会说您应该学习Smalltalk本身,但是熟悉这些功能的基础知识(现在已经以许多其他语言提供)肯定对您有利。
请注意,目前在这里只有123个关于该语言的问题,该语言最初是由其创建者艾伦·凯(Alan Kay)用作教育语言(即针对儿童的)。它不再被特别大量地使用。这并不是说它没有被使用。例如,摩根大通(JPMorgan)编写了一个庞大的外来衍生品风险管理系统。
Smalltalk具有许多出色的创新-今天我们都认为这是理所当然的事情,包括:
今天学习Smalltalk的最重要的原因是,极限编程和Scrum都是在Smalltalk社区中发明的……与在Java中所做的任何事情相比,您在Smalltalk中体验到的高度交互的编程风格更简单,更强大,更直接。或C#或Ruby ...,直到您尝试在Smalltalk中进行极限编程之前,您才能真正理解敏捷方法的效果。很少有其他语言(无论如何也没有主流语言)具有可比较的功能集。
...要真正了解什么是TDD,您需要使用SUnit。JUnit仅向您显示测试失败的地方。实际上,SUnit允许您在测试失败的位置单击调试器,查看实际对象及其连接方式,以便您可以在调试器中看到代码失败的原因并在那里进行修复。
是的,Smalltalk非常重要,您应该学习它。为什么?您可以以纯粹,简单的形式理解面向对象的编程。人们会忘记的是,Smalltalk-80“蓝皮书”只有大约90页专门针对该语言,而该语言就是这么简单。其他300页讨论了预定义的类层次结构,这是使用单一继承的基于类,面向对象的语言的设计杰作。与研究对象相比,您将对对象有更深入的了解(例如,类是对象,并且它们具有元类,以此类推,直到无穷大……除非结被小心地绑住以保持系统有限)。混合语言,例如Java或C ++。Smalltalk的重要性不仅在于其历史,还在于其简单性:
非常简单,因此您可以理解整个语言和库
显示一个想法(您所需要的全部)推到了逻辑极限
每个人都可以从Smalltalk中学习一些东西!
Smalltalk是最早的两种原始OOP语言之一,另一种是Simula-67。因此,有两个大家族-以方法调用为中心的静态类型模型(由Simula倡导(C ++,Java,C#都属于此处))和以消息传递为中心的动态类型模型(由Smalltalk倡导(Python,Ruby属于此处) )。
如今,Smalltalk本身并不特别重要-有些人仍在使用它来编写内容,但绝对不是主流。学习它可以使您对OOP的发展方式和原因有所了解。
在上个月的一次会议上,我花了大约5分钟介绍了Smalltalk的历史和影响。请参阅使用Smalltalk进行基于图像的开发。对于当今的程序员来说,更陌生的概念之一是“基于图像”的开发。有一些很好的类比,包括DBMS和电子表格。
是。下载海边的一键式图片,将其与James Foster的教程一起使用,您至少会学到:
我同意其他人。我不确定这是否重要本身,但是它很酷(恕我直言)。
我喜欢这种语言没有循环或条件。If-then-else是发送到布尔对象的消息。类型为True的对象做一件事,类型为False的对象做另一件事。(是,True和False是Boolean的子类型,分别具有一个值,分别为true和false)。
它开始有点违反直觉,但是确实为您提供了一个非常有趣的,深刻的,关于OO编程应如何工作的视图...
Smalltalk不仅是第一个,而且至今仍是面向对象语言设计的典范。后来出现的更流行的语言(C ++,Java甚至是Objective-C)都比原始的Smalltalk具有更原始的面向对象的语言和更严格的限制。Smalltalk具有无处不在的一流对象,对运行时自省的强大支持,非常自然地使用鸭子类型和闭包,这比我在任何非功能性语言中看到的效果都要好。我的意思是,我们所谈论的是一种语言,它没有本机控制结构(如果,等),但是能够以一种无缝工作的方式从其对象系统中创建它们。多么酷啊?
如今,我不建议Smalltalk进行任何密集型桌面应用程序开发(IMO只是一个不可行的实现),但是如果您想了解OO的含义,并想出一些想法可以在应用程序中使用,Smalltalk是一个不错的地方。
protected
和的关键字virtual
与Simula具有完全相同的含义。
如果您只知道一种面向对象的语言,则应该考虑学习第二,第三和第四种知识,以便对使用对象进行编程有更广泛的认识。学习Smalltalk会动动您的大脑,因为我们在其他语言中已经习惯了很多熟悉的概念(例如if-then-else,for(;;),while()等)。显然有等效的方法,但是Smalltalk的做事方式有所不同,学习不同的做事方式总是一个好主意。
祝好运。
我刚刚开始恢复对Smalltalk的兴趣,在我看来,Smalltalk有一些引人注目的特殊之处:
这些都不对不从事软件开发业务的人员特别有用。我的第一次接触是当我看到使用Smalltalk在PC上原型化的嵌入式设备的用户界面时。这样就可以快速修改和测试用户界面,并在完成后为嵌入式开发人员提供了一个“可执行规范”,该规范比任何文档都要精确得多。令我感到惊讶的是,我没有发现这种技术的使用频率比过去20年来的旅行频率更高。
使用Smalltalk作为原型工具是我的兴趣所在:我认为,针对一个新问题,可以在Smalltalk环境中非常快速,轻松地尝试和验证解决该问题的不同方法,一旦找到所需的解决方案,它就应该相对机械的,可以将其转换为Java / C ++ / C#等。事实上,对于重复的事情,很可能可以使用Smalltalk为某些其他目标语言的解决方案的一部分生成代码。
SmallTalk的另一件事是其校友包括Kent Beck和Ward Cunningham。他们与SmallTalk的合作产生了自动化的xUnit测试,软件设计模式,CRC卡以及进入XP / Agile的其他实践等。因此可以说,SmallTalk一直是现代编程领域的主要贡献者。