オブジェクト指向の本質:「複雑なコードを秩序立てて整理すること」
オブジェクト指向は「オブジェクト単位」で複雑のコードの整理をすることによって、プログラム全体の保守性や再利用性を高められるようになる。
オブジェクト指向における三大要素: ①クラス(カプセル化)、②ポリモーフィズム、③継承
①クラス:「まとめて、隠して、たくさん作る仕組み」-- オブジェクトを生成するための設計図
クラスは、関連する変数やメソッドを1つの単位にまとめ、他のクラスからは隠蔽することができる仕組み。これにより、部品の数が減り、メソッドの名前づけが楽になる。また、privateやprotectedといったアクセス制限を用いることで、グローバル変数を使わずにプログラムを書くことができる。
クラス設計のポイントは「単一責任の原則」。オブジェクト指向は「コードをいかに秩序立てて整理するかであり、クラスはその中で整理のための仕切りを提供するもの。洋服を整理するときの箪笥のような役割。
箪笥は1段目が下着、2段目がズボン、3段目がシャツとそれぞれの段に応じて、収納されるものを分けている。それと同様に一つのクラスには一つの役割を持たせ全体の見通しを良くする。そうすることで変更もしやすくなり、再利用もしやすくなる。
②ポリモーフィズム:「共通メインルーチンを作るための仕組み」--
ポリモーフィズムは、複数のクラスに共通するメソッドを作成し、それを利用することができる仕組み。これにより、コードの再利用性が向上する。
ポリモーフィズムのポイントは
③継承:「クラスの共通部分を別クラスにまとめる仕組み」
継承は、既存のクラスから新しいクラスを作成することができる仕組み。継承を利用することで、既存のクラスの共通部分を別のクラスにまとめることができ、コードの再利用性が向上。
オブジェクト指向までの歴史
①機械語:黎明期、限られた人のみが操れる
②アセンブリ言語:機械語を人間がわかりやすい記号に置き換えて表現
③高級言語:人間に理解しやすい仕方での表現
①〜③まではあくまで「いかに親しみやすい言語で表現できるか」として進化
④構造化プログラミング:GOTO分の廃止、順次進行、条件分岐、繰り返しの3つの構文だけで表現
④からは「保守性を向上させるための進化」となる
*課題として①グローバル変数②貧弱な再利用が残る
OOPの特徴
・グローバル変数を使わずにすませる仕組み
・共通のサブルーチン以外の再利用を可能にする仕組み
OOPプログラミングの内部の仕組み
プログラムの基本的な実行方式
①コンパイラ方式:プログラムに書かれた命令をコンピュータが理解できる機械語に翻訳して実行⇨実行速度が速い
②インタプリタ方式:ソースコードに書かれたプログラムの命令をその場で逐次解釈しながら実行⇨同じプログラムを異なる実行環境で行える
③中間コード方式:同じプログラムを異なる実行環境で効率よく動かせる
スレッドとは?:プログラムの実行単位、複数のスレッドを同時並行で処理することで、CPUリソースを効率的に活用できる
メモリの使い方:静的領域、ヒープ領域、スタック領域
①静的領域・・プログラムの開始時に確保され、移行プログラムが終了するまで配置が固定される領域。グローバル変数やコード情報が入る
②ヒープ領域・・プログラムの実行時に動的に確保するためのメモリ領域
③スタック領域・・スレッド制御のために使う領域
*メソッドに書かれたコード情報は1クラスに1つだけロードする(静的領域)
・インスタンス生成時にはメモリはヒープ領域に割り当てられる
*インスタンスを格納する変数にはインスタンスそのものではなく、インスタンスの「ポインタ」が格納される。
*OOPを使って書いたプログラムは有限のメモリ領域であるヒープ領域を大量に使って動く
(参考)平澤章著 『オブジェクト指向でなぜ作るのか』日経BP 2022年