Classi e metodi astratti
2 Classi astratte L'ereditarietà è utile per rappresentare tassonomie e gerarchie di entità reali. Non sempre però tutti i livelli della gerarchia rappresentano entità concrete. Ad esempio: non esiste concretamente il generico animale, esistono solo animali specifici! Una classe astratta permette di rappresentare un'entità astratta (cioè di cui non esistono istanze) per raggruppare informazioni e comportamenti senza definire l'implementazione Esempio: public abstract class Animale { private String nome; protected String verso; public abstract String verso(); public abstract String si_muove(); public abstract String vive(); } Il concetto così espresso è che : ogni animale "reale" può fare un verso, può muoversi, e può dire in che ambiente vive ma non si può, in generale, precisare come, perché dipende dallo specifico animale
Classi astratte Una classe avente anche solo un metodo abstract è astratta, e deve essere dichiarata abstract essa stessa. Una classe astratta può però anche non avere metodi dichiarati abstract (ma resta comunque astratta, quindi è impossibile istanziarla) Una sottoclasse di una classe astratta è anch essa astratta, se non ridefinisce tutti i metodi che erano astratti nella classe base. La differenza sostanziale tra l ereditarietà pura tra classi e l ereditarietà con classi astratte è che : Una classe che eredita da un'altra classe aggiunge o modifica funzionalità della classe base (già "completa"). Una classe che eredita da una classe astratta fornisce funzionalità al posto della classe base. Cioè la classe base dice cosa "promette" di fare, la classe concreta lo fa.
4 Esempio: Giorno di paga Scrivere un programma java che consenta di gestire il pagamento degli stipendi dei dipendenti di un'azienda. Di ogni dipendente, si memorizza il nome, l'indirizzo e il telefono. L'azienda ha tre categorie di dipendenti: Impiegati, con stipendio mensile Giornalieri, con stipendio mensile calcolato in base al numero di giorni di lavoro (numero di giorni * base di retribuzione giornaliera) Stagisti, il cui lavoro non è retribuito. Si crei un metodo giornodipaga() che mostri a video le informazioni dei dipendenti e le loro retribuzioni. Nel main si istanzi un'azienda con un certo numero di dipendenti e si invochi il metodo giornodipaga().
5 Esercizio: Turismo Si scriva un programma Java che definisca opportuni classi, costruttori e metodi per la gestione di eventi turistici. I dati gestiti dal programma sono relativi a: Eventi, caratterizzate da codice univoco generato automaticamente, località, descrizione e vettore di feedback (booleani che rappresentano se un utente consiglia o meno la meta). Località, caratterizzate da nome e provincia. Gli eventi si dividono in: mostre (caratterizzate da mese di inizio e mese di fine, codice: «M»+progressivo), tour guidati (con orario e numero di posti disponibili, codice: «T»+progressivo) e spettacoli (con indicazione se lo spettacolo è all aperto, codice: «S»+progressivo). Si supponga che tali informazioni siano contenute in una classe Turismo in un vettore eventi, di massimo 1000 elementi. Si definiscano i seguenti metodi: 1. Metodo consigliato, che indica se un evento è consigliato o meno (il numero di feedback positivi supera il numero di feedback negativi). 2. Metodo controlladisponibilità, che dati un mese, il numero di posti richiesti e una previsione meteo controlla se un evento è disponibile: in particolare, per le mostre si controlli che il mese richiesto sia compreso nell intervallo di apertura della mostra; per i tour guidati, che il numero di posti richiesti inferiore al numero di posti disponibili; per gli spettacoli, che lo spettacolo sia al chiuso oppure che la previsione meteo indichi bel tempo. 3. Metodo trovaeventi, che, data una provincia, stampi a video le informazioni sugli eventi (presenti e passati) nella provincia, includendo l informazione se l evento sia consigliato o meno (si ridefinisca a tal fine il metodo tostring() della classe Evento e delle sottoclassi). 4. Metodo piùconsigliato, che restituisce l evento con il maggior numero di feedback positivi. Il programma principale deve, infine, svolgere i seguenti punti: a) Creare un istanza di Turismo e popolare il vettore con varie istanze. b) Invocare il metodo del punto 3. c) Invocare il metodo del punto 4, mostrando a video l evento restituito e l informazione sulla disponibilità di tale evento nel mese corrente, per un gruppo di 7 persone e con previsione di tempo nuvoloso.