Introduzione alle Classi e agli Oggetti in
Java
1
Paradigmi di Programmazione
Esistono diversi approcci alla programmazione, chiamati paradigmi di programmazione
programmazione imperativa: un programma specifica le azioni che devono essere eseguite
in sequenza per calcolare i risultati a partire dai dati
ƒ programmazione funzionale: un programma è la definizione di una funzione, parametrica
rispetto ai dati, che calcola i risultati
ƒ programmazione logica: un programma è la descrizione delle proprietà che devono essere
verificate dai risultati sulla base delle proprietà verificate dai dati
programmazione object-oriented (OOP): si definiscono oggetti software in grado di
interagire gli uni con gli altri attraverso lo scambio di messaggi
2
Programmazione Object Oriented
La programmazione
ad oggetti rappresenta un modo diverso di pensare alla
risoluzione dei problemi: anziché modellare il problema adattandolo alla logica del
calcolatore infatti, l’approccio orientato agli oggetti adatta il calcolatore al problema
Il problema da risolvere viene analizzato individuando delle entità indipendenti che sono in
relazione con le altre. Queste entità non vengono scelte perché facilmente traducibili nella
logica di programmazione ma in quanto esistenti nel problema in esame e caratterizzate da
vincoli che le isolano o le evidenziano dal contesto del problema stesso
Le entità vengono rappresentate come oggetti del programma: lo scopo è di ottenere una
corrispondenza biunivoca tra entità del problema e oggetti del programma. I progettisti
possono quindi concentrarsi sui dati che stanno alla base del problema anziché sulle
funzionalità del programma
3
Programmazione Object Oriented
Problema
Entità 1
Entità 2
Oggetto
1
Oggetto
2
…
Entità n
Oggetto
n
4
Classi e Oggetti nella Realtà
Le classi costituiscono un insieme di oggetti con le stesse proprietà e i medesimi
comportamenti, tranne per i valori delle proprietà
Esempio: La classe Auto è costituita da tutte le automobili:
Classe Auto
Oggetto
Audi A4
5
Oggetto reale e Oggetto software
Ciascun oggetto della realtà è:
ƒ identificabile con un nome
ƒ ha caratteristiche (proprietà) ben precise
ƒ svolge funzioni specifiche
‰Un oggetto software
non è quindi altro che:
un’ adeguata rappresentazione virtuale, nel calcolatore, di un oggetto della realtà, sia esso
concreto oppure astratto
un costrutto che incapsula uno stato e un comportamento. Gli oggetti vi permettono di
modellare il software in termini sia concretti che astratti. Più precisamente, un oggetto risulta
essere l’istanza di una classe, un concetto che spiegheremo tra poco
quindi in analogia al mondo reale, anche il software OO che può essere considerato un
6
Linguaggio Java
I linguaggi di programmazione Object Oriented come Java forniscono astrazioni che
consentono di rappresentare direttamente nel dominio della soluzione gli elementi che
compaiono nel dominio del problema
Il dominio è l’area di validità di un problema: l’insieme dei concetti che rappresentano gli
aspetti importanti del problema che state cercando di risolvere
Il paradigma di programmazione Object Oriented focalizza l’attenzione verso I dati.
L’applicazione è suddivisa in un insieme di Oggetti in grado di interagire tra loro
Un programma Java è essenzialmente un insieme di classi, non esistono funzioni definite
(come in C) a livello esterno, né variabili globali esterne e anche il main è definito dentro a
una classe
7
Oggetti Software
Un oggetto software ha:
ƒ un nome — che permette di referenziarlo con una identificazione univoca
ƒ uno stato — un insieme di proprietà che lo caratterizzano
ƒ un comportamento — un insieme di operazioni che sa eseguire
• si può richiedere a un oggetto software di eseguire una operazione mediante l’invio di un messaggio
• l’uso di un oggetto software è descritto dalla sua interfaccia
8
Cos’è una Classe?
Una classe definisce gli attributi e i comportamenti che distinguono un oggetto di un certo
tipo
Gli attributi costituiscono le caratteristiche esteriori di una classe: per esempio, l’altezza e il
colore dei capelli sono gli attributi di un uomo
Un attributo di un oggetto può essere un collegamento diretto ad alcune sue variabili interne,
oppure il valore restituito da un suo metodo
Per comportamento si intende l’azione eseguita da un oggetto dopo aver passato un
messaggio o in risposta al cambiamento di uno stato
Un programma viene realizzato progettando e realizzando il codice sotto forma di classi ossia è
Classe = dati (attributi o proprietà) + metodi
costituito da oggetti software (istanze di classi) che interagiscono tra di loro
9
Classi in Java
Una Classe è una collezione di Oggetti e metodi
Una classe in Java definisce un insieme di oggetti con le stesse caratteristiche
Il nome del file della Classe Java (.java) deve avere lo stesso nome della Classe
Per esempio:
la classe Studente: insieme degli oggetti Studente
La classe Auto: insieme degli oggetti Auto
La classe Telefono: insieme degli oggetti Telefono
10
Classi e Oggetti in Java
Esclusi i tipi primitivi (boolean, char, byte, short, int, long, float, double), in Java esistono solo:
• classi
– componenti software che possono avere i loro dati e le loro funzioni
– vengono usate come “struttura” per costruire oggetti
• oggetti
– entità dinamiche costruite al momento del bisogno secondo la definizione di una classe che ne descrive le
proprietà
11
Oggetti e Metodi
Gli Oggetti sono elementi di una classe con uguali caratteristiche
Ogni Metodo è un insieme di istruzioni che una classe o un oggetto rendono
disponibili ad altre classi e/o oggetti, affinché possa essere eseguito su
richiesta
Non occorre preoccuparsi della distruzione degli oggetti: Java ha un garbage
Metodi:
collector
‒
‒
Esempio: oggetto Semaforo
‒
‒
Accendi
Spegni
Diventa Verde
ecc.
Dati:
‒
‒
‒
‒
Tecnologie
Colori
Anno Produzione
ecc.
12
Come definire le Classi in Java
Definire una classe in java equivale al creare un nuovo tipo di dato (una nuova classe di oggetti)
Sintassi:
class <nome_classe>
{
<definizioni di attributi>
<costruttori>
<definizioni di metodi>
}
La parentesi graffa aperta indica
l’inizio del codice della classe
Esempio:
class Semaforo {
...
}
La parentesi graffa chiusa indica
la fine del codice della classe
13
Classi: definizione degli attributi
Gli attributi di una classe definiscono la struttura dello stato degli oggetti che vi
appartengono
Ogni attributo è definito usando la stessa sintassi usata per la definizione delle variabili locali
Convenzioni: scrivere gli attributi in minuscolo (tecnologia e non Tecnologia)
Sintassi: ogni attributo è definito usando la stessa sintassi usata per la definizione delle
variabili locali
<Tipo> nomeAttributo;
Esempio:
class Semaforo {
String tecnologia;
}
14
Classi: definizione dei Metodi
I metodi di una classe definiscono il comportamento degli oggetti che vi appartengono
Sintassi
<tipoRitornato> <nomeMetodo> ([<listaPparametri>])
{
<corpo_metodo>
}
String getTecnologia() {
return tecnologia;
}
String è il tipo di dato che
restituisce il metodo
etodo
void per i metodi che non ritornano alcun valore
15
Classi: il Costruttore
Per la creazione degli oggetti si utilizza un metodo particolare che automatizza l’inizializzazione degli
oggetti, il Costruttore.
Il nome del costruttore deve coincidere con quello della classe
In una stessa classe possono essere definiti più Costruttori ma con firme diverse (cioè i parametri formali
devono differire nel tipo e/o nel numero). Se non viene specificato nemmeno un Costruttore, per default
si ha quello senza argomenti.
//Costruttore senza parametri
public Semaforo() {
...
}
//Costruttore con un parametro
public Semaforo(String tecnologieSemaforo) {
tecnologia = tecnologieSemaforo;
}
16
Dichiarazioni delle Classi
La dichiarazione di classe introduce un nuovo tipo di dato (la classe stessa), i cui elementi
saranno i suoi oggetti
Nella classe vengono dichiarati:
i costruttori, che determinano le modalità di creazione degli oggetti;
le variabili o attributi di istanza, che costituiscono lo stato degli oggetti;
i metodi di istanza, che realizzano le funzionalità degli oggetti.
Quando un oggetto viene creato con new, gli viene associata una copia di ogni variabile di17
istanza
Esempio: la Classe Contatore
La classe descrive l’entità reale di un Contatore intero. Il valore iniziale del Contatore è zero
ed è possibile incrementarlo di una unità tramite un metodo
Attributi
public class Contatore {
private int valore;
public String tecnologia;
public void incrementa () {
valore++;
}
Metodi
metodo costruttore: ha lo
stesso nome della classe.
Usato per creare nuovi
oggetti
18
Esempio: la Classe Contatore
La classe descrive l’entità reale di un Contatore intero. Il valore iniziale del Contatore è zero ed è possibile incrementarlo di una unità tramite un metodo
public class Contatore {
private int valore;
public String tecnologia;
public void incrementa () {
valore++;
Attributi
}
public void reset() {
valore=0;
}
public int getValore() {
Metodi
return valore=0;
}
public Contatore() {
valore=0;
}
}
19
Creazione di Oggetti
La creazione di un oggetto è un processo costituito dalle seguenti fasi:
Allocare lo spazio di memoria necessario a contenere l'oggetto
Inizializzare le variabili di istanza dell'oggetto
Per contenere un oggetto la quantità di memoria necessaria è determinata soltanto dalla
dichiarazione della classe (precisamente, dal numero e dal tipo delle variabili di istanza)
Lo spazio necessario viene allocato in una zona di memoria chiamato heap.
20
Creazione di Oggetti
Per creare un oggetto:
prima si definisce un riferimento, il cui tipo è il nome della classe che fa da modello
poi si crea dinamicamente l’oggetto tramite l’operatore new
Una volta creato un oggetto si possono invocare i metodi che sono stati definiti nella classe di
appartenenza
Esempio:
Contatore counter;
// dichiarazione oggetto, riferimento
counter = new Contatore(); // creazione oggetto – valore è zero
21
Creazione di Oggetti
Per accedere ad un attributo di istanza di un oggetto, si usa la sintassi:
<Oggetto>.<NomeAttributo>
per invocare un metodo, si usa la sintassi
<Oggetto>.<nomeMetodo>(<Parametri>)
Contatore counter;
// dichiarazione oggetto
counter = new Contatore(); // creazione oggetto – valore è zero
counter.tecnologia = “Metal - Led”; // accesso attributo tecnologia
counter.incrementa();
// invocazione metodo – valore è 1
22
I Programmi in Java
Essenzialmente un programma Java è un insieme di classi e oggetti
Le classi sono componenti statici ed esistono già all’inizio dell’esecuzione del programma
Gli oggetti sono componenti dinamici, e vengono creati dinamicamente al momento del bisogno
Un semplice programma Java è costituito da una singola classe, quindi un singolo
componente software
E’ formata dalla sola parte statica in cui si definisce una singola funzione (statica): il main
main è una funzione pubblica che non può avere valore di ritorno (è void), prende come argomento
un array di String che possono essere anche non usati.
Esempio:
public static void main(String args[]) {
...
}
23
Esempio di un Programma
Il nostro esempio è costituito da due classi
una di nome Test e definisce il main
un’altra di nome Contatore che implementa il tipo Contatore (mostrata in precedenza)
public class Test {
public static void main(String args[]) {
Contatore counter = new Contatore ();
counter.incrementa();
//dichiarazione e creazione oggetto
//invocazione metodo
System.out.println(counter .getValue()); // System.out.println permette la stampa a video
// in questo caso stampa il valore di counter
}
}
24
File Test.java