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

<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 possonopossano compiere (specifica), indipendentemente da '''come''' poi le compiano (implementazione) 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.
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 che ne fa uso.
Per questa operazione esiste la classe.
 
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.
 
Per esempio, ''Mario'' è un'istanza della classe ''Dipendente'', ossia un oggetto di tipo Dipendente.
 
Per creare una classe devo usare la parola chiave <tt>class</tt> con questa sintassi:
public String valuta;
public String nome, cognome;
public static void main promuovi(String args[]) {
//promuovo il dipendente aumentando del 10% lo stipendio
System.out.println("Hello, world!");
this.stipendio=this.stipendio*(1.1);
}
}
</source>
 
Si noti che dentro la classe abbiamo definito delle variabili che rappresentano le caratteristiche (dette '''attributi''') di un dipendente.
Osserviamo che le dichiarazioni di variabili sono precedute dalla parola <source lang=java>public</source>: significa che il valore dell'attributo sarà modificabile dall'esterno della classe (la possibilità di leggere e scrivere un attributo è detta '''visibilità'''). Altre visibilità possibili sono:
{|
|'''modificatore di visibilità'''
|'''effetto'''
|-
|public
|visibile da qualsiasi parte del programma
|-
|private
|visibile '''solo''' dall'interno della classe stessa
|-
|protected
|visibile solo dalle classi dello stesso package
|-
|friendly
|visibile dallo stesso package o dalle classi che ereditano. È la visibilità assegnata di default se non viene specificato nulla.
|}
 
Si riporta l'esempio funzionante del capitolo "[[java/Primo_programma|Primo programma]]" della classe HelloWorld:
27

contributi