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

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

ただいまの
回答率

90.50%

  • Java

    13792questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • オブジェクト指向

    284questions

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

  • インターフェース

    26questions

    インターフェイスという用語はハードウェア・ソフトウェアの両方に使うことができます。 一般的に、インターフェイスは内部処理の詳細を見せないように設定されます。オブジェクト指向プログラミングにおいて、インターフェイスはabstractクラスとして定義されます。

「インターフェース」と「多態性」では「統一化する」点では同じだが、イメージ的には「手段」と「概念」の違いであるということ?

解決済

回答 8

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 2,061

mr0237

score 143

下記の質問と重複するかもしれませんが・・・・

「多態性」と「抽象クラス」は同じ意味ということですが、なぜ一緒じゃないんですか?

多態性の大体のイメージ=多数の独自規格→規格統一のみたいな感じ? (イメージ的に似ているが・・・)


オブジェクト指向を勉強している者です。頭があれでして、さらに説明が下手ですいませんが

インターフェースが使えて何が嬉しいのか?その「メリット」と「デメリット」について

上記の質問にて

カセットコンロとそのボンベの規格が、1998年の阪神淡路大震災をきっかけに統一されたことはご存知でしょうか?
それまではメーカーごとに独自の規格を持っていたため、ボンベの貸し借りなどができず、不便な状況になっていたのです。
規格が統一されたことにより、(完全ではありませんが)コンロと異なるメーカーのボンベでも使うことが可能となり、非常に使いやすくなったのです。

これに限らず、DVDやUSBなどはルールを統一しているからこそ、広く利用されるようになったのです。

と書かれており、さらには

多態性の大体のイメージ=多数の独自規格→規格統一のみたいな感じ? (イメージ的に似ているが・・・)

上記の内容には

「多数の独自規格」→「規格統一」→使いやすくなる

と書かれているたのですが、

統一の点では同じ

上記の画像のどおり、「統一の点」では同じですが、
この「多態性」と「インターフェース」はどこが違うのでしょうか?

私からすれば「多態性」「インターフェース」は同じようなものしか見えないのですが・・・

つまり、こういうことなんでしょうか?

「インターフェース」「多態性」の違い

上記のような感じでしょうか?

(できれば)カセットコンロとそのボンベの規格みたいに、日常的に例えたもののほうがわかりやすいです。

さらにイメージを提示していただけると、すごく理解しやすいです。

説明が下手で失礼しますが、回答のほうお願いいたします。


(追記)

いろいろ遅くなりすいません。質問の回答のほうを見てもう一度考えたのですが、イメージとしてはこんな感じでよろしいのでしょうか?(説明が判りにくいと思うので図式化してみました。何度もすいません。)

![インターフェース→手段 多態性→概念](d25706ba6c276f112c3efa2542a479f1.jpeg)


(7月8日追記)

いろいろ遅くなりすいません。質問の回答のほうを見て、もう一度ゼロから考えたのですが、イメージとしてはこんな解釈でよろしいのでしょうか?

(説明が判りにくいと思うので図式化してみました。何度もすいません。)

インターフェースは手段 多態性は概念(考え直したもの)


(7月19日追記)

いろいろ遅くなりすいません。皆さん本当にコメントありがとうこざいます。
私自身もいろいろ、理解が進まず皆さんにご迷惑をおかけしました。
仕事で忙しくなかなかじっくり読むことが出来ず、さらに読み漏れが多発していることもあり、私自身もかなり誤解をしてしまいました。

それで、もう一度考えたのですが、例えると

多態性:「iphone」で発売前には想像もしなかったアプリやアクセサリが登場した
インターフェース:継承の一部に入り、交換可能なパーツを作成するために共通点を「規格」としてまとめ上げられる

イメージとしてはこんな解釈でよろしいのでしょうか?何度もすいません。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • mr0237

    2018/07/25 00:53

    mts10806さん。どこがちゃんと読んでいないのですか?教えてください

    キャンセル

  • swordone

    2018/07/25 01:18

    mts10806さん、やめましょう。触っちゃいけないタイプの質問者だこれ

    キャンセル

  • mr0237

    2018/07/25 01:35

    swordoneさん。私のどこが触っちゃいけないタイプの質問者なんですか?

    キャンセル

回答 8

checkベストアンサー

+21

このyonaさんの回答でも言われていますが、目的と手段を混同しています。
インタフェースは多態性を表現するいち手段である、というだけの話です。

改めて関連質問を見返してみると、あちこちでこれと類似した回答が出ているにも関わらず、同じような質問で右往左往しているようなので、上記の回答で何が不明なのかをまず説明してください。この説明に対するリアクションがない限り、同じような回答の繰り返しにならざるを得ません。

 7/24追記 7/19質問追記と7/24質問編集依頼欄への質問者コメントを受けて

質問者が回答者の回答をほぼ拒絶しているようなので、おそらくこの質問に対する最後の編集になるかと思います。
私含め、回答者は以下のことを答えています。

  • インタフェースは多態性を表現するいち手段である
  • 多態性は概念の話であり、イメージで伝えるのはほぼ不可能
  • たとえ話は初学者には誤解のもと

これらのことを伝えているにも関わらず、いまだにイメージやたとえ話にこだわって「これで合ってるの?」と言われても無理です。そもそもそのイメージ(iPhoneの例え)もちゃんと多態性を理解するものになっていますか?
イメージで伝えるのが不可能であるのと同様、イメージで理解しているかどうかを解釈するのが無理です。少なくとも「これこれこういう点が多態性」という説明がないと、正しいかどうかの判断はできません。

結局、私が最初から主張する「インタフェースは多態性を表現するいち手段である」で多態性とインタフェースの関係性はほぼ完結しています。「イメージをつかまないと理解できない」というのは逃げか怠けです。全体をつかまないと、と言っていますが、たとえ話は全体像なんかではなく、むしろ細部の話です。
だからこそ、インタフェースは多態性を表現するいち手段であるという文をそのまま理解してほしいのです。理解できないならその理解できないところを教えてくれと言っているのです。それが無いせいで、やはり同じ話の繰り返しになっています。

質問で「頭があれで」と言っていますが、あなたの問題はそれ以前に文章をきちんと理解しようとしていないことです。この質問の一連のやり取りを見ていると、理解できないところや興味ないところなどを一切読んでいないかのような受け答えが多数見られます。回答者が読んでほしいところをまるっと無視されて質問されているようで、空しいばかりです。

 以下、回答時に付けた蛇足

多態性は「1つのメソッドが複数のふるまいをする」という機能のことを指します。
これを表現するための1つの手法として、インタフェースという仕組みを使っているのです。インタフェースにメソッド名だけを定義し、実装先のクラスで好き好き実装を書くことで、「インタフェースに定義された1つのメソッドが、それを実装するクラスによってさまざまなふるまいをする」という多態性を実現しているのです。

日常的な例えで説明してくれるとありがたいです。

