Java/Classi e oggetti: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: accenti |
Nessun oggetto della modifica |
||
Riga 1:
{{java}}
Vediamo uno dei componenti fondamentali dei programmi in
== Classe ==
Una '''classe''' è
<br/>
Con l'evolversi dell'informatica e il crescere della complessità delle applicazioni, i programmatori hanno trovato sempre più difficile trovare gli errori nei codici già scritti, riutilizzare codice scritto per altri programmi e modificare funzionalità già esistenti senza effetti collaterali imprevedibili.
La soluzione a questi problemi è rendere la programmazione più '''astratta''' e '''modulare'''. Se un codice è diviso in parti ben precise che si occupano di aspetti specifici dell'applicazione e queste parti presentano all'esterno delle interfacce che specificano quali operazioni possono compiere, poi è più facile per il programmatore individuare un errore o riutilizzare delle funzionalità, proprio perché circoscriverà la manipolazione alla parte che gli serve.
Immaginiamo di dover fare un programma per gestire gli stipendi: creeremo un vettore di stringhe per il nome, un altro per il cognome e un vettore di int per gli stipendi. Dopo aver creato i codici che chiedono i dati e li inseriscono o li mostrano a richiesta il programma funziona e siamo contenti.
Dopo qualche anno, però, l'azienda apre una filiale negli USA. Dobbiamo quindi riadattare il programma perché gestisca anche i dollari.
Creiamo un vettore stringa che contenga l'indicazione della valuta e riadattiamo tutto il programma per gestirla. Peccato che l'azienda decida poi di aprire una filiale in India. Adattiamo il programma anche alle Rupie e i dipendenti indiani ricevono uno stipendio ridicolo.
Perché? Perché quando avevamo due valute abbiamo creato un if di questo tipo:
'' IF la valuta è EUR applica questo valore, ELSE quest'altro''
che ora, nel caso di tre valute possibili non è più corretto.
Per evitare di passare notti insonni a affrontare situazioni del genere sarebbe bello poter definire un tipo di dato "Dipendente" e dargli tutte le caratteristiche del dipendente (nome, ruolo, stipendio) in modo da condensare in esso tutto ciò che riguarda la sua logica di gestione e creare il resto del programma richiamando le funzioni interne di Dipendente. Aggiungere una nuova caratteristica al dipendente vorrebbe dire modificare solo il tipo di dato Dipendente e non tutto il programma.
Per questa operazione esiste la classe.
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 ha lo scopo di delineare le proprietà e le caratteristiche degli elementi che vi fanno parte. 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 progetto 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, cicli, 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.
Per creare una classe devo usare la parola chiave <tt>class</tt> con questa sintassi:
Line 23 ⟶ 39:
</source>
la classe Dipendente potrebbe essere
<source lang=java>
public class Dipendente {
public int stipendio;
public String valuta;
public String nome, cognome;
public static void main (String args[]) {
System.out.println("Hello, world!");
}
}
</source>
Si riporta l'esempio funzionante del capitolo "[[java/Primo_programma|Primo programma]]" della classe HelloWorld:
Line 38 ⟶ 69:
== Interfaccia pubblica e privata della classe ==
Una classe è un '''tipo di dati astratto''' (TDA)
Esattamente come ci sono i tipi primitivi cosi ci sono i TDA del programmatore che si usano in maniera simile, tuttavia, mentre per i primitivi si parla di variabili, per i TDA si parla di oggetti. Inoltre, gli oggetti e i primitivi vengono allocati nella memoria in modalità e posizione diverse (rispettivamente nello heap e nello stack, per chi fosse interessato al lato più tecnico). Guardiamo come si dichiarano e inizializzano.
Per dichiarare un intero devo usare l'istruzione:
|