Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon,...
-
Upload
bonaventure-bossi -
Category
Documents
-
view
214 -
download
0
Transcript of Capitolo 5 Decisioni Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon,...
Capitolo 5Decisioni
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 FalseFalse True FalseTrue False FalseTrue True 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 p or q
False False FalseFalse True TrueTrue False TrueTrue True True p not q
False TrueTrue 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 False TrueFalse True False TrueTrue False False TrueTrue 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)
( not p) or p q p and q not (p and q) ( not p) (not q) ( not q)
False False False True True True TrueFalse True False True True False TrueTrue False False True False True TrueTrue True True False False False 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)
( not p) and p q p or q not (p or q) ( not p) (not q) ( not q)
False False False True True True TrueFalse True False False True False FalseTrue False False False False True FalseTrue True True False 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;
truecanProceed
falsepreferCyan
truecompletedSecretMission
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 srlValutazione delle espressioni boolean Supporre
boolean p = true;boolean q = false;boolean r = true;boolean s = false;
Qual è il valore dip p && s !s p == q q q != r p && r r == s q || s q != s
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlValutazione delle espressioni boolean Supporre
int i = 1;int j = 2;int k = 2;char c = '#';char d = '%';char e = '#';
Qual è il valore dij == k i != ki == j j != kc == e d != ec == d 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.1double 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 srlValutazione delle espressioni boolean Supporre
int i = 1;int j = 2;int k = 2;
Qual è il valore dii < jj < ki <= kj >= ki >= 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 srlValutazione delle espressioni boolean Supporre
char c = '2';char d = '3';char e = '2';
Qual è il valore dic < dc < ec <= ed >= ec >= 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
azione
true false
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Esempio
if (value < 0) { value = -value;}
Value < 0
Value = -Value
true false
Is our numbernegative?
If Value is notless than zero
then our numberis fine as is
If Value is less thanzero then we needto update its value
to that of its additiveinverse
Our number is nowdefinitely
nonnegative
Il numero è negativo?
Se Value è inferiore a zero,
il numero va bene così
Se Value è inferiore a zero, occorre
aggiornare il valore con l’inverso dell’additivo
Il numero è ora sicuramente non
negativo
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Ordinamento di due valoriSystem.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 necessarioif (value2 < value1) {
// i valori non sono ordinatiint rememberValue1 = value1;value1 = value2;value2 = rememberValue1;
}
// visualizza i valoriSystem.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?
value2 < value1
int rememberValue1 = value1 value1 = value2 value2 = rememberValue1
true false
Are the numbers outof order
Rearrange value1 andvalue2 to put their
values in the properorder
The numbers were initially inorder
The numbers were rearranged intothe proper order
The numbers are in order
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
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlPerché 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);
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
azione1azione2
true false
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
value1 < value2
maximum = value2 maximum = value1
true false
Is value2 larger than value1
Yes, it is . So value2 islarger than value1. In
this case, maximum isset to value2
No, its not. So value1is at least as large asvalue2. In this case,maximum is set to
value1
Either case, maximum is setcorrectly
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
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ì
Come risultato, indipendentemente da ciò che viene inserito s1 e s2 non sono uguali Fanno riferimento a oggetti diversi
"pastel"s1
"pastel"s2
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlProva 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
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 valoriif ((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;}
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
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srl
Istruzione switch
switch ( SwitchExpression ) {
case CaseExpression1 :Action1 ;
case CaseExpression2 :Action2 ;
...
case CaseExpressionn :Actionn;
default :Actionn+1 ;
}
Constantintegral
expressionJ avastatements
Integral expression tobe matched with a case
expression
Espressione intera da associare a
un'espressione case
Istruzioni
Java
Espressionecostante
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;
default: System.out.println("not a vowel“);
}
break provoca l'uscita da switch
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 srlColoredTriangle - 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 srlColoredTriangle - 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 srlColoredTriangle - 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 srlCostruttore predefinito - implementazione
// ColoredTriangle(): default constructorpublic ColoredTriangle() {Point a = new Point(1, 1);Point b = new Point(2, 2);Point c = new Point(3, 3);setPoint(1, a);setPoint(2, b);setPoint(3, c);setColor(Color.BLACK);
}
Create endpoint values
Copy desired endpoint values to data fields
Copy desired color to data fields
Crea i valori per i vertici
Copia i valori dei vertici desiderati nei campi dati
Copia nei campi dati il colore desiderato
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlImplementazione - funzione di accesso getPoint()// getPoint(): funzione di accesso al punto finalepublic 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 srlImplementazione - facilitatore toString()
// toString(): facilitatore stringapublic 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 srlImplementazione - 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
// equals(): facilitatore di uguaglianzapublic 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
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlImplementazione - 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 srlImplementazione - facilitatore equals()
e ColoredTriangle
p1:
p3:
p2:
color:
x: 1 y: 1Point
x: 2 y: 2Point
x: 3 y: 3Point
r: 0 y: 0Color g: 0
f ColoredTriangle
p1:
p3:
p2:
color:
x: 2 y: 1Point
x: 1 y: 2Point
x: 3 y: 2Point
r: 0 y:255Color g: 0
g ColoredTriangle
p1:
p3:
p2:
color:
x: 2 y: 1Point
x: 1 y: 2Point
x: 3 y: 2Point
Java – Guida alla programmazione - James Cohoon, Jack Davidson
Copyright © 2004 - The McGraw-Hill Companies srlImplementazione - facilitatore paint()// paint(): facilitatore di renderingpublic 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