そもそも、多態と言っているのですから、性質のこと、抽象的な概念の話になるのです。これを日常的な例えで言おうとした瞬間、それは抽象論ではなく具体的な何か、すなわちここで言うインタフェースの話になります(ここで言う「具体的な」というのは、多態性を実現するための方法論としての話であり、「インタフェースが中身のない抽象メソッドを持つもの」という話とはまた異なるものであることに注意)。

 追記 どうしてもMIDIで説明が欲しいようなので

(正直MIDIに関してそこまで知識があるわけではないので細かいところは突っ込まないでいただきたい)

MIDI

 7/12追記

MIDIだと説明しづらいので、「楽器」で例を出します。楽器の中でも、「ドレミファソラシド」の音階が出せるものに限定して考えます(つまり、ドラムやシンバルなどは除外)。ピアノ、ギター、リコーダーなど様々ありますね。
当然、それぞれの楽器で音の出し方は異なります。ピアノだったら「鍵盤を押す」、ギターだったら「弦を押さえて弾く」、リコーダーだったら「穴をふさいで吹く」といった具合に。
でも、実際に演奏する場面を想像してください(もちろん、各奏者は音の出し方を熟知しているという前提で)。ピアノの奏者に「この鍵盤を押して」とか、ギターの奏者に「この弦のこの場所を押さえて弾いて」とか、リコーダー奏者に「この穴とこの穴をふさいで吹いて」なんて指示しませんよね?楽譜を渡すのではないでしょうか?もっと言えば、「『ド』の音を出して」のような指示になるのではないでしょうか?
「『ド』の音を出して」と指示されれば、それぞれの奏者はそれぞれの楽器に対応した音の出し方で音を出します。指示は1つですが、楽器ごとにその指示の実行の仕方が異なる。このような性質のことを多態性と呼んでいるのです。

では、こういった関係をJavaのプログラミングで実現しようと考えます。上記のようなことは、思っただけでは実現できません。Javaは静的型付けの言語ですから、通常ならばピアノならピアノ、ギターならギターとしてしか扱えず、上記のような「複数の楽器に対して1つの指示で制御する」といった使い方ができません。
実現するために使う方法の1つがインタフェースという仕組みです。仮想的にコードを組むとしたらこんな感じでしょうか。

interface 楽器 {
    void play(int 音階);
}

class ピアノ implements 楽器 {
    public void play(int 音階) {
        音階に対応する鍵盤を押す;
    }
}

class ギター implements 楽器 {
    public void play(int 音階){
        弦を押さえて弾く;
    }
}

class リコーダー implements 楽器 {
    public void play(int 音階) {
        穴を押さえて吹く;
    }
}

こうすることでピアノもギターもリコーダーもすべて「楽器」として扱うことができ、「楽器」の型に入れることで(その型に実際はどんな楽器が入っていようとも)playメソッドという1つの指示で複数の楽器の指示ができるという多態性を実現できる、というわけです。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/02 07:50

    >土俵の違うものを無理やり比較

    ちょっとすいません。
    それはどういうことなんでしょうか?もうちょっと分かりやすく教えてください。

    何度も言いますが、「多態性」と「インターフェース」では「統一する」点では同じですが、どこがどう違うのでしょうか?

    日常的な例えで説明してくれるとありがたいです。
    ご協力お願いできますか?

    キャンセル

  • 2018/07/02 10:50

    簡単に言えば、「多態性」のほうが「インターフェース」より広い概念だということです。

    Javaでは何かしらの型が受け皿として必要になるため、インターフェースを持たせない多態性を行うのは難しいのですが、C++のテンプレートやRuby、JavaScriptでのダックタイピングなど、型に頼らずに多態性を実現させる方法もある、ということです。

    キャンセル

  • 2018/07/02 11:32

    「Java」と「オブジェクト指向」を同列に扱っているみたいな話です。「Java」は具体的な言語であり手段。一方「オブジェクト指向」は概念。「Java」「オブジェクト指向」は同じものにしか見えない…とあなたは言っている感じです。

    キャンセル

  • 2018/07/02 11:53

    太字で書いたことがほぼすべてなんですが

    キャンセル

  • 2018/07/02 15:36

    mr0237>
    「果物」と「リンゴ」の違いはなんですか?
    果物とリンゴはどちらも「食用果実で、強い甘味を有する」という点では同じですが、どこがどう違うのですか?

    という感じにすると、ご自身がどんなことを質問されているのか、わりかし直感的にわかりやすいんじゃないかと思いますけど、どう?

    キャンセル

  • 2018/07/06 19:03

    遅くなりすいません。
    >「果物」と「リンゴ」の違いはなんですか?

    こちらのほうがわかりやすいです。
    お願いします。

    キャンセル

  • 2018/07/06 19:06

    後、すいません。被ってしまいますが、
    https://teratail.com/questions/132605の
    「カセットコンロとそのボンベの規格」の例にインターフェースを説明していましたが、この説明に例えるとどういうことなんでしょうか?

    キャンセル

  • 2018/07/06 19:13 編集

    > お願いします。
    何をお願いしているのかさっぱりわからんのですけど・・・。
    「2018/07/02 15:36の私のコメント」を読んでも「多態性とインターフェース」の関係がわからなかったということでいいのかい?

    キャンセル

  • 2018/07/06 20:18

    「多態性とインターフェースはどっちも統一するけど違いはなんですか」と聞くのは
    「果物とリンゴはどっちも甘いけど違いはなんですか?」と聞いているようなものだよ
    ほらとってもアホらしい質問しているでしょう、いい加減気づいて

    ってことですよ?

    キャンセル

  • 2018/07/07 01:14

    あああ。回答を読んでも、もう何が何だがさっぱりわからん!

    キャンセル

  • 2018/07/07 01:50

    誤った前提を頭に置いているせいで回答が頭に入らないのでは?
    いったんクリアな状態で、各人の回答を読んでください。

    キャンセル

  • 2018/07/08 07:20

    繰り返しになりますが、「インタフェースは多態性を表現するためのいち手段である」という文で、何がわからないのかを説明してください。

    キャンセル

  • 2018/07/11 02:04

    >繰り返しになりますが、「インタフェースは多態性を表現するためのいち手段である」という文で、何がわからないのかを説明してください。

    >人の話を聞く気ないんですか?「インタフェースは多態性を表現するいち手段である」に対するコメントはいついただけるのでしょうか?

    すいません。私、全体のイメージ像を先に掴んでおかないと、後々の間違った知識を得てしまう等の学習効率に影響を与えてしまうのです。つまり、文章などで説明されても、混乱してしまうのです。

    swordoneさんみたいに、頭が良くないのです。

    ですので、先に全体のイメージ像を先に掴んでおきたいのです。
    よろしくお願いします。

    キャンセル

  • 2018/07/11 02:49

    swordone は「2018/07/06 01:20」に回答を編集してイメージ図を示していないかい?

    この提示されたイメージ図でわからないなら、なぜ「提示されたイメージ図のどこがわからないのか」を質問しようとしないのかね?

    なぜ、そういう質問をせずに「カセットコンロとそのボンベの規格にたとえろ」というコメントをするのだね?(今まで回答が編集されたのに気づかなかったっていうならしょうがないかもしれないが)

    少なくとも、swordone からしてみれば、せっかく描いた図をあっさりとスルーされて「こっちの例えでよろしく」というコメントされたという状況なんだぜ?

    そりゃ、「図での説明もダメだなぁ」と諦めて、やり方を変えてアレコレ言葉で説明したくもなるさ

    だからこそ「"インタフェースは多態性を表現するためのいち手段である"という文で、何がわからないのかを説明してください。」と swordone はコメントしたんじゃないのかね?

    キャンセル

  • 2018/07/11 03:18 編集

    「多態性」のイメージ図なんて作りようがありません。

    モデル図やイメージというものは、"現実の複雑なもの"を、細部を省略したり一部をデフォルメしたりすることで、わかりやすくする効果はあります。化学の原子論における化学反応などの説明に使われる球体がいい例です。

    しかし、多態性のような、すでに抽象化された話を説明するには向きません。そもそも「性質」の話のため形を持ちませんし。説明しようと図に落とそうとするなら、必然的に実在の何かをモデルにする必要があります。この時点で抽象論を抜け、具体的な実装例などの話になってしまいます。これではいつまでたっても「多態性」の全体像とやらの説明はできません。これは何度も私含めた回答者が説明していることです。

    そしてMIDIの例でいえば私がすでに図で示しています。多態性とインタフェースの違いの説明もしています。
    これで何がわからないのか、いまあなたが何を求めようとしているのか、「たとえの無意味さ」を指摘されながら、なぜ尚もたとえ話やイメージに固執しているのかが全く分かりません。

    キャンセル

