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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for TakumiSato0613 TakumiSato0613
November 17, 2020
330

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

nokotama.rb発表資料

Avatar for TakumiSato0613

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 コード