Fondamenti di informatica T
Transcript
Fondamenti di informatica T
Fondamenti di informatica T-1 (A – K) Esercitazione 6: Eclipse, Ereditarietà e Polimorfismo AA 2014/2015 Tutor: Vincenzo Lomonaco [email protected] Esercitazione 6 Introduzione al calcolatore e Java Linguaggio Java, basi e controllo del flusso I metodi: concetti di base Stringhe ed array Classi e oggetti, costruttori, metodi statici, visibilità Eclipse, ereditarietà e polimorfismo Collezioni Java Esercizi d’esame Fondamenti di informatica A-K - Vincenzo Lomonaco Eclipse Cos’è? Un ambiente di sviluppo integrato (IDE) contenente: ▫ un editor di codice sorgente; ▫ un compilatore e un interprete; ▫ un tool di building automatico; ▫ Un debugger. Come scaricarlo ed installarlo? ▫ Scaricarlo gratuitamente dal sito (versione IDE for Java Developers): http://www.eclipse.org/downloads/ ▫ Estrarre l’archivio ▫ Eseguire il .exe Fondamenti di informatica A-K - Vincenzo Lomonaco Eclipse Avviate Eclipse tramite il file eclipse.exe che potete trovare (in laboratorio) all'indirizzo -> C:\Applicativi\Eclipse Fondamenti di informatica A-K - Vincenzo Lomonaco Primo avvio, scelta workspace Workspace: cartella che contiene i progetti In LAB3 la vostra home oppure un dispositivo di archiviazione esterno A casa cartella a scelta, Eclipse sceglie automaticamente la home dell'utente (C:\Users\<nome utente>\Workspace) Fondamenti di informatica A-K - Vincenzo Lomonaco Basics Il primo progetto: Creazione di un nuovo progetto FileNewJava Project Poi, nel progetto, aggiungere classi tramite: FileNewClass Fondamenti di informatica A-K - Vincenzo Lomonaco Javac e java Con Eclipse non c'è bisogno di compilare ed eseguire il programma separatamente. Eclipse esegue javac e java in automatico alla pressione del tasto «play» L'output dell’eseguibile verrà stampato in basso nella finestra Fondamenti di informatica A-K - Vincenzo Lomonaco Ereditarietà Meccanismo per definire una nuova classe (classe derivata) come specializzazione di un’altra (classe base) ▫ La classe base modella un concetto generico ▫ La classe derivata modella un concetto più specifico La classe derivata (sottoclasse): Classe base ▫ Dispone di tutte le funzionalità (attributi e metodi) di quella base ▫ Può aggiungere funzionalità proprie ▫ Può ridefinirne il funzionamento di metodi esistenti (polimorfismo) Classi derivate Fondamenti di informatica A-K - Vincenzo Lomonaco Ereditarietà Processo di astrazione ▫ Si introduce la superclasse che "astrae" il concetto comune condiviso dalle diverse sottoclassi ▫ Le sottoclassi vengono "spogliate" delle funzionalità comuni che migrano nella superclasse Ogni classe definisce un tipo: ▫ Un oggetto, istanza di una sottoclasse, è formalmente compatibile con il tipo della classe base ▫ Il contrario non è vero! Ad esempio ▫ Un impiegato è una persona ma una persona non è (necessariamente) un impiegato ▫ Un’automobile è un veicolo ma un veicolo non è (necessariamente) un’automobile Fondamenti di informatica A-K - Vincenzo Lomonaco Esempio Fondamenti di informatica A-K - Vincenzo Lomonaco Terminologia Parola chiave "extends" : Specifica da quale classe eredita. Nell'esempio, Studente eredita da Persona Parola chiave "super" : Consente di invocare un metodo, un costruttore o un attributo della classe base purché non privati Annotazione "@Override" : Permette di ridefinire un metodo della superclasse a condizione che abbia stesso nome, parametri e tipo di ritorno (magari stessa semantica) Fondamenti di informatica A-K - Vincenzo Lomonaco Polimorfismo Il polimorfismo può essere definito (in maniera molto spicciola) come la capacità di Java di invocare il metodo della sottoclasse più specifica Esempio OK : ▫ Persona p = new Studente("Mario", 123456); ▫ System.out.print(p.toString()); Output (notare il polimorfismo) : ▫ Mi chiamo Mario, numero di matricola 123546 Esempio KO : ▫ Studente s = new Persona("Mario"); Esempio KO : ▫ Studente s = new Impiegato("Mario", 1400); Fondamenti di informatica A-K - Vincenzo Lomonaco Esercizio «Bicicletta» Creare una classe «Bicicletta» che abbia i seguenti attributi: Velocità Marcia Cadenza di Pedalata Ed i seguenti metodi: Un costruttore che inizializzi tutti i parametri Un metodo per settare la cadenza Un metodo per incrementare la velocità Un metodo per decrementare la velocità Un metodo per cambiare marcia Un metodo che ritorna una descrizione dello stato della bicicletta Fondamenti di informatica A-K - Vincenzo Lomonaco Soluzione «Bicicletta» 1/2 public class Bicycle { // the Bicycle class has three fields public int cadence; public int gear; public int speed; // the Bicycle class has one constructor public Bicycle(int startCadence, int startSpeed, int startGear) { gear = startGear; cadence = startCadence; speed = startSpeed; } // the Bicycle class has four methods public void setCadence(int newValue) { cadence = newValue; } Fondamenti di informatica A-K - Vincenzo Lomonaco Soluzione «Bicicletta» 2/2 public void setGear(int newValue) { gear = newValue; } public void applyBrake(int decrement) { speed -= decrement; } public void speedUp(int increment) { speed += increment; } public void printDescription(){ System.out.println("\nBike is " + "in gear " + this.gear + " with a cadence of " + this.cadence + " and travelling at a speed of " + this.speed + ". "); } } Fondamenti di informatica A-K - Vincenzo Lomonaco Esercizio «MountainBike» Creare una sottoclasse «MountainBike» che estenda «Bicicletta» aggiungendo i seguenti attributi: Tipo di sospensioni Ed i seguenti metodi: Un costruttore che inizializzi tutti i parametri di bicicletta e il tipo di sospensioni Un metodo per ottenere il tipo di sospensioni Ed infine Ridefinisca il metodo per la stampa della descrizione dello stato della bicicletta (si comprenda il tipo di sospensioni) Fondamenti di informatica A-K - Vincenzo Lomonaco Soluzione «MountainBike» 1/2 public class MountainBike extends Bicycle { private String suspension; public MountainBike( int startCadence, int startSpeed, int startGear, String suspensionType){ super(startCadence, startSpeed, startGear); this.setSuspension(suspensionType); } Fondamenti di informatica A-K - Vincenzo Lomonaco Soluzione «MountainBike» 2/2 public String getSuspension(){ return this.suspension; } public void setSuspension(String suspensionType) { this.suspension = suspensionType; } public void printDescription() { super.printDescription(); System.out.println("The " + "MountainBike has a" + getSuspension() + " suspension."); } } Fondamenti di informatica A-K - Vincenzo Lomonaco Esercizio «RoadBike» Creare una sottoclasse «RoadBike» che estenda «Bicicletta» aggiungendo i seguenti attributi: Spessore dello pneumatico Ed i seguenti metodi: Un costruttore che inizializzi tutti i parametri di bicicletta e lo spessore dello pneumatico Un metodo per ottenere lo spessore dello pneumatico Ed infine Ridefinisca il metodo per la stampa della descrizione dello stato della bicicletta (si comprenda lo spessore dello pneumatico) Fondamenti di informatica A-K - Vincenzo Lomonaco Soluzione «RoadBike» 1/2 public class RoadBike extends Bicycle{ // In millimeters (mm) private int tireWidth; public RoadBike(int startCadence, int startSpeed, int startGear, int newTireWidth){ super(startCadence, startSpeed, startGear); this.setTireWidth(newTireWidth); } Fondamenti di informatica A-K - Vincenzo Lomonaco Soluzione «RoadBike» 2/2 public int getTireWidth(){ return this.tireWidth; } public void setTireWidth(int newTireWidth){ this.tireWidth = newTireWidth; } public void printDescription(){ super.printDescription(); System.out.println("The RoadBike" + " has " + getTireWidth() + " MM tires."); } } Fondamenti di informatica A-K - Vincenzo Lomonaco Esercizio «BiciclettaMain» Creare una classe «BiciclettaMain» che contenga il metodo main e testi l’implementazione delle classi di biciclette. In particolare si chiede di porre in evidenza l’effetto del polimorfismo. Suggerimento: Dichiarare tre variabili di tipo bicicletta ed istanziarle con i tre tipi di oggetti diversi: «bicicletta» «MountainBike» «RoadBike» In seguito eseguire su di essi lo stesso metodo di stampa della descrizione Fondamenti di informatica A-K - Vincenzo Lomonaco Soluzione «BiciclettaMain» public class Main { public static void main(String[] args){ Bicycle bike01, bike02, bike03; bike01 = new Bicycle(20, 10, 1); bike02 = new MountainBike(20, 10, 5, "Dual"); bike03 = new RoadBike(40, 20, 8, 23); bike01.printDescription(); bike02.printDescription(); bike03.printDescription(); } } Fondamenti di informatica A-K - Vincenzo Lomonaco Classi Astratte Abbiamo detto che le classi rappresentano entità del mondo reale, ma non tutte le entità sono reali: ▫ Ad esempio: non esiste concretamente il generico animale ma esistono gli specifici animali! Una classe astratta si definisce in questi termini: ▫ 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é questo ovviamente dipende dallo specifico animale Fondamenti di informatica A-K - Vincenzo Lomonaco Classi astratte, precisazione 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 Fondamenti di informatica A-K - Vincenzo Lomonaco Interfacce Una interfaccia è analoga ad una classe, ma, a differenza di questa, costituisce una pura specifica di comportamenti. Come tale : ▫ Si limita a dichiarare i metodi, senza implementarli (tutti i metodi di un’interfaccia sono implicitamente abstract) ▫ Non può definire variabili (può definire costanti, cioè static final) Un’interfaccia può essere pensata come un contratto tra ogni classe che la implementa ed il mondo esterno: l’interfaccia vincola le classi che la implementano a supportare le funzioni in essa dichiarate senza vincolare in alcun modo l’implementazione delle classi Fondamenti di informatica A-K - Vincenzo Lomonaco Un’interfaccia importante, Comparable Quest’interfaccia : ▫ ci è utile per definire dei criteri di ordinamento tra un oggetto ed un altro. ▫ Contiene al suo interno un solo metodo da ridefinire Nella documentazione dell’interfaccia trovate un’ampia spiegazione su come dovrebbe essere implementato il suo unico metodo: http://docs.oracle.com/javase/7/docs/api/java/lang/Compara ble.html public interface Comparable<T>{ int compareTo(T o); } Fondamenti di informatica A-K - Vincenzo Lomonaco Interfacce vs Classi astratte Interfacce : ▫ Non può essere istanziata ▫ Non contiene alcuna implementazione (le classi derivate dovranno realizzare tutte le funzionalità) ▫ Non può contenere stato ▫ Non può contenere attributi e metodi (e proprietà ed eventi) statici (a parte eventuali costanti comuni) Classi Astratte : ▫ Non può essere istanziata ▫ Può essere implementata completamente, parzialmente o per niente ▫ Le classi derivate devono realizzare le funzionalità non implementate e possono fornire una realizzazione alternativa a quelle implementate. (polimorfismo) ▫ Può contenere stato (comune a tutte le sottoclassi) ▫ Può contenere attributi e metodi statici Fondamenti di informatica A-K - Vincenzo Lomonaco Esercizio per casa «Libro» Scaricare la classe «Libro» dal sito del corso: http://www-db.deis.unibo.it/courses/FIT1-AK/Esercitazioni20132014/codice-pronto/Libro.java Estendere la classe libro implementando l’interfaccia «comparable» descritta in precedenza affinché il metodo comparableTo ritorni 0 se e solo se sia il titolo che l’anno sono uguale Ritorni -1 se il titolo è uguale ma la data del comparato è minore Ritorni 1 se il titolo è uguale ma la data del comparato è maggiore Ritorni il risultato della comparableTo implementata nella classe String nel caso i cui i titoli siano diversi. Implementare la classe «BibliotecaMain» in cui vengano istanziati diversi libri e testati i metodi di comparazione. Fondamenti di informatica A-K - Vincenzo Lomonaco Esercizio per casa «Personale» Realizzare la seguente tassonomia: Creare un'interfaccia Impiegato che abbia la signature dei metodi: public String getNome(); public String getIndirizzo(); public String getTelefono(); public double getPaga(); Creare una classe astratta Impiegato che implementi l'interfaccia ridefinendo : Tutti i metodi sopraelencati all'infuori di getPaga() Inserendo gli attributi nome, indirizzo e telefono (3 stringhe) Creare tre classi concrete che estendano la classe astratta che: Specializzino il metodo astratto getPaga() della superclasse Aggiungano gli eventuali metodi e attributi come da diagramma Fondamenti di informatica A-K - Vincenzo Lomonaco Esercizio per casa «Personale» Le tre classi concrete sono i tre tipi di impiegato che l'azienda può avere (di cui si memorizzano nome, indirizzo e numero di telefono): I lavoratori dipendenti percepiscono uno stipendio mensile. I lavoratori giornalieri percepiscono uno stipendio dato dal prodotto di una base di retribuzione giornaliera moltiplicata per il numero di giorni lavorativi. I lavoratori volontari non percepiscono retribuzione. Il programma (classe PersonaleMain) deve creare i dati di alcuni impiegati di vostra invenzione e calcolare (e stampare a video) la retribuzione dovuta ad ogni impiegato. Fondamenti di informatica A-K - Vincenzo Lomonaco Tassonomia «Personale» Interfaccia Classe astratta Metodo astratto Classi concrete Fondamenti di informatica A-K - Vincenzo Lomonaco Esercizio «Fotografia» Uno studio fotografico possiede una serie di macchine fotografiche diverse. Le macchine fotografiche (classe astratta) sono caratterizzate da una marca, un modello, una data di acquisto e il prezzo pagato, e si dividono in altre due classi astratte : digitali, caratterizzate dalla risoluzione, dalla sensibilità ISO e dalla possibilità di estendere la garanzia. Tutte le macchine digitali hanno una garanzia di due anni (estendibile ad un prezzo di 200euro). analogiche, con una garanzia di 4 anni. Tra le macchine digitali, ci sono le reflex (caratterizzate dal modello dello specchio) e le mirrorless (che possono o meno avere un mirino elettronico). Tra le macchine analogiche, le istantanee (caratterizzate dal modello di pellicola) e quelle a rullino (caratterizzate dalla sensibilità ASA). Fondamenti di informatica A-K - Vincenzo Lomonaco Esercizio «Fotografia» Le classi devono fornire metodi per: controllare se la macchina in questione è ancora in garanzia in una certa data stampare, mediante il metodo toString, le caratteristiche della macchina fotografica. Il centro fotografico possiede quattro macchine fotografiche: Una reflex Canon, modello 5DMark3, acquistata il 13/05/2012 per € 2985, 22.3 megapixel con sensibilità ISO 128000, con specchio a pentaprisma; Una macchina a rullino Holga 120N, acquistata il 22/07/1999 per € 66, sensibilità ASA 1600. Una mirrorless Nikon 1 V1, acquistata il 01/9/2012 per € 499, 10.1 megapixel, sensibilità ISO 3200, dotata di mirino elettronico; Una istantanea Polaroid Supercolor 600, acquistata il 10/12/1993 del valore di €94, modello pellicole Serie 600. Fondamenti di informatica A-K - Vincenzo Lomonaco Tassonomia Classe astratta Interfaccia Prezzo protected Metodo astratto Variabili statiche Classi concrete Fondamenti di informatica A-K - Vincenzo Lomonaco