opendoorの日記

Rubyとスタートアップ、そして感情の記録。

「オブジェクト指向でなぜつくるのか」第1章〜4章のまとめ

RubyRailsを学んでいる中で概念や用語同士の関係性など分かり難い点が多々あったため、OOPを俯瞰して整理してみようと考えて手に取りました。

オブジェクト指向とは?

オブジェクト指向とは、ソフトウエアの保守や再利用をしやすくすることを目的とした技術コンセプトのこと。

※設計上の注意点→システム化範囲、コンピューターに任せる仕事の範囲を事前に整理しておく

プログラミング言語系譜

機械語アセンブリ言語高級言語→構造化プログラミング→オブジェクト指向プログラミング

構造化プログラミングの時代

基本三構造の登場

ロジックを順次進行、条件分岐、繰り返しの3つの構造だけで表現することで、構造が分かりやすくなった。

サブルーチンの独立性を高める

・どこからでもアクセスできる「グローバル変数」をいかに減らせるかが、サブルーチンの独立性を高めて保守性を向上させるための肝

▼独立性を高めるための2つの仕組み▼

①ローカル変数=サブルーチンの中だけで使われる。サブルーチンに入ったときに作られて、抜けるときに消える性質を持つ。

②引数の値渡し=サブルーチンに引数として情報を渡す際に、呼び出し側が参照している変数を直接使わずに、値をコピーして渡す仕組み。修正の影響範囲を最小限に留める。

構造化プログラミング2つの課題

グローバル変数問題(まだ弱い保守性)

ローカル変数はサブルーチンの呼び出しが終わると消える一時的な変数。サブルーチンの実行期間を超えて保持する必要のある情報は、依然サブルーチンの外側=グローバル変数として保持せざるを得ない。

②貧弱な再利用

構造化言語で再利用できる(共通部品として作れる)のはサブルーチンだけで、アプリケーション規模全体からすると威力が限定的である。

オブジェクト指向プログラミングの登場〜大規模再利用部品の実現〜

OOPの三大要素

ソフトウェアの保守性や再利用性を向上させるための仕組みとして、下記3つの要素を備えている。

・クラス(カプセル化)

ポリモーフィズム

・継承

クラスとは?

・関連性の強い変数とサブルーチン(メソッド)を一つにまとめて、独立性かつ粒度の高い部品を作る仕組み

・クラスとインスタンスは対になる要素

クラス→「同種のものの集まり」、集合論における集合、国

インスタンス→「具体的なもの」、集合論における要素、日本・アメリカ・ブラジル

OOPでは、クラスを定義することからプログラミングが始まる。

・プログラムは、定義したクラスからインスタンスが作られて、それらが相互作用し合いながら動く。

インスタンスを作るための仕組みとしてクラスがあり、インスタンスが帰属するクラスは1つだけ。

ポリモーフィズムとは?

・コードの重複を排除して汎用性の高い部品を作る仕組み

・類似したクラスに対するメッセージの送り方を共通化する。相手が具体的にどのクラスのインスタンスであるかを意識せずにメッセージを送れる。

・サブルーチンを呼び出す側のロジックを一本化し、「共通メインルーチン」を作る。

ポリモーフィズムを利用するためには、呼び出されるメソッドの引数や戻り値の形式を統一する必要がある。

継承とは?

・コードの重複を排除して汎用性の高い部品を作る仕組み。クラス定義の共通部分を別クラスにまとめることで重複を排除する。

・似たもの同士のクラスの共通点と相違点を整理する。

・共通クラスのことをスーパークラス、それを利用するクラスのことをサブクラスと呼ぶ。スーパークラス=全体集合、サブクラス=部分集合。

その他メモ

オブジェクト指向では、あらかじめすべての行動はメソッドとして準備しておく必要がある

クラスが保守性向上を実現

クラスの3つの特徴

①まとめる

部品の数が減る。クラス内で重複しなればOKなので、メソッドの名前づけが楽。メソッドが探しやすい。

②隠す

クラスに定義した変数とメソッドを、他のクラスから「隠す」(private)ことができる。これにより、グローバル変数を使わずにプログラムを書くことが可能になり、保守性の向上が可能になった

③たくさん作る

1つのクラスからインスタンスを「たくさん作る」。これにより、ファイル、文字列、顧客情報など、同種の情報を複数同時に扱う処理であっても、そのクラス内部のロジックをシンプルにできる。(なぜシンプルになる?)

進化したOOPの仕組み

パッケージ

・クラスをまとめる仕組み

・パッケージの役割を決めて、関連する役割を持つクラスを集めれば、全体の見通しがつきやすくなる。

例外(?)

・戻り値とは違う形式で、メソッドから特別なエラーを返す仕組み

・特別なエラーを返す可能性があることをメソッドで宣言する。

・特別なエラーの返し方が「例外」であり、サブルーチンの戻り値とは違う文法を使う。

ガベージコレクション

・不要になったインスタンスの削除処理(メモリー上から)をシステムが自動的に実行する仕組み

OOP三大要素の登場シーン

①まず、どうすれば保守がしやすくなるか、再利用しやすくなるか考える

②次に、基本三構造や共通サブルーチンを使って実装することを考える

③それでは物足りないとわかったときこそ、クラス・ポリモーフィズム・継承の出番と考える