+8

プログラミング上の概念を身近なもので例えるのは、
すでにわかっている人が「なるほど確かにそういう一面もあるな面白い面白い」というような遊びには向いてますが、
むしろ初学者には誤解の原因にしかならないと思っています。(MIDI規格で一生懸命考える今のあなたのように)

プログラムのことはプログラムで考えたほうがいいです。


それはさておき、
多態性とは、「命令したら、命令を受けた側が持っている処理がなされる」ぐらいの広い概念です。
(プログラミングで言う)インターフェースは、多態性をプログラムで表現するための方法のひとつです。

となると、多態性と、多態性のプログラムでの実現方法(インターフェース)を、
現実世界で例えたら当然どちらも同じように見えてしまいます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+6

解説としては swordone さんの回答が完璧すぎて、これ以上書いても蛇足だな、という感じです。(それでもあえて回答を書くのは、重ねて言っていくしかない、と思ったからです)

YAMAHA KAWAI KORG MIDI形式の例の画像の右側が決定的に勘違いしています。不要です。

多態性は「ある種のふるまいを記述する方法があってその方法に則って記述するのだけど、そのふるまいがどのようにおこなわれるかは記述する時点では問わない。そのふるまいを実際におこなう時にどうおこなうかが決められる(を決める)」という性質です。

swordone さんは "「1つのメソッドが複数のふるまいをする」という機能"と書きました。
ozwk さんは"「命令したら、命令を受けた側が持っている処理がなされる」ぐらいの広い概念"と書きました。
ku_ra_geさんは"同じ名前のメソッドを呼び出した時に、実行される処理がインスタンスの種類によって変わるという機能を指す言葉です"と書きました。

全部合ってます。
全員が同じ概念を共有しています。
見ている側面や語る言葉が違うだけです。


YAMAHA KAWAI KORG MIDI形式の例だと画像の左側で、「MIDI形式に則って書けばYAMAHAの機械でも、KAWAIの機械でも、KORGの機械でも、同じ音楽が鳴らせる」という状態が成立しています=そのような性質を保有しています。

そのような性質が多態性です。
そのような性質を具体的に実現するための仕組みがインタフェースです。

インタフェースは多態性を表現するいち手段であるというのはそういうことです。

図の右側は不要です。頭のなから消してください。


で、仮に、例えば「MIDI形式のアナロジーについてはわかった」となったとしましょう。
問題は「じゃあJavaではどういうことになるの?」となることです。
そこにはギャップがあります。
そのギャップを埋めるにはJavaのコードを書くか読むかする以外にないです。

よくわからないから日常的なもので例えようとするから理解から遠くなるんです。
(これも、みんなが、同じ事を、何度も何度も、言っていますね。私も、そう言ってあげるべきだと思うので、書きます)


コメントにいくつか答えてたので勘違いされると困るので追記しますが、私の回答は

そのギャップを埋めるにはJavaのコードを書くか読むかする以外にないです。
よくわからないから日常的なもので例えようとするから理解から遠くなるんです。

ですからね。

喩えというものは
コードという実例をたくさん読み書きして、その上でそれらに共通する/それらが内包する概念を獲得しようとするその時に、具象から抽象を掴み取る手助けになる
だけです。

あるいは

先に喩えで考えてもいいけどそれは
コードをたくさん読み書きする時に、どういうところがどう対応するのかを読み取るガイドになる
だけです。

喩えをいくら読んだってコードを読み書きせずに「プログラミング言語における多態性」の概念がわかるなんてことはありえない
という立場です。

