![]() ![]() |
これまでの議論は、ずっと個々のクラスに焦点を合わせていました。この章は、再利用性と、帰結のような自治的なモジュールの構築を強調する Eiffel 手法と一貫性があります。
ソフトウェアを実行するために、あなたは、実行可能な混合物<compound>群へクラスをグループ化する必要があるでしょう。このような混合物は、システム<system> -- プログラムの伝統的な考えに最も近い Eiffel の概念 -- と呼ばれ、次の要素によって定義されます。
1 普遍<universe>と呼ばれるクラス群の集合。
2. これらのクラス群の一つをシステムのルートクラスとして明示。
3. ルートクラスの生成手続きの一つをルートの生成手続きとして明示。
このようなシステムを実行することは、ルートクラスの直接のインスタンス(現在の実行のためのルートオブジェクト)を一つ生成し、その実例にルートの生成手続き -- 通常は、他のオブジェクトを生成したり、他のルーチンを呼んだり、などをすることになる -- を適用することです。
単純さとこの手法(これは、クラスをモジュールの基礎的な形態として使用する)への適合とについて、ISE Eiffel は、あなたがそれぞれのクラスのテキストをクラス ファイルと呼ばれる別個のファイルに格納する、ということを仮定しています。デフォルトの慣例は、ファイル名に name.e という書式を使用することです。明快にするために言えば、name は、通常、クラス名であるべきですが、DOS と Windows がファイル名を8文字(と拡張子)に制限しているので、あなたは、たとえば、クラス BINARY_SEARCH_TREE を binstree.e と名付けたファイルへ格納するために、名前を切り詰めなければなりません。
また、Eiffel 手法は、関連したクラス -- 一般的には、5個から40個までのクラス -- をクラスタ<cluster>と呼ばれる集合<collection>へグループ化することを提案します。それぞれのクラスは、一つのファイルに格納されるので、それぞれのクラスタをディレクトリに関連付けるのが自然です。
これらの観察は、あなたが普遍<universe>(上記のリスト内の項目1)を指定するために使用することになる機構をもたらします。あなたは、クラスタの一覧となるディレクトリの一覧を指定します。ディレクトリの .e のファイル内に包含されたクラス群は、普遍<universe>を構成します。
システムのクラス群は、そのルートクラスと、直接的または間接的に必要とされる、すべてのクラス群とを含むでしょう。ここでは、クラスは、もしその継承者またはクライアントの一つであるならば、他のクラスを必要とするといわれます。
システムを指定するために、あなたは、ディレクトリのリストに加えて、ルートクラス(普遍<universe>のクラス群の一つでなければなりません)の名前と、ルートの生成手続き(ルートクラスの生成手続きの一つでなければなりません)の名前を記す必要があるでしょう。
このようなシステムの指定の例があります。このテキストは、Eiffel では書かれていませんが、明らかに Eiffel のような風貌を持ちます。これは、Ace(for Assembly of Classes in Eiffel)と呼ばれ、Lace(Language for the Assembly of Classes in Eiffel)と呼ばれる表記法で書かれています。本書の別のところにあったように、垂直文字 | は、あなたのオペレーティングシステム上で使用されるパスの分離符号のための代替文字です。Unix 上では / 、Windows 上では \ 、あるいは VMS と他のプラットフォーム上ではパス名を指定するための同等な慣例によって置き換えられます。
あなたは、どんなシステムをコンパイルするにも Ace を必要とするでしょうが、あなたが Lace の詳細を学習しなければならない一歩進んだ使用は省きます。Lace の単純さは、とにかく、インストーレイションは、あなたがあなた自身の使用のために複写し適合させなければならない Ace の例をわずかに包含しています。とりわけ、delivery ディレクトリの examples サブディレクトリの中を見てください。
上記の Ace によって示された Lace のサブセットは、Eiffel の基本的な使用のために十分です。system 句は、システムへ名前を与えます。ここでは、example です。環境は、コンパイルの結果として生成された実行可能なファイルのために、この名前を使用することになります。root 句は、ルートクラスの名前と、ここでは CALCULATOR 、その生成手続き、ここでは make 、とを与えます。括弧で括られている、 CALCULATOR に属するクラスターの名前は、もしどんな他のクラスタもその名前のクラスを包含しないならば、任意です。ところで、この Ace は、delivery に含まれた例の一つである、小規模のデジタル計算機のシステムから採用されました -- それゆえに、そのルートクラスの名前です。
クラスタ自体は、最後の句clusterで指定されています。ここでは、二つのクラスタだけが並べられており、それぞれのクラスタ名(my_cluster1 、her_cluster2 )と、二重引用符の中に関連したディレクトリとを伴っています。クラスタ名は、識別子であり、どこかよそに、Aceにおいて、たとえば、ここでは、上記で見たように、root 句に現れる my_cluster1 への参照において、クラスタを参照するために使用されることになります。システムは、望まれるだけ多くのクラスタを持つこともできます。
default 句は、コンパイルのオプションを指定する働きがあります。上記の Ace は、プリコンパイルされた EiffelBase に頼っており、それ故に、COMPILE.TXT というオンライン文書でより詳細に説明されるように、このライブラリを格納するための標準ディレクトリを指定する precompiled 句で指定されています。数ダースのクラスタを持つ EiffelBase の存在が理由で、上記の Ace のようなシステムは、実際に、それ自体の二つのクラスタだけをともなってさえ、重要なシステムであるかもしれません。
上記で指定された、他のコンパイル オプションは、生成されたコードは実行時に事後条件(ensure)の水準まで表明を監視されなければならない、ということを記している表明(ensure)です。可能な水準は、require(事前条件のみ、既定値)、ensure、そして invariant を含みます。これらのそれぞれは、直前のものを暗に意味しています。
また、あなたは、表明の監視について、クラスタごとあるいは特定のクラスごとに別々に、さまざまな水準を指定できます。詳細については、Eiffel: The Language という本の付録 D にある Lace の完全な記述を見てください。
![]()
URL
for this page: http://www.eiffel.com/doc/manuals/language/intro/system.maker.html.
Copyright 1994-1998 Interactive Software Engineering Inc. All rights reserved.