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

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

ただいまの
回答率

90.50%

  • オブジェクト指向

    284questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 189

palm-t

score 24

お世話になります。

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

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

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

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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/12 12:37

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

    キャンセル

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/11 20:11

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

    キャンセル

  • 2018/07/12 12:36

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

    キャンセル

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • オブジェクト指向

    284questions

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