ただし読むコードは本当のコードでなければならない、とまでは思ってません。
https://teratail.com/questions/132605#reply-201124 がそうですが、そこは例だったり、擬似コードだったり、偽のプログラミング言語だったりしてもいいんじゃないかとは思います。
(「例」と「喩え」は違うものなので混同しないでね)

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/05 13:47

    >YAMAHA KAWAI KORG MIDI形式の例の画>像の右側が決定的に勘違いしています。不要です。

    すいません。この意味なんですが、この右側にある「多態性」のイメージというのは完全に間違っているということなんでしょうか?

    分かりにくくてすいません。

    キャンセル

  • 2018/07/05 13:57

    この文章読んでわからないとか相当だな…

    キャンセル

  • 2018/07/05 16:10

    間違ってますね。忘れましょう。

    キャンセル

  • 2018/07/06 00:35

    すいません。頭の中が混乱してしまいました。

    多態性のイメージというのはどういうことなんでしょうか?

    下記の質問を見ると、そのような回答が書いてあったのですが・・・・

    多態性の大体のイメージ=多数の独自規格→規格統一のみたいな感じ? (イメージ的に似ているが・・・)
    https://teratail.com/questions/131602

    上記の回答は一体何だったのでしょうか?

    キャンセル

  • 2018/07/06 00:57

    回答読まずにコメントとかするのやめようね。
    何度も言ってるよね?右側の図間違ってるって。忘れろって。
    なのになぜ頑なにその図を使ってるの?
    さらに言うと「上記の回答は何だったのか」というのは
    むしろこっちが「何なのか」と問いたいくらいです。
    その回答は図に関して一切言及していないですし、
    インタフェースという単語は質問にすら登場していませんし、
    勝手に多態性の性質の話とインタフェースの機能の話を混同しているだけだと
    何度説明すればわかるのですか?

    キャンセル

  • 2018/07/06 06:12 編集

    > mr0237 さん
    > 下記の質問を見ると、そのような回答が書いてあったのですが・・・・
    多態性とはなにか、に関してはその回答ですでに「異なるものを同じ方法で使えるという意味です。」という文が書いてありますね。
    それ以外の部分では多態性のメリットの話をしています。メリットが何かという側面を通じて、質問者さんの多態の概念を修正しようとした回答です。

    ○○のメリットは△△です

    という文章を読んで、△△なのは全部○○なのか、とか、△△なメリットを狙ったものは全部○○なのか、と考えたら間違いなのはわかりますよね?

    多態性とはなにか→異なるものを同じ方法で使えるという意味です。
    多態性のメリットはなにか→互換性があれば使いやすくなるから

    という回答でしたよ。

    それを私は『「MIDI形式に則って書けばYAMAHAの機械でも、KAWAIの機械でも、KORGの機械でも、同じ音楽が鳴らせる」という状態が成立しています』と説明しました。
    Chironian さんの回答と私の回答は食い違ってないですよね?

    キャンセル

  • 2018/07/06 06:19

    MIDIという比喩の上で、多態性の**メリット**を説明する図は書けるでしょう。(swordoneさんの図とは別の形で)
    ただ、それがプログラミング言語における多態性の**概念**の理解の助けにはならないだろう、と思っているので悩ましい。

    キャンセル

  • 2018/07/06 07:03 編集

    プログラミング言語での多態性がない言語とある言語の違いも、それで生まれるメリットも https://teratail.com/questions/132605#reply-201124 で書きましたけどね :-P

    キャンセル

  • 2018/07/06 18:01

    例で考えたい気持ちのはしょうがないとしても、なんで多態性が「ない」時のイメージを例や図で書かないんです?

    キャンセル

  • 2018/07/06 18:43

    多態性に関してなんですが

    下記にサイトにある図↓

    https://teratail.com/questions/131602

    ↑上記に載ってある図は完全に間違っていることですね。

    では、https://teratail.com/questions/132605に「カセットコンロ」と「ボンベ」の例にインターフェースを説明されていますが、その例も間違っているということなんでしょうか?

    >どうしてもMIDIで説明が欲しいようなので

    ↑に載ってある図を見てみると、「カセットコンロ」と「ボンベ」の例にしたインターフェースの説明が間違っていると思いますが・・・

    キャンセル

  • 2018/07/06 19:10 編集

    > ↑上記に載ってある図は完全に間違っていることですね。
    事実性としては、図は間違ってない。
    多態性やインタフェースを説明するための図としては、2枚目までは特に問題ないが3枚目は**ふさわしくない**。
    3枚目の図が相応しくなく、そこからズレがでていって
    ---
    多態性:
    「多数の独自規格」→「規格統一」→追加・変更しやすくする

    という考えでいいんでしょうか?よろしくお願いします。
    ---
    という部分は間違っている。
    ※この質問の図の右側は間違っているから忘れて、というのは上記2つの理由

    Chironianさんの解答は上記のように「あなたの認識が間違っている」と指摘している。
    あなたはそれをまともに読んでない。

    以上。

    キャンセル

  • 2018/07/06 19:14 編集

    > では、https://teratail.com/questions/132605に「カセットコンロ」と「ボンベ」の例にインターフェースを説明されていますが、その例も間違っているということなんでしょうか?
    遠くはないが、あまりいい例とは思えない。
    カセットボンベが「メーカー毎に内部機構が違う」のならいい例になると思うけど、そこは見えない部分なので。

    キャンセル

  • 2018/07/06 20:00 編集

    https://teratail.com/questions/131602 の1枚目が「多態性がない」状態だけど、その状態のままで(MIDIという規格がない状態のままで)「互換性を持たせたい」と思ったら、YAMAHAがMOTIF形式もSDF形式もDMG形式も読めるように自社のシンセに機能を追加して、KAWAIがMOTIF形式もSDF形式もDMG形式も読めるように自社のシンセに機能を追加して、KORGがMOTIF形式もSDF形式もDMG形式も読めるように自社のシンセに機能を追加して……ってしなきゃならない。
    「互換性を持たせたい」という**目的**に対してそんな**実装**は面倒で馬鹿馬鹿しいよね? っていうのが「多態性がない」状態の問題点。

    ただこれも「プログラミング言語が多態性が持たない時の問題点」からはちょっと遠い。
    例は所詮例であって、全ての面でうまく当てはまることなどありえない。ある一面**だけ**を説明しやすいってだけ。

    キャンセル

  • 2018/07/07 01:13

    「カセットコンロ」と「ボンベ」の例にインターフェースを説明されているのは「間違い」なんですね。わかりました。

    キャンセル

  • 2018/07/07 01:47

    そもそもカセットコンロとボンベの規格の例を出したのは、その質問の主題と思われた「ルールを強制することのメリット」の例示だったんですがね…

    キャンセル

  • 2018/07/07 07:40 編集

    たった1つの「喩え」というものが、ある概念をピッタリと説明することなんてありえない。(説明できるならもう喩えじゃなくてそれそのものの説明だから)
    「喩え」で何かを理解しようとするなら、ある面をうまく説明した"広い"喩えから、ある面のさらにごく一部だけを説明した"狭い"喩えまで、全部ひっくるめて読んで元のかたちを想像しないといけない。
    「あなたが喩えでお願いします」とか言うからたくさん喩えが集まってくるわけで、そのどれもが"ある面では"うまく言い当てているかもしれないが、別の"ある面では"間違っている。必ず!!

    全ての、喩えは、ある面では、必ず、間違っている!

    もちろん"全く的外れ"な喩えは他の誰かから指摘されるはずだけど、「カセットコンロ」と「ボンベ」の喩えはそうなってない。
    インターフェースの持つ"ある面"は説明しているから。その範囲が狭いと言っただけ。

    ----

    元の概念が分かっているなら「この喩えはここを説明したんだな」とわかるけど、元の概念が分かっていない人にはそこが判断できない。
    だから喩えで何かを理解しようとするのは困難極まることになる。

    ちゃんと理解したいなら喩えじゃ駄目、と散々言われているでしょう?

    キャンセル

  • 2018/07/07 07:54

    あ、でも、「カセットコンロ」と「ボンベ」という喩えに対して「これはなんか違う」と感じているんだったら、それはもしかしたら正しい感覚なのかもしれない。
    その喩えが"説明しない面"を認識して「これはなんか違う」と感じているなら、それは正しい理解です。
    その喩えが"ちゃんと説明している面"を認識して「これはなんか違う」と感じているなら、それは間違った理解です。
    でも、あなたが正しい理解に向かっているか、間違った理解に向かっているかは

    「カセットコンロ」と「ボンベ」という喩えがどう間違っているとあなたが認識したのか

    が他人に伝わらないと、他人からは判断できないわけですよ。

    それも喩えで何かを理解しようとするのが困難な理由。

    キャンセル

  • 2018/07/07 14:23 編集

    > 「カセットコンロ」と「ボンベ」の例にインターフェースを説明されているのは「間違い」なんですね。わかりました。
    いやしかし待て待て。>自分

    ↑の文は、『「カセットコンロ」と「ボンベ」の例にインターフェースを説明されていた(と読んでしまったのはわたしの)「間違い」なんですね。』
    という意味ですか?

    もしそうなら余計なことを書いてしまった気がします。(なのでコメントはちょっと削りました)

    swordoneさんの指摘の通り、
    そもそも、「カセットコンロ」と「ボンベ」の例にインターフェースを説明している人なんていないですよ。
    「ルールを強制することのメリット」の説明ですね。

    ○○のメリットは△△です

    という文章を読んで、△△なのは全部○○なのか、とか、△△なメリットを狙ったものは全部○○なのか、と考えたら間違いなのはわかりますよね?

    と書いた通りですね。

    キャンセル

  • 2018/07/07 23:13 編集

    整理すると
    > 「カセットコンロ」と「ボンベ」の例にインターフェースを説明されているのは「間違い」なんですね。
    への回答は、
    その説明は「ルールを強制することのメリット」の"例"として提示されたもので、インターフェースを説明する意図のものではない、という意味でYes

    インターフェースの喩えとして「カセットコンロ」と「ボンベ」を引き合いに出すのは間違いかと言われれば、私は、間違いとはいえないが、あまりいい喩えとは思わない。(だってそもそもインターフェースの喩えを意図したものじゃないし)

    キャンセル

  • 2018/07/11 01:51

    >そのギャップを埋めるにはJavaのコードを書くか読むかする以外にないです。
    >よくわからないから日常的なもので例えようとするから理解から遠くなるんです。
    >ですからね。

    すいません。私Javaのコードを書いても、読んでも、そのギャップを埋めることはできません。なぜなら、「全体」→「細部」の順に理解しないと余計に混乱するからです。
    つまり、Javaのコードを読む・書く等でギャップを埋めようとしても、
    「Javaのコードを読む・書く=「細部」から理解する」ということになってしまうので、
    全体のイメージ像を先に掴んでおかないと、後々の学習効率に影響を与えてしまうのです。
    ですので、先に全体のイメージ像を先に掴んでおきたいのです。
    よろしくお願いします。

    キャンセル

  • 2018/07/11 02:00 編集

    たとえ話にこだわっている限り全体像なんて見えないと思いますよ。
    全体像全体像言うならとっくにみんな答え出してますし。

    何を聞きたいのかさっぱり伝わってこないです。
    結局私の質問に一切答えてませんものね。
    私の回答に一切コメントしてませんものね。

    キャンセル

  • 2018/07/11 02:09

    swordoneさん。どこが質問に一切答えてないのですか?
    さらに言うと、どこがコメントしてないのですか?
    具体的に教えてください。

    キャンセル

  • 2018/07/11 11:41

    質問は何度も書いてる通り、「『インタフェースは多態性を表現するいち手段である』という文で何がわからないのか説明してくれ」です。
    私の回答に対するコメントは、編集前の回答「土俵が違うものを無理やり比較しようとしている」という、本題の回答とは一切関係ない部分だけで、あとは他の方のコメントに対するズレた質問と愚痴です。
    こちらでコメントしているようですが、私の回答に対するコメントをこちらでやってもquiquiさんに迷惑です。私も追いにくいですし。

    たとえ話やイメージ図の話以外、意図的に無視してるんじゃないかってレベルであなたは文章を読んでないように感じられます。

    キャンセル

  • 2018/07/11 14:43 編集

    > mr0237 さん
    > ですので、先に全体のイメージ像を先に掴んでおきたいのです。
    その気持ちと理想は理解します。ですが、それは無理です。
    クロールの泳ぎ方の全体のイメージ像を先に掴んでおかないと泳げるようにはならない気がするから、私に泳ぎ方の全体のイメージ像を言葉でまず教えてくれ。私が自分で納得できる泳ぎ方の全体のイメージ像をつかむまでは私は水には入らない。さあ私に泳ぎ方を教えてくれ。って言っているように私からは見えます。
    そのぐらい現実離れした態度に見えます。

    このギャップを解決するには「そこは例だったり、擬似コードだったり、偽のプログラミング言語だったりしてもいいんじゃないか」と書いたとおりで、本物のコードよりももう少し抽象側、概念側に寄った擬似コードの方が適任だと思っています、とすでに書いています。
    そのような回答もすでに書いています。(読んでくれているのかは知りませんが)

    キャンセル

  • 2018/07/11 14:54 編集

    「泳ぎ方」ってけっこう抽象度が高いですね。
    「クロール」あたりはもう少し具象的。だから「クロール」は図示できますね。

    ではそのあとに「泳ぎ方」という概念を図やイメージや喩えで説明してみてください。
    「泳ぎ方」と「クロール」の違いを図やイメージや喩えで説明してみてください。

    キャンセル

  • 2018/07/11 15:41 編集

    "泳ぎ方"を説明してくださいっていわれてクロールの図を書いて説明してみたら、「これってクロールの絵ですよね? "泳ぎ方"と"クロール"は同じように見えるんですけど、なにが違うんですか?」って聞き返されて、"泳ぎ方"ってのは抽象的な概念であって"クロール"っていうのは"泳ぎ方"の一方式です、って答えたら、「それはどういうことなんでしょうか?もうちょっと分かりやすく教えてください。何度も言いますが、"泳ぎ"と"クロール"はどこがどう違うのでしょうか?」って聞かれて、いや"泳ぎ方"は概念だからイメージで分かるものじゃない、って言ったら「イメージで"泳ぎ方"を説明してくれないとよくわかりません」って言われている状態。

    キャンセル

  • 2018/07/11 15:50

    "泳ぎ方"ってのは抽象的な概念です
    "クロール"っていうのは"泳ぎ方"の一方式です
    っていう文章の何がどう難しくて、どこが分からないんだ……。
    "泳ぎ方"と"クロール"の違いを**イメージで**どう表現できるって言うんだ……。
    という状態。

    キャンセル

  • 2018/07/11 15:54

    私は"泳ぎ方"という概念が全体として理解できるまでは、クロールの手や足の動かし方を聞いたり、実際に水に入って手や足の動かしてみたりしても余計に混乱します。
    全体のイメージ像を先に掴んでおかないと、後々の学習効率に影響を与えてしまうのです。
    ですので、先に全体のイメージ像を先に掴んでおきたいのです。
    という状態。

    キャンセル

  • 2018/07/11 16:01

    つらつらと書いていたら長くなってしまいましたが考えてみてほしいのはひとつだけ

    「泳ぎ方」と「クロール」の違いを図やイメージや喩えで説明してみてください

    ということです。

    キャンセル

  • 2018/07/19 09:35 編集

    うーん、「多態性」はイメージでは伝えられない、って何人かが言っているんですけどね……。
    その「伝えられなさ」を泳ぎ方とクロールを喩えに書いたつもりだったのですが、もしかしたら皮肉だと思われたかなぁ。

    キャンセル

