La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Incapsolamento (intro) Sandro Pedrazzini Approfondimento Incapsolamento (introduzione)

Presentazioni simili


Presentazione sul tema: "1 Incapsolamento (intro) Sandro Pedrazzini Approfondimento Incapsolamento (introduzione)"— Transcript della presentazione:

1 1 Incapsolamento (intro) Sandro Pedrazzini Approfondimento Incapsolamento (introduzione)

2 2 Incapsolamento (intro) Sandro Pedrazzini Motivazione Importanza dellincapsulamento nella programmazione OO Ruolo degli elementi interface Qualità delle classi e delle interfacce Non solo le relazioni tra classi sono importanti nello sviluppo, ma anche la buona manufattura di ogni singola classe Classi utili e riutilizzabili

3 3 Incapsolamento (intro) Sandro Pedrazzini Classe Date Molti programmi hanno la necessità di elaborare informazioni relative alla data In Java esiste la classe java.util.Date Date date = new Date(); System.out.println(date);

4 4 Incapsolamento (intro) Sandro Pedrazzini Metodi di Date boolean after(Date date); boolean before(date date); int compareTo(Date anotherDate); long getTime(); //millisecondi da 1-1-1970 void setTime();

5 5 Incapsolamento (intro) Sandro Pedrazzini Esempio Date date = Calendar.getInstance().getTime(); date.setTime(0); System.out.println(date); //01-01-1970 date.setTime(-864000000); //valore long System.out.println(date); //22-12-1969 date.setTime(864000000); System.out.println(date); //11-01-1970 In realtà, da quando è stata inserita la classe Calendar, si tratta più di una classe Time (istante di tempo) che di una classe Date.

6 6 Incapsolamento (intro) Sandro Pedrazzini Ordinamento totale Con due oggetti di tipo Date è possibile chiedersi quale dei due preceda laltro Gli istanti di tempo sono dotati di ordinamento totale, implementati dai metodi after() e before() t1.after(t2) corrisponde a t1.getTime() > t2.getTime()

7 7 Incapsolamento (intro) Sandro Pedrazzini Altre informazioni (1) Date non permette però di ottenere informazioni relative al mese, anno di appartenenza, ecc. (in realtà lo permetteva, ma i metodo sono ora dichiarati deprecated). La responsabilità di determinare queste informazioni è affidata alla classe GregorianCalendar (calendario introdotto da Papa Gregorio XIII nel 1582 con la correzione dellalgoritmo sugli anni bisestili, già comunque presenti nella forma più semplice nel calendario giuliano derivante da Giulio Cesare). La classe GregorianCalendar conosce i dettagli e le complicazioni (30 giorni ha novembre,...) dei nostri calendari.

8 8 Incapsolamento (intro) Sandro Pedrazzini Altre informazioni (2) Il fatto di separare le informazioni di GregorianCalendar da Date (che rappresenta in effetti unicamente un istante di tempo) è un buon esempio di progettazione, perché esistono molte descrizioni di tempo: –Calendario Gregoriano: 3 febbraio 2001 –Calendario della Rivoluzione francese: Année 209 de la République, Mois de Pluviôse, 2 Jour du Quintidi –Calendario Maya: 12.19.7.17.1

9 9 Incapsolamento (intro) Sandro Pedrazzini Responsabilità La responsabilità che spetta a GregorianCalendar è quella di assegnare descrizioni agli istanti di tempo. Un istante di tempo è neutro, mentre la sua descrizione può essere fatta in vari modi (ad esempio attraverso una nuova classe MayanCalendar). È questo il motivo per cui, almeno nelle intenzioni, è utile avere una classe astratta Calendar, da cui classi concrete come GregorianCalendar possano ereditare.

10 10 Incapsolamento (intro) Sandro Pedrazzini Struttura Calendar GregorianCalendar Date

11 11 Incapsolamento (intro) Sandro Pedrazzini Metodi di Calendar Calendar specifica una serie di metodi generici (non legati a un calendario specifico)... public int get (int field) public void set(int field, int value) public void add(int field, int increment) public Date getTime() public void setTime(Date date)

12 12 Incapsolamento (intro) Sandro Pedrazzini Realizzazione: classe Day Realizzazione di una classe Day del calendario gregoriano Un oggetto di tipo Day rappresenta un giorno Evitiamo di rendere espliciti dettagli di implementazione, come inizio dei tempi (epoch, 1 gennaio 1970), utilizzato da Date Prevede metodi di utilità quali: –Quanto manca alla fine dellanno? –Quale giorno sarà tra 50 giorni? –Quanti giorni ci sono dalla data X alla data Y?

13 13 Incapsolamento (intro) Sandro Pedrazzini Operazioni public int daysFrom(Day start) // numero di giorni da start ad ora public Day addDays(int days) // aggiunta di un numero di giorni

14 14 Incapsolamento (intro) Sandro Pedrazzini Utilizzo public static void main(String[] args){ Day today = Calendar.getInstance().getTime(); Day later = today.addDays(999); System.out.println(later.getYear() + "-" + later.getMonth() + "-" + later.getDate()); System.out.println(later.daysFrom(today)); // 999 }

15 15 Incapsolamento (intro) Sandro Pedrazzini Utilizzo (2) Eventuale modo ancora più neutro public static void main(String[] args){ Day today = Calendar.getInstance().getTime(); Day later = today.addDays(999); System.out.println(later.get(year) + "-" + later.get(month) + "-" + later.get(day)); System.out.println(later.daysFrom(today)); // 999 }

16 16 Incapsolamento (intro) Sandro Pedrazzini Realizzazione 1 In una prima realizzazione possibile, lo stato di un oggetto viene rappresentato da variabili di istanza anno, mese, giorno public class Day{ private int fYear; private int fMonth; private int fDay; public Day(int year, int month, int day){ fYear = year; fMonth = month; fDay = day; } public int getDay(){ return fDay; }...


Scaricare ppt "1 Incapsolamento (intro) Sandro Pedrazzini Approfondimento Incapsolamento (introduzione)"

Presentazioni simili


Annunci Google