zerebom / paper-books

@zerebom が読んだ技術書、論文をまとめています。推薦システム系が多いです。
https://github.com/zerebom/paper-books/issues
2 stars 0 forks source link

オブジェクト指向でなぜつくるのか #35

Open zerebom opened 3 years ago

zerebom commented 3 years ago

概要

本書はオブジェクト指向について様々な角度で説明した書籍である。
具体的には、

などが説明されている。

オブジェクト指向が難解な理由

などが大きな理由である。

本書では

説明することで上記の混乱を避ける。

オブジェクト指向が生まれた理由

下記のようなプログラミングの進化の遍歴の中でうまれた。

  1. 機械語
  2. アセンブリ言語
  3. 高級言語(FORTRAN, COBOLなど)
  4. 構造化プログラミング(Goto less/サブルーチン)
  5. OOP

プログラミングは徐々に人が読みやすいように進化してきた。
構造化プログラミングの時点で、グローバル変数と貧弱な再利用性が欠点としてあり、これらを解決するために誕生した。

オブジェクト指向について

構造化言語にない以下の3大要素を追加することで、関連する情報を一つにまとめ、重複した表現を取り除くことができる。結果再利用性を増した。

  1. クラス
  2. ポリモーフィズム
  3. 継承

それぞれ詳しく説明する

クラス

クラスの効用は以下の3つ

  1. まとめる
    関数と変数を一つの場所に格納できる。
    また、命名も簡単になる。
    クラス内にグローバル変数(=インスタンス変数)も定義できる。

    # func
    def open_txt_file():
        ...
    
    def close_txt_file():
        ...
    # class
    class TextReader(object):
        def open():
            ...
        def close():
    
  2. 隠す
    クラスの内部だけで使う変数や関数を外部からアクセスできなくする
  3. たくさん作る
    一つのクラスから複数のインスタンスを作る
    同種の情報を複数扱うときも、 インスタンスをたくさん生成すれば良い。

ポリモーフィズム

共通メインルーチンを作るための仕組み。
呼び出される側のI/Oを共通化することで、 呼び出し側はどんなインスタンスを読んだか意識しなくて良い

    class TextReader(object):
        def open():
            ...
        def close():

    class TextFileReader(TextReader):
        def open():
            ...
        def close():

    class NetWorkReader(TextReader):
        def open():
            ...
        def close():

    # サブクラスが何であっても呼び出せる
    def get_count(reader: TextReader):
        return len(reader.open())

継承

[WIP]