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