Loading...

オブジェクト指向のメモ

2019/04/19 18:45
2019/04/19 18:45
オブジェクト指向の特徴といわれているもの

1. カプセル化(encapsulation)

  • オブジェクトが不必要な情報を外に漏らすことはバグの原因となりうる
  • オブジェクト指向プログラミングではオブジェクトが本来外に漏らすべきではない内部の詳細について公開できないような言語機能を用いて隠蔽し、逆に必要な情報だけを公開するカプセル化を行う
  • パッケージ、スコープ、インターフェースなどの言語機能がこれを実現する助けになる
  • 必要/不必要の判断は人間がプログラミングの際に行うことになるので、あくまで人間が判断する必要がある

2. 継承(inheritance)

  • オブジェクトがあるオブジェクトの性質を内包している場合に、共通の性質を親子の関係にできる構造化や言語機能
  • 多重の継承構造がもたらす複雑さは逆に問題を引き起こすため、継承の代わりに移譲の構造をとったほうがよいとも言われることもある(Effective Java とか GoF の一部のデザインパターンとか)
  • 個人的に使ったほうが現実的に便利な場合は使うけど、複雑さがまさる場面では使わないようにしている
    • iOS でいえば ViewController のベースクラスとかは継承を利用したほうがスッキリしている気がします

3. 多態性(polymorphism)

  • ある名前の機能が扱う対象によって振る舞いを変える性質だと認識している
  • パラメトリック多相: おわゆるジェネリクス
  • アドホック多相: いわゆるオーバーロード
  • サブタイピング: インターフェースや継承
また、実装がコンパイル時/実行時に選択されるかにより静的/動的ポリモルフィズムに分類できる