web-dev-qa-db-ja.com

クラス階層のどのメソッドを実行する必要があるかを決定するプロセスは何として知られていますか?

私は継承と多態性を理解していると思っていましたが、この質問を与えられました、そして私の人生の中で、適切な答えが何であるか、または彼らが何を目指しているのか理解できません。

クラス階層のどのメソッドを実行するかを決定するプロセスは、次のように知られています。

  • a)継承
  • b)ポリモーフィズム
  • c)is-a
  • d)has-a
  • e)親クラス

それぞれの用語を見ると、どれも適切な答えのようには見えません。

継承は、クラスがその親クラスのパブリック変数とメソッドを自動的に取得するときです。したがって、これは明らかに正しい答えではありません。

Polymorphismを使用すると、オブジェクトAを処理する1つのメソッドを記述できます。その結果、オブジェクトAを拡張するすべてのオブジェクトを操作できます(またはオブジェクトAを拡張し続けると、IEオブジェクトBオブジェクトAを拡張します。オブジェクトCはオブジェクトBを拡張します。そのため、これは明らかに正しい答えではありません。

Is-a:これは意味がありません。 Is-aは、クラスがその親クラス(犬は動物)のインスタンスであることを宣言するために使用されるだけなので、パブリック変数とメソッドを継承します。これが「クラス階層内のどのメソッドを実行する必要があるかを決定する」方法がわかりません

Has-a:私はこれにはあまり詳しくありませんが、それは本質的に構成です。Object-AにはObject Bがありますが、object-BはObject Aのインスタンスではありません。これはどちらも正しい答えではないようです

親クラス:これは単なる基本クラスです。継承ツリーをたどると、ツリーの一番上が親クラスです。

「クラス階層のどのメソッドを実行するかを決定するプロセスは、次のように呼ばれます」

1つ以上の用語を理解していませんか?これは単に下品な質問ですか?

6
user3533767

「どのprocessがどのメソッドを実行するかを決定しますか?」

これは悪い質問です。

しかし、3つの選択肢をすぐに排除できます:Is-AHas-AParent Class、これらはオブジェクト指向ですが、必ずしもそうではありませんプロセス。 Is-AとHas-Aがプロセスであったとしても、メソッドの実行ではなく、クラスと構成に関するプロセスになります。

継承はプロセス(これも概念)であり、親クラスの特性を継承するプロセスです 。その定義だけで、それを排除できます。

Polymorphismのみが残り、これがなぜこれが悪い質問なのかという理由の一部です。ポリモーフィズムは、プロセスというよりも概念のように聞こえます。しかし、これをプロセスと考えると、「ポリモーフィング」または「別の形をとる」プロセスになります。 スタックオーバーフローの回答 は次のように述べています。

つまり、ポリモーフィズムとは、(プログラミングにおいて)異なる基礎となるフォーム(データ型)に対して同じインターフェースを提示する機能です。

その定義では、オブジェクトが1つまたは複数の基になる実際の型として機能できるプロセスについて説明しています。インターフェースがあり、基礎となるデータ型によって、どのメソッドが実際に呼び出されるかが決定されます。

ステートメントに一致するプロセスを探しています。「クラス階層内のどのメソッドを実行するかを決定する」と一致していると思います。

これは悪い質問でもあります。そのステートメントは他の多くのことを意味する可能性があり、多くの人が実際に「決定」部分を多態性であると説明することはないと思います。代わりに、多態性を定義部分と見なします。

11
Nicole

上記のどれでもない。普遍的な用語はありません、それは言語とコミュニティに依存しますが、正しい答えは

  • メッセージディスパッチ
  • (仮想)メソッドのディスパッチ
  • (仮想)メソッド解決
  • (仮想)メソッド検索
  • vtableルックアップ

または同様の用語。

6
Jörg W Mittag