用語集(ひっかからないように)

●名前と束縛:
すべてのオブジェクトは「new」とかのメッセージを受けると、そこでインスタンスというオブジェクトを生む。
単純に生まれたままだと、そのオブジェクトにアクセスする手立てがないばかりか、そのうちガベージコレクションに刈り取られてしまう。
これをちゃんと変数にあててやる、つまり名前をつけてやると、その名前でアクセスできるようになり、その名前が知られている環境がなくならない限り生きていることができる。
この名前をつけてあげることを、変数に「束縛する」という。

●dependency:
あるオブジェクトが、別のオブジェクトに依存して動くようにするしくみ。因果関係というか。。。
「風が吹くと桶屋がもうかる」ではないかと思えるほどに、まったく別のオブジェクトに自動的にメッセージを送ってくれる。
具体的にはMVCのモデル(M)のオブジェクトになにか変化があったとき、モデルのオブジェクトに「変更しましたよ」とメッセージを送ると、あらかじめ「依存しているオブジェクト」として登録してあるオブジェクト(だいたいビュー(V)のオブジェクト)に「更新されましたよ」とメッセージがくる。
直接ハードコーディングでモデルからビューに伝えないところがミソ。ビューは簡単に差し替え可能なのだ。依存しているオブジェクトも簡単に増減できる。
プログラムが完成してからのカスタマイズにも強いけど、まだプログラム仕様がしっかりしていない段階でのプロトタイピングでも威力を発揮する。
Smalltalkにはこういう仕組みが“一貫して”整っているのが最大の魅力だ。

●サブクラス:
あるクラス(親のクラス)の一種とか、ちょっと具体的になったクラスをサブクラスとして、親のクラスの差分として定義する。
人(親クラス)>>日本人(サブクラス)といった感じ。動物や植物の分類と同じしくみ。
ニホンザルもゴリラも猿の一種。ゴリラは力持ちで100kgの岩を上げられる。ニホンザルは温泉に入れる。そんなかんじ。
この親のクラスを「スーパークラス」と呼ぶ。
これが、親のクラスの変数とかも継承することから、ある環境の部分−全体として定義してしまうことがある。ついつい。。
クラスAとクラスBがともに参照する変数のために、スーパークラスを作ってしまったら、そりゃ間違い。

●インスタンス:
クラスとして静的に今存在してるオブジェクトについて、実際に動いて歩く、変化するオブジェクトとして、そのクラスの多様性を示すもの。
たとえば、日本人(クラス)のインスタンスは、小林さん、佐藤さん、鈴木さんといった感じ。日本人に共通する道徳観とかは同じだけど、個体として名前も違うし、年齢や性別も違う。

●Collectionオブジェクト:
Modula-2では要素型といったか。。列挙型といったか。。
オブジェクトをまとめて扱えるオブジェクト。Cとかではポインタの配列にあたるか。ポインタだから配列の要素それぞれは、あのオブジェクトを指していたり、このオブジェクトを指していたりする。
まったく別のオブジェクトのインスタンスも、はたまたクラスも要素にできる。
さらに拡張されている“SortedCollection”だと、自分で決めた序列(インスタンス生成時に指定できる)にちゃんと並び替えてくれる。

●senderとimplementor:
選んだメソッドと同じ名前のメッセージをどのメソッドが発信しているか、全オブジェクト(システムも含む)のメソッドから探して、一覧にしてくれるのが“sender”。
一覧の個数がそのままポリモーフィズムの個数だ。おんなじメッセージを送っても、それぞれのオブジェクトごとに振る舞いが違う。でもこのオブジェクトだったら「同じこのメッセージをおくったら、こうなるだろう」みたいに予測できるものでなくちゃ意味がない。
オブジェクトの名前を決めるのも難しいけど、メソッドの名前、受けられるメッセージの命名も難しい。
で、そのメッセージを実際に発信しているその場所(どのメソッドの中からなのか)を調べて一覧にしてくれるのが“implementor”。
いくらメソッドを用意しておいても、誰にも使われないんじゃ無駄なサービス。このimplementorを、青木さんが「人気」とうまく言い表している。

●Version:
Smalltalkでは、修正履歴をチェンジセットとしてずーっととってある。それこそすごい前から。
しかも、チェンジセットはいくつかのクラスをまとめて、別のファイルにファイルアウトできる。
これを使って配布用のファイルを作る。何人かで共同で開発するときも、プログラムの共有に利用できる。
ただこれのすごいところは、ずっと前からとってある過去のバージョンに戻すことが簡単にできるところ。クラス間の関係を考え直し他結果、しばらく前にもどしたい、なんてときに大いに役に立つ。
これをメソッド単位でブラウザ上からビジュアルにその履歴を見れる。これが「Version」。
実際の様子はこんな感じ↓

●ワークスペース:
いろいろとオブジェクト式をここで試すことができる。
変数も特に宣言しなくても、どんどん使える。ほんとに作業スペース。

●トランスクリプト:
ちょっとしたストリームの出力先に使える。
デバッグライトとかの出力先に便利。コンソールみたいなもの。
前に使ってたSmalltalkAgentではこれが、Smalltalk-80系とちょっと違ってて、とっつきづらかった。

●ファイルイン:
あるクラスや、プロジェクト(クラスのまとまり)をとっておいた「ファイルイン」を読み込むことで、Smalltalkを止めることなく、オブジェクト群を再生できる。

●チェンジセット:
Smalltalkはコードを書いて“accept”とやる度にコンパイルと同時に、その履歴をチェンジセットに残す。
中身はテキストファイル。何をしてきたかが克明に残されている。
しかも、クラスを選んでチェンジセットを自分で切り出すこともできて、これを保存しておけば、まったく新しい環境にそのチェンジセットで保存しておいた環境を再現できる。
たくさんの人が同時に開発するときにも、このチェンジセットをマージして環境を一つにするらしい。

●Smalltalk:
歴史は古く1980年よりちょっと前からあった。そりゃFORTRAN77とかと同じコロだ!
Squeakのご先祖様というか、兄弟っつーかぐらいのもの。
リンク集に載せてあるサイトに詳しいので、そちらを見てください。
にしても、あの時代にこんなこと考えてカタチにしていた人たちがいたんだね。

●アラン・ケイ:
Squeakの直生みの親。以外にまだ若い。もちろん生きてる。
パソコンが生まれる前に持ち運べる生活支援コンピュータギアとして“Dynabook”を提唱していた人。
詳しくはGoogleで検索すれば、たくさん出てくる。
わたしのパソコンはDynabookだけど関係ないらしい。

●コンテキスト:
たった今実行中の環境。実行中に“self halt.”とか入れてデバッガが立ち上がると、デバッガにはそのときのコンテクストが束縛されている。
Smalltalkですごいのは、この実行中にもオブジェクトをがんがん変えられること。Modula-2とかやってたころには「とんでもない、いけません」ってことだけど、世の中そういうものなのだ。
同じ価値観や目標をずっと1年も保っていることが難しいのに、変わらないことを前提に活動している企業みたいなもんだった。

●ガベージコレクション:
名前を知知られている環境がなくなってしまって、だれからもアクセスされなくなったオブジェクトは、ガベージコレクション(ごみ集めの仕組み)によって、メモリから削除される。
MATRIXの最後までまだ見てないけど、なんか1話で壊れちゃったエージェント・スミスも、いったんは回収されたとか言ってたような。。