質問: オブジェクト指向を勉強・練習している者です。エンジニアとは関係ないような質問をして、さらに説明の仕方が下手ですいませんが、 ### 「多態性」とは、 **多数の異なる**個々の型を**共通化(統一化)**する。 ↓ **共通化**したものを**提供**する ### というものですが、**「共通化→柔軟に追加・変更しやすくする」メリット**として **1.共通化することができるので、新たに覚えなくても良い。** **2.ミス・モレ・重複の割合が減ることができる。** **3.いちいちifやswitchで分岐することなく、追加・変更箇所を減らすことができる。** **4.コードの重複化を抑えることができ、処理をまとめることができる。(記述が楽になる)** **5.追加・変更探して書き換える手間が省ける。** **6.効率化できるので、楽になれる。** **7.変更・追加の「高い箇所」と「低い箇所」を明確化できる。** **8.変更の可能性が「低い箇所」→「高い箇所」に階層(レイヤー)化ができる。** ↑のような**メリット**がありますが、わかりやすい、**大雑把な例えに例える**と --- **多態性のイメージ:** **「多数の独自規格」→「規格統一」** -------------------- という**例え的なイメージ**でいいんでしょうか? **具体例**としては **「MIDI規格」**というものです。 規格統一前は**独自規格の電子音ファイル**が多数あった。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/fa3f4e42e0725f1fadfa316b913c22d5.jpeg) ↓ **互換性を持ちたい。** (つまり、**誰でも簡単に使えるようにしたい**という考えから) ↓ **共通化**する =>「**規格統一**」 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/ab8afc0f1e99865bef3171e7a26b82de.jpeg) ↓ **共通化(規格統一)**ものをベースに、**個々に作成** ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/f8b628e5cb27d6ca94c1c23318609534.jpeg) ↑**多態性**を**大体のイメージに例える**とこういう感じになるのでしょうか? 「MIDI規格=多態性」は共通化するという点では似ていると思います。 もちろん自分自身も何か間違っていてて、何か正しいところもあるかと思いますが、 --- **多態性:** **「多数の独自規格」→「規格統一」→追加・変更しやすくする** -------------------------------- という考えでいいんでしょうか?よろしくお願いします。
回答: こんにちは。 多態性の最大のメリットは「互換性を持ちたい。」と思いますよ。 異なるものを同じ方法で使えるという意味です。使う側は本当に楽になります。 例えば自動車の各ペダルの並び順がメーカー毎に異なっていたら悲惨ですよね。統一して互換性をもたせることにより、かなり楽に使えるようになります。 >「多数の独自規格」→「規格統一」→追加・変更しやすくする 追加・変更しやすくなるとはとても思えません。世の中には様々な標準規格が存在しますが、自社だけでは規格を決定できなくなります。どのような規格にするのかメーカー間の丁々発止の駆け引き後に決まります。追加・変更の手間は恐ろしいものになります。 クローズド・システムとオープン・システムでは一般にクローズドの方が進歩は速いです。規格を自社のみで決定できるからです。iPhoneとAndroidではiPhoneの方が進歩は速いですが、両方使えるようになるのは結構大変です。どちらか一方しか使えない人が多いのでは?(私もその一人) >「多数の独自規格」→「規格統一」→使いやすくなる だと思います。結果、使う側は楽になる(当然、使う側プログラムの追加・変更も楽になります)ということですね。