はじめに
最近フロントエンドを独学で勉強中ですが、JavaScriptを学習するにあたり「オブジェクト指向」という概念が出てきて色々調べたのでメモを残しておく。
ちなみに私はインフラエンジニアなので業務でプログラミングはshellscriptやIaCしかやってません。
なので、かなり初心者向けの内容になっています。
オブジェクト指向とは
オブジェクト指向とは要素を物
と捉えて、それに動き
を与える考え方。
プログラムを手順ではなくて、物の作成と操作として見るといった感じ。
RPGを例にオブジェクト指向を理解してみる
例えばこんなRPGのPTがあったとする。
これを例に、基本的な用語と3大要素と呼ばれるものをみていく。
Class 人間 {
性別:
年齢:
職業:
fanction action(){
歩く;
}
fanction action(){
話す;
}
fanction action(){
食べる;
}
}
勇者 = new 人間{
性別:男
年齢:18
職業:勇者
fanction action(){
剣で切りつける;
}
}
魔法使い = new 人間{
性別:女
年齢:17
職業:魔法使い
fanction action(){
魔法を唱える;
}
}
僧侶 = new 人間{
性別:男
年齢:40
職業:僧侶
fanction action(){
回復をする;
}
}
基本用語
まずはオブジェクト指向における基本用語を見ていく。
オブジェクト
オブジェクトはクラス(設計図)から作った実物のことを指す。
例だと、人間という設計図に勇者という情報を与え、出来上がったものが勇者オブジェクトとなる。
この情報にはプロパティ
とメソッド
の2つの要素がある。
プロパティ
オブジェクトが持っている属性を定義するもの。
例だと性別や年齢がこれにあたる。
メソッド
オブジェクトが持っている操作を定義するもの。
例だと歩くや話すがこれにあたる。
クラス
クラスはオブジェクトの設計書のようなもの。
例だと、人間という設計図があり、そこにプロパティとメソッドを与えることで勇者や魔法使いといったオブジェクトになる。
インスタンス
インスタンスとは「実体」という意味。
クラスで説明した、
人間という設計図があり、そこにプロパティとメソッドを与えることで勇者や魔法使いといった`オブジェクトになる
この設計図からオブジェクトを作ることをインスタンス化と呼ぶ。
3大要素
次にオブジェクト指向における3大要素と呼ばれるものについて見ていく。
継承
特定のオブジェクトの機能を引くついで使用すること。
例えば、似たようなオブジェクトを複数作成する場合、全てのプロパティやメソッドを書くとコードが長くなり保守性も悪くなる。
例だと、人間というクラスを継承することでパーティの3人が人間クラスの持つ基本動作をそのまま利用することができる。
継承を使用することで、プログラムの再利用性や保守性を高めることができる。
カプセル化
他のプログラムから干渉されないようにする仕組みのこと。
例だと、actionの部分に「切腹する」なんてアクションを追加されたら困る。
カプセル化することによって、他のプログラムからの干渉を防ぐことができる。
(※正確にいうと、干渉されない部分を明確に分けれる)
ポリモーフィズム
聞き慣れない言葉だが、日本語にすると多様性という言葉になる。
こちらも継承と同じで、プログラムの再利用性を高める考え方になる。
例えば、ポリモーフィズムという考え方なしで考えると、このパーティが攻撃するときは
// action関数を呼び出す
勇者.action()
魔法使い.action()
僧侶.action()
みたいに操作を列挙しないといけない。
これをポリモーフィズムの考え方に基づいて直すと
// action関数を呼び出す
party = [勇者,魔法使い,僧侶];
party.action();
といった具合にスッキリ書くことができる。
パーティーのメンバーが増えたり、呼び出す回数が増えるほど両者の違いがどんどん明確になっていく。
まとめ
まずはオブジェクト指向をイメージだけ理解するためにざっくり書いて見た。
もちろんオブジェクト指向はもっともっと深いですが、まずはイメージだけつかめれば幸いです。