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
FileNewJava
Project
 Poi, nel progetto,
aggiungere classi
tramite:
FileNewClass
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