Differenze tra le versioni di "Java/Classi e oggetti"

m
 
== Introduzione ==
Un oggetto può essere considerato come un insieme di dati (memorizzati nei campi) e di [[Java/Metodi|operazioni]] (definite dai metodi). Ogni oggetto dovrebbe rappresentare un elemento della vita reale e gli aspetti che lo identificano sono raggruppati insieme in un unico punto del programma, cioè la definizione della classe da cui è stato istanziato l'oggetto.
 
Una '''classe''' è un tipo di dato creato dal programmatore, ed è usata come "stampo" per la creazione di [[w:Programmazione orientata agli oggetti|oggetti]].
 
Un oggetto può essere considerato come un insieme di dati (memorizzati nei campi) e di [[Java/Metodi|operazioni]] (definite dai metodi). Ogni oggetto dovrebbe rappresentare un elemento della vita reale e gli aspetti che lo identificano sono raggruppati insieme in un unico punto del programma, cioè la definizione della classe da cui è stato istanziato l'oggetto.
 
Questo è in analogia con i tipi primitivi, per i quali ogni valore rappresenta un dato semplice (es. un numero) su cui sono definite delle operazioni (es. gli operatori aritmetici). Il vantaggio delle classi sui tipi primitivi è che esse permettono la definizione di un numero potenzialmente illimitato di operazioni. Ognuna delle operazioni è chiamata ''metodo'' ed ha un nome alfanumerico ad esso associato.<ref>In realtà il nome da solo non è sufficiente per identificare un metodo: gli elementi che lo identificano sono collettivamente chiamati ''signature'' del metodo e comprendono anche altri elementi. Si veda la [[Java/Oggetti#Overloading|sezione]] sull'overloading dei metodi.</ref>
 
=== In altre parole... ===
Il concetto di partenza è che è possibile raggruppare insieme una struttura dati e un insieme di operazioni definite su questa struttura dati. L'insieme viene chiamato "oggetto". La classe non fa altro che stabilire
*come è fatta la struttura dati in questione
*quali sono le operazioni che l'oggetto consente ad altri oggetti di invocare
*l'implementazione di queste operazioni.
Si dice che un oggetto è ''istanza'' di una classe se è quella la classe che definisce la struttura dati e le operazioni che appartengono all'oggetto in questione.
 
La struttura dati viene definita da un insieme di ''campi'': variabili "di proprietà" dell'oggetto che vengono allocate in memoria quando l'oggetto viene creato e deallocate quando l'oggetto viene ''garbage-collected''. Le operazioni, invece, sono chiamate ''metodi'' e sono costituite da una sequenza di istruzioni che possono eventualmente fare uso dei campi dell'oggetto o anche di altre operazioni definite da quello o da altri oggetti. Si dice che un metodo viene ''chiamato'' o ''invocato'' su un certo oggetto.
 
Ogni metodo è dotato di una ''signature'': tipo di ritorno, nome del metodo e lista di argomenti. Nella definizione del metodo sono presenti anche altri metadati, ma quelli che distinguono univocamente un metodo tra gli altri di una certa classe (la ''[[w:it:Firma (programmazione)|signature]]'', appunto) sono questi.