Upgrade to Pro — share decks privately, control downloads, hide ads and more …

オブジェクト指向でなぜ作るのか

TakumiSato0613
November 17, 2020
280

 オブジェクト指向でなぜ作るのか

nokotama.rb発表資料

TakumiSato0613

November 17, 2020
Tweet

Transcript

  1. プログラミングの進化の過程 機械語を人間が理解 しやすい記号で記述 例 MOV AC, X MOV DX, Y

    ADD AX, DX MOV Z, AX より人間に親しみや すい形式で記述 COBOL,FORTRAN 例 Z=X+Y GOTO文を廃止 基本三構造を導入 ALGOL,Pascal. C言語 • 順次実行 • 条件分岐 • 繰り返し処理 いかに人間がわかりやすい形式でコードを記述するか 可読性を重視 コンピュータが使用 する機械語を2進数 /16進数で記述 例:16進数表記 A10010 8B160210 01D0 A10410 機械語 1940年代 アセンブリ言語 1940年代 高級言語 1950年代前半 構造化言語 1950年代後半
  2. 関数と値の受け渡し 関数A 高級言語以前 関数B グローバル変数 コール 値の設定参照 関数A コール 構造化言語

    • ローカル変数や引数はない • グローバル変数を使用して関数間の情報共有 • グローバル変数を変更する場合、影響範囲の 特定が大変 • ローカル変数、引数の受け渡しによって 関数間の情報を共有 • 関数間の独立性が向上 • コードの再利用性が向上 ローカル変数 関数B ローカル変数 引数 値渡し ・・・ ・・・ 値渡し
  3. 解決できたこと、できなかったこと • 解決できたこと • 基本三構造(順次実行、if文、for/wile文) による可読性の向上 • 関数の独立性を高めることでコードの再利用性が向上 • 残った課題

    • グローバル変数問題 • 関数間の値の受け渡しにはグローバル変数を使用する必要がある。 • コードの再利用が貧弱 • 関数によって再利用はできるものの、増大するアプリケーションからすると微々 たるものであった。。。 オブジェクト指向によって問題解決!
  4. メモリの使い方:クラスとインスタンス • クラスの情報が静的領域にロード • インスタンスを作成すると、ヒープ 領域にインスタンスのメモリを確保 • インスタンスと静的領域にあるクラ ス情報との対応付けが行われる。 •

    インスタンスを格納する変数にはイ ンスタンスのポインタが格納される 静的領域 メモリ領域 Slimeクラスの情報 attackメソッド escapeメソッド ヒープ領域 Slime_a インスタンス @name=スライムA Slime_b インスタンス @name=スライムB
  5. 継承のメモリ • スーパークラスから継承したメ ソッドはメソッドテーブルに格 納し、サブクラスのメモリ領域 には展開されない • スーパークラスから継承された インスタンス変数は各インスタ ンスにコピーされる

    静的領域 メモリ領域 Slimeクラス (Characterクラスを継承) escape コード ヒープ領域 Slime_a インスタンス @name=スライムA Slime_b インスタンス @name=スライムB メソッド テーブル Characterクラス escape メソッド テーブル attack attack attack コード