クラス属性
クラス自体が持つ属性をクラス属性と呼ぶ。属性はクラスの中に定義されるが、実際に属性を持つのはインスタンス。同じクラスであっても属性はインスタンスごとに独立する(インスタンスと1対1)。
同じクラスのインスタンス同士で統一した属性を持たせたい場合に、クラス属性を利用する。クラス属性はクラスと1対1に対応する。
クラス属性へのアクセスは通常の属性と同じ方法。異なる部分は、値の変化の仕方。1つのインスタンスでの変化が全てのインスタンスに反映される。
同じクラスのインスタンス全てが1つの変数を共有する事で、この変数がクラス全体の属性として機能する事のなる。
クラス属性の実装は、staticとして宣言すればいい。staticとして宣言する事でコンパイル時にのみ生成されるため、システム中の1カ所でだけ領域が確保される。
派生属性
クラスで使われる「派生」とは別。派生属性は、実際には存在していないが存在しているかの様に見える属性。物理的に存在する必要は無いが、属性としての意識は持っているべき属性。計算などによっても止められる値で、クラスの性格を表す様な物。例えば、「人物」クラスの「年齢」属性を考えると、年齢は生年月日から今日までの年数を計算する事で求められる。静的に持つ事での不具合を考慮すれば、これを物理的に持つ意味が無くなる事もありうる。しかし、年齢は人物を表す重要な属性。
集約
a-part-ofの関係。つまり『全体ー部分』の関係。AはBの集合で、BはCの集合…のように続くものが集約。集約の特徴に『伝搬』がある。
集約であるか否かの判断は、アプリケーションの仕様に従う。
集約を実装する場合、インスタンスの実体配列で表現される。a-part-ofの関係である事とを考えると、「全体が無くなると部分も無くなる」ため、参照配列は利用しない。