この記事の対象ユーザー
- オブジェクト指向という言葉を知ったばかりの超初学者
- スクールなどで学び始めた駆け出しエンジニア
- オブジェクト指向を何となく理解している僕みたいなへっぽこエンジニア
詳しく知りたくて本記事にたどり着いた人はブラウザバック推奨。
あくまでも本記事はオブジェクト指向のイメージをざっくり理解することが目的なので
具体的なコードの書き方には言及いたしません。
この記事でざっくり理解できるもの
- クラス
- インスタンス
- クラスの継承
- メソッド
- プロパティ
僕自身もようやく大枠を理解したばかりです。
修正箇所や説明の齟齬等ありましたらご指摘いただけると幸いです。
オブジェクト指向とは
簡単に説明すると、
いろんな機能を持ったプログラムを一つのまとまりにして、それを使えるようにしましょうというもの。
プログラムのまとまりのことをクラスといい、
それを使えるようにしたものをインスタンスという。
これらをオブジェクト指向といい、サーバースクリプトを扱う上で必須の概念と言われています。
自動車で例えるなら、
クラスが自動車の設計図で、
インスタンスが設計図を元に作った自動車とよく例えられています。
よくオブジェクトとインスタンスが混合しがちですが、厳密に異なります。
この場合だと車の部品ひとつひとつを生成する型をオブジェクトといいます。
正直、最初はこの説明でも僕の脳みそじゃ理解できませんでした(白目)
では、理解するのに苦労したオブジェクト指向を、一瞬で分かるようにみなさん大好きなポケモンで例えてみましょう。
ポケモンで例えるなら
ポケモンクラス
ポケモンはたくさんいます。
コイキング用のクラス(設計図)だけ作ってしまうと、他のポケモンを作る時いちいち同じ設計図を作る必要があります。
面倒くさいですね。なのでポケモン全体に共通するものをまとめてポケモンクラスというものを作ります。
- 分類
- おもさ
- タイプ
- わざ
- レベル
これらは全部のポケモンに与えられているものです。
これらのことをオブジェクト指向ではプロパティといわれます。
この状態では各項目は空です。枠だけ作るイメージですね。
また、ポケモン共通の動作である、
- 鳴く
- 攻撃する
- 走る
- レベルが上がる
- ワザを出す
などポケモン共通のアクションがあります。
これらのことをオブジェクト指向ではメソッドといわれます。
このプロパティとメソッドを集めたものをクラスといいます。
コイキングクラス
ポケモンクラスを作ったことでたくさんのポケモンを作れるようになりました。
ただ僕が作りたいのは全ポケモン最強と(僕から)言われているコイキングです。
先程作ったポケモンクラスを使えば簡単に作れますね。
###ポケモンクラスを継承しコイキングクラスを作る
いきなり出てきた継承。
ざっくり親クラスのプロパティやメソッドを使い回せるということです。
ポケモンクラスが持つ空のプロパティを使い、コイキングの特徴を定義していきます。
ポケモンクラス | コイキングクラス |
---|---|
タイプ | みず |
分類 | さかなポケモン |
おもさ | 10kg |
わざ | はねる |
鳴き声 | ぎょえーー |
レベル | 99lv |
これでコイキングプロパティは定義されたので、更にポケモンクラスから継承されたメソッドを利用してワザを出したり鳴けたりアクションを起こせるようにしてコイキングクラスを定義します。
ただここまではあくまで設計段階です。
これを実体化させなければただの妄想に過ぎません。
コイキングのインスタンスを生成
あとは簡単です。
ポケモンクラスを継承したコイキングクラスを実体化させてあげましょう。
オブジェクト指向ではこの実体化をインスタンスの生成と言われ、実体化したもの、つまり使えるようにしたものをインスタンスといいます。
これでやっとコイキングが使えるようになりました!!
まとめ
オブジェクト指向は初学者が理解に苦しむところです。
ただこれを早い段階で理解しているだけで後々読みやすいコードが書けたり、チーム開発が捗ったりと良いことずくめです。
今回はポケモンで例えてみましたが皆さんが好きなもので例えるのが一番理解しやすいと思います。
最後にオブジェクト指向のまとめ
- オブジェクト指向:一つのプログラムでよく使うものをクラスとしてまとめ、インスタンス化させて実行させること。その概念。
- クラス:メソッドやプロパティをまとめたもの
- プロパティ:変数。数値や文字列などが定義されている
- メソッド:関数。値を変更させたり、文字を追加させたり、動きに関するコード
- インスタンス:クラスの中のメソッドやプロパティを使えるようにしたもの
- 継承:親クラスのもつメソッドやプロパティを子クラスでも使えるようにする