Classi e oggetti in Java
Qui trovi un insieme di esercizi che ti permetteranno di metterti alla prova con la creazione delle classi e degli oggetti.
Realizza la tua soluzione e poi confronta la tua soluzione con quella proposta dal professore.
Esercizi sulla progettazione delle classi in Java
Esercizio 1: La classe Giocatore
Progettare la classe Giocatore come descritta dal diagramma UML all'interno del file Giocatore.java.
La classe Giocatore deve contenere:
Quattro attributi privati:
L'attributo nome di tipo String;
L'attributo capitano di tipo boolean;
L'attributo goal di tipo int;
L'attributo goalNazionale di tipo int.
Due costruttori
Il costruttore di default;
Il costruttore personalizzato con tutti i parametri per inizializzare i valori degli attributi.
Dieci metodi
1-8. Metodi get e setter per tutti gli atributi;
9. Il metodo calcolaGoalTotali() in grado di calcolare la somma dei goal fatti dal giocatore tra il club e la nazionale;
10. Il metodo toString per poter creare una stringa in grado di mostrare i valori contenuti all'interno del Giocatore.
Infine, creare un secondo file TestGiocatore.java dove poter creare i seguenti tre oggetti di tipo Giocatore:
l'oggetto totti, creato con il costruttore di default ed i valori assegnati grazie ai metodi set;
l'oggetto zanetti, creato con il costruttore personalizzato;
l'oggetto delPiero, creato con il costruttore di default ed i cui valori devono essere inseriti tramite la tastiera.
Esercizio 2: La classe Smartphone
Progettare la classe Smartphone come descritta dal diagramma UML all'interno del file Smartphone.java.
La classe Smartphone deve contenere:
sei attributi privati: marca, modello, prezzoDiLancio, numPollici, ram e touchScreen.
due costruttori: il costruttore di default ed il costruttore personalizzato con tutti i parametri per inizializzare i valori degli attributi.
i metodi getter e setter per tutti gli attributi.
il metodo ottieniFasciaDiPrezzo() che restituisce:
la stringa "fascia ALTA" se il prezzo è superiore a 500€;
la stringa "fascia MEDIA" se il prezzo è compreso tra 200€ e 500€;
la stringa "fascia BASSA" se il prezzo è minore di 200€.
il metodo ottieniTipologiaSmartphone() che restituisce:
la stringa "Mini" se il numero di pollici è minore di 5 pollici;
la stringa "Normal" se il numero di pollici è compreso tra 5 pollici e 7 pollici;
la stringa "Maxi" se il numero di pollici è superiore a 7 pollici.
il metodo toString() che restituisce una stringa in grado di mostrare tutti i valori contenuti negli attributi della classe, la fascia di prezzo e la tipologia di smartphone.
Infine, creare un secondo file TestSmartphone.java dove poter creare i seguenti due oggetti di tipo Smartphone:
l'oggetto smartphone1, creato con il costruttore di default ed i cui valori devono essere inseriti tramite la tastiera;
l'oggetto smartphone2, creato con il costruttore personalizzato ed i cui valori devono essere inseriti tramite la tastiera.
N.B. nel file TestSmartphone.java va controllato l'input dell'utente! Ossia bisogna assicurarsi che i valori inseriti da tastiera siano ammissibili.
Esercizio 3: Il quadrato
Progettare la classe Quadrato come descritta dal diagramma UML all'interno del file Quadrato.java.
La classe Quadrato deve contenere:
quattro attributi privati: lato, area, perimetro e diagonale.
un costruttore: il costruttore di default.
i metodi getter per tutti gli attributi.
i metodi setter per tutti gli attributi.
In questo caso eccezionale, quando si setta un attributo della classe è bene che automaticamente la classe sia in grado di auto aggiornare tutti gli altri attributi. Ad esempio se si richiama il metodo setLato, è giusto che si aggiorni anche il valore del perimetro, dell'area e della diagonale. A tal proposito si possono usare i 4 metodi privati che andiamo a descrivere di seguito.
il metodo calcolaPartendoDaLato() --> partendo dal valore contenuto nell'attributo lato, dovrà calcolare ed aggiornare il valore dell'area, del perimetro e della diagonale;
il metodo calcolaPartendoDaArea() --> partendo dal valore contenuto nell'attributo area, dovrà calcolare ed aggiornare il valore del lato, del perimetro e della diagonale;
il metodo calcolaPartendoDaPerimetro() --> partendo dal valore contenuto nell'attributo perimetro, dovrà calcolare ed aggiornare il valore del lato, dell'area e della diagonale;
il metodo calcolaPartendoDaDiagonale() --> partendo dal valore contenuto nell'attributo diagonale, dovrà calcolare ed aggiornare il valore del lato, dell'area e del perimetro.
il metodo toString() che restituisce una stringa in grado di mostrare tutti i valori contenuti negli attributi della classe.
Infine, creare un secondo file TestQuadrato.java dove permettere all'utente di poter creare un oggetto di tipo quadrato (in maniera iterativa) facendogli scegliere il dato di input da inserire tra:
lato;
area;
perimetro;
diagonale.
Al termine della creazione dell'oggetto mostrare a schermo l'oggetto creato e permettere all'utente di creare un nuovo oggetto di tipo Quadrato.
Esercizio 4: Il triangolo rettangolo
Progettare la classe TriangoloRettangolo che abbia:
due attributi privati di tipo double: cateto1 e cateto2;
il metodo costruttore di default;
il costruttore parametrizzato con entrambi i cateti come parametri;
I metodi getter e setter per entrambi gli attributi;
Metodo calcolaIpotenusa che restituisca il valore dell'ipotenusa;
Metodo calcoloArea che restituisca il valore dell'area;
metodo calcolaPerimetro che restituisca il valore del perimetro;
il metodo toString.
Per prima cosa si realizzi il diagramma UML della classe TriangoloRettangolo (con draw.io o software simili) e si proceda ad implementarla all'interno del file TriangoloRettangolo.java
In una nuova classe chiamata TestTriangoloRettangolo.java istanziare due oggetti di tipo TriangoloRettangolo usando per il primo oggetto il costruttore di default e per il secondo oggetto il costruttore parametrizzato.
Poi visualizzare a video le seguenti informazioni:
Il valore dell'ipotenusa, del perimetro e dell'area dei due oggetti creati. (Suggeriemento: stampare a schermo la stringa ritornata dal metodo toString).
Il triangolo rettangolo che ha l'area maggiore.
Il programma deve avere un menù di scelta ed essere iterativo.
Esercizio 5: La classe Libro
Progettare e produrre la documentazione (la java doc) relativa al codice della classe Libro. Tale classe deve avere:
sei attributi privati che rappresentano: il titolo del libro, l'autore, il numero di pagine, la versione del libro (cartacea o digitale), il prezzo di lancio ed il prezzo attuale;
il metodo costruttore di default;
il costruttore parametrizzato con tutti gli attributi;
i metodi getter e setter per tutti gli attributi;
il metodo applicaSconto10 che riduce il prezzo attuale del 10% rispetto al precedente valore di prezzo attuale;
il metodo applicaSconto che ricevendo come parametro un valore intero rappresentante la percentuale di sconto, modifichi il valore del prezzo attuale riducendolo della percentuale indicata dal parametro;
il metodo toString.
Per prima cosa si realizzi il diagramma UML della classe Libro (con draw.io o software simili) e si proceda ad implementarla all'interno del file Libro.java
In una nuova classe chiamata TestLibro.java istanziare due oggetti di tipo Libro usando per il primo oggetto il costruttore di default e per il secondo oggetto il costruttore parametrizzato, consentendo sempre all'utente di inserire i valori dei due libri da tastiera.
Poi visualizzare a video le seguenti informazioni:
Le informazioni dei due oggetti creati. (Suggeriemento: stampare a schermo la stringa ritornata dal metodo toString).
Il libro che ha il numero di pagine maggiore.
Il programma deve avere un menù di scelta ed essere iterativo.
Per la documentazione ricorda di creare prima della definizione di ogni metodo un commento che inizia con /**. Dopo aver scritto la documentazione di tutti i metodi, su Eclipse cliccare su Project --> Generate javadoc. Infine, andare sulla cartella dove si trova il progetto, accedere alla cartella doc --> libro. In questa cartella troverai il file Libro.html che potrai aprire con un browser e leggere la documentazione della tua classe.
Esercizio 6: La classe Studente
Realizzare la classe Studente che abbia due attributi:
nome
anno di nascita
Di tale classe si implementi i costruttore di default, quello parametrizzato, i metodi get, set ed il metodo toString.
Implementare la classe TestStudente in cui il metodo main permetta di creare due oggetti:
Il primo oggetto deve essere creato usando il costruttore di default. L’utente deve inserire i valori da tastiera.
Il secondo oggetto deve essere creato usando il costruttore parametrizzato. L’utente deve inserire i valori da tastiera.
Indicare se i due studenti sono coetanei, oppure indicare chi è nato prima.
Una volta completati i due file si documenti la classe ed i metodi realizzati e rendere il main iterativo.
Esercizio 7: La classe Canzone e la playlist preferita
Realizzare la classe Canzone che i seguenti tre attributi: nome, cantante e durata. Di tale classe si implementi i costruttore di default, quello parametrizzato, i metodi get, set ed il metodo toString.
Implementare la classe MainCanzone in cui il metodo main deve permettere all'utente di inserire la propria playlist preferita. In particolare nele main si deve:
chiedere all'utente da quante canzoni è costituita la propria playlist preferita (almeno una canzone);
dichiarare e inizializzare un vettore in grado di contenere tali canzoni;
(Suggerimento: bisogna creare un vettore di tipo Canzone. Per capire come crearlo è sufficiente ricordare come si crea un vettore di interi e sostituire al posto della parola "int" la parola "Canzone").
all'interno di un ciclo for, che itera in base al numero di canzoni, creare le canzoni e memorizzarle nel vettore.
stampare a schermo la playlist;
indicare il nome della canzone più lunga e la media della durata delle canzoni contenute nella playlist.
Si realizzi il class diagram per la classe Canzone e si documenti il codice.
Esercizio 8: La prima classe che contiene un vettore di oggetti come attributo
Riprendere la classe Canzone definita nell'esercizio 7. Creare adesso la classe Playlist che ha un solo attributo: playlist. Tale attributo è un vettore di tipo Canzone. Di tale classe si implementi:
il metodo costruttore che prende come parametro il vettore di canzoni;
i metodi che modificano il titolo, il cantante e la durata:
modificaTitolo(int pos, String tit) : deve essere in grado di modificare il titolo della canzone che si trova in posizione pos.
modificaCantante(int pos, String can) : deve essere in grado di modificare il cantante della canzone che si trova in posizione pos.
modificaDurata(int pos, double dur) : deve essere in grado di modificare la durata della canzone che si trova in posizione pos.
il metodo toString che deve restituire una stringa con l'intera playlist.
Il metodo main deve consentire di creare una playlist.
Una volta creata la playlist avviare un menu iterativo in grado di:
modifcare il titolo di una canzone
modificare il cantante di una canzone
modificare la durata di una canzone
visualizzare la playlist
uscire dal menu
Esercizio 9: La classe Libro con il costruttore di copia
Realizzare la classe Libro che prevede:
i seguenti attributi: titolo, autore, numPagine e prezzo.
i seguenti metodi costruttori: default (senza parametri), parametrizzato (con i 4 parametri che fanno riferimento ai quattro attributi) e costruttore di copia.
i seguenti metodi: getters, setters, toString .
Creare il metodo main in cui:
creare un oggetto libro1 di tipo Libro contenente i seguenti valori: titolo = "Pinocchio", autore = "Collodi", numPagine = 288, prezzo = 9.02
creare un oggetto libro2 di tipo Libro che sia la copia di libro1
creare un oggetto libro3 di tipo Libro contenente i seguenti valori: titolo = "Divina Commedia", autore = "Dante", numPagine = 576, prezzo = 6.65
creare un alias "divinaCommedia" che si riferisce a libro 3.
usare il metodo setPrezzo sull'oggetto libro1, modificandolo a 7.43
usare il metodo setTitolo sull'oggetto libro2, modificandolo con il valore "Pinocchio versione illustrata"
usare il metodo setAutore sull'oggetto libro3, modificandolo con il valore "Dante Alighieri"
usare il metodo setNumPagine sull'oggetto divinaCommedia, modificandolo con il valore 621
infine, stampare a schermo i 4 oggetti ed analizzare l'effetto che i metodi set hanno avuto su di essi.
Esercizio 10: La classe Libreria
Partendo dalla classe Libro, creare adesso la classe Libreria che prevede:
i seguenti attributi: nome, indirizzo e libri (vettore contenente oggetti di tipo Libro).
metodo costruttore di default e personalizzato (con i parametri che fanno riferimento a tutti gli attributi).
i seguenti metodi: getters, setters, toString ed il metodo calcolaMediaPrezzo che calcola la media dei prezzi dei libri presenti nella libreria.
Il metodo main deve consentire di creare una Libreria. Per creare la libreria seguire i seguenti passi:
Chiedere all'utente quanti libri ci sono nella libreria;
Quando l'utente inserisce i dati di un libro, chiedere anche quante copie di quel libro sono presenti nella libreria. Se ad esempio del libro "Pinocchio" sono presenti tre copie bisogna creare tre oggetti con gli stessi valori. (Usare dunque il costruttore di copia per creare la seconda e terza copia del libro "Pinocchio").
Infine, mostrare a schermo la libreria ed il prezzo medio dei libri contenuta in essa.
Esercizio 11: La classe Automobile (uso metodo equals e metodo inserimento dati da tastiera)
Realizzare il class diagram della classe Automobile prevedendo:
almeno 4 attributi: di cui almeno uno di tipo String, uno di tipo int e uno di tipo boolean.
i metodi costruttore di default, parametrizzato e di copia.
il metodo inserisciDati che consenta all'utente di inizializzare tutti i valori degli attributi da tastiera.
i metodi get, set, toString, equals ed opzionalmente eventuali metodi aggiuntivi.
Scrivere il codice della classe Automobile nel file "Automobile.java" e commentare opportunatamente il metodo costruttore copia ed il metodo equals.
Implementare nel file "MainAutomobile.java" il metodo main che deve permettere almeno di:
creare due oggetti usando il costruttore di default;
usare il metodo inserisciDati per poter inserire i dati da tastiera;
confrontare i due oggetti con il metodo equals ed indicare se sono uguali.
Esercizio 12: Il punto nel piano cartesiano
Partendo dal diagramma UML della classe riportato di fianco realizzare la classe PuntoCartesiano.
Il metodo quadrante ritorna una stringa che indica il quadrante dove si trova il punto cartesiano (qui trovi un'immagine che ti ricorda i quattro quadranti del piano cartesiano). Indicare anche se il punto non si trova in un quadrante preciso, bensì si trova nell'origine, nei punti dell'asse x o nei punti dell'asse y.
Il metodo distanza ritorna la distanza tra:
l'oggetto di tipo PuntoCartesiano che richiama il metodo distanza e...
l'oggetto di tipo PuntoCartesiano passato come parametro.
(clicca qui se non ricordi la formula per calcolare la distanza tra due punti).
Il metodo rettaPassantePerDuePunti ritorna una stringa indicante l'equazione della retta passante per:
l'oggetto di tipo PuntoCartesiano che richiama il metodo rettaPassantePerDuePunti e...
l'oggetto di tipo PuntoCartesiano passato come parametro.
(clicca qui se non ricordi come si calcola la retta passante per due punti).
Scrivere il codice del metodo main nel file MainPuntoCartesiano.java. Nel metodo main svolgere le seguenti azioni:
Creare un oggetto p1 di tipo PuntoCartesiano con il metodo costruttore di default;
Assegnare con i metodi setX() e setY i valori (3, 5) all'oggetto p1;
Creare un oggetto p2 di tipo PuntoCartesiano con il metodo costruttore parametrizzato assegnandogli i valori (-2, 5);
Creare un oggetto p3 di tipo Punto Cartesiano con il metodo costruttore di default;
Assegnare con il metodo inserisciDati() i valori all'oggetto p3. Sarà l'utente a scegliere i metodi da tastiera;
Mostrare a schermo una stampa che descriva gli oggetti p1, p2 e p3;
Indicare in quali quadranti si trovano i tre punti richiamando il metodo quadrante da tutti gli oggetti;
Indicare la distanza tra le tutte le possibili coppie di punti (p1 e p2) (p1 e p3) (p2 e p3);
Indicare l'equazione della retta passante per tutte le possibili coppe di punti (p1 e p2) (p1 e p3) (p2 e p3).
Esercizio 13: Il sensore di temperatura
In una smart city sono diffusi diversi sensori di temperatura. Ogni sensore è caratterizzato da una posizione (latitudine e longitudine) e da una temperatura rilevata (in gradi Celsius). Tali sensori sono utilizzati dalla città per poter localizzare eventuali rischi di incendi in città.
Vi è un rischio di incendio nel momento in cui due sensori diversi che si trovano ad una distanza inferiore di 15metri registrano entrambi una temperatura maggiore di 60°.
In caso di incendio l'applicazione deve essere in grado di indicare il punto medio rispetto al quale si trovano i due sensori che hanno registrato tali temperature e mostrare a schermo un messaggio di ALLERTA.
Progettare la classe SensoreTemperatura, realizzando diversi metodi in grado di confrontare due oggetti di tipo SensoreTemperatura:
metodo per calcolare la distanza tra due sensori;
metodo per calcolare il punto medio tra due sensori;
metodo per capire se due sensori hanno le caratteristiche per segnalare un rischio di incendio.
Infine, realizzare una classe MainSensoreTemperatura in grado di far inserire all'utente i valori relativi a quattro coppie di sensori. Per ogni coppia il programma deve analizzare se i due sensori danno luogo ad un'ALLERTA incendio oppure no.
**Sfida: Nel main puoi memorizzare n sensori in un vettore (i cui valori puoi anche generarli in maniera random). In seguito, confrontare tutte le coppie di sensori possibili e indicare in output tutte le allerte incendio che ne derivano da tali coppie di sensori.