Programmazione orientata agli oggetti: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Bot: piping superfluo nei wikilink
- NPE in Java (perché non c'entra con il resto del paragrafo)
Riga 69:
==Polimorfismo==
 
La possibilità che le classi derivate implementino in modo differente i metodi e le proprietà dei propri antenati rende possibile che gli oggetti appartenenti a delle sottoclassi di una stessa classe rispondano diversamente alle stesse istruzioni. Ad esempio in una gerarchia in cui le classi Cane e Gatto discendono dalla SuperClassesuperclasse Animale potremmo avere il metodo mangiacosaMangia() che restituisce la stringa "osso" se eseguito sulla classe Cane e "pesce" se eseguito sulla classe Gatto. I metodi che vengono ridefiniti in una sottoclasse sono detti "'''polimorfi'''", in quanto lo stesso metodo si comporta diversamente a seconda del tipo di oggetto su cui è invocato.
 
In linguaggi in cui le variabili non hanno tipo, come [[Ruby]], [[Python]] e [[Smalltalk]] è possibile richiamare un qualsiasi metodo su di un qualsiasi oggetto, quindi il polimorfismo è molto più esteso, sebbene ciò comporti la possibilità di errori a runtimerun-time, che in particolare sorgono quando l'oggetto non dispone del metodo che si cerca di invocare.
Tali errori sono eliminabili da linguaggi puramente statici, main ciòquanto èessi possibilevengono solamente"scovati" riducendonegià l'espressivitàa oppure accettando dei ''buchi'' nel type system (i NullPointerException di Java, ad esempio)compile-time.
 
Le buone regole di programmazione ad oggetti prevedono che quando una classe derivata ridefinisce un metodo, il nuovo metodo abbia la stessa semantica di quello ridefinito, dal punto di vista degli utenti della classe.