「オブジェクト指向のこころ」自己確認用まとめ:用語編

完全にまとめ終わってからとか思ってたんですけど、他の本を読み進めたりとかコードを書きたい欲で進むペースが遅いので、もう変にこだわらずに一定の区切りごとにしようと思います。


目的としては自分が設計する時などや考えにまよった時の再確認用といった感じです。
まとめ方としては、本の言葉を抜き出しつつ自分なりにわかりやすくする感じで。
今回は用語編というわけで、分析・設計編とデザインパターン編の3つにまとめる予定です。

用語系

オブジェクト
責任の集合で、その責任を果たす為に必要な振る舞いと必要な情報を持つもの。プログラム的にはクラスの実体であるインスタンスなど。決して、データとその操作をまとめたものではない。
クラス
オブジェクトの責任に基づいて定義された型。振る舞いはメソッドとして、情報はフィールドデータ*1として実装することができる。
インタフェース
共通の振る舞いを定義したもの。定数と*2抽象メソッドのみで構成される。共通の基底クラスを持たないクラス群に、特定の抽象的な性質を実装させたい場合に使用されることが多い。
抽象クラス
共通の責任(振る舞い・情報)を定義したもの。インタフェースと違い定数・抽象メソッドだけではなく、絶対に共通するものはデータやメソッドも通常通り記述可。
具象クラス
抽象クラスの責任(振る舞い・情報)を実装したクラス。
継承
スーパークラスから性質を受け継ぐこと。使い方としては抽象クラスから具象クラスに分類する為に使う。既存クラスに機能を追加する為に使うのではない。機能の追加に継承が必要な場合は抽象化が甘いなど設計が悪い可能性あり。
実装
抽象クラス・インタフェースで定義した抽象的側面を具体化すること。継承は実装の手段のひとつ。*3
カプセル化
あらゆるものを隠蔽すること。データの隠蔽も含まれるがデータの隠蔽のみを指すのではない。
ポリモーフィズム
インタフェース・抽象クラスによって派生クラスを気にする事なく参照でき、インタフェース・抽象クラスを介した同一のメソッドによって派生クラスがそれぞれに実装に合わせた適切な振る舞いを行うこと。


言語に依存しない説明になるように心がけてまとめてみました。


言葉選びというかうまく説明つかないところなんかもあるので、そこらへんはアドバイス頂けたら幸いです。自分で書いててなんか違うと感じる違和感ありありなのでorz
つまりはdisり大歓迎ということで遠慮なくつっこんで下さいw
間違ってる考えは早々に治してしまいたいので、よろしくお願いします。

修正履歴

・実装について追加。
・クラスの説明で状態とデータを対応させていたものをフィールドへ修正。
・インタフェースの説明の定数について削除。

*1:意味的には似ていますがこちらの方がより誤解を与えず適切だとご指摘頂いたので修正。

*2:Javaでは定数を持つことが可能なんですが、C#では不可とご指摘頂いたので修正

*3:インタフェースの例としては、Javaでスレッド化したい場合に実装(implements)するRunnableインタフェースや、直列化可能(シリアライズ)なクラスにしたい場合に実装するSerializableインタフェースなどや、後コレクションまわりなどを見て頂ければ。細かい説明は長くなるし、僕自身把握してない事も多々ありますのですみません><