HOME      

Cincom Smalltalkページへ シンコム ホームページへ

VisualWorks トピック
基本

チュートリアルのメインページへ

ネームスペースの紹介

ネームスペースとは

ネームスペースは、難しい概念なので例を使って説明します。ここにビルがあると仮定してください(このビルには、人々の要求 するすべてがあり、すなわち、SmalltalkメソッドのライブラリであるSmalltalkイメージを表現しています)。このビルには、人が入れます。しかし同じ名前の人は一人しか入れません。例えば、太郎さんがビルに入ることを許可されました。しかしもう一人の太郎さんは入ることができません。2番目の太郎さんがビルに入ると問題が生じます。なぜなら、花子さんがビルに入って言いました。「太郎さん!お昼に行きましょう」。彼女はどちらの太郎さんのことを指していたのでしょう?

ここに問題解決策を示します。このビルには必要とするだけの部屋を作成することが可能とします。今、花子さんは次のように太郎さんを誘うことができます。「101号室の太郎さん。お昼に行きましょう」。これで衝突は回避されます。

それでは、実際にSmalltalkイメージ(クラス ライブラリ)ではどのような構成なのでしょうか。既存の(提供された)クラスや新しいクラスをすべて持つのではなく、同じビル(1つの部屋)にリビングを作って、分割された部屋(ネームスペース)に分離します。自身のクラスを生成するとき、部屋(ネームスペース)を分割して作成することを強く推奨します。その理由は簡単です。クラスに独自の名前を付けられるので、他のプログラマがまったく異なった動作をするかもしれないクラスと同じ名前を使用している可能性があります。これは衝突と呼ばれています。そのため昔は、衝突を回避するために「接頭辞」ネーミング規約を使用していました。これでは、再利用に支障をきたすため、ネームスペースが発明されました。

ですから、クラスを作成する前に、作成するクラスが属するネームスペースを最初に作成する必要があります。もし、作成しない場合には、使用されるネームスペースはデフォルトのSmalltalkです。これは、ネームスペース階層の最上位にあたります。

ネームスペースの作成とバインド

ネームスペースの作成方法とネームスペースに既存クラスを移動(バインディング)する方法および、作成時にネームスペースに属(バインディング)するようにする方法について説明します。

1. ネームスペースを作成するパッケージを選択します。そして、クラス - 新規 - ネームスペースメニューを選択します。

2. ネームスペース作成ダイアログが表示されます。基本的には、ネームスペース名を入力すれば十分です。ここでは、TutorialSpaceという名前を指定しています。入力が完了後、OKボタンをクリックして、ネームスペースを作成します。

プライベートをチェックした場合、他のネームスペースからこのネームスペースに属するオブジェクトを参照できなくなります。基本的には明示的にインポートするので、プライベートにする必要はありません。

3. 次のようにシステムブラウザにネームスペースが作成されます。上記で指定したパッケージに格納されます。

4. 次に、適当なクラスをパッケージに作成します。このとき、ネームスペースはSmalltalkを選択してください(ネームスペースへの移動を体験するため)。そして、OKボタンをクリックしてクラスを作成します。

5. 該当クラスがどのネームスペースに属しているか知るためには、クラス定義の最初の部分を見ることによって確認できます。ここでは、Smalltalkがネームスペースであることがわかります。

6. では、このクラスをTutorialSpaceに属すように変更します。クラスが選択されていることを確認して、システムブラウザのメニューでクラス - 移動 - ネームスペースに...メニューを選択します。

7. ネームスペース一覧が表示されます。移動したいネームスペースを選択して、OKボタンをクリックします。

8. システムブラウザで、そのクラスの定義を確認します。今までSmalltalkであったネームスペースが、選択したネームスペースに変更されています。Smalltalkは、ネームスペース階層の最上位に属すので、"."でネームスペースを連結して表記していることに注意してください。

9. クラス作成時に該当するネームスペースに属させるためには、クラス作成ダイアログで指定します。このとき、ネームスペースは、属させたいネームスペースを指定します。ここでは、TutorialSpaceを指定します。

これによって、最初から希望するネームスペースに編成することができます。

10. このネームスペースにどのようなクラスが属している(バインディングされているか)知るためには、ネームスペースをインスペクトします。

インスペクタが開き、バインディングされているクラスの一覧(コレクション要素として)が表示されます。これらは、コレクションの要素ですので、コレクションにアクセスする為のat:メッセージやat:put:メッセージもネームスペースに対して使用できます。

例えば、ワークスペースに次のように記述してインスペクトすると何が表示されるでしょうか?

TutorialSpace at: #TutorialClass

TutorialClassクラスが取得できます。






(C) Cincom Systems Japan 2008-2011 All rights reserved.