Condizioni per usare il polimorfismo

-1

è il polimorfismo possibile solo quando esiste uno scenario di ereditarietà o l'implementazione del polimorfismo non dipende dall'ereditarietà.

O il polimorfismo è utile soprattutto quando c'è ereditarietà?

    
posta David 01.06.2014 - 20:35
fonte

3 risposte

4

Il polimorfismo nell'informatica è un termine più ampio di quello che la tua domanda suggerisce:

  • polimorfismo ad hoc, supportato come sovraccarico di funzioni;
  • polimorfismo parametrico, come realizzato in contenitori generici come List<T> ;
  • polimorfismo dinamico, o sottotipizzazione, che si basa sul principio di sostituzione di Liskov.

Solo l'ultimo modulo è basato sull'ereditarietà. Vedi link

    
risposta data 01.06.2014 - 20:47
fonte
3

Il polimorfismo non è correlato all'ereditarietà.

Esistono diversi tipi di polimorfismo:

  • Polimorfismo parametrico : qui, una subroutine è parametrizzata su un tipo, il che significa che non conosce nulla sul tipo. Se non sa nulla, allora ovviamente non sa nemmeno di una relazione di ereditarietà. Esempi sono una subroutine per calcolare la lunghezza di una lista, non ha bisogno di sapere nulla sui tipi di contenuti della lista. (Un altro nome comune per questo tipo di polimorfismo è Generics .)

  • Polymorphism ad-hoc : contrariamente al polimorfismo parametrico, dove la subroutine non si preoccupa del tipo e si comporta identicamente per ogni tipo, con polimorfismo ad-hoc, ci sono implementazioni ad hoc della subroutine per ogni tipo, in modo che la subroutine si comporti diversamente per ciascun tipo. (Un altro nome comune per questo tipo di polimorfismo è Sovraccarico .)

  • Polymorphism di inclusione : questo implica una sorta di relazione di sottotipo. (Nota: la sottotipizzazione è non uguale all'ereditarietà, anche se linguaggi come Java e C # confondono i due. In OCaml, ad esempio, esistono entrambi ma sono concetti diversi e distinti.) Il polimorfismo di inclusione significa che un'istanza di un sottotipo può essere trattata come un'istanza di un supertipo. (Il Principio di sostituzione di Liskov ci dice come assicurarsi che sia sicuro.) (Un altro nome comune per questo tipo di polimorfismo è Polymorphism di sottotipo .)

L'ereditarietà può essere utilizzata nel polimorfismo ad-hoc per condividere il codice tra diverse implementazioni di subroutine per evitare la duplicazione del codice. Ma è puramente un metodo per ridurre la duplicazione del codice, non è né necessario né sufficiente per il polimorfismo ad-hoc.

    
risposta data 01.06.2014 - 22:04
fonte
-3

Se non hai sentito parlare di Iniezione delle dipendenze, penso che valga la pena dare un'occhiata. L'implementazione di DI mi ha davvero aiutato a comprendere meglio il polimorfismo, a costruire / testare istanze o oggetti, ecc. Ecco alcuni buoni tutorial:

DI per principianti

Struttura di base / concetti di superficie

    
risposta data 01.06.2014 - 21:04
fonte

Leggi altre domande sui tag