Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl 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."); } } 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 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 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 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 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 p q p and q False False True True False True False True False False False True Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Tabelle della verità di OR e NOT p q False False True True False True False True p or q False True True True p False True not q True False 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) p q p and q not (p and q) False False True True False True False True False False False True True True True False 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) p False False True True q False True False True p and q False False False True ( not p) or not (p and q) ( not p) (not q) ( not q) True True True False True True True False False True False False True True True False 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) p False False True True q False True False True p or q False False False True not (p or q) True False False False ( not p) and ( not p) (not q) ( not q) True True True False False True False False True False False False 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 è ! 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; isWhitespace - receivedAcknowledgement - haveFoundMissingLink - 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; canProceed true preferCyan false completedSecretMission true 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 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Valutazione delle espressioni boolean Supporre boolean boolean boolean boolean p = true; q = false; r = true; s = false; Qual è il valore di p !s q p && r q || s p && s p == q q != r r == s q != s 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 == j c == e c == d i != k j != k d != e c != e 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 == b b != c Due espressioni false! a != b b == c Il problema sta nella precisione dei tipi in virgola mobile Preferire gli operatori di ordinamento per la vicinanza 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, <, >, <= e >= Corrispondono agli operatori matematici <, >, e Insieme gli operatori di uguaglianza e ordinamento sono detti operatori relazionali False è minore di true 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 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. 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 c c c d c è il valore di < d < e <= e >= e >= e 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 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 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 true azione false Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Esempio if (value < 0) { value = -value; } Is our number Il numero è negativo? negative? IfSeValue than Valueisèless inferiore zero thenoccorre we need a zero, to update its value aggiornare il valore conofl’inverso to that its additive dell’additivo inverse Value < 0 true Value = -Value Our numberèisora now Il numero definitelynon sicuramente negativo nonnegative false If Se Value is not Value è less thana zero inferiore zero, then our number il numero va cosìis isbene fine as 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; } Che cosa accade se l'utente inserisce 11 e 28? Che cosa accade se l'utente inserisce 11 e 4? // visualizza i valori System.out.println("The numbers in sorted order are " + value1 + " and then " + value2); Are the numbers I numeri non sono out in ofordine? order Semantica di if Rearrange Riordina value1 and e value2 put their value2 pertomettere nell'ordine corretto i values in the proper valori order value2 < value1 true false int rememberValue1 = value1 value1 = value2 value2 = rememberValue1 numeri sono messi into The Inumbers were stati rearranged nell'ordine the propercorretto order numeri erano già in in TheInumbers were initially ordine order numbers in order IThe numeri sono are in ordine Java – Guida alla programmazione - James Cohoon, Jack Davidson Perché utilizzare sempre le parentesi graffe Copyright © 2004 - The McGraw-Hill Companies srl Qual è l'output? int m = 5; int n = 10; if (m < n) ++m; ++n; System.out.println(" m = " + m + " n = " n); Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl L'istruzione if-else Sintassi if (espressione) azione1 else azione2 Se espressione è true esegue azione1 altrimenti esegue azione2 Le azioni sono una singola istruzione o un elenco di istruzioni tra parentesi graffe Espressione true false azione1 azione2 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); Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Trovare il massimo di due valori Is value2 larger than value1 value2 è maggiore di value1? Sì, lo it è.is Dunque, value2is è Yes, . So value2 maggiore di value1. In larger than value1. In questo caso, maximum thisviene case, maximum impostato su is set value2 to value2 value1 < value2 true maximum = value2 maximum impostata Either case,viene maximum is set correttamente in entrambi correctly i casi No,its non lo So è. Dunque, No, not. value1 value1 è grande almeno is at least as large as quanto value2. In value2. In this case, questo caso, maximum maximum is set to viene impostato su value1 value2 false maximum = value1 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); 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? 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? 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ì s1 "pastel" s2 "pastel" Come risultato, indipendentemente da ciò che viene inserito s1 e s2 non sono uguali Fanno riferimento a oggetti diversi 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(); Verifica se s1 e s2 rappresentano lo stesso if (s1.equals(s2)) { oggetto System.out.println("Same"); } else{ System.out.println("Different"); } 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 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 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 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"); } } 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 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 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Ordinamento di tre valori if ((n1 <= n2) && (n2 <= n3)) s1 = n1; s2 = n2; s3 = } else if ((n1 <= n3) && (n3 <= s1 = n1; s2 = n3; s3 = } else if ((n2 <= n1) && (n1 <= s1 = n2; s2 = n1; s3 = } else if ((n2 <= n3) && (n3 <= s1 = n2; s2 = n3; s3 = } else if ((n3 <= n1) && (n1 <= s1 = n3; s2 = n1; s3 = } else // n3 <= n2 <= n1 s1 = n3; s2 = n2; s3 = } // n1 <= n2 <= n2 n3; n2)) n2; // n1 <= n3 <= n2 n3)) n3; // n2 <= n1 <= n3 n1)) n1; // n2 <= n3 <= n1 n2)) n2; // n3 <= n1 <= n2 n1; 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 ifelse-if Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Istruzione switch Int egral expression t o da Espressione intera be mat associare ched wit h a case a expression case un'espressione switch ( SwitchExpression ) case CaseExpression1 : Action1 ; Istruzioni Java stJava at ement s case CaseExpression2 : Action2 ; ... case CaseExpressionn : Actionn; default : } Actionn+1 ; { Const ant Espressione intcostante egral expression intera 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; break provoca l'uscita da switch default: System.out.println("not a vowel“); } Gestisce tutti gli altri casi 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“); } 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 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) 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 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl ColoredTriangle - vedere il gatto 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) 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) 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) 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() 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 Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Costruttore predefinito - implementazione // ColoredTriangle(): default constructor public ColoredTriangle() { Point a = new Point(1, 1); Create endpoint values Point b = new Point(2, 2); Crea i valori per i vertici Point c = new Point(3, 3); setPoint(1, a); setPoint(2, b); Copia desired i valori dei vertici desiderati campi dati Copy endpoint values tonei data fields setPoint(3, c); Copy desired data desiderato fields setColor(Color.BLACK); Copia nei campicolor dati iltocolore } Java – Guida alla programmazione - James Cohoon, Jack Davidson Implementazione - funzione di accesso getPoint() Copyright © 2004 - The McGraw-Hill Companies srl // 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 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 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]] Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Implementazione - facilitatore equals() // equals(): facilitatore di uguaglianza Poiché si tratta di una sovrascrittura, il tipo di parametro è Object public boolean equals(Object p) if (p instanceof ColoredTriangle) Point v1 = getPoint(1); instanceof verifica se Point v2 = getPoint(2); l'operando sinistro è Point v3 = getPoint(3); un'istanza di quello destro 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; } } 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); boolean flag2 = e.equals(g); System.out.println(flag1 + " " + flag2 + " " + flag3); Java – Guida alla programmazione - James Cohoon, Jack Davidson Copyright © 2004 - The McGraw-Hill Companies srl Implementazione - facilitatore equals() e f g ColoredTriangle p1: Point x: 1 y: 1 p2: Point x: 2 y: 2 p3: Point x: 3 y: 3 color: Color r: 0 y: 0 p1: Point x: 2 y: 1 p2: Point x: 1 y: 2 p3: Point x: 3 y: 2 color: Color r: 0 y:255 g: 0 g: 0 ColoredTriangle ColoredTriangle p1: Point x: 2 y: 1 p2: Point x: 1 y: 2 p3: Point x: 3 y: 2 color: 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