70

すべての技術出版物で、またこのサイトでも、人々は常に OO 言語をSmalltalkと比較しています。私の経験は Java です。Smalltalk はそれほど重要なので、勉強する必要がありますか?

4

12 に答える 12

91

Smalltalk は初期のオブジェクト指向 (OO) 言語 ( SimulaEiffelなど) の 1 つであり、OO の意味で非常に「純粋」であると言えます。

  • すべてがオブジェクトであり、オブジェクトはメッセージの送信を介してのみ通信されます
  • プリミティブなし ( ints、booleans などなし)
  • 制御構造なし (no forwhileなどif)。不可能に聞こえますが、それは本当です!
  • スタティックなし

また、他のいくつかの、現在一般的なものを開拓しました:

  • 仮想マシン (および JIT コンパイル)
  • 検査によるデバッグ
  • 「ホットスワップ」実行コード
  • 最新の IDE
  • 閉鎖
  • ダックタイピング
  • UI のモデル ビュー コントローラー (MVC) アーキテクチャ
  • テスト駆動開発 (TDD) とアジャイル方法論

そして、実際には主流にはならなかった Smalltalk に関連するものは他にもあります。

  • ファイルベースではなく「イメージ」ベースのシステム。
  • オブジェクト指向データベース

Java コレクション API とapache-commons コレクションAPI は、Smalltalk の影響を強く受けていると言っても過言ではありません。

Smalltalk自体を学ぶべきだとは言いませんが、これらの機能(現在は他の多くの言語に存在する)の基礎に精通していることは確かに有利です。

現在、この言語に関する質問は 123 しかないことに注意してください。この言語は、当初、作成者の Alan Kay によって教育言語 (つまり、子供向け) として意図されていました。特に頻繁に使用されることはなくなりました。使っていないというわけではありません。たとえば、JP モルガンには、大規模なエキゾチック デリバティブのリスク管理システムが組み込まれています。

于 2009-11-30T17:48:23.377 に答える
49

Smalltalk には多くの素晴らしいイノベーションがあります。

  • 初めてのIDEである
  • マウスを使用した GUI のプログラムによるサポートの提供Smalltalk GUI プログラミングを学習すれば、MVC を正しく理解できたことになります。
  • 非常にうまく連携する少数の強力なアイデアから構築されている
  • Smalltalkのやり方は、予期しない動作でクラッシュすることではなく、適応することです。それを理解していないオブジェクトにメッセージを送信すると、デバッガーが起動し、そのメソッドを作成するように促します...そのため、インクリメンタル開発に優れたサポートを提供します。
  • IDE、作成中のアプリ、およびデータはすべて同じシステムの一部であるため、独自のツールを作成し、インストルメンテーションをより簡単にデバッグできます。
  • SmalltalkのTDD ツールセットは、他のどの言語よりも優れています (以下を参照)。
  • Squeak Smalltalk には、かなりの最先端の設計研究があります。
    • モーフィック UI - 「ライブネス」の概念に慣れることができます
    • 海辺の Web フレームワーク -継続サーバーとは何か、そしてそれがどのように根本的に異なるかを学びます
    • Squeak はOLPC ソフトウェア (子供 1 人につき 1 台のラップトップ) プロジェクトと強いつながりがあり、世界に大きな影響を与える可能性があります。
    • 「特性」とは何かを調べてください...
    • Open Croquet と呼ばれる過激な 3D 没入型環境で遊んでください。
  • Smalltalk はより小さく、より単純で、より一貫性のある言語であるため、独自の組み込み環境により、OOP の教育を始めるのに混乱が少なくなります。この道をたどる人は、主流言語の面倒な矛盾なしに基本的な OOP を学ぶことができるため、Java、Ruby、および C# の優れたプログラマーになることになります。
  • 一部の商用 Smalltalk は、驚くべきマルチノード分散 OO データベース環境を備えています。宝石について考えています。
  • Model-View-Controller と Model-View-Presenter の違いを知りたい- Dolphin Smalltalk を見てください...

今日 Smalltalk を学ぶ最も重要な理由は、エクストリーム プログラミングとスクラムの両方が Smalltalk コミュニティで発明されたということです...そして、Smalltalk で体験する非常にインタラクティブなプログラミング スタイルは、Java でできる何よりもシンプルで、強力で、直接的です。 C# や Ruby など、アジャイル メソッドがどれほどうまく機能するかは、Smalltalk で極端なプログラミングを試してみないとわかりません。他のほとんどの言語 (メインストリームの言語はありません) には、同等の機能セットがあります。

... TDD が何であるかを本当に理解するには、SUnit を使用する必要があります。JUnit は、テストが失敗した場所を表示するだけです。SUnit では実際に、テストが失敗したポイントでデバッガーをクリックして、実際のオブジェクトとそれらがどのように接続されているかを確認できるため、デバッガーでコードがどのように失敗したかを確認し、その場で修正することができます。

于 2009-11-30T18:54:29.190 に答える
22

はい、Smalltalk はとても重要なので、勉強する必要があります。なんで?オブジェクト指向プログラミングを純粋で単純な形で理解できます。人々が忘れているのは、Smalltalk-80 の「ブルー ブック」には言語専用のページが約 90 ページしかないということです。言語は単純です。他の 300 ページでは、定義済みのクラス階層について説明しています。これは、単一継承を使用するクラスベースのオブジェクト指向言語の設計の傑作です。オブジェクトについての深い理解が得られます (たとえば、クラスはオブジェクトであり、それらにはメタクラスがあり、無限に続きます... ただし、システムを有限に保つために結び目が慎重に結ばれていることを除きます)。 Java や C++ などのハイブリッド言語。Smalltalk が重要なのは、その歴史だけでなく、その単純さのためです。

  • 十分に単純なので、言語全体ライブラリを理解できます

  • 1 つのアイデア (必要なのはオブジェクトだけ) を論理的に極限まで押し上げたものを示します

