[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 11726] D 言語とその契 約による設計について( Re: 「アジャイルソフトウェ ア開発の奥義」 : 第三回議事録 ( 案) )



高橋(徹)です。

栗野さん、いつも詳細な議事録ありがとうございます。当日の議論が
フラッシュバックされます。

> 10.7 契約による設計
:
> 		Q. 他の言語できるの ?
> 			A. D ではできたのでは ?
> 			Q. どこでつくっているの ?
> 				A. 元々 C 言語のメーカが..
D言語はWalter Bright氏によって開発されたコンパイラ言語です。
彼はDatalight C、Zortech C++、Digital Mars C++(旧Symantec C++)、
Visual Cafe(Java)を手がけた人らしいです。

D言語に関する情報源としては、
"The D Programming Language"の日本語翻訳が下記URLで公開されています。
http://www.kmonos.net/alang/d/
技術評論社からムック本「D言語パーフェクトガイド」(オングス著)が
2004/12に発売されています。
http://www.gihyo.co.jp/books/syoseki.php/4-7741-2208-4

文法はC++の複雑性を除き、良いところは残し、その他の言語から良いところ
をいろいろ取り入れたような言語です。(ざっと見た印象)
契約による設計もしっかり言語レベルでサポートされています。
上記URLのサンプルを引用すると、
long square_root(long x)
    in
    {
        assert(x>= 0);
    }
    out(result)
    {
        assert((result * result) == x);
    }
    body
    {
        return math.sqrt(x);
    }

と記述します。in {...} が事前条件、out {...} が事後条件、body {...}が
関数の処理の定義を記述するブロックとなっています。
事前条件違反はInException例外がスローされ、事後条件違反はOutException
がスローされます。body中に記述されたassert違反はAssertExceptionがスロ
ーされます。

> 	派生型の条件は、基本型に対して
> 		事前条件は弱く、事後条件は強くする
継承の際は、事前条件は、基底クラス(群)を含めてどれか一つのin契約が
満たされていれば成立し、事後条件は基底クラス(群)を含めてすべての
out契約が満たされていると成立します。

クラス不変条件については、クラスの中にinvariant {...}で記述します。
上記URLのサンプルを引用すると、
class Date
{
    int day:
    int hour;
    invariant
    {
        assert(1 <= day && day <= 31);
        assert(0 <= hour && hour < 24);
    }
}

クラス不変条件は、publicメンバ関数の開始時・終了時、コンストラクタ終了
時、デストラクタ開始時に毎回チェックされます。
クラス継承の際は、クラス不変条件も継承されます。

契約による設計のコードは、コンパイル時に有効・無効を指定するようです。


TAKAHASHI, Toru