9) Gerarchia delle classi / Classi astratte / Interfacce / Eccezioni

Transcript

9) Gerarchia delle classi / Classi astratte / Interfacce / Eccezioni
●
Gerarchia delle classi
●
Classi astratte
●
Interfacce
●
(Eccezioni)
Laboratorio di Programmazione - Esercitazioni
1
Gerarchia delle classi
●
●
●
Una sottoclasse eredita metodi, variabili, etc.
dalla superclasse...
Per l'implementazione di una sottoclasse, si
utilizza la parola chiave “extends” al momento
della dichiarazione della sottoclasse:
es.:
class A extends B
// A è sottoclasse di B
{...};
Laboratorio di Programmazione - Esercitazioni
2
Esercizio 1
●
●
●
●
●
Si scriva una classe Veicolo nella quale compaiono alcune variabili
significative quali il numero di posti del veicolo e il numero di ruote del
veicolo (si scrivano anche i metodi getRuote(), getPosti());
Si scriva poi una classe Automobile che estenda la classe Veicolo,
nella quale compaia una variabile Cavalli e si implementi il metodo
getCavalli().
E' possibile utilizzare il costruttore della superclasse Veicolo per
creare un oggetto della classe Automobile? Si riscriva il costruttore
della classe Automobile per fare in modo che venga inizializzato
anche il numero di cavalli al momento della creazione dell'oggetto
Automobile.
Hint → Per maggiore chiarezza, si implementino le due classi in due
file .java separati (per semplicità sarebbe possibile implementare le
due classi anche nello stesso file!).
Si effettui l'override del metodo ToString per fare in modo che un
Laboratorio di Programmazione - Esercitazioni
oggetto di tipo Automobile mostri anche i cavalli.
3
Soluzione esercizio 1
●
060_ClassiVeicoloEAutomobile
Laboratorio di Programmazione - Esercitazioni
4
Classi astratte
●
●
In una classe astratta vengono dichiarati dei
metodi senza fornirne l'implementazione, che
viene demandata alle sottoclassi.
Un metodo viene dichiarato astratto per mezzo
della parola chiava “abstract” (anche la classe
sarà “abstract”).
Laboratorio di Programmazione - Esercitazioni
5
Esercizio 2
●
●
Si implementi una classe per la rappresentazione di oggetti di tipo “Lavabo”. Siano
poi “LavaboCubico” e “LavaboCilindrico” due sottoclassi della classe “Lavabo”, dotate
di opportuni costruttori.
Il costruttore della classe “Lavabo” sia:
Lavabo(double portataRubinetto),
dove il parametro passato come argomento rappresenta il valore in litri/minuto della
portata del rubinetto associato al lavabo.
●
●
●
Nella classe “Lavabo” si dichiari un metodo “getCapienza” che calcoli la capienza del
lavabo. Tale metodo sarà di tipo astratto (la capienza del lavabo cubico è diversa
dalla capienza del lavabo cilindrico), dunque dovrà essere implementato (in modo
differente!) nelle due sottoclassi.
Si aggiunga poi alla classe “Lavabo” un metodo getTempoRiempimento() che
restituisca il tempo di riempimento del lavabo. E' necessario dichiarare astratto tale
metodo?
Si scriva un main che calcoli il tempo di riempimento per due lavabi diversi, uno
cilindrico ed uno cubico.
Laboratorio di Programmazione - Esercitazioni
6
Soluzione esercizio 2
●
061_Idraulico
Laboratorio di Programmazione - Esercitazioni
7
Classi astratte e interfacce
●
●
●
A differenza di una classe astratta, in un'interfaccia
compaiono solo i prototipi dei metodi (nella classe
astratta alcuni metodi possono essere implementati).
L'interfaccia viene definita per mezzo della parola
chiave “interface” (al posto della parola chiave “class”).
Una classe può estendere un'interfaccia (parola
chiave “implements”), in tal caso dovrà fornire
l'implementazione dei metodi presenti nell'interfaccia.
Laboratorio di Programmazione - Esercitazioni
8
Esercizio 3
●
●
●
●
Si modifichi il codice Idraulico.java per includere
un'interfaccia nella quale viene dichiarato un metodo
“èPiùAltoDi(Lavabo altroLavabo)”.
Si modifichino le classi LavaboCilindrico e
LavaboCubico di conseguenza.
Si modifichi il main affinchè comunichi quale tra i due
lavabi creati è più alto.
More → si aggiunga all'interfaccia un metodo
“èPiùLargoDi(Lavabo altroLavabo) e si modifichi il
codice di conseguenza.
Laboratorio di Programmazione - Esercitazioni
9
Soluzione esercizio 3
●
062_IdraulicoInterfacciato
Laboratorio di Programmazione - Esercitazioni
10
Eccezioni (esempio)
import prog.io.ConsoleOutputManager;
class TestEccezioni {
public static void main(String args[]){
Auto automobile;
ConsoleOutputManager out = new ConsoleOutputManager();
try{
automobile = new Auto(5);
}
catch (Exception e){
out.println(e.getMessage());
}
}
}
class Auto extends Exception
{
int numeroPosti;
public Auto(int numeroPosti) throws Exception
{
// Se il numero di posti è maggiore di 7 --> non può essere un auto
if (numeroPosti<=7)
this.numeroPosti=numeroPosti;
else
throw new Exception("Ciao");
Laboratorio di Programmazione - Esercitazioni
}
}
11