申し訳ありませんが、「生の」理論については知りません。私は実際的なアプローチしか提供できません。これがprogrammers.SEで受け入れられることを願っています。私はここでのエチケットに慣れていません。
OOPの中心的なテーマは情報の隠蔽です。クラスのデータメンバーが正確に何であるかは、クライアントには関係ありません。クライアントは、インスタンスに(メソッド/メンバー関数を呼び出す)メッセージを送信します。これにより、内部状態が変更される場合と変更されない場合があります。クラスの内部は、クライアントが影響を受けることなく変更される可能性があるという考えです。
これに対する反論は、クラスがその内部表現が「有効」のままであることを保証する責任があるということです。(簡略化された)電話番号を2つの整数に格納するクラスを想定します。
int areacode;
int number;
これらはクラスのデータメンバーです。しかし、このクラスは、おそらくになりますはるかにちょうどそのデータメンバーよりも、それは確かに「int型のx int型のすべての可能な値の集合」として定義可能ではありません。データメンバーに直接アクセスするべきではありません。
インスタンスを構築すると、負の数が拒否される場合があります。おそらく、この構造は何らかの方法でエリアコードを正規化するか、整数全体を検証することもできます。あなたは、このようにずっと近いあなたに終わるでしょう"(a,b) where a is an int and b is a double"
、それは確かではないので、任意のそのクラスに格納された2つのint型。
しかし、クラスに関する限り、それは本当に重要ではありません。クラスを定義するのはデータメンバーの型でも、それらの可能な値の範囲でもありません。クラスに対して定義されるのはメソッドです。
これらのメソッドが同じである限り、実装者はデータ型を浮動小数点、BIGNUM、文字列などに変更できますが、すべての実用的な目的では、同じクラスになります。
クライアントが気付くことなく内部表現のそのような変更を確実に行うことができるようにする設計パターンがあります(たとえば、不透明なポインターの背後にデータメンバーを隠すC ++のpimplイディオム)。
a
とb
キリアンはフォース言及としてMyClassのは、その型のメンバーである。同型のフィールドを持つレコードへa
とb
タイプのint
とdouble
-あなたはそのような記録を取り、にそれを回すことができますインスタンスmyclass
。