Risolvere i problemi elencati sotto NELL'ORDINE IN CUI SONO ELENCATI. Non si richiede di scrivere TUTTI i programmi, ma quelli risolti devono compilare correttamente e produrre i risultati richiesti. Alla fine dell'esercitazione, copiare tutti i file prodotti in una cartella identificata dai cognomi dei componenti del gruppo, sotto serverPu/Esercizi/Lez0603. Siete invitati a completare (alcuni de)gli esercizi
fuori dall'orario di esercitazione, soprattutto se avete trovato serie
difficoltà a svolgerli. Potete mandare l'eventuale completamento
all'indirizzo guerrini@disi.unige.it.
|
Esercizio 1
Si scriva una classe Lavoratore
le cui istanze rappresentano lavoratori. Ogni lavoratore è caratterizzato
da un nome, un livello ed uno stipendio (mensile). La classe deve contenere una variabile di istanza
di tipo stringa nome e due variabili di istanza intere, livello e
stipendio, un costruttore
che assegna al lavoratore un numero ed un livello specificati, ed un metodo
stampaStipendio()
che stampa lo stipendio del lavoratore.
Scrivere quindi una classe
LavoratoreConStraordinariPagati
che estende la classe Lavoratore.
La classe deve contenere una nuova variabile di istanza,
oreStraordinario,
un costruttore che assegna al lavoratore con straordinari pagati un nome,
un livello e un numero
di ore di straordinario specificati, un metodo stampaStraordinari()
che stampa un messaggio contenente il numero di ore di straordinario.
La classe deve inoltre contenere una variabile statica reale
retribuzioneOraria,
inizializzata a 10.0, corrispondente alla retribuzione di un'ora
di straordinario (che si suppone uguale per tutti).
La classe deve inoltre ridefinire il metodo stampaStipendio()
per tenere conto della retribuzione delle ore di straordinario: alla retribuzione base (ereditata da
Lavoratore) va sommata
la retribuzione degli straordinari, ottenuta come retribuzione
oraria dello straordinario per numero di ore di straordinario
effettuate.
Scrivere infine un programma di prova per collaudare
le classi e i metodi.
Esercizio 2
Implementate una classe Triangle
che estenda la classe
Polygon.
Nel costruttore, dovete ricevere le coordinate x
e y dei tre vertici del triangolo (si cerchi, se possibile,
di riutilizzare un costruttore della superclasse). Ridefinite il
metodo addPoint
in modo che non modifichi il triangolo e stampi il messaggio
"Non e' possibile aggiungere un vertice ad un triangolo".
Scrivete quindi un programma che chieda all'utente le coordinate dei vertici del triangolo,
crei il triangolo corrispondente, chieda
all'utente le coordinate di un punto, provi ad aggiungere tale
punto come vertice del triangolo, e infine verifichi se il punto
e' contenuto nel triangolo (mediante il metodo contains
che ereditate da
Polygon), stampando in caso affermativo un
opportuno messaggio.
Esercizio 3
Scrivete una gerarchia che mostri l'ereditarietà per le classi Quadrilatero, Trapezio, Parallelogramma, Rettangolo e Quadrato. Utilizzate Quadrilatero come superclasse della gerarchia. Rendete la gerarchia profonda il più possibile. Scrivete un programma di esempio che istanzia e visualizza gli oggetti di tutte queste classi.
Esercizio 4
Rivedere la classe Circle dell'esercitazione precedente in modo da utilizzare super ovunque possibile.