Qual è il processo di determinazione del metodo in cui una gerarchia di classi deve essere eseguita?

6

Pensavo di aver capito l'ereditarietà e il polimorfismo, ma mi è stata data questa domanda, e non posso, per la vita di me, capire quale sia la risposta corretta o a cosa stanno cercando di ottenere:

The process of determining which method in a class hierarchy should execute is known as:

  • a) inheritance
  • b) polymorphism
  • c) is-a
  • d) has-a
  • e) parent class

Osservando ognuno dei termini, nessuno di loro sembra la risposta corretta.

L'ereditarietà è proprio quando una classe ottiene automaticamente le variabili e i metodi pubblici nella sua classe genitore. Quindi chiaramente non è la risposta giusta.

Polymorphism ci permette di scrivere un metodo per gestire l'oggetto A, e come risultato funzionerà con tutto ciò che estende l'oggetto A (o continua ad estenderlo, IE Object B estende Object A. Object C estende l'oggetto B, ecc. Quindi questa chiaramente non è la risposta giusta!

Is-a : non ha alcun senso. Is-a è appena usato per dichiarare che una classe è un'istanza della sua classe genitore (il cane è un animale), quindi eredita le sue variabili e metodi pubblici. Non vedo come questo "determini quale metodo in una gerarchia di classi debba essere eseguito"

Has-a : non ho molta familiarità con questo, ma è essenzialmente composizione, dove Object-A ha-un oggetto B, ma object-B non è un'istanza di Object A Neanche questa sembra la risposta giusta

Classe genitore : questa è solo la classe base, se tracciamo l'albero dell'eredità, la parte superiore dell'albero è la classe genitore.

Qualcuno può spiegare quale termine può anche essere definito come "Il processo per determinare quale metodo in una gerarchia di classi deve essere eseguito è noto come"?

Non sto capendo uno o più termini? Si tratta semplicemente di una domanda formulata male?

    
posta user3533767 15.04.2014 - 00:05
fonte

2 risposte

11

La domanda chiede "quale processo determina quale metodo deve essere eseguito?"

Questa è una brutta domanda.

Ma possiamo eliminare immediatamente tre delle scelte: Is-A , Has-A e Classe genitore , poiché quelle sono orientato agli oggetti, ma non certo ai processi . Anche se Is-A e Has-A fossero processi, sarebbero processi che riguardano la classe e la composizione, come hai detto tu, non l'esecuzione del metodo.

L'ereditarietà è un processo (anche un concetto), un processo di che eredita i tratti della classe genitrice . Solo con questa definizione, possiamo eliminarlo.

Questo ci lascia solo con Polymorphism , che è parte del motivo per cui questa è una brutta domanda. Il polimorfismo sembra un concetto, più che un processo. Tuttavia, se considerato un processo, sarebbe un processo di "polimorfo" o "prendere una forma diversa". Una risposta su Stack Overflow dice:

So polymorphism is the ability (in programming) to present the same interface for differing underlying forms (data types).

Con questa definizione, stiamo parlando di un processo in cui un oggetto può agire come uno o più tipi reali sottostanti. Hai un'interfaccia e i tipi di dati sottostanti determinano quale metodo dovrebbe effettivamente essere chiamato.

Stiamo cercando un processo che corrisponda all'istruzione "che determina quale metodo in una gerarchia di classi deve essere eseguito" e penso che corrisponda abbastanza bene.

È anche una cattiva domanda perché quella affermazione potrebbe significare molte altre cose, e non credo che molte persone avrebbero davvero descritto la parte "determinante" come il polimorfismo - invece, considererei il polimorfismo la definizione parte.

    
risposta data 15.04.2014 - 00:30
fonte
6

Nessuna delle precedenti. Non esiste un termine universale, dipende dalla lingua e dalla comunità, ma la risposta corretta è una di

  • invio messaggi
  • invio metodo (virtuale)
  • risoluzione del metodo (virtuale)
  • ricerca metodo (virtuale)
  • ricerca vtable

o un termine simile.

    
risposta data 15.04.2014 - 02:12
fonte

Leggi altre domande sui tag