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

incollo testo interamente scritto da me, da Java/Concetti preliminari
(→‎Interfaccia pubblica e privata della classe: non esiste una "interfaccia privata"; non esistono "istanze pubbliche", né tantomeno private; non è vero che le classi interagiscono solo tramite l'interfaccia "pubblica")
(incollo testo interamente scritto da me, da Java/Concetti preliminari)
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>
 
===Sintassi 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.
 
Un campo o metodo di una classe può essere ''statico'' o no. Un membro statico si differenzia sintatticamente da uno ''di istanza'' per la presenza della parola-chiave ''static'' nella definizione. Un membro di istanza "appartiene" alle istanze della classe che lo definisce, nel senso che gli altri oggetti del programma chiamano il metodo o usano il campo appartenente alla singola istanza specifica. Un membro statico, invece, non appartiene a un certo oggetto, ma piuttosto alla classe in cui è definito.
 
La presenza dei membri statici permette di ottenere qualcosa di simile alle [[w:it:variabile globale|variabili globali]] e alle [[w:it:funzione (informatica)|funzioni]] dei linguaggi procedurali, come il C. In alcuni casi i membri statici sono indispensabili, ma farne un uso eccessivo significa allontanarsi dall'aspetto object-oriented del Java ed è sconsigliato. In Java non si parla di ''funzioni'', ma sempre e solo di ''metodi'' (anche quando sono statici).
 
==Sintassi==
La classe ha lo scopo di delineare le proprietà e le caratteristiche degli elementi che ci servono. Questi elementi possono poi essere creati realmente (''istanziati'') e diventano così “oggetti”: le istanze della classe sono gli oggetti.
La classe è un po' come un modello di qualcosa e l'oggetto è questo qualcosa realizzato concretamente. Gli elementi che compongono la classe possono essere: tipi primitivi, metodi, costruttori, oggetti di altre classi, classi stesse. Questi elementi sono tutti racchiusi in un contenitore (la classe) “class”. Vi è quindi la classe e gli oggetti: sono due cose diverse. Grazie all'esistenza delle classi possiamo creare gli oggetti. Gli oggetti sono allocati in memoria dalla JVM.