オブジェクト指向開発〜設計・実装その2

C++に特化しすぎているので、詳細は省略。クラスライブラリと反復子について。

クラスライブラリ

分析段階の、問題領域に登場する名詞をプログラム化したクラスは、そのアプリケーションでしか使う事が出来ない。一方、設計工程や最終段階で登場するクラスには、問題領域に登場しないものが含まれる。要所要所で使われるネジやクギなどのような役割を果たすものをまとめたライブラリが、クラスライブラリ。C ++では、MFCやOWLなどが該当する。
クラスには属性と操作があるが、属性は内部に隠蔽される。つまり、クラスライブラリを使うときに必要なのは操作を理解する事と言える。

反復子

よく利用されるリスト構造を実際にプログラム中で使いこなそうとすると、『反復子(Iterator)』という概念を理解する必要がある。反復子は「リスト内の現在位置」をクラス化した物。
配列の場合、添字によって先頭からの距離によって要素を指定する。配列というデータ構造は非常に安定しているため、この方法が適している。しかし、リスト構造は挿入や削除と行った操作が前提にあるため、配列の様な安定さは無い。つまり、先頭からの距離で位置を確定する事は向いていない。
リストというコンテナで、ある特定の場所を指定するには、それ以外に「ある場所」を指す様な「何か」を生成し、その位置を基準にして要素を挿入したり削除したりする様な方法が適している。それが反復子。
リストに格納されている要素のアクセスするためには、まず反復子を生成しリストと関連づける。この反復子を利用して、要素を格納したり参照したりする事になる。反復子は概念的に、各要素の間を指す様になっている。
要素を格納するときには反復子が指しているところに要素が挿入される。要素を取得するときには現在反復子が指している位置の直後の要素が取得でき、削除の場合も同様。

オブジェクト指向的視点から見た反復子

反復子は「リスト内の現在位置」をクラス化した物。一見、クラスの属性として持っても問題ない様に見える。しかし、そのリストの利用者が複数存在した場合、その「現在位置」は誰にとってのものかが分からなくなる。「現在位置」は、リストの属性ではなく、リストとそのユーザとの間の関連になる。オブジェクト指向的には、反復子は「ユーザになるクラス」と「リスト」の間の関連をクラス化したものだと言える。

プロフィール

このブログ記事について

このページは、koshigoeが2005年12月19日 21:31に書いたブログ記事です。

ひとつ前のブログ記事は「分析重要」です。

次のブログ記事は「オブジェクト指向開発〜設計・実装その3」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。