Programmazione orientata agli oggetti: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Collegamenti esterni: Aggiunto il template "FOLDOC"
m clean up, replaced: dell<nowiki>'</nowiki> → dell{{'}}, L<nowiki>'</nowiki> → L{{'}} (3)
Riga 25:
* [[#Polimorfismo|polimorfismo]].
 
L<nowiki>{{'</nowiki>}}'''incapsulamento''' consiste nella separazione della cosiddetta [[Interfaccia (informatica)#Interfaccia nella programmazione orientata agli oggetti|interfaccia]] di una classe dalla corrispondente implementazione, in modo che i client di un oggetto di quella classe possano utilizzare la prima, ma non la seconda.
 
L<nowiki>{{'</nowiki>}}'''ereditarietà''' permette essenzialmente di definire delle classi a partire da altre già definite.
 
Il '''polimorfismo''' permette di scrivere un client che può servirsi di oggetti di classi diverse, ma dotati di una stessa [[Interfaccia (informatica)#Interfaccia nella programmazione orientata agli oggetti|interfaccia]] comune; nel tempo di esecuzione tale client potrà attivare comportamenti diversi senza conoscere a priori il tipo specifico dell'oggetto che gli viene dato in ingresso.
Riga 55:
== Incapsulamento ==
{{Vedi anche|Incapsulamento (informatica)}}
L<nowiki>{{'</nowiki>}}''incapsulamento'' è la proprietà per cui i dati che definiscono lo stato interno di un oggetto e i metodi che ne definiscono la logica sono accessibili ai metodi dell'oggetto stesso, mentre non sono visibili ai client. Per alterare lo stato interno dell'oggetto, è necessario invocarne i metodi pubblici, ed è questo lo scopo principale dell'incapsulamento. Infatti, se gestito opportunamente, esso permette di vedere l'oggetto come una ''[[Modello black box|black-box]]'', cioè una "scatola nera" con la quale l'interazione avviene solo e solamente tramite i metodi definiti dall'interfaccia. Il punto è dare delle funzionalità agli utenti nascondendo i dettagli legati alla loro implementazione. Un esempio potrebbe essere un oggetto "matematica" che tra le tante operazioni che fornisce ce n'è una che moltiplica due numeri. Per esempio <kbd>moltiplica(2,3)</kbd> restituisce 6. Adesso l'algoritmo di moltiplicazione può essere uno dei tanti algoritmi che esistono però questo per chi chiama il metodo <kbd>moltiplica()</kbd> non fa nessuna differenza. L'importante è che il risultato non sia errato.
 
== Ereditarietà ==
{{Vedi anche|Ereditarietà (informatica)}}
Il meccanismo dell<nowiki>{{'</nowiki>}}''[[Ereditarietà (informatica)|ereditarietà]]'' è utilizzato in fase di strutturazione/definizione/pianificazione del software o in successive estensioni e permette di derivare nuove classi a partire da quelle già definite realizzando una gerarchia di classi. Una classe derivata attraverso l'ereditarietà (''sottoclasse'' o classe figlia) mantiene i metodi e gli attributi delle classi da cui deriva (''classi base'', ''superclassi'' o classi madre); inoltre, può definire i propri metodi o attributi, e ridefinire il codice di alcuni dei metodi ereditati tramite un meccanismo chiamato ''[[overriding]]''.
 
Quando una classe eredita da una sola superclasse si parla di eredità singola; viceversa, si parla di eredità multipla. Alcuni linguaggi (tra gli altri, Java, Smalltalk) forniscono supporto esclusivo all'ereditarietà singola. Altri (C++, Python) prevedono anche l'ereditarietà multipla.