webプロダクトいんふぉ

webの気になった情報を発信中!!

スマホRPGで例えてみるオブジェクト指向

そもそもオブジェクト指向って何?

 オブジェクトとは、物体(スマホとか)を、属性(データ)と操作(メソッド)の集合として、定義して、コンピューターで扱えるようにしたもの。

このオブジェクトを組み合わせて、開発を行うことをオブジェクト指向プログラミングと呼びます。

何を言っているか分かりませんね。

オブジェクト指向の考え方

・クラス/インスタンス化/オブジェクト

・継承

カプセル化

ポリモーフィズム

クラス

たとえば、キャラ毎の詳細を見てみます。

f:id:front-end-engineer:20160706125507p:plain

これをレア度が「レジェンド」のクラスと呼びます。

レジェンドキャラの設計図、つまり「クラス」

インスタンス

?の箇所を埋めないと使えるキャラとして成り立ちませんよね。

設計図=クラスの空白部分を埋めて実体化(使えるよう)することをインスタンス化といいます。

f:id:front-end-engineer:20160706123231p:plain

 元になっている設計図=クラスさえあれば量産することが可能です。

※キャラ画像とステータスさえ変えれば、別物になる

 ↓

オブジェクトを組み合わせて、1つのソフトウェアを構築するのがオブジェクト指向

ex)上のオブジェクトを組み合わせてパーティー作ったり

継承

オブジェクトの定義を定めた雛型を「クラス」と呼び、上位のクラスを性質を引き継いだ上で、他の性質を加えた新しいクラスを作成することを「継承」と呼ぶ。

ノーマルキャラ

スーパークラス(基本クラス)

レジェンドキャラ(ノーマルキャラにはないスキルが使えたりetc...)

カプセル化

データとそれを動かす(メソッド)操作を一体化して「オブジェクト」として定義し、オブジェクト内の細かい仕様や構造を外部から隠ぺいすること。

外部からは公開された手続きを利用することでしかデータを操作できないようにすることで、ここのオブジェクトの独立性が高まる。

 ※カプセル化を進めることによりオブジェクト内部の仕様変更が外部に影響しなくなり、ソフトウェアの保守性や開発効率が高まり、プログラムの部分的な再利用が容易になる。

f:id:front-end-engineer:20160706143814p:plain

HPのデータに直接減算するようなことはしない

ダメージを与えるメソッドを呼ぶことでHPを減らす処理を行う

ポリモーフィズム

「多様性」「多態性」「多様性」

オブジェクト指向プログラミング言語の持つ性質のひとつであり、同盟のメソッドや型などをオブジェクトの種類に応じて使い分けることができる性質のこと

オブジェクト指向プログラミングでは、関連するひとまとまりのデータとそれを操作する関数などの組み合わせ「オブジェクト」として定義していき、これを組み合わせてプログラムを記述していく。

継承を行う際に、上位のクラスの関数を新しい関数の定義で置き換えることを「オーバーライド」と呼び、クラスによって同一のメソッドで異なる処理が行われる性質をポリモーフィズムといいます。

ポリモーフィズムの利点としては、メソッド名を統一することで名前を覚える必要がなくなることや、記述ミスを減らせることなどが挙げられます。

/*-----------------------------------

ex)攻撃のメソッドで考えてみる。

①敵のHPにダメージ与える

②敵の攻撃力にダメージを与える(弱体化)

 -----------------------------------*/

同じ攻撃でも処理が異なる。

ポリモーフィズムという考え方を使わないと、同じ攻撃でも異なるメソッドを使わなくてはならない。

スキルと攻撃みたいに明確に分ける必要があれば、ポリモーフィズムを使わない方がいい。