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

削除された内容 追加された内容
14行目:
抽象化は変数、関数、クラスのいずれもが対象になる。変数の抽象化とは同じクラスにある関数を通して変数を参照/変更することを指し、その徹底のために変数の情報隠蔽が必要になる(A)。OOPの情報隠蔽は変数が主眼なのでデータ隠蔽とも読み替えられる。関数の抽象化は中間参照を通しての呼び出しを指しこれは[[関数ポインタ]]と同義であるが、OOPでは基底抽象クラスと派生実装クラスに分けて抽象クラスに呼び出し用の中間参照を置き、実装クラスに呼び出し先の関数実体を置く。これによって中間参照に、特定の基底クラスからの派生クラスという制約を課して一定の所属基準でまとめることができる(B)。従って関数の抽象化には、基底クラスと派生クラスを連結する構造が必要になる(C)。関数の中間参照は抽象関数と言い換えられる。変数を持たずに抽象関数だけをまとめたクラスは、抽象化されたプログラムモジュールになる(D)。そのプロシージャ関数でプロセス、セッター関数でデータ変更、ゲッター関数でデータ取得を表現できるからである。この抽象モジュールは基底クラスと同義なので様々な派生クラスを実装できる(E)。
 
上述の(A)と(D)は[[カプセル化]]、(C)と(E)は[[継承 (プログラミング)|継承]]、(B)と(E)は[[多態性|ポリモーフィズム]]に相当し、これらはOOPの三大機能原則などと呼ばれる。クラスの定義は諸説あるが、モジュールのプログラム概念にこの三つの原則仕様を表現する機能を加え、コンストラクタによるインスタンス生成とデストラクタによるインスタンス破棄の機能も加えたものがクラスになる。それに[[メタクラス]]の仕組みが加えられることもある。
 
=== インスタンス ===
クラスはインスタンスのひな型であり、インスタンスとはクラスを量化(''quantification'')したものである。この量化を担当するのがコンストラクタである。ここでの量化とはクラス内の変数の内容を全て決定してメモリに展開することを指す。各変数内容の決定は初期化と呼ばれる。初期化の仕方は、コンストラクタに渡された引数を代入する方法、コンストラクタに渡された引数を任意に解釈/加工した値を代入する方法、ゼロやnull値を代入する方法、暗黙のデフォルト値を代入する方法、展開メモリ領域のその時の電荷状態のランダムビット列をそのまま値にしてしまう方法などに分かれる。またこれは言語によって実装が分かれるが、関数の中間参照テーブルも合わせてメモリ展開されることもある。クラスの変数および関数の中間参照テーブルをメモリに展開することを指してインスタンス生成という。インスタンスはデータ構造体のように扱われ、また<code>インスタンス.関数()</code>などの書式でインスタンス内の変数をデフォルトで扱う関数を呼び出すことができる。この関数は量化元クラスで定義されたものである。インスタンスはコレクションとしても扱える関数付きデータ構造体のユニットとして表現になり、OOP特有の柔軟なプロセス表現を可能にしている。
 
=== ソフトウェアモデリング ===
=== 分析と設計 ===
モジュールによるソフトウェア構築では主に[[構造化分析設計技法]]関連が基準にされるのに対して、クラスベースのソフトウェア構築では[[統一モデリング言語]](UML)と[[ギャング・オブ・フォー (情報工学)|GOF]]を始めとする数々の[[デザインパターン (ソフトウェア)|デザインパターン]]が基準にされている。UMLは7種の構造図と7種の振る舞い図でソフトウェアをモデリングする。
 
== 来歴 ==