Interactive Software Engineering: Advanced development tools for enterprise applicationsISE TECHNOLOGY

AN INVITATION TO EIFFEL

11 実装を延期されたクラス群

 継承機構は、一つ以上の主要な構成部品<component>を含みます。それは、実装を延期<defered>されたルーチンとクラスです。

 クラス C において定義されるようなルーチン r を宣言することは、C における r のデフォルトの実装はなく、そのような実装は結果的に C の子孫に現れるであろう、ということを表します。実装を延期<defered>されたルーチンを一つ以上持つクラスは、それ自体、延期されていると言われます。延期されていないルーチンまたはクラスは、実効的<effective>であると言われます。

 たとえば、車を登録する自動車部門によって使用されるシステムは、次の書式のクラスを含むことになります。

 この例は、すべての種類の車に適用する単一の登録アルゴリズムはない、つまり、自家用車、自動二輪車、トラックなどはすべて異なって登録される、ということを仮定しています。しかし、同じ事前条件と事後条件は、すべての場合に適用します。解決策は、 register を延期されたルーチンとして扱うことです。 CAR TRUCK といった、クラス VEHICLE の子孫は、このルーチンを実効化します。いうならば、実効的なバージョンを与えます。実効化することは、再定義と似ています。ここに限ってみれば、元々のクラスには実効的な定義、まさに、実装を延期されたルーチンの書式での指定、はありません。用語 再宣言<redeclare> は、再定義と実効化の両方をカバーします。

乗り物の継承階層

 実装を延期されたクラス群は、単に単一の実装というよりも抽象データ型の実装のグループを記述します。実装を延期されたクラスは、実例化されることはありません。!! v は、もし v が型 VEHICLE で宣言された実体であるならば、無効です。しかし、このような実体は、 VEHICLE の実装を延期されていない子孫の実例への参照を割り当ててもかまいません。たとえば、 CAR TRUCK VEHICLE のすべての実装を延期されたルーチンのための実効的な定義を提供すると仮定すると、次のことは有効になるでしょう。

 この例は、完全に、多態を利用します。つまり、"Some test" の結果に依存して、 v は、車あるいはトラックとして扱われることになり、ふさわしい登録アルゴリズムが適用されるでしょう。また、"Some test"は、実行時まで予言することが不可能な結果をもつ何らかの事象に依存してもかまいません。その事象は、たとえば、画面上に表示されたいくつかの乗り物アイコンの中から一つを選択するために、利用者がマウスをクリックすることです。

 実装を延期されたクラス群は、設計<design>段階にあっては特に有用です。モジュールの最初のバージョンは、あとで一つ以上の実効的な(実装を延期されていない)クラスへ洗練されることになる、実装を延期されたクラスであってかまいません。このアプリケーションにとって特に重要なのは、たとえルーチンが実装を延期されたもの(上記の register とのように)であったとしても、事前条件と事後条件をルーチンと関連させる能力であり、たとえクラスが実装を延期されたものであったとしても、不変条件をクラスと関連させる能力です。このことは、設計者に、どんな実装上の選択をするずっと以前の設計段階でモジュールへ正確な意味論をアタッチすることを可能にします。

 これらの能力は、Eiffel を PDL(プログラム設計言語)に対して魅力的で代替的にさせます。部分的に理解した概念を採り入れるために実装を延期されたクラス群の組み合わせ、それらの意味論について分かっていることを表現するための表明、そして、明らかで確信の持てるアーキテクチャを獲得するための言語の他の構造化のファシリティ(情報隠蔽、継承、総称)は、高水準の設計手法をもたらします。もちろん、さらなる利益は、表記法はまた、設計と実装の間のギャップを減少させることによって開発サイクルをよりスムーズにするプログラミング言語である、ということです。

 この開発サイクルにおける Eiffel の役割は、設計と実装に限定されませんが、開発のより初期の段階である分析<analysis>へ拡張されます。この段階で書かれた、実装を延期されたクラス群は、ソフトウェアのオブジェクトではなくて、外部にある現実のモデル -- ドキュメント、飛行機、投下資本 -- からのオブジェクトを記述します。ここでもう一度繰り返しますが、制約を表現するための表明の存在、そして言語の他の構造化のファシリティは、より古い手法と表記法への魅力的な代替性を提供します。

前節 目次 次節

Frequently requested pages

Questions? Comments? Let us know!

URL for this page: http://www.eiffel.com/doc/manuals/language/intro/deferred.maker.html.
Copyright 1994-1998 Interactive Software Engineering Inc. All rights reserved.