Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoBonaventure Bossi Modificato 11 anni fa
1
Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl
2
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Nozioni di base Le soluzioni dei problemi mostrate finora sono dirette Eseguono le stesse istruzioni ad ogni esecuzione del programma public class DisplayForecast // main(): punto di ingresso per l'applicazione public static void main(String[] args){ System.out.print("I think there is a world"); System.out.print(" market for maybe five "); System.out.println("computers. ); System.out.print(" Thomas Watson, IBM, ); System.out.println("1943."); }
3
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Nozioni di base Per la soluzione generale dei problemi servono maggiori capacità La capacità di controllare quali istruzioni vengono eseguite La capacità di controllare quanto spesso viene eseguita un'istruzione Per prima cosa ci concentreremo sul controllo di quali istruzioni vengono eseguite Java fornisce i costrutti condizionali if e switch per controllare se un elenco di istruzioni viene eseguito I costrutti if utilizzano espressioni logiche per determinare il corso dell'azione L'esame inizia dalle espressioni logiche
4
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Espressioni logiche Il ramo della matematica che si occupa delle espressioni logiche è l'algebra di Boole Sviluppata dal matematico britannico George Boole
5
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Espressioni logiche Un'espressione logica presenta il valore logico true o false Alcune espressioni i cui valori sono true logici L'anno 2004 è bisestile Un metro equivale a 100 centimetri Alcune espressioni i cui valori sono false logici Un triangolo ha quattro lati L'area del quadrato è sempre uguale al doppio del suo perimetro
6
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Espressioni logiche Esistono tre operatori logici principali per la manipolazione dei valori logici AND logico OR logico NOT logico Gli operatori funzionano come previsto
7
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Tabelle della verità Le tabelle della verità sono utilizzate per fornire specifiche formali degli operatori Funzionano come previsto lascia una certa ambiguità di interpretazione Jim sta sorridendo o Patty sta sorridendo Jim e Patty possono sorridere entrambi? Tabelle della verità Elenca tutte le combinazioni dei valori degli operandi e il risultato dell'operazione per ogni combinazione pq p and q False FalseFalse False TrueFalse True FalseFalse True TrueTrue
8
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Tabelle della verità di OR e NOT pq p or q False FalseFalse False TrueTrue True FalseTrue True TrueTrue pnot q False True True False
9
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Algebra di Boole Può creare espressioni logiche complesse combinando semplici espressioni logiche not (p and q) pq p and q not (p and q) False FalseFalseTrue False TrueFalseTrue True FalseFalseTrue True TrueTrueFalse
10
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Leggi di DeMorgan not (p and q) equivale a (not p) or (not q) ( not p) or pq p and q not (p and q) ( not p) (not q) ( not q) False False False True True True True False True False True True False True True False False True False True True True True True False False False False
11
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Leggi di DeMorgan not (p or q) equivale a (not p) and (not q) ( not p) and pq p or q not (p or q) ( not p) (not q) ( not q) False False False True True True True False True False False True False False True False False False False True False True True True False False False False
12
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Un tipo boolean Java dispone del tipo logico boolean Il tipo boolean usa due costanti letterali true false Operatori L'operatore and è && L'operatore or è || L'operatore not è !
13
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Definizione delle variabili boolean Le variabili boolean locali non sono inizializzate per impostazione predefinita boolean isWhitespace; boolean receivedAcknowledgement; boolean haveFoundMissingLink;
14
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Definizione delle variabili boolean Variabili boolean locali con inizializzazione boolean canProceed = true; boolean preferCyan = false; boolean completedSecretMission = true;
15
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Altri operatori Operatori di uguaglianza == e != Operatore == Restituisce true se gli operandi hanno lo stesso valore, altrimenti restituisce false Operatore != Restituisce true se gli operandi hanno valori diversi, altrimenti restituisce false Gli operatori funzionano con tutti i tipi di valori
16
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Valutazione delle espressioni boolean Supporre boolean p = true; boolean q = false; boolean r = true; boolean s = false; Qual è il valore di p p && s !s p == q q q != r p && r r == s q || s q != s
17
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Valutazione delle espressioni boolean Supporre int i = 1; int j = 2; int k = 2; char c = '#'; char d = '%'; char e = '#'; Qual è il valore di j == k i != k i == j j != k c == e d != e c == d c != e
18
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Attenzione ai valori in virgola mobile Considerare double a = 1; double b = 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 double c = 9999999999999999; Due espressioni true! a == bb != c Due espressioni false! a != bb == c Il problema sta nella precisione dei tipi in virgola mobile Preferire gli operatori di ordinamento per la vicinanza
19
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Operatori di ordinamento Java fornisce operatori di ordinamento per i tipi primitivi Quattro operatori di ordinamento,, = Corrispondono agli operatori matematici,, e Š Insieme gli operatori di uguaglianza e ordinamento sono detti operatori relazionali False è minore di true
20
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Valutazione delle espressioni boolean Supporre int i = 1; int j = 2; int k = 2; Qual è il valore di i < j j < k i <= k j >= k i >= k
21
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Valori Unicode I confronti tra caratteri sono basati sui loro valori Unicode I caratteri hanno l'ordine previsto '0', '1', … '9' Il carattere '0' ha codifica 48 Il carattere '1' ha codifica 49 e così via. Le lettere maiuscole 'A', 'B', … 'Z' seguono l'ordine previsto Il carattere 'A' ha codifica 65, il carattere 'B' ha codifica 66 e così via. Le lettere maiuscole 'A', 'B', … 'Z' seguono l'ordine previsto Il carattere 'a' ha codifica 97 Il carattere 'b' ha codifica 98 e così via.
22
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Valutazione delle espressioni boolean Supporre char c = '2'; char d = '3'; char e = '2'; Qual è il valore di c < d c < e c <= e d >= e c >= e
23
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Precedenza degli operatori Dal più alto al più basso Parentesi Operatori unari Operatori di moltiplicazione Operatori di somma Ordinamento relazionale Uguaglianza relazionale AND logico OR logico Assegnazione
24
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Costrutti condizionali Forniscono Capacità di controllare se viene eseguito un elenco di istruzioni Due costrutti Istruzione if if if-else if-else-if Istruzione switch
25
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Istruzione if di base Sintassi if (espressione) azione Se espressione è true viene eseguita azione Azione è una singola istruzione o un gruppo di istruzioni tra parentesi graffe Per noi sarà sempre un gruppo di istruzioni tra parentesi graffe Espressione azione truefalse
26
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Esempio if (value < 0) { value = -value; } Il numero è negativo? Se Value è inferiore a zero, il numero va bene così Se Value è inferiore a zero, occorre aggiornare il valore con linverso delladditivo Il numero è ora sicuramente non negativo
27
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ordinamento di due valori System.out.print("Enter an integer number: "); int value1 = Integer.parseInt(stdin.readLine()); System.out.print("Enter another integer number: "); int value2 = Integer.parseInt(stdin.readLine()); // riorganizza i numeri, se necessario if (value2 < value1) { // i valori non sono ordinati int rememberValue1 = value1; value1 = value2; value2 = rememberValue1; } // visualizza i valori System.out.println("The numbers in sorted order are " + value1 + " and then " + value2); Che cosa accade se l'utente inserisce 11 e 28? Che cosa accade se l'utente inserisce 11 e 4?
28
Semantica di if I numeri non sono in ordine? Riordina value1 e value2 per mettere nell'ordine corretto i valori I numeri sono stati messi nell'ordine corretto I numeri erano già in ordine I numeri sono in ordine
29
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Perché utilizzare sempre le parentesi graffe Qual è l'output? int m = 5; int n = 10; if (m < n) ++m; ++n; System.out.println(" m = " + m + " n = " n);
30
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl L'istruzione if-else Sintassi if (espressione) azione 1 else azione 2 Se espressione è true esegue azione 1 altrimenti esegue azione 2 Le azioni sono una singola istruzione o un elenco di istruzioni tra parentesi graffe Espressione azione 1 azione 2 true false
31
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Trovare il massimo di due valori System.out.print("Enter an integer number: "); int value1 = Integer.parseInt(stdin.readLine()); System.out.print("Enter another integer number: "); int value2 = Integer.parseInt(stdin.readLine()); int maximum; if (value1 < value2) // value2 è maggiore?? maximum = value2; // sì: value2 è maggiore } else // (value1 >= value2) maximum = value1; // no: value2 non è maggiore } System.out.println("The maximum of " + value1 + " and " + value2 + " is " + maximum);
32
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Trovare il massimo di due valori value2 è maggiore di value1? Sì, lo è. Dunque, value2 è maggiore di value1. In questo caso, maximum viene impostato su value2 No, non lo è. Dunque, value1 è grande almeno quanto value2. In questo caso, maximum viene impostato su value2 maximum viene impostata correttamente in entrambi i casi
33
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Perché utilizzare gli spazi vuoti Che cosa fa il codice seguente? System.out.print("Enter an integer number: "); int value1 = Integer.parseInt(stdin.readLine()); System.out.print("Enter another integer number: "); int value2 = Integer.parseInt(stdin.readLine()); if (value2 < value1) { int rememberValue1 = value1; value1 = value2; value2 = rememberValue1; } System.out.println("The numbers in sorted order are " + value1 + " and then " + value2);
34
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Verifica dell'uguaglianza tra oggetti Considerare System.out.print("Enter an integer number: "); int n1 = Integer.parseInt(stdin.readLine()); System.out.print("Enter another integer number: "); int n2 = Integer.parseInt(stdin.readLine()); if (n1 == n2) { System.out.println("Same"); } else{ System.out.println(Different"); } Qual è l'output se l'utente inserisce 88 in entrambi i casi? Qual è l'output se l'utente inserisce 88 e 3?
35
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Verifica dell'uguaglianza tra oggetti Considerare System.out.print("Enter a string: "); String s1 = stdin.readLine(); System.out.print("Enter another string: "); String s2 = stdin.readLine(); if (s1 == s2) { System.out.println("Same"); } else{ System.out.println("Different"); } Qual è l'output se l'utente inserisce "pastel" in entrambi i casi?
36
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Verifica dell'uguaglianza tra oggetti Quando viene eseguito System.out.print("Enter a string: "); String s1 = stdin.readLine(); System.out.print("Enter another string: "); String s2 = stdin.readLine(); La memoria appare così Come risultato, indipendentemente da ciò che viene inserito s1 e s2 non sono uguali Fanno riferimento a oggetti diversi
37
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Prova degli operatori per l'uguaglianza Considerare System.out.print("Enter a string: "); String s1 = stdin.readLine(); System.out.print("Enter another string: "); String s2 = stdin.readLine(); if (s1.equals(s2)) { System.out.println("Same"); } else{ System.out.println("Different"); } Verifica se s1 e s2 rappresentano lo stesso oggetto Tutti gli oggetti hanno un metodo equals(). La loro implementazione è specifica per la classe. Il metodo String equals() – come molti altri – verifica l'equivalenza nella rappresentazione
38
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Alcuni metodi utili della classe String isDigit() Verifica se il carattere è numerico isLetter() Verifica se il carattere è alfabetico isLowerCase() Verifica se il carattere è alfabetico minuscolo isWhiteSpace() Verifica se il carattere è un carattere di spazio, tabulazione, avanzamento riga o nuova riga
39
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Alcuni metodi utili della classe String isUpperCase() Verifica se il carattere è alfabetico maiuscolo toLowerCase() Se il carattere è alfabetico viene restituito l'equivalente minuscolo del carattere, altrimenti viene restituito il carattere toUpperCase() Se il carattere è alfabetico viene restituito l'equivalente maiuscolo del carattere, altrimenti viene restituito il carattere
40
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl If-else-if Considerare if (number == 0) { System.out.println("zero"); } else{ if (number > 0) { System.out.println("positive"); } else{ System.out.println("negative"); }
41
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl If-else-if Meglio if (number == 0) { System.out.println("zero"); } else if (number > 0) { System.out.println("positive"); } else{ System.out.println("negative"); } Stessi risultati del segmento precedente, ma questo segmento esprime meglio il significato di cosa accade
42
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ordinamento di tre valori Per l'ordinamento dei valori n1, n2 e n3 esistono sei possibili ordinamenti n1 n2 n3 n1 n3 n2 n2 n1 n3 n2 n3 n1 n3 n1 n2 n3 n2 n1 Si supponga che s1, s2, s3 deve essere una versione ordinata di n1, n2 e n3
43
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ordinamento di tre valori if ((n1 <= n2) && (n2 <= n3)) // n1 <= n2 <= n2 s1 = n1; s2 = n2; s3 = n3; } else if ((n1 <= n3) && (n3 <= n2)) // n1 <= n3 <= n2 s1 = n1; s2 = n3; s3 = n2; } else if ((n2 <= n1) && (n1 <= n3)) // n2 <= n1 <= n3 s1 = n2; s2 = n1; s3 = n3; } else if ((n2 <= n3) && (n3 <= n1)) // n2 <= n3 <= n1 s1 = n2; s2 = n3; s3 = n1; } else if ((n3 <= n1) && (n1 <= n2)) // n3 <= n1 <= n2 s1 = n3; s2 = n1; s3 = n2; } else // n3 <= n2 <= n1 s1 = n3; s2 = n2; s3 = n1; }
44
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Istruzione switch Gli ingegneri del software sono spesso alle prese con attività di programmazione che richiedono azioni dipendenti dal valore di espressioni intere È possibile utilizzare il costrutto if-else-if Confrontare separatamente l'espressione desiderata con un particolare valore Se l'espressione e il valore sono uguali viene eseguita l'azione appropriata Visto che tali attività di programmazione avvengono spesso Java include un'istruzione switch L'attività è spesso più leggibile con switch che con if- else-if
45
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Istruzione switch Espressione intera da associare a un'espressione case Istruzioni Java Espressione costante intera
46
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Verifica delle vocali switch (ch) { case 'a': case 'A': case 'e': case 'E': case 'i': case 'I': case 'o': case 'O': case 'u': case 'U': System.out.println("vowel); break; default: System.out.println("not a vowel); } break provoca l'uscita da switch Gestisce tutti gli altri casi
47
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Elaborazione di una richiesta System.out.print("Enter a number: "); int n1 = Integer.parseInt(stdin.readLine()); System.out.print("Enter another number: "); int n2 = Integer.parseInt(stdin.readLine()); System.out.print("Enter desired operator: "); char operator = stdin.readLine().charAt(0); switch (operator) { case '+' : System.out.println(n1 + n2); break; case '-' : System.out.println(n1 - n2); break; case '*' : System.out.println(n1 * n2); break; case '/' : System.out.println(n1 / n2); break; default: System.out.println(Illegal request); }
48
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Valutazione abbreviata Il valore di un'espressione logica può essere noto prima che siano stati considerati tutti gli operandi Se l'operando sinistro di && è false, il valore deve essere false Se l'operando destro di || è true, il valore deve essere true Java utilizza queste proprietà per rendere efficienti le operazioni logiche Valuta l'operando sinistro prima di valutare l'operando destro Se il valore dell'operatore è determinato dall'operando sinistro, allora l'operando destro non viene valutato L'operazione è abbreviata
49
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Valutazione abbreviata La valutazione abbreviata è utilizzata quando qualche proprietà deve essere true per poter valutare qualche altra espressione Si supponga di voler sapere se scoreSum diviso per nbrScores è maggiore di value La condizione può essere valutata solo se nbrScores non è zero L'espressione seguente rappresenta correttamente la condizione (nbrScores != 0) && ((scoreSum / nbrScores) > value)
50
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl ColoredTriangle Nozioni di base I triangoli sono una forma importante nel mondo della grafica informatica Quando vengono create le animazioni a computer, le scene vengono generalmente scomposte in un insieme di triangoli colorati Specifica informale Rappresenta un triangolo colorato nello spazio bidimensionale Fornisce i costruttori e i metodi previsti dall'utente
51
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl ColoredTriangle - vedere il gatto
52
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl ColoredTriangle - costruttori previsti Costruzione predefinita Costruisce una rappresentazione del triangolo anche se non sono forniti valori di attributo espliciti public ColoredTriangle() Costruzione specifica Costruisce la rappresentazione di un triangolo da valori di attributo espliciti public ColoredTriangle(Point v1, Point v2, Point v3, Color c)
53
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl ColoredTriangle - comportamenti previsti Fornire l'area Restituire l'area del triangolo associato public double getArea() Fornire il perimetro Restituire il perimetro del triangolo associato public double getPerimeter() Accedere a un punto finale Fornire un punto finale richiesto del triangolo associato public Point getPoint(int i)
54
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl ColoredTriangle - comportamenti previsti Accedere al colore Fornire il colore del triangolo associato public Point getColor() Impostare un punto finale Impostare un particolare punto finale del triangolo associato su un dato valore public void setPoint(int i, Point p) Impostare il colore del triangolo Impostare il colore del triangolo associato su un dato valore public void setColor(Color c)
55
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl ColoredTriangle - comportamenti previsti Rappresentare Disegnare il triangolo associato in un dato contesto grafico public void paint(Graphics g) Verificare l'uguaglianza Indicare se il triangolo associato è equivalente a un dato triangolo public boolean equals(Object v) Rappresentazione stringa Fornire una rappresentazione di testo degli attributi del triangolo associato public String toString()
56
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl ColoredTriangle - attributi Per implementare i comportamenti È sufficiente la conoscenza del colore del triangolo e dei tre punti finali Il punto finale può essere rappresentato utilizzando due valori int per posizione o come Point Point sembra più naturale private Color color Colore del triangolo associato private Point p1 Fa riferimento al primo punto del triangolo associato private Point p2 Fa riferimento al secondo punto del triangolo associato private Point p3 Fa riferimento al terzo punto del triangolo associato
57
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Costruttore predefinito - implementazione Crea i valori per i vertici Copia i valori dei vertici desiderati nei campi dati Copia nei campi dati il colore desiderato
58
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Implementazione - funzione di accesso getPoint() // getPoint(): funzione di accesso al punto finale public Point getPoint(int i) if (i == 1) return p1; } else if (i == 2) return p2; } else if (i == 3) return p3; } else System.output.println("Unexpected endpoint access: + i); System.exit(i); return null; } Non sarà eseguita, ma il compilatore desidera che ogni percorso di esecuzione termini con return
59
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Implementazione - facilitatore toString() // toString(): facilitatore stringa public String toString() Point v1 = getPoint(1); Point v2 = getPoint(2); Point v3 = getPoint(3); Color c = getColor(); return "ColoredRectangle[" + v1 + ", " + v2 + ", " + v3 + ", " + c + "]"; } Standard per includere il nome di classe quando l'uso previsto è per il debug
60
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Implementazione - facilitatore toString() Point a = new Point(2,1), Point b = new Point(1,2) Point c = new Point(3,2); ColoredTriangle u = new ColoredTriangle(a, b, c, Color.RED); System.out.println(u); // mostra la versione stringa di u ColoredTriangle[java.awt.Point[x=2,y=1], java.awt.Point[x=1,y=2], java.awt.Point[x=3,y=2], java.awt.Color[r=255,g=0,b=0]]
61
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl // equals(): facilitatore di uguaglianza public boolean equals(Object p) if (p instanceof ColoredTriangle) Point v1 = getPoint(1); Point v2 = getPoint(2); Point v3 = getPoint(3); Color c = getColor(); ColoredTriangle t = (ColoredTriangle) p; return v1.equals(t.getPoint(1)) && v2.equals(t.getPoint(2)) && v3.equals(t.getPoint(3)) && c.equals(t.getColor()); } else return false; } Implementazione - facilitatore equals() instanceof verifica se l'operando sinistro è un'istanza di quello destro Poiché si tratta di una sovrascrittura, il tipo di parametro è Object
62
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Implementazione - facilitatore equals() ColoredTriangle e = new ColoredTriangle(); ColoredTriangle f = new ColoredTriangle(new Point(2,1), new Point(1,2), new Point(3,2), Color.YELLOW); ColoredTriangle g = new ColoredTriangle(new Point(2,1), new Point(1,2), new Point(3,2), Color.YELLOW); boolean flag1 = e.equals(f); boolean flag2 = e.equals(g); System.out.println(flag1 + " " + flag2 + " " + flag3);
63
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Implementazione - facilitatore equals()
64
Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Implementazione - facilitatore paint() // paint(): facilitatore di rendering public void paint(Graphics g) Point v1 = getPoint(1); Point v2 = getPoint(2); Point v3 = getPoint(3); Color c = getColor(); g.setColor(c); Polygon t = new Polygon(); t.addPoint(v1.x, v1.y); t.addPoint(v2.x, v2.y); t.addPoint(v3.x, v3.y); g.fillPolygon(t); } Parte di awt Rappresenta un poligono usando l'elenco di punti nel poligono referenziato da t
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.