継承の意味 … 再利用性と拡張性の向上
多角形クラス (POLYGON)
- クラス定義(の抜粋)
- rotate ルーチン (メソッド)
- perimeter ルーチン
長方形クラス (RECTANGLE)
- 全コードは 592 ページに記載
- POLYGON を継承 (inherit 句)
- サブクラスの事を本書では「継承者」と読んでいる
- perimeter を再定義 (オーバーライド)
- redefine 句でオーバーライドを宣言する事が必要
用語
- 子孫 … サブクラス + クラス自身
- 真の子孫 … 自身を含まない子孫
- 祖先 … 子孫の逆 (クラス自身を含む)
- 真の祖先 … 自身を含まない祖先
- サブクラス/スーパークラスは曖昧なので本書では用いない、との事
不変表明の継承規則
- クラスの不変表明 … 自身の invariant 句の表明 + 祖先の不変表明
- (リスコフの置換原則を言語レベルに落とし込んでいる、といった所?)
継承と生成
- 親クラスの生成状態(初期化処理?)は差後継者の生成状態には含まれない
- 必要な場合は creation 句に親クラスの生成プロシージャを指定する
階層例
- ++ … 再定義
-
-
- … (後述)
-
サブクラスの代入の説明
- 用語
- 多層的な代入
- 多相性エンティティ
- 適合
- 引数でも多相的な代入ができる
- 代入はオブジェクトへの参照渡し
- 拡張型(8.7節)の場合はオブジェクトそのものを保持しているので多相性は達成出来ない
多相的データ構造
- 様々な型のオブジェクトを持つデータ構造
静的型付け
-
実際のクラスに関わらず子クラスの特性は呼び出せない
-
適合性
- 子孫である
- 総称パラメータがある場合はパラメータも再帰的に適合する
- (いわゆる共変性がある)
-
インスタンス、直接インスタンス
- Cの直接インスタンス … インスタンスのクラスがC
- Cのインスタンス … インスタンスのクラスがCの子孫
-
静的な型、動的な型
- 静的な型 … 変数宣言に使う型
- 動的な型 … 実行時の型
-
知らぬが仏?
-
試行代入 (後の章)
- キャストみたいな物
-
多相性生成構