Programmazione orientata agli oggetti: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Collegamenti esterni: Rimosso link promozionale +fix stile
22denny91 (discussione | contributi)
Nessun oggetto della modifica
Riga 5:
 
Tra gli altri vantaggi della programmazione orientata agli oggetti:
* essa fornisce un supporto naturale alla modellazione [[software]] degli oggetti del mondo reale o del modello astratto da riprodurre;
* permette una più facile gestione e manutenzione di progetti di grandi dimensioni;
* l'organizzazione del [[codice sorgente|codice]] sotto forma di [[Classe (informatica)|classi]] favorisce la [[modularità]] e il [[riuso di codice]].
Riga 38:
 
La classe è composta da:
* ''attributi'' (analoghi ai membri di un [[Struttura dati#Record o struttura|record]]), ossia [[variabile (informatica)|variabili]] e/o [[costante (informatica)|costanti]] che definiscono le caratteristiche o proprietà degli oggetti instanziabiliistanziabili invocando la classe; i valori inizializzati degli attributi sono ottenuti attraverso il cosiddetto [[Costruttore (informatica)|costruttore]];
* ''metodi'', ossia [[funzione (informatica)|procedure]] che operano sugli attributi.
 
Riga 47:
=== Oggetti ===
{{vedi anche|Oggetto (informatica)}}
Un oggetto è una istanza di una classe. Esso è dotato di tutti gli attributi e i metodi definiti dalla classe, ede agisce come un fornitore di "messaggi" (i metodi) che il codice eseguibile del programma (procedure o altri oggetti) può attivare su richiesta.<br />
Inviare un messaggio ad un oggetto significa, in gergo, invocare un metodo su quell'oggetto. Il metodo riceve come parametro (spesso implicito) l'oggetto su cui è stato invocato, che può essere referenziato tramite una parola-chiave o una sintassi apposita, anche se è passato come parametro implicito; per esempio, in [[C++]], in [[Java (linguaggio di programmazione)|Java]], e in [[C sharp|C#]] si usa la parola-chiave <code>this</code> (<code>$this</code> in PHP), mentre in [[Smalltalk]], in [[Objective C|Objective-C]], [[Python]] e in [[Ruby (linguaggio di programmazione)|Ruby]] si usa la parola-chiave <code>self</code>.
 
Riga 57:
== Incapsulamento ==
{{Vedi anche|Incapsulamento (informatica)}}
L{{'}}''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, cene n'èha una che moltiplica due numeri. Per esempio <kbd>moltiplica(2,3)</kbd> restituisce 6. Adesso lL'algoritmo di moltiplicazione può essere uno dei tanti algoritmi che esistonoesistenti, però questo per chi chiama il metodo <kbd>moltiplica()</kbd> non fa nessuna differenza. L'importante è che il risultato non sia errato.
 
== Ereditarietà ==
Riga 88:
== Polimorfismo ==
{{Vedi anche|Polimorfismo (informatica)}}
Nella programmazione ad oggetti, con il nome di polimorfismo per inclusione, si indica il fatto che lo stesso codice eseguibile può essere utilizzato con istanze di classi diverse, aventi una ''superclasse'' comune.
 
=== Binding dinamico o polimorfismo orizzontale ===