3. TIPI
• Una classe definisce un insieme di oggetti (un tipo), che hanno
delle caratteristiche in comune.
Lavoratori Antea
4. SOTTOTIPI
• Alcuni di questi oggetti hanno caratteristiche distinte.
•I Dipendenti ed i Collaboratori sono sottotipi dei Lavoratori.
Collaboratori Antea
Dipendenti Antea
Lavoratori Antea
5. GERARCHIE DI TIPI
• Caratteristiche di tutti i Lavoratori: nome, cognome, hanno
ferie.
• Caratteristiche dei Collaboratori: partita IVA.
• Caratteristiche dei Dipendenti: codice INAIL.
Lavoratore
Collaboratore Dipendente
6. public class Worker {!
protected String name;!
protected String surname;!
public Worker(String name, String surname){!
this.name = name;!
this.surname = surname;!
}!
public void haveHolidays() {!
System.out.println("Non posso.");!
}!
}
14. POLIMORFISMO
•È la capacità di un oggetto di tipo A di apparire e di essere
usato come se fosse di tipo B.
• UnCollaboratore può essere usato come se fosse un
Lavoratore.
15. TIPO RUNTIME E TIPO
DICHIARATO
• Ognivariabile è dichiarata di un certo tipo, ma il valore che ha
dentro può un oggetto di un altro tipo (lo stesso oppure un
suo sottotipo).
TWorker Paolo := TContractor.Create('Paolo', 'Bocchini', '0123456789');!
Worker paolo = new Contractor("Paolo", "Bocchini", "0123456789");
16. INVOCAZIONE DI METODI
REIMPLEMENTATI
• Che succede invocando:
Delphi: Paolo.HaveHolidays()
Java: paolo.haveHolidays()
21. PROBLEMA
• Il
Lavoratore non può prendere ferie perché non ha un
contratto.
• IlLavoratore non inquadrato non deve esistere, l'idea di
Lavoratore anomalo non deve esistere.
22. public abstract class Worker {!
protected String name;!
protected String surname;!
public Worker(String name, String surname){!
this.name = name;!
this.surname = surname;!
}!
public abstract void haveHolidays();!
}
27. CLASSI MOLTO ASTRATTE
• Vogliamo un costrutto che ci permetta di separare la
descrizione di un comportamento e il modo in cui viene
realizzato.
• Un Contratto che permetta alle due parti di ignorare il modo
in cui l'altra fa le cose.
Cliente Contratto Fornitore
28. UN'INTERFACCIA
•È un costrutto che elenca dei metodi, ma non li implementa.
public interface CoffeeMaker {!
void loadRawCoffee(int howMuch);!
Coffee makeCoffee();!
}!
!
!
interface ICoffeeMaker;!
procedure LoadRawCoffee(AHowMuch: Integer);!
function MakeCoffee: ICoffee;!
end;
29. public class Moka implements CoffeeMaker {!
@Override!
public void loadRawCoffee(int howMuch) {!
...!
}!
!
@Override!
public Coffee makeCoffee() {!
...!
}!
}
30. class TMoka(TInterfacedObject, ICoffeeMaker);!
public:!
procedure LoadRawCoffee(AHowMuch: Integer); override;!
function MakeCoffee: ICoffee; override;!
end;!
!
procedure TMoka.LoadRawCoffee(AHowMuch: Integer); begin;!
...!
end;!
function TMoka.MakeCoffee: ICoffee; begin;!
...!
end;
31. DOMANDE?
Prossima puntata: Strutture dati e Collezioni.
Stay tuned!