Product Design, Manufacturing & Innovation Resources
Casa » Polimorfismo (programmazione)

Polimorfismo (programmazione)

1967
  • Christopher Strachey
Area di lavoro per la programmazione informatica che dimostra il polimorfismo con frammenti di codice.

(Immagine generata a solo scopo illustrativo)

Il polimorfismo, dal greco "molte forme", permette di trattare oggetti di classi diverse come oggetti di una superclasse comune. Consente un'unica interfaccia, come ad esempio un metodo Nome, da utilizzare per una classe generale di azioni. L'azione specifica è determinata dal tipo esatto dell'oggetto in fase di esecuzione. Ciò si ottiene spesso tramite l'override dei metodi.

Il polimorfismo è un concetto potente che consente di scrivere codice flessibile e disaccoppiato. La forma più comune in OOP Il polimorfismo di sottotipo è reso possibile dall'ereditarietà e dall'override dei metodi. Quando una sottoclasse fornisce un'implementazione specifica per un metodo già definito nella sua superclasse, si parla di override. Una variabile del tipo della superclasse può fare riferimento a un oggetto di una qualsiasi delle sue sottoclassi. Quando un metodo viene chiamato su questa variabile, la versione del metodo che viene eseguita è quella appartenente alla classe effettiva dell'oggetto, non al tipo della variabile. Questa decisione viene presa in fase di esecuzione, un processo noto come dispatch dinamico o binding dinamico.

Ad esempio, si consideri una superclasse ‘Shape’ con un metodo ‘calculateArea()’. Sottoclassi come ‘Circle’ e ‘Rectangle’ possono ereditare da ‘Shape’ e fornire le proprie implementazioni specifiche di ‘calculateArea()’. Un programma può quindi avere un elenco di oggetti ‘Shape’, contenenti sia istanze di ‘Circle’ che di ‘Rectangle’. Quando si itera sull'elenco e si chiama ‘calculateArea()’ su ciascun elemento, la formula corretta verrà utilizzata automaticamente per ogni forma. Questo elimina la necessità di lunghe istruzioni "if-else" o "switch" per verificare il tipo di ogni oggetto, portando a un codice più pulito ed estensibile. Nuove forme possono essere aggiunte al sistema senza modificare il codice che le elabora.

UNESCO Nomenclature: 1203
- Informatica

Tipo

Sistema astratto

Interruzione

Incrementale

Utilizzo

Uso diffuso

Precursori

  • il concetto di puntatori di funzione in linguaggi come c
  • concetti di programmazione generica
  • ereditarietà, che fornisce la gerarchia di classi necessaria per il polimorfismo dei sottotipi
  • la necessità di sistemi software flessibili ed estensibili

Applicazioni

  • disegnare forme diverse (cerchio, quadrato) utilizzando una singola chiamata al metodo draw()
  • elaborazione di vari tipi di documenti (‘pdf’, ‘word’) con una funzione ‘print()’ generica
  • implementare user interface gestori di eventi
  • raccolte generiche che possono contenere oggetti di tipi diversi ma correlati
  • framework di iniezione di dipendenza

Brevetti:

NA

Idee e potenziali innovazioni

  • formati di serializzazione dei dati collegabili (ad esempio, json, xml, protobuf) utilizzando un'interfaccia comune
  • driver di dispositivo generici in un sistema operativo per hardware diverso
  • modello di progettazione strategica per algoritmi intercambiabili
  • pipeline di rendering universali nei motori grafici che gestiscono diversi tipi di materiali
  • sistemi middleware che elaborano vari tipi di richieste di rete
  • elaboratori di transazioni finanziarie che gestiscono diversi metodi di pagamento (carta di credito, PayPal, criptovalute)
  • framework di test A/B in grado di sostituire diversi componenti dell'interfaccia utente
  • pipeline di elaborazione dati che possono connettersi a varie fonti di dati (database, API, file)
  • sistemi di controllo robotico in grado di azionare diversi tipi di attuatori tramite un'API unificata
  • fornitori di algoritmi crittografici intercambiabili in un quadro di sicurezza
Argomenti correlati: polimorfismo, override, dispatch dinamico, binding dinamico, sottotipo, interfaccia, astrazione, programmazione orientata agli oggetti, override di metodi, runtime.

Contesto storico

Polimorfismo (programmazione)

1956
1960
1967
1967
1970
1970
1970
1953
1960
1960
1967
1970
1970
1970
1970

(se la data è sconosciuta o non rilevante, ad esempio "meccanica dei fluidi", viene fornita una stima approssimativa della sua notevole comparsa)

decimo anno anniversario

Le immagini a grandezza naturale e i download sono disponibili, gratuitamente al 100%, solo per gli utenti registrati.

> Login <