オブジェクト指向ってなんぞ? 今理解していることをアウトプットしてみる
今日は学習の振り返りも兼ねて、改めて「オブジェクト指向」について理解をアウトプットしてみようかと思います。
オブジェクト指向とは?
共通する「データ」と「動作」をひとまとめにしたものを「オブジェクト」と言います。その「データ(属性/プロパティ)」と「動作(メソッド)」を定義したオブジェクトの設計図がクラスであり、クラスをもとにして実際に生成されたものがインスタンスです。
「オブジェクト指向」というのは、この共通の処理・動作をまとめたオブジェクト同士を組み合わせて、システムをつくろう!という設計概念のうちの一つです。
オブジェクト指向の3大原則
今回改めてオブジェクト指向について理解してみようと調べていたところ、「オブジェクト指向の3大原則[1]」なるものを知りました。
正直ピンときてる部分とそうでない部分もあるけれど、Railsの仕組みで例として挙げられそうなものを考えてみようかと思います。
1. カプセル化
プロジェクト内ではオブジェクト同士で情報の交換や書き換えが行われますが、干渉されたくない・書き換えられたくない部分を殻で覆うことを「カプセル化」といいます。
この説明だけだといまいちピンときませんが、「クラス」という概念そのものが、この殻の役割を果たしているようです。
カプセル化のメリット
・ほかのオブジェクトからの干渉を受けずに済む
・オブジェクトの範囲が明確になり、管理しやすくなる。
2. 継承
既存のオブジェクトのコードを再利用して、新しいオブジェクトを生成することを「継承」といいます。
動物で例えると、動物>哺乳類>犬>チワワ
のように、階層構造になっており、下位にいくにつれて抽象的>具体的
になっていきます。
Railsだと、モデルはActiveRecordを継承したサブクラスであることがぱっと思いつきました。
継承のメリット
・サブクラスではより具体的な記述を追加するだけで済むようになり開発効率が上がる。
・コードの重複を防ぐことができ、保守性が高い。
3. ポリモーフィズム
同じ指示(メソッド)に対して、指示を受けた側のクラスによって異なるふるまいをすることを「ポリモーフィズム(多様性)」といいます。
…???この説明ではとっつきにくいので動物に例えます。
- 猫は「にゃー」と鳴く
- 犬は「ワン」と鳴く(吠える)
- 羊は「メェー」と鳴く
「鳴く」という行為(メソッド)は一緒だけど、「鳴き声」(ふるまい)が違います。
このように、異なるクラス間の類似のメソッドがあるとき、それを共通化すること、それを使用すると違う処理結果が得られるという特徴が「ポリモーフィズム」です。
Rails、というかRubyですが、メソッドのオーバーライドがポリモーフィズムの例になります。
ポリモーフィズムのメリット
・コードがきれいにまとまる。
・プログラムの変更に強くなる。
参考
3大原則のところは自分の脳みその中身を書いた…というより参考から引っ張て来た部分が多いですね。こちらが参考にした記事たちです↓
-
「抽象化」を追加して、4大原則ともいうようです。 ↩︎
Discussion