🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

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

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

Q&A

3回答

936閲覧

オブジェクト指向について ポリモーフィズム

zzaa

総合スコア9

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

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

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

0グッド

1クリップ

投稿2020/11/25 14:05

オブジェクト指向を最近勉強したものになります。

質問内容
友人にポリモーフィズムの実現方法として継承(inherit, is-a class)ありますが、それらを活用することが批判されるという説明を受けたのですが、あまりピンと来ないのでどなたか中学生でもわかるような記述内容でソースコードやクラス図(可能であれば)で教えていただけますでしょうか?

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

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

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

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

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

Zuishin

2020/11/25 14:12 編集

友人に聞いてください。または友人に質問文を書かせてください。意味不明です。
miyabi_takatsuk

2020/11/26 00:40 編集

ポリモーフィズムに関して知りたいのでしょうか。 それとも、批判されるのがなぜなのか聞きたいのでしょうか。
zzaa

2020/11/25 14:41

批判されるのがなぜなのか聞きたいです
fana

2020/11/25 15:45 編集

(その友人が継承すべきではないような場面で継承を用いたがために周囲からフルボッコに批判された,という愚痴みたいな話ですか? そうでないなら,もう少しその話の文脈がわかるように書いてください)
episteme

2020/11/25 17:05

誤用/乱用ならともかく、活用することが批判されるとは考えにくいのですが。
miyabi_takatsuk

2020/11/26 00:44 編集

> 批判されるのがなぜなのか聞きたいです わかりました。 では、ポリモーフィズムのことはどれくらい理解されていますか? ポリモーフィズムに関して、どういったものなのかと、その有用性を理解しないと、 批判意見がなぜなのかの回答を受けても理解できないものと思われます。
guest

回答3

0

残念ながら現実世界においては
「批判」の方が間違っているという状況も有り得ます.

例えば,
「継承」という機能や「多態」といった概念に疎いグループ内においては,本当は継承を用いることが適切な場面であったとしても,そのような機能を用いること自体が批判されることはあります.
「あいつはわざと難しく書いているのだ」とか言われたりします.
本当です.

批判する側とされる側との間の力関係等によっては,その状況を正すこともできず,とても馬鹿馬鹿しい「書き直し」に従事せねばならないこともあります.
本当です.

その友人も,そのような状況下に置かれて辛い思いをしたのかもしれません.
(友人があなたにした話は「説明」というよりは「愚痴」的なものだったのではないでしょうか.)

投稿2020/11/26 02:30

編集2020/11/26 02:31
fana

総合スコア11990

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

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

fana

2020/11/26 02:41

例えば,C++で「template」が謎の理由で禁止されたりすると, コンパイラがやってくれたハズの事柄を「誰かが手動で」行うことになりますね. とても辛かったです.
guest

0

あまりピンと来ないので

元の「批判される」という前提が正しくないので、ピンとこないのは当然の理屈です。

(「使っただけで批判される」ような機能であれば、新規に作られた言語で取り入れるわけがありません)

投稿2020/11/25 23:16

maisumakun

総合スコア145975

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

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

maisumakun

2020/11/26 02:56

「正しくない」には、「批判内容が適切でない」というような意味合いも含まれます。
guest

0

継承を使うべきでない理由は、継承を使ったコードが読みにくく修正しにくいコードになりやすいからです。

継承されたクラスでどの機能をどのクラスに持たせて、各メンバーのpublic/protected/privateをどのように設定するかを適切に決めることは非常に困難な問題です。注意深く設計されたクラスライブラリなどでは継承を効果的に使っているものもありますが、安易に継承を使った場合はまず悪いコードになってしまいます。

継承を使って解決しようとしている課題の多くはコンポジションやインターフェースでも解決できて、そちらのほうが継承よりも良いコードになりやすい事が経験的に知られているので、継承を利用することは批判されています。

投稿2020/11/25 15:55

ku__ra__ge

総合スコア4524

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

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

Zuishin

2020/11/25 21:56 編集

> 継承を使ったコードが読みにくく修正しにくいコードになりやすいからです。 そんなことはありません。 > 継承されたクラスでどの機能をどのクラスに持たせて、各メンバーのpublic/protected/privateをどのように設定するかを適切に決めることは非常に困難な問題です。 そんなことはありません。 > 安易に継承を使った場合はまず悪いコードになってしまいます。 安易に作ったコードは継承を使わなくても悪いコードになるでしょう。 > 継承を使って解決しようとしている課題の多くはコンポジションやインターフェースでも解決できて、そちらのほうが継承よりも良いコードになりやすい事が経験的に知られているので、 「砂糖と塩の区別がつかない人が砂糖を使って作ろうとする料理の多くは塩の方が味が良くなる」みたいな理論です。砂糖の方が味が良くなる料理もたくさんあります。 結論ありきでデマを流さないでください。
gentaro

2020/11/25 23:01

継承使っちゃダメなら継承を前提にしたライブラリやフレームワークの類は全部ダメって事になるけど、世の中には継承して使ってもらうために提供されているクラス郡なんて山程あると思いますが、これは何故でしょうか。(GUIのクラス郡とか独自コレクションを実装するための派生元クラスとか) 継承を使っちゃダメなら全部自分でフルスクラッチで書く必要が出てきて、とてもじゃないけどやってられませんが。 私もコレは結論ありきすぎて、包丁で殺人ができるから包丁を禁止しろ、と言っているような回答に見えます。 継承はあくまで一つの手法であり、適切に使えば問題ないはずですし、適切でない使い方のケースだけ言及するのは理に適っていません。
episteme

2020/11/25 23:30

批判されるとしたら、それは「活用」していないからで。 継承を使うべきでないケースで継承を使うから批判されるんでしょうね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問