質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

2回答

1484閲覧

オブジェクト指向 ポリモーフィズムの例

palm-t

総合スコア37

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

0クリップ

投稿2018/07/11 06:46

編集2018/07/11 08:50

お世話になります。

今、オブジェクト指向を学習していて、ポリモーフィズムのあたりをやっています。
ポリモーフィズムを活用した処理にはどのようなものがあるか、考えているところです。

1.プレゼンテーションソフトに最初から用意されている図形を塗りつぶす
右クリックでカラーパレットを選ぶと、色が変わる。
円ではすべて塗りつぶされるのに対して、
ドーナツ型では穴の部分はそのまま、
再生ボタンでは、四角の中にある三角は指定した色より少し濃い・暗い色に塗りつぶされる。
円
ドーナツ型
再生ボタン

2.ゲームで、「相手の状態を見る魔法」をスライムA、スライムB、ドラゴンAに対して使うと、それぞれのステータス異常が異なっている
*****▼▼▼追記しました。▼▼▼*****
※前提として、ゲームには様々な種類のモンスターがいます。
修正前の例は、あるエンカウントについて記述していたので、登場するモンスターは、スライムだけでした。
なので別のエンカウントでは、別の種類のモンスターが混じっている場合もあるということです。
以前は、そのあたりを記述できていなかったので、
例2のモンスターを「スライムA・B」から「スライムA・スライムB・ドラゴンA」に変更しました。
*****▲▲▲追記しました。▲▲▲*****

①戦闘を開始して、全ての敵にランダムでステータス異常になる魔法を使う。
②「相手の状態を見る魔法」をスライムA・スライムB・ドラゴンAに使うと、
スライムA
-----状態異常:どく
スライムB
-----状態異常:まひ
ドラゴンA
-----状態異常:ねむり
のようにそれぞれ異なる表示がされる。

3.ゲームの武器でグレネードランチャーなどは弾薬の種類を変更でき、威力や範囲、効果的な敵のタイプなどが異なる
グレネードランチャー
-----炸裂弾:範囲が広く当てやすい
-----火炎弾:範囲が狭い。敵を炎上させることがある。植物系の敵に有効

私は、上記のようなものは、ポリモーフィズムを利用しているのではないかと考えていますが、合っていますでしょうか?
※あくまで外部の動きから予測しただけなので、ポリモーフィズム以外を使っている可能性もあるかと思います。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

1はたぶんオッケー。各図形のオブジェクトがそれぞれ異なるクラスで実装されていて、右クリックされたときにどんな動作をするかは、各オブジェクトが知っているという話ですよね。

2はちょっと違う気がします。スライムAもスライムBも、プログラムの実装としては同じ型のオブジェクト(同じクラスのインスタンス)のはずなので。
ポリモーフィズムは、現実的には「異なる型(クラス)のオブジェクトでも同じ操作ができる」くらいに理解した方が良いです。

3は、弾薬クラスは作らない気がするので違うかもしれない。

投稿2018/07/11 07:21

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

palm-t

2018/07/12 03:37

回答ありがとうございます。
guest

0

どれも的外れです。辛うじて3番が近いかな。

2番をベースにすると、
「モンスター」という大きなくくりの中に、「スライム」だったり「ミミック」だったり「魔法使い」だったりという個別のモンスター種がある状態がポリモーフィズムです。

プログラムからは「モンスターBがキャラクターAに攻撃を行う」というような形で統一した操作を行います。モンスターBの種別によっては攻撃によって毒を付与したり、マヒを起こしたりするかもしれませんが、それは「攻撃する」という操作に対して、各モンスター種の実装がそれぞれ対処することです。

投稿2018/07/11 06:57

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tacsheaven

2018/07/11 11:11

変更された 2. であっても、モンスターの共通属性を、それぞれのモンスターを示すオブジェクト(インスタンス)から読み取っているだけなので、ポリモーフィズムとは言えません。 ※より厳密なオブジェクト指向に則って、共通属性を読み取るのではなく「共通属性を教えてくれ」とメッセージを投げる形で実装していたら、モンスター種別によっては属性を返さない(隠蔽する)なんて形のポリモーフィズムが実現している可能性はありますが
palm-t

2018/07/12 03:36

回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問