« モデラーとしてステップアップするために①~オブジェクト指向開発と『契約による設計(Db)』 | トップページ | プロセス代数とモデリングとアーキテクチャ分析・設計 »

2015年12月 8日 (火)

モデラーとしてステップアップするために②~モデルドリブン開発におけるアーキテクチャ設計と例外処理設計

例外の設計はシステムの「アーキテクチャの土台と骨子」に大きな影響を与える最重要事項の1つである。

ソフトウエア言語として例外処理をサポートいていない場合は、関数やプロシージャの処理で想定外のことが発生した場合は、予め決めておいたフラグにエラーを意味する値をセットする。

あるいは返り値でエラーが分かる値を返す。
 
この方法は処理を呼びだしたクライアント側のコードが、毎回毎回フラグや返値を確認しなければならない。

 
基本的にはエラーが発生したときのみ、クライアント側は分かればいいので、この方式は無駄にコードサイズの圧迫につながる。
コードの修正の際にも面倒である。
 

クライアントがフラグや返値を確認するコードを書き忘れると大きなトラブルになりかねない。
つまり、良くないことが多い。

そこで、オブジェクト指向言語の多くは例外処理機能をサポートしている。
コンストラクタは返値を定義できないので、コンストラクタで予想外の事が起きた場合は例外処理を利用する。
 

例外処理は「リトライ」「エラーの回復」「クリーンアップ」「適切な対象処理のためのエラーの伝搬」など色々など便利である。

例外処理は、アーキテクチャに信頼性と耐故障性を与え、かつ、アーキテクチャをシンプルで分かり易い設計を可能にする。

ただし、例外は気を付けなければならない事もある。

継承関係にあるクラスにおいて、サブクラスはスーパークラスから継承した操作を再定義するときである。

多相(ポリモフィズム)を使う事を想定している継承階層(普通はそう)では:

●サブクラスはスーパークラスで定義している例外を勝手に増やせない(例外を発生させないように例外を減らすことは可能)
●サブクラスはスーパークラスで定義している例外の型と「同じ例外型」か「その部分型」でないいけない

Photo

この2つの規則はスーパークラスで定義していない例外が発生したらスーパークラスの操作を呼び出すクライアントは対応できないからである。

オブジェクト指向開発で例外処理を効果的・効率的に行うには例外階層の設計がポイントとなる。

例外階層の設計は単純でないし、アーキテクチャの土台と骨子となるからとても重要となる。

|

« モデラーとしてステップアップするために①~オブジェクト指向開発と『契約による設計(Db)』 | トップページ | プロセス代数とモデリングとアーキテクチャ分析・設計 »

パソコン・インターネット」カテゴリの記事