web-dev-qa-db-ja.com

Smalltalkの特別なところは何ですか?

すべての技術出版物、およびこのサイトでも、人々は常にOO言語と Smalltalk を比較しています。私の経験はJavaで:Smalltalksoそれを研究することが重要ですか?

68
Steve

Smalltalkは最も初期のオブジェクト指向(OO)言語の1つであり( SimulaEiffel など)、OO sense:

  • すべてがオブジェクトであり、オブジェクトはメッセージの送信によってのみ通信されます
  • プリミティブなし(ints、booleansなど)
  • 制御構造なし(forwhileifなど)。不可能に思えますが、それは本当です!
  • 静力学なし

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

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

また、Smalltalkには主流にならなかった他の要素があります。

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

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

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

現在、 ここには123の質問のみ があり、元々は作成者のAlan Kayが教育言語(つまり、子供向け)として意図していた言語についてです。もはやあまり使用されていません。それが使われていないと言っているわけではありません。たとえば、JPモルガンには、大規模なエキゾチックなデリバティブのリスク管理システムが記述されています。

88
oxbow_lakes

Smalltalkには多くの素晴らしい革新があります。今日、私たち全員が当たり前のこととして考えているものは次のとおりです。

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

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

... SUnitを使用するために必要なTDDを実際に理解するには。 JUnitは、テストが失敗した場所を表示するだけです。 SUnitを使用すると、テストが失敗した時点でデバッガーをクリックして実際のオブジェクトとその接続方法を確認できるため、デバッガーでコードがどのように失敗したかを確認して修正できます。

48
Dafydd Rees

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

  • 全体言語およびライブラリを理解できるほどシンプル

  • 論理的な極端にプッシュされた1つのアイデア(オブジェクトだけで十分です)を表示します

EverybodyにはSmalltalkから学ぶべきことがあります!

21
Norman Ramsey

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

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

18
Pavel Minaev

私は先月、Smalltalkの歴史と影響についての会議でプレゼンテーションに約5分間費やしました。 Smalltalkを使用した画像ベースの開発 を参照してください。今日のプログラマにとって、より外国的な概念の1つは、「イメージベース」の開発です。 DBMSやスプレッドシートなど、いくつかの良い例えがあります。

11
James Foster

はい。 海辺のワンクリック画像 をダウンロードし、 James Foster のチュートリアルで使用を開始すると、少なくとも以下を学習できます。

  • webアプリケーションの構築方法
  • デバッグの仕組み
8

Smalltalkは最初のものの1つであるだけでなく、今日でもOO言語設計。原始的なオブジェクト指向であり、古き良きSmalltalkよりも制限があります。Smalltalkは、普及したファーストクラスオブジェクト、ランタイムイントロスペクションの優れたサポート、ダックタイピングの非常に自然な使用、および非機能的な言語で見たよりもうまく機能しました。つまり、ネイティブ制御構造(if、whileなど)を持たないが、シームレスに機能する方法でオブジェクトシステムからそれらを作成できる言語について話しているということです。

最近の集中的なデスクトップアプリの開発にはSmalltalkをお勧めしません(実行可能な実装IMOではありません)が、もしOOアプリで使用できるいくつかのアイデアがあれば、Smalltalkは最適な場所です。

6
Chuck

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

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

それは一種の反直感的なものから始まりますが、それはあなたにOOプログラミングがどのように働くべきかについての非常に興味深く、深い見方を与えます...

6
Brian Postow

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

幸運を。

5
Bob Jarvis

Smalltalkに興味を持ち始めたばかりです。私の意見では、Smalltalkには特別な魅力的なことがいくつかあります。

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

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

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

4
techn0mad

Smalltalkのもう1つの点は、同窓生にケントベックとワードカニンガムが含まれていることです。 Smalltalkでの彼らの仕事は、 自動化されたxUnitテストソフトウェア設計パターンCRCカード 、およびXP/Agileなどに組み込まれた他のプラクティスを生み出しました。 Smalltalkは、現代のプログラミング環境に大きく貢献してきたと言えます。

3
APC

ほんの2つのコメント:

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

  2. Smalltalkは言語ではなく、同じ名前の言語を持つ環境ですが、ここでの「魔法」のほとんどは環境(画像)のおかげです。

2
Germán Arduino