+3

インターフェースはJavaの言語仕様に過ぎません。

また、極論すれば、そんなに重要な機能ではありません。インターフェースなんかなくても多態性は実現できます。

まず、pythonで多態性の例を見てみます。

>>> a = [1,2,3]  # list
>>> b = (1,2,3)  # tuple
>>> c = {1,2,3}  # set
>>> d = {1:"a", 2:"b", 3:"c"}  # dict
>>> print(len(a), len(b), len(c), len(d))
3 3 3 3


len()は組み込み関数ですが、内部ではobj.__len__()メソッドを呼び出してその値を返しています。つまりこれは多態性を利用した例です。

__len__()を実装した自作オブジェクトを作ってみます。

>>> class Hoge:
...     def __len__(self):
...         return 42
... 
>>> h = Hoge()
>>> print(len(h))
42


このように機能します。どんなオブジェクトでも、__len__()さえ実装すればlen()関数で長さというかサイズを取得できるようになります。いいですね。

というのが、多態性の機能です。ここまではインターフェースは一切関係ない話です。


ご存知かどうか知りませんが、pythonにインターフェースはありません。

「本当はlen()を使いたかったが、うっかり__len__()を実装するのを忘れてしまった」という状況を想定した、Fugaクラスを作ります。

>>> class Fuga:
...     pass
... 
>>> f = Fuga()
>>> len(f)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'Fuga' has no len()

