「クラスベース」の版間の差分

削除された内容 追加された内容
10行目:
 
=== クラスとは ===
クラスベースとは、その名の通り[[クラス (コンピュータ)|クラス]]を用いることを中心にした[[オブジェクト指向プログラミング]](OOP)を意味する。クラスは変数と関数をまとめた機能である。同様に変数と関数をまとめた機能である[[モジュール]]とクラスの違いを知ることはOOPを知る上でも重要になる。モジュールとクラスで共通するものに情報隠蔽がある。モジュール内部に隠蔽する変数/関数と、外部に公開する変数/関数を設定することを情報隠蔽と呼ぶ。モジュールでは自身がアクセスするモジュールを明確に直指名するのに対し、クラスではパブリック/パッケージ/派生クラス群といったスコープの設定のみに留まる。この[[アクセスコントロール]]の違いは、モジュールを変数と関数の具体的な構成体と見ているのに対し、クラスを基本的には抽象体として見ていることの表われである。この'''抽象'''(''abstraction'')という考え方の有無がモジュールとクラスの分水嶺になっている。
 
抽象化は変数、関数、クラスのいずれもが対象になる。変数の抽象化とは同じクラスにある関数を通して変数を参照/変更することを指し、その徹底のために変数の情報隠蔽が必要になる(A)。OOPの情報隠蔽は変数が主眼なのでデータ隠蔽とも読み替えられる。関数の抽象化は中間参照を通しての呼び出しを指しこれは[[関数ポインタ]]と同義であるが、OOPでは基底抽象クラスと派生実装クラスに分けて抽象クラスに呼び出し用の中間参照を置き、実装クラスに呼び出し先の関数実体を置く。これによって中間参照に、特定の基底クラスからの派生クラスという制約を課して一定の所属基準でまとめることができる(B)。従って関数の抽象化には、基底クラスと派生クラスを連結する構造が必要になる(C)。関数の中間参照は抽象関数と言い換えられる。変数を持たずに抽象関数だけをまとめたクラスは、抽象化されたプログラムモジュールになる(D)。そのプロシージャ関数でプロセス、セッター関数でデータ変更、ゲッター関数でデータ取得を表現できるからである。この抽象モジュールは基底クラスと同義なので様々な派生クラスを実装できる(E)。
20行目:
 
=== ソフトウェアモデリング ===
[[モジュール]]によるソフトウェア構築では主に[[構造化分析設計技法]]関連が基準にされるのに対して、クラスベースのソフトウェア構築では[[統一モデリング言語]](UML)と[[ギャング・オブ・フォー (情報工学)|GOF]]を始めとする数々の[[デザインパターン (ソフトウェア)|デザインパターン]]が基準にされている。UMLは7種の構造図と7種の振る舞い図でソフトウェアをモデリングする。ただし[[クラス図]]、オブジェクト図、プロファイル図以外の構造図4種と振る舞い図全種は、どちらかと言うと汎用的なものであり、クラスベース向けというものではない。プロファイル図は[[メタクラス]]の設計に用いられるものである。オブジェクト図は一つのクラスの変数/関数を設計するものであり、これに限った事ではないがデータ抽象の仕様はここでデザインする。クラス間の関係を設計するクラス図はUMLで最も大きな存在感を占めるダイアグラムであり、真っ先に連想されるUMLの代名詞でもある。クラズ図でのクラス間の連結線は汎化・実現・合成・集約・関連・依存の六種で表現される。このうち関連・依存・集約はモジュール用の構造化分析設計技法にも通じる概念であるが、汎化・実現・合成の方は前述の'''抽象'''(''abstraction'')の考え方を取り入れたクラス図特有の概念と言える。この双方の違いは[[結合度]]にある。一般にモジュール間の結合度は低い方が推奨されており関連・依存・集約もそれが当てはまるが、それとは反対に汎化・実現・合成では結合度は強くなくてはならない。結合度の強さが求められる連結線は詳細から抽象に向けた段階的抽象化を表わし、この繋がりによるクラスのまとまりは同時に一つの[[ドメイン]]を表現する。このドメイン間の連結線は結合度の低さが推奨される関連・依存・集約になる。強さ前提の結合度と弱さ推奨の結合度の二次元的なクラス間連結設計がもたらす利便性と平易性がクラス図の強みであり、同時にクラスベースの特性と適性を最大活用する。
 
== 来歴 ==