Sei sulla pagina 1di 12

Lezione 04.10.

2021

Noi progettiamo classi tipicamente


per creare TIPI che in java non
esistono. Java ha una libreria
immensa di classi già testate e
robuste, ovvero tollerante ai
guasti. Se noi abbiamo un
problema risolvibile con una classe
di java già esistente, conviene
usare quella e non crearne una da
zero.
In generale si parla di PROVIDER
CLIENT, io sono client della classe
che ci fornisce il provider, ovvero
java.
Il tipo Razionale, per fare dei
calcoli precisi con le frazioni, in
java non è stato implementato.
Il linguaggio java si definisce
ESTENDIBILE, perché è sempre
possibile creare delle nuove classi
all’occorrenza.
Gli oggetti della classe Razionale
sono IMMUTABILI, una volta
definito resta tale. Posso operare
tra due razionali, ad esempio
facendo l’addizione, però vado
sempre creare un nuovo oggetto, i
primi due non vengono toccati.
In java, quando possibile, è meglio
creare classi di oggetti immutabili.
Siccome i campi, che costituiscono
lo stato della classe, sono
immutabili, li imposto come
variabili FINAL.
Essendo i campi NUM e DEN final
(costanti), si potrebbero benissimo
rendere public ed evitare così i
metodi accessori getNum() e
getDen(). Tuttavia: è sempre
buona norma evitare di esporre i
dettagli sull'organizzazione interna
di una classe ai suoi clienti, per
non introdurre nei clienti
eccessive dipendenze.
I setter ovviamente non vanno
inseriti.
In java una directory equivale ad
un package. La directory windows
in cui sono contenuti i file java, è
un package a tutti gli effetti. I file
che appartengono allo stesso
package sono familiari tra di loro.
Quando usiamo una classe
precedentemente sviluppata che
non è nello stesso package,
bisogna importarla.
Quando vado a fare l’operazione
di moltiplicazione di due razionali,
ottengo una frazione non ridotta
ai minimi termini, però nella
return io passo dal costruttore
Razionale, che mi crea una nuova
frazione con il numeratore uguale
al prodotto tra i due numeratori
delle frazioni moltiplicate (lo
stesso per il denominatore) e la
riduce ai minimi termini. Ogni
volta che si passa dal costruttore
viene applicata una
semplificazione automatica.
La classe Razionale ammette due
metodi mul() in overloading il cui
uso è chiaramente distinto dal tipo
del parametro. La seconda mul() è
utile ad es. per ottenere il
razionale opposto di un dato
razionale:
r2=r1.mul(-1);
Overloading dei metodi

In una classe Java possono


comparire più metodi (anche
costruttori) con lo stesso nome
(overloading o metodi
“sovraccarichi”).
Java richiede che i metodi
overloaded siano differenziati dal
numero e/o tipi dei parametri in
modo che sia sempre univoco
distinguere, staticamente, quale
metodo va invocato.
Java capisce da solo quale metodo
utilizzare in base ai parametri che
passo al metodo.
Quando si scrive una classe java è
importante essere CONSISTENTI,
ovvero bisogna avere un certo
rigore e una certa coerenza nello
scrivere i vari metodi. Se due
metodi svolgono circa le stesse
funzioni, potrebbe essere fonte di
equivoci scriverli in modo
completamente diverso.

CONCATENAZIONE DELLE
INVOCAZIONI DEI METODI

Razionale r1= new


Razionale(14,18);
Razionale r2= new
Razionale(8,12);
Razionale r3= new Razionale(3,9);
Razionale ris= r1.add(r2).mul(r3);

il risultato di r1.add(r2) restituisce


un Razionale e su questo razionale
posso chiamare mul() che si
applica al risultato di add(). Si dice
che le invocazioni dei metodi sono
state concatenate.

Perché il main è static? Perché


quando mandiamo in esecuzione il
programma ancora non abbiamo
oggetti, io per creare oggetti devo
far partire il programma, ma non
ho oggetti inizialmente, quindi
l’unica soluzione è battezzarlo
static. Il main viene fatto partire
sulla classe.

In java un oggetto continua ad


esistere quando c’è qualche
variabile che lo punta, se l’oggetto
non viene puntato da nulla,
diventa parte della garbage
collection. Ci sono dei momenti in
cui viene attivato il garbage
collector che noi non conosciamo,
dipende da quanta memoria è
ancora disponibile.
Entità di classe e entità di classe

● (non static) Variabili come NUM


e DEN nella classe Razionale e
metodi come add e sub etc.
costituiscono attributi d’istanza,
dal momento che hanno rilevanza
per ogni singolo oggetto. Tali
entità preseppongono l’uso del
this.
●(static) Variabili come
contaRazionali e metodi come
razionaliCreati, costituiscono
entità di classe, ossia che hanno
rilevanza di classe
indipendentemente da qualsiasi
istanza. Si rifletta che il loro
significato sussiste anche quando
nessun oggetto Razionale è stato
creato, quindi non si basano su
this.

Potrebbero piacerti anche