ご覧の通り、実行時エラーになります。

こういう場合、プログラムを書く立場からすると、できれば、実行時エラーではなくコンパイルエラーになってくれた方が嬉しいのです。

実行するのにン十時間かかるプログラムの、一番最後の行で実行時エラーになったら? ン十時間回して始めて気づくことになるかもしれません。時間の無駄です。

あるシステムの、一年に数回しか呼ばれない処理に実行時エラーになるバグが潜んでいたら? 稼働して何ヶ月も経って発覚することになるでしょう。大変ですね。

コンパイルのときに気づければ、開発リソースを節約でき、バグが減らせます。

この「コンパイルのときに気づけるようにする」ためにJavaにはインターフェースがあります。あけすけに言えば、インターフェースを使うならインターフェースと整合があるように実装しないとコンパイルエラーが出るようにするのが目的です。

インターフェースは多態性を実現する手段ではなく、

「安全に(=バグが入りづらいように)多態性を実装するために、ルールを強制する(=ルール違反はコンパイルエラーにする)手段」

と理解すべきものです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/11 01:56

    すいません。じゃあ全体像をイメージ的に表すと、上記の4枚目の画像(7月8日追記の画像)に相当するものなんでしょうか?

    キャンセル

  • 2018/07/11 02:13 編集

    そのMIDIの例はいろいろ微妙なので、それに頼ってうまく説明する自信がありません・・・
    もっとわかりやすい例で考えたら? と言いたいです。個人的には

    キャンセル

  • 2018/07/11 02:57

    でも図や例の良し悪しはともかくとして、基本的な概念はもう理解しておられる気がします
    あとは実際に自分で書いてみれば、「ああこういうことなのね」で収まると思うのですが

    キャンセル

  • 2018/07/11 03:16 編集

    「インターフェースはルール強制する手段である」はまあ、悪くはない理解でしょう。とりあえずそんなもんで良いと思います。
    ただ、Javaの中で具体的にどのようにして強制されるのかが見えないと、理解が深まらないと思うのですが。
    コンパイルエラーのことは回答に書きましたが、実際にどんな風にインターフェースを使ってコードを書くかというと、まずインターフェースを定義し、インターフェースを実装したクラスも作る(当然複数あって良い)。
    インスタンス化するときはそのインターフェースの型の変数を作る。そうすると、そのインターフェースを実装したクラスはなんでもその変数に代入できます。・・・というふうにして、インターフェースが多態性の手段として使える。
    ということがわかっていないと、いくら例で考えたところでかえって理解の妨げになるだけです。だからquiquiさんが
    >そのギャップを埋めるにはJavaのコードを書くか読むかする以外にないです。
    >よくわからないから日常的なもので例えようとするから理解から遠くなるんです。
    と仰っていて、他の方も同じことを書いている訳です。

    キャンセル

+1

既に優れた回答がいっぱいあるので、かえって惑わしてしまうと申し訳ないのですが、

「多態性」と「インタフェース」についての定義は既に出ている回答どおりで問題ないと思います。

多態性は概念でそれを実現するためのひとつの手段がインタフェース

気になったのはmr2307さんの最初の質問のなかで多態性の図のところに「統一してそれをベースに作成」と書いてある部分です。おそらくこれは「継承」をイメージして書かれたものではないでしょうか?

そうすると、mr2307さんが不明だった部分は「インタフェース」と「継承」の違いになりますのでこれを踏まえた説明をします。たぶんこの観点での回答はなかったかと思いますが違っていたら無視してください。

インタフェース は、MIDI規格になります。 Velocityを調整するとかVolumeを調整するなどという機能をもつことが規格として求められているもので規格書として定義するようなものですね。
具体的な実装はMIDI規格に沿って各メーカーが独自に実装するものになります。

継承 は、たとえるなら汎用のMIDIチップ(実際にあるかどうかわかりませんが)のようなものになります。これはMIDIの規格に準拠した実装をもつ汎用チップになります。
この場合各メーカーはこの汎用チップを自身のMIDI機器に搭載することになるためMIDIの基本的な実装をする必要はありません。他社との差別化をするためにはこのMIDIチップの実装に加え独自の実装を加えたりすることになります。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

こんにちは。

「多態性」と「インターフェース」はどこが違うのでしょうか?

sampa_janeiさんの「果物」と「りんご」の例えは秀逸と思います。

mr0237さん。
「果物」と「りんご」には明らかに相違があると思いませんか?
「ばなな」も「果物」ですね。しかし「りんご」と「ばなな」は別物です。ならば「りんご」と「果物」にも何か相違がある筈ですよね?

『「果物」と「りんご」はどこが違うのでしょうか?』という問いに、mr0237さんさんなりに答えてみて見ませんか?

その答えの「果物」のところに「多態性」、「りんご」のところに「インターフェース」を入れると、『「多態性」と「インターフェース」はどこが違うのでしょうか?』という問いへの答えにほぼなりますよ。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

なんだかややこしいですね。比喩が比喩を呼ぶ展開で。
mr0237さんの7月8日の絵を逆さにしたswordoneさんの図で説明できると思います。

