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