[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