mr0237さんのswordoneさんの図の違いは、絵の矢印が逆に向いていること。
mr0237さんにはそこに着目してもらいたいです。

YAMAHA, KAWAI, KORGがスピーカー、インターフェイスがケーブル、MIDIが音源として、
「MIDI音源をスピーカーで聞く」ってことをするイメージしてみてください。
MIDIプレイヤーとスピーカーをケーブルでつないで、MIDI音源を再生して聞く。と。

スピーカーのケーブルって端子に違いがありますよね。モノラル(黒1口)とかステレオ(赤白2口)とか。ケーブルの形状にあったスピーカーやプレイヤーを用意しないといけない。一方で端子が合えば使える。これがインターフェイスってやつです。mr0237さんの言うルールの強制です。
次に、スピーカーってメーカーや機種によって音って違いますよね。YAMAHAなら〇〇な音。KORGなら△△な音とか。同じMIDI音源、同じMIDIプレーヤー、同じケーブルを使ってもスピーカーが違うと出てくる音は特徴をもって出てくる。これが多態性ってやつです。

「MIDI音源をスピーカーで聞く」ということに対してのインターフェイスや多態性はこんなところです。
ただ、プログラミングになるともっと応用できる範囲が広がるので、「概念」なんて話になります。
回答者諸兄が同じようなことを言っているので、同じことを聞いている感じになると思います。
当然ながら私も回答者諸兄もmr0237さんのような時期がありました。みんなそれぞれのプログラミング言語での実装体験を通してその意味を理解しています。逆に言うと、多態性やインターフェイスの本質を図示して説明することができないのです。応用できる範囲が広く、本質的には超シンプルなので。
自転車に乗るような類の技術です。自転車に乗れるのはバランスが取れたからなんだけど、なんで自転車に乗れるようになったのかを理屈では説明しきれない。一所懸命に説明しても、説明聞いて乗れるわけでもない。そんな技術。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/12 13:59

    すいません。疑問に思ったのですが、

    >mr0237さんのswordoneさんの図の違いは、絵の矢印が逆に向いていること。

    と書かれていたのですが、なぜ逆なんですか?このままではダメなんですか?

    ②>モノラル(黒1口)とかステレオ(赤白2口)とか。ケーブルの形状にあったスピーカーやプレイヤーを用意しないといけない。一方で端子が合えば使える。これがインターフェイスってやつです。

    と書かれていますが、「ルール強制」は「規格統一」と解釈していいのでしょうか?

    そうなると、こちらの質問

    https://teratail.com/questions/132605

    上記の「カセットコンロ」とその「ボンベの規格」は、あくまで「インターフェースだけに取った例である」ということでしょうか?

    間違っていたらすいません。

    キャンセル

  • 2018/07/12 22:24 編集

    >なぜ逆なんですか?このままではダメなんですか?

    逆なのは、1つのMIDI音源を再生する1つの行為で3種類の異なる結果が得られる「1対3」の関係になることが示されていて、1対n=1対多の関係となる多態性を示すためにそう表現する必要があったからです。
    mr0237さんの絵のままだとダメなんです。
    mr0237さんの絵の場合、「マイクで音声を録音しMIDI音源にする」イメージになります。録音なのでYAMAHA,KAWAI,KORGがスピーカーからマイクに変わります。マイクもスピーカーと同じようにメーカーや機種で特徴があるので、録音されたMIDI音源もマイクの特徴が出た音が録音されます。3種のマイクで3種の音色で3対3。n対n=1対1の関係なので、多態性を示していないんです。

    >「ルール強制」は「規格統一」と解釈していいのでしょうか?

    その解釈で良いです。

    >「カセットコンロ」とその「ボンベの規格」は、あくまで「インターフェースだけに取った例である」

    そうです。

    キャンセル

  • 2018/07/14 01:56

    逆に、mr0237さんの図の矢印の向きは何を意図しているものなのですか?

    キャンセル

  • 2018/07/16 07:44

    >逆に、mr0237さんの図の矢印の向きは何を意図しているものなのですか?

    返信が遅れてすいません。この矢印の向きは、「上から下へ」と分かりやすいように書いただけです。

    つまり、「上から下へ」だと流れが把握しやすいということです。

    この「上から下へ」という方向性は間違っているのでしょうか?

    キャンセル

  • 2018/07/16 08:45

    > 「上から下へ」だと流れが把握しやすい

    いやいや、考え方が本末転倒です。
    これだと、たまたまYAMAHAとかKAWAIとかを上に書いたから、それらから矢印が伸びる形になった、ということですよね?並び順が逆になってYAMAHAなどが下になったら、今度はそれらに矢印が向く形になるってことですか?

    図というのは表現したい物事を表現するために書くものであって、矢印1つとっても表現のツールになるべきものです。「上から下へ」だけなら、そんな矢印意味がありません。

    キャンセル

  • 2018/07/16 23:05

    「間違っているのか?」という問に対しては、「その矢印は何も主張していないので、正しい・間違いの判断ができない」となります。

    キャンセル

  • 2018/07/17 00:48

    >この「上から下へ」という方向性は間違っているのでしょうか?

    返信ありがとうございます。
    今回の多態性の説明の図としては間違っています。上から下へとする場合は、YAMAHA,KAWAI,KORGが下にくる絵になるのが正しいからです。

    swordoneさん>
    一応私の回答に対するコメントなので、ここで議論展開をされたくはないです。
    swordoneさんの回答が正しく、回答者諸兄の回答もそれを支持し、私も当然支持しています。
    mr0237さんは多態性を理解するために努力していますが、
    swordoneさんも、その方法ではmr0237さんには通用しないことには気づかれていますか?
    私は、mr0237さんの絵が逆さ(つまりswordoneさんの絵)になり、mr0237さんがその絵を受け入れる状況になることを目指すことにしています。それが達成できなければ、他の要素を説明したところで暖簾に腕押しだと感じたからです。
    よろしくです。

    キャンセル

  • 2018/07/17 07:50

    >「上から下へ」だけなら、そんな矢印意味がありません。

    そうなんですか?私の作成した、図の「矢印の使い方(及び向き)」は間違っているという解釈でいいのでしょうか?

    キャンセル

  • 2018/07/17 17:11 編集

    mr0237 さんの図のYAMAHA,KAWAI,KORG は、「会社組織」をあらわしていたりしませんか?
    で、swordone さんの図のYAMAHA,KAWAI,KORGでは、それぞれの会社が出している「機器」になっていて食い違っている、なんてことがあったりするのでは?

    キャンセル

  • 2018/07/18 03:32

    > quiquiさん
    確かにありそう

    > mr0237さん
    矢印が表しているものが何かの説明があるなら判定のしようもありますが、すでに書いた通り矢印の主張がないため、判断のしようがありません。
    mr0237さんなりに矢印に意味を持たせて書いているのであれば議論できますが、それがない以上、正しい間違い以前に「意味が分からない」ということになるのです。

    >Hiroshi-Aokiさん
    「その方法」が何を指しているのかわかりませんが…
    mr0237さんが現時点での最後の図(YAMAHAなどからMIDIに矢印が向いている図)を出すより前に私の図を出しています。その図をわざわざ矢印を逆にして書いていたので、「mr0237さんにとってわかりやすい形態の図なのかな」という可能性を考えました。
    長いことmr0237さんとはコメントの応酬をしていますが、これでも理解が進まないのは
    ・どこかで前提が食い違った状態でやり取りをしている
    ・人の話を聞いていない
    という要因が大きいように思います。これらを解消しない限り、いつまでたっても解決しないと思います。矢印の指摘もその一環です。「イメージで説明してほしい」などと言いながら矢印の意味も理解しないでいては絶対に解決しないでしょう。

    キャンセル

  • 2018/07/18 23:17 編集

    >swordoneさん
    2つ挙げていただいた要因のうち、後者の要因について私も感じていました。
    私の感じたことをより具体的に言えば、
    ・その人が何を話しているかは捉えられない(文脈をたどれない)
    ・自分の理解と話の差を捉えられない(確認することができない)
    という傾向です。
    注意欠如にとても似た傾向です。身近にいたのでそう感じました。ピン!とくるほどに。
    これを感じた状態で2018/07/16 08:45からのコメントで「本末転倒」「意味がありません。」というワードが出てきたのでコメントさせてもらった次第です。意図は「そのワードで指摘しても、そのワードの意図は理解されないだろう」です。「その方法」と書いたの方法とは「意図(説明)を求めるという方法」を指しました。「本末転倒」という本と末の文脈を意識させる指摘の方法も含みます。「逆に」が暖簾に腕押しの腕押しでした。

    mr0237さんは理解しようとされているので、なんとか理解に至ってもらいたいと思っています。
    前述の身近にいた人との間で、聞かれた事に端的にYes/No・正/誤を繰り返すことで上手くいったことがありました。なので、私はひとまず理屈は抜きにしてswordoneさんの描いた絵をmr0237さん自身に描いてもらうことを目指しました。
    mr0237さんの絵がこれ程のswordoneさんはじめみなさんとのやり取りを通しても変わらないのは、mr0237さんが自身の絵を正しさを確認したい(だけ)の意識になっているからだと推測しました。その意識はmr0237さん自身に打破してもらう必要があると思います。先に「他の要素」と書いた理屈や文脈は、絵を裏付けるように伝えるつもりでした。
    次のmr0237さんのコメントで私の話に戻ってくれば回答し、戻ってこなければ私としての回答は終えることにします。

    キャンセル

  • 2018/07/19 01:50

    返信がおそくなり申し訳ありません。

    >mr0237さんが現時点での最後の図(YAMAHAなどからMIDIに矢印が向いている図)を出すより前に私の>図を出しています。

    >その図をわざわざ矢印を逆にして書いていたので、「mr0237さんにとってわかりやすい形態の図なの>かな」という可能性を考えました。

    ↑そうです。私がわかりやすいようにわざわざ逆に書いてしまったのです。

    キャンセル

  • 2018/07/19 01:50

    >私の感じたことをより具体的に言えば、

    >・その人が何を話しているかは捉えられない(文脈をたどれない)
    >・自分の理解と話の差を捉えられない(確認することができない)という傾向です。

    ↑すいません。私、仕事をしていて、中々じっくり読んで返信することができないんです。さらにスマホからコメントしているので小さい文字だとわかりづらいんですよ。(ちなみに今はPCから書いてますが・・)

    さらに、小さい文字を長々と書いてあると、読むときに見落としやすいです。

    キャンセル

  • 2018/07/19 01:50

    >私はひとまず理屈は抜きにしてswordoneさんの描いた絵をmr0237さん自身に描いてもらうこ>とを目指しました。

    私自身ももう一度調べなおした結果、「swordoneさんの描いた絵」のほうが正しいという認識になりました。

    キャンセル

  • 2018/07/19 01:51

    >mr0237さんの絵がこれ程のswordoneさんはじめみなさんとのやり取りを通しても変わらない>のは、mr0237さんが自身の絵を正しさを確認したい(だけ)の意識になっているからだと推>測しました。

    すいません。私自身もこれで正しいのかあまりに不安だったので正しいかどうかの確認したかったのです。

    キャンセル

