誰にも見えないブログ

雑なメモ。まとまってない文章等

メイヤー オブジェクト指向入門読書ノート6

眠れない。。。40分ほどモクモク。ちょっと時間が空いたけど前回の続き。

yuyubu-sub.hateblo.jp

ポリモーフィズム、抽象クラス、動的束縛など。オブジェクト試行らしさが出てきた。抽象クラスを暫定クラスという言い方は初めて見た。 確かに仕様策定時にメソッド名・引数・戻り値だけ決めて実装は後に回すなら暫定(defer)な気がする。

「2.2.15 再定義(redefinition)」から「2.2.19 暫定(deferred)特性と暫定クラス」まで読んだ

2.1 基準について

2.2 方法論と言語

2.2.15 再定義(redefinition)

  • 継承したクラスは特性の実装のいくつかを変更する必要が生じることがある。 
    • SESSIONクラスをOSとネットワークサービスが継承する場合
      • terminate特性の振る舞いはOSとネットワークで違っている。
      • それぞれ個別に再定義できる必要がある。 

 継承された特性の仕様、シグネチャ、および実装は再定義可能でなければならない。

2.2.16 多相性(polymorphism)

  • C型エンティティにC型のオブジェクトのみの参照制限を課すのは厳しすぎる。
    • C型エンティティを使ってBOATを継承するクラスを参照させたい
      • MERCHANTP_SHIP
      • SPORTS_BOAT
  • エンティティとは?

「エンティティ」は実行時に様々な値に結び付く名前で、変数という伝統的な概念を一般化したものである。

  • エンティティの定義使う前にいってよw

  • 多相性とは、許されている様々な型のオブジェクトに結びつき得るエンティティの能力である。

    • 静的型付けでは多相性は任意に行われない。
      • 継承によって管理される。

継承を基本とする型システムの管理下で、エンティティ(ソフトウェアテキスト上で実行時オブジェクトを表す名前)は、許される範囲の様々な型の実行時オブジェクトと結びつくことが出来なければならない。

2.2.17 動的束縛(dynamic binding)

  • 動的束縛
    • 再定義+多相性
    • エンティティに対して特性呼び出しを実オブジェクトの型から導かれるものであることを保証する自動メカニズムのこと
      • 例:BOAT型エンティティの特性turn
        • BOAT型の子孫で様々に再定義されている。
        • 自動で適切なものを呼び出す。

エンティティに対して特性を呼び出した時、付加されている実行時オブジェクトの型に対応する特性を常に起動しなければならない。実行時オブジェクトの型は呼び出しを実行するたびに同じとは限らない。

  • 伝統的な条件判断の繰り返しの多くを避けることができる
    • これは商業船か?レジャーボートか?...のようなIF文地獄

2.2.18 実行時の型検査(type interrogation)

  • 1つのオブジェクトの型を意識しながら、明示的に操作を選択するという計算スタイルに対する嫌悪
    • OOPを身につけることで得られるもの、傾向
  • オブジェクトが外部から来る場合、プログラマはオブジェクトの型を予言することは出来ない。
  • 静的型付けに違反せずに安全な方法でオブジェクトにアクセスするメカニズムが必要
    • 試行代入(assignment attempt)(メカニズムの一種)
      • 実行時にオブジェクトの型がエンティティに適合する→代入成功
      • 適合しない→無効値(void)を受け取る
        • Kotlinにこんなの会った気がするけど思い出せない。

オブジェクトの型が静的に与えられた型と適合するかどうかを実行時に判定できるようにするべきである。

2.2.19 暫定(deferred)特性と暫定クラス

  • Javaでいうabstract method,abstract classのこと
  • 再定義(override)されるメソッドの最初のバージョンが不要な場合のエア実装
    • BOAT型エンティティにMERCHANT_SHIPやSPORTS_BOAT等のオブジェクトに結びつくことが保証されていると、特性turnがBOATに実装されていなくても呼び出し可能であることを期待する
  • 暫定クラス、暫定特性は実装は子孫クラスに先延ばしされる。
    • 暫定クラス出ないクラスは有効(effective)という

暫定の、すなわち、仕様は記述されているが完全に実装されていないクラスまたは特性を記述出来なければならない

  • しばしば抽象クラスとも呼ばれる
    • そう呼ばれてるところしか見たこと無いがwww
  • 詳細な定義を後工程に残しながら、本質的な側面を把握することを可能にしてくれる
    • オブジェクト試行分析と高レベル設計において特に重要

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)