Smalltalk から学ぶべきことは誰にでもあります。

于 2009-12-01T01:28:07.083 に答える
19

Smalltalk は最初の 2 つのオリジナル OOP 言語の 1 つで、もう 1 つは Simula-67 です。その結果、2 つの大きなファミリがあります。Simula によって開拓されたメソッド呼び出しを中心とした静的型付けモデル (C++、Java、C# はすべてここに属します) と、Smalltalk (Python、Ruby はここに属します) によって開拓されたメッセージ パッシングを中心とする動的型付けモデルです。 )。

今日、Smalltalk 自体はそれほど重要ではありません。まだそれを使って何かを書いている人もいますが、主流ではないことは間違いありません。ただし、それを学ぶことで、OOP がどのように、そしてなぜ進化したのかについての洞察が得られます。

于 2009-11-30T17:47:25.783 に答える
12

私は先月開催された会議で、Smalltalk の歴史と影響力に関するプレゼンテーションに 5 分ほど費やしました。Smalltalk を使用したイメージベースの開発 を参照してください。今日のプログラマーにとってより異質な概念の 1 つは、「イメージベース」の開発です。DBMS やスプレッドシートなど、いくつかの良い類似点があります。

于 2009-12-03T00:03:44.063 に答える
9

はい。seaside one-click imageをダウンロードし、 James Fosterのチュートリアルで使用を開始すると、少なくとも次のことを学習できます。

  • Web アプリケーションの構築方法
  • デバッグがどのように機能するか
于 2009-12-02T23:10:43.217 に答える
6

私は他の人に同意します。それ自体が重要かどうかはわかりませんが、COOL (imho) です。

この言語にはループや条件がないことが気に入っています。If-then-else は、ブール オブジェクトに送信されるメッセージです。タイプ True のオブジェクトは 1 つのことを行い、タイプ False のオブジェクトは別のことを行います。(はい、True と False は Boolean のサブタイプで、それぞれ単一の値、それぞれ true と false を持ちます)。

最初は直感に反するようなものですが、オブジェクト指向プログラミングがどのように機能するかについて、非常に興味深く、深い見解を与えてくれます...

于 2009-11-30T18:54:07.363 に答える
5

私は Smalltalk への関心を復活させ始めたところです。私の意見では、Smalltalk には特別な魅力的な点がいくつかあります。

  • 生産性の高い開発環境
  • アジャイル/エクストリーム プログラミング方法論の組み込みサポート
  • 「純粋な」オブジェクト モデル
  • 使いやすいグラフィックス フレームワーク

これらのいずれも、ソフトウェア開発ビジネスに携わっていない人々にとって特に役立つものではありません。私が最初に触れたのは、Smalltalk を使用して PC 上でプロトタイプを作成した組み込みデバイスのユーザー インターフェイスを見たときでした。これにより、ユーザー インターフェイスの変更とテストを非常に迅速に行うことができ、完成すると、組み込み開発者に、どのドキュメントよりもはるかに正確な「実行可能な仕様」が提供されました。過去 20 年間の旅行で観察したよりもはるかに頻繁にこの手法が使用されているのを見たことがないことに驚いています。

Smalltalk をプロトタイピング ツールとして使用することに興味があります。新しい問題が与えられた場合、それを解決するためのさまざまなアプローチを試して、Smalltalk 環境で非常に迅速かつ簡単に検証できると思います。 Java/C++/C# などに機械的に変換します。実際、反復的な種類のものについては、Smalltalk を使用して、ソリューションの一部のコードを他のターゲット言語で生成することが十分に可能かもしれません。

于 2010-04-02T22:29:21.930 に答える
5

オブジェクト指向言語を 1 つしか知らない場合は、オブジェクトを使ったプログラミングについてより広い視野を得るために、2 つ目、3 つ目、4 つ目を学習することを検討してください。Smalltalk を学ぶと、他の言語で慣れ親しんだ多くの概念 (if-then-else、for(;;)、while() など) が Smalltalk には存在しないため、頭脳が鍛えられます。もちろん同等のものはありますが、Smalltalk のやり方は異なります。物事を行うためのさまざまな方法について学ぶことは、常に良い考えです。

幸運を。

于 2009-12-03T12:30:31.820 に答える
3

SmallTalkのもう1つの点は、卒業生にKentBeckとWardCunninghamが含まれていることです。SmallTalkでの彼らの仕事は、自動化されたxUnitテストソフトウェアデザインパターンCRCカード、およびXP / Agileなどに組み込まれたその他のプラクティスを生み出しました。したがって、SmallTalkは現代のプログラミング環境に大きく貢献していると言えます。

于 2009-12-01T07:42:31.383 に答える
3

2 つのコメントのみ:

  1. Smalltalk はオブジェクト「指向」ではなく、実際のオブジェクトであり、環境内のオブジェクトとメッセージだけです。

  2. Smalltalk は言語ではなく、言語 (同名) を持つ環境ですが、ここでの "魔法" のほとんどは環境 (イメージ) のおかげです。

于 2009-12-05T23:11:04.423 に答える