0

swordoneさんが、回答に7/12に追記されている、いろいろな楽器奏者の例えがイメージしやすいと思います!

インターフェースは、「演奏して!」とそれぞれの奏者にお願いをする方法のことをさしていて。
多態性は、同じ「演奏して!」というお願いを聞いても、奏者によって演奏の仕方が違うという、奏者の行動自身のことをさしている、

という違いですかね?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

  • 解決済

    xcodeでの画面サイズ変更方法

    swiftでサンプルコードを写しているのですが、参考書を今まで放置してたのでxcodeのバージョンが違うので画面サイズ変更の方法がわからないです。 simulatorでの表示画面

  • 解決済

    tableview row(cell)

    コード import UIKit class ViewController: UIViewController, UITableViewDelegate, UITableView

  • 解決済

    ACCESS クエリでの一部重複?の除外方法について

    前提・実現したいこと こんにちは、質問タイトルが適格でないかもしれませんが宜しくお願いいたします。 通販事業をしており、商品の仕入から販売までのデータベースをACCESSの

  • 解決済

    CentOS7でWebページ公開

    前回からの続き的な質問になるんですが、前回UbuntuでWeb公開をやっていて、回答どうりにやてもうまく行かなく、今回CentOS7(1611)を導入してやっているんですが、これも

  • 解決済

    Monacaでtimepickerの実装

    前提・実現したいこと MonacaでiOS/Andriod両方に対応しているアプリケーションを開発していて、アラーム機能を実装しようと思い、Monacaでtimepickerのよ

  • 解決済

    atom自動補完やり方

    これのプログラミング版になります 今いろいろ調べているのですが、atom自動補完ができません。宜しくお願い致します。 リンク内容 autocomplete-p

  • 受付中

    ER図について

    つぶやきアプリを作っているのですが、 ER図を作るとする例えばどんなものがありますか?? サンプル程度でいいので教えていただきたいです

  • 解決済

    C#からGoogle Sheets APIを呼び出したい

    前提・実現したいこと Visual Studio 2015でアプリ作成中です。 C#からGoogle Sheets APIを呼び出したいのですが、実行するとエラーメッセージが表

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

  • Java

    13792questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • オブジェクト指向

    284questions

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

  • インターフェース

    26questions

    インターフェイスという用語はハードウェア・ソフトウェアの両方に使うことができます。 一般的に、インターフェイスは内部処理の詳細を見せないように設定されます。オブジェクト指向プログラミングにおいて、インターフェイスはabstractクラスとして定義されます。

  • トップ
  • Javaに関する質問
  • 「インターフェース」と「多態性」では「統一化する」点では同じだが、イメージ的には「手段」と「概念」の違いであるということ?