Gli obiettivi di questa esercitazione sono: capire i concetti di polimorfismo e late-binding, prendere confidenza con l'ereditarietà e saper definire semplici gerarchie di classi (capitolo 9).
Raccomandazioni: Ove non altrimenti indicato, rispondete alle domande prima ragionando su carta e poi provando a editare, compilare ed eseguire. Gli esercizi etichettati con l'asterisco (*) sono più difficili: affrontateli dopo aver risolto gli altri.
Obiettivo: saper definire gerarchie di classi.
Attività:
spezza()
).String
),aggiungi
per aggiungere un
carattere. Nel caso degli SMS normali, questo metodo deve restituire false
se non si possono più aggiungere caratteri. toString()
deve restituire il messaggio sotto forma
di stringa così come verrebbe mostrato su un telefonino con un display
che può contenere al massimo 25 caratteri per riga.UsaSMS
che vi permettere di inserire
da tastiera un SMS normale ed uno lungo e poi li stampa a video.>java UsaSMS Inserisci il tuo numero di telefono: 333123123 Che giorno è oggi? 30/04/2003 Scrivi un messaggio breve (max 160 caratteri) Butta la pasta che sto arrivando! Che ore sono? 12:30 Inserisci il numero di telefono a cui inviare il messaggio: 348012012 Ora scrivi un messaggio lungo Buuuuuuuuuttttttttttttttaaaaaaaaaaaaaaaaaa laaaaaa paaaaaaaaaaasssssstaaaaaaaaa cheeeeeeee sssssssssstoooooooooooooooo aaaaaaaaarrrrrrrrrrrrrrriiiiiiiiiiiiiiiiiivvv vvvvvaaaaaaaaaannnnnnnnnnnnnnndoooooooooooooooooooooooooooooooo!!!!!!!!!!!!!! Che ore sono? 12:33 Inserisci il numero di telefono a cui inviare il messaggio: 348014014 Il primo messaggio, quello breve, è il seguente: Da: 333123123 A: 348012012 Data: 30/04/2003 12:30 Butta la pasta che sto ar rivando! Il secondo messaggio, quello lungo, è il seguente: Da: 333123123 A: 348014014 Data: 30/04/2003 12:33 Buuuuuuuuutttttttttttttta aaaaaaaaaaaaaaaaa laaa aaa paaaaaaaaaaassssss taaaaaaaaa cheeeeeeee sss ssssssstoooooooooooooooo aaaaaaaaarrrrrrrrrrrrrrri iiiiiiiiiiiiiiiiivvvvvvvv aaaaaaaaaannnnnnnnnnnnnnn doooooooooooooooooooooooo oooooooo!!!!!!!!!!!!!!Suggerimento: leggete il messaggio da tastiera con
EasyIn.readString()
,
poi ricavate un array di char
utilizzando il metodo toCharArray()
.
Ad esempio
String x = EasyIn.readString(); char[] caratteri = x.toCharArray(); for (....) ... messaggio.aggiungi(caratteri[i])...
prodotti()
che restituisce
un array contenente tutti i prodotti presenti nel carrello. Implementate anche
i metodi o il metodo per aggiungere e togliere libri e cd dal carrello.byte[]
audio
, un destinatario, il mittente e l'ora e data di partenza. Non
ha metodi per aggiungere e togliere caratteri.UsaSMS
dell'attività 2 per fare
in modo che i messaggi mostrati all'utente prima dell'inserimento dei dati
da tastiera (Inserisci il tuo numero di telefono: , Che giorno
รจ oggi? , Scrivi un messaggio breve (max 160 caratteri) ,
ecc.) vengano scritti in dialetto o in un'altra lingua. Se non riuscite a
farlo modificando solo il codice di UsaSMS
,
ma siete costretti a modificare anche quello degli SMS, vuol dire che era
stato progettato male.Obiettivo: comprendere polimorfismo e late-binding.
Attività:
class A { public int m1() { return 2; } }
class B extends A { public int m1() { return 5; } }
class C extends A { public int m1() { return 13; } }
class Esercizio2 { public static void main(String[] args) { A pippo = new A(); ... pluto = new B(); prova(pluto); } static void prova(A a) { System.out.println(a.m1()); } }Cosa si deve sostituire ai puntini del programma
Esercizio2
per
fargli stampare 5 (possono essere giuste anche più risposte)?
A
B
C
A, B
e C
dell'attività
precedente. Se si modifica il programma Esercizio2
in questo
modo
class Esercizio2 { public static void main(String[] args) { ... pippo = new ...; ... pluto = new ...; prova(pippo); prova(pluto); } static void prova(A a) { System.out.print("("+a.m1()+")"); } static void prova(C c) { System.out.print(c.m1()+","+c.m1()); } }cosa si deve sostituire ai puntini per ottenere (5)13,13 (possono essere corrette anche più risposte)?
A, A()
e A, C()
A, B()
e C, C()
B, B()
e C, C()
A, B()
e A, C()
Cassa
con un metodo public int conto(Carrello
c)
che dato un carrello pieno restituisce il conto da pagare.if,switch
e operatore condizionale.conto
deve essere simile al seguente:
public int conto(Carrello c) { ... ... prodotti = c.prodotti(); for (... prodotti ...) { ... ... ...[i].prezzo(); ... } ... return totale; }
UsaCarrelloECassa
che vi permette
di acquistare 5 prodotti e poi calcola il conto. L'output del programma deve
essere simile al seguente:
>java UsaCarrelloECassa Quanti libri vuoi acquistare? 3 Inserisci il prezzo del libro 1: 12 Inserisci il prezzo del libro 2: 10 Inserisci il prezzo del libro 3: 14 Inserisci il prezzo del cd 1: 20 Inserisci il prezzo del cd 2: 26 Totale: 82