Testo

Scrivere una gerarchia di classi Elettrodomestico->Lavatrice. Prevedete per la classe Elettrodomestico gli attributi ID (numerico), descrizione, e costo, un costruttore parametrizzato, il metodo toString e metodi set e get per il costo. La classe Lavatrice avrà in aggiunta gli attributi modello e capacitàCarico e definirà un suo costruttore parametrizzato e il metodo toString. Utilizzate le vostre classi in un programma di esempio che crea una List in cui memorizza alcuni oggetti Elettrodomestico e alcuni oggetti Lavatrice e che verrà infine stampata a schermo.

Svolgimento

In questo esercizio ci vengono richieste due classi chiamate Elettrodomestico e Lavatrice, dove la seconda è un’estensione della prima.

Per quanto riguarda la classe Elettrodomestico vengono richiesti ID, descrizione e costo come attributi.

public class Elettrodomestico{
    private int ID;
    private String descrizione;
    private double costo;
}

Creiamo un file chiamato “Elettrodomestico.java” e scriviamo al suo interno una semplice classe chiamata Elettrodomestico con 3 attributi privati, uno di tipo Intero (ID), uno di tipo Stringa (descrizione) e il terzo (costo) di tipo Double.


Successivamente viene richiesto un costruttore parametrizzato, ovvero il metodo che viene chiamato quando si crea un nuovo oggetto della classe.

public class Elettrodomestico{
    private int ID;
    private String descrizione;
    private double costo;

    public Elettrodomestico(int ID, String descrizione, double costo){
        this.ID = ID;
        this.descrizione = descrizione;
        setCosto(costo);
    }
}

Inseriamo un costruttore che ha in ingresso i tre attributi definiti precedentemente (int ID, String descrizione, double costo) e al suo interno attribuiamo con il riferimento this all’ID della classe l’ID passato come parametro, stessa cosa per quanto riguarda la descrizione e per il costo mettiamo il metodo set passando la variabile costo usata come parametro del costruttore. Anche se ancora non abbiamo definito e implementato il metodo set, lo inseriamo fin da subito e lo definiremo in un secondo momento.


Poi viene richiesto il metodo toString, ovvero il metodo che viene richiamato in automatico quando stampiamo un oggetto della classe e che ci mostra le informazioni di essa.

public class Elettrodomestico{
    private int ID;
    private String descrizione;
    private double costo;

    public Elettrodomestico(int ID, String descrizione, double costo){
        this.ID = ID;
        this.descrizione = descrizione;
        setCosto(costo);
    }

    @Override
    public String toString(){
        return "ID: " + this.ID + " Descrizione: " + this.descrizione + " Costo: " + this.costo;
    }
}

Essendo il metodo toString ereditato dalla classe Object (tutte le classi che creiamo estendono Object), inseriamo @Override per essere sicuri di andare a sovrascrivere il metodo toString. Subito sotto andiamo a dichiarare un metodo pubblico, che restituisce obbligatoriamente una stringa, che si chiama appunto toString e con nessun parametro in ingresso. All’interno inseriamo un semplice return con la stringa che desideriamo restituire, solitamente si mettono i parametri importanti della classe accompagnati da una piccola descrizione.


Per terminare la classe Elettrodomestico vengono richiesti i metodi set e get per l’attributo costo

public class Elettrodomestico{
    private int ID;
    private String descrizione;
    private double costo;

    public Elettrodomestico(int ID, String descrizione, double costo){
        this.ID = ID;
        this.descrizione = descrizione;
        setCosto(costo);
    }

    public void setCosto(double costo){
        if(costo > 0){
            this.costo = costo;
        }
    }

    public double getCosto(){
        return this.costo;
    }

    @Override
    public String toString(){
        return "ID: " + this.ID + " Descrizione: " + this.descrizione + " Costo: " + this.costo;
    }
}

Quindi creiamo un metodo pubblico void per quanto riguarda setCosto e al suo interno inseriamo un if dove come condizione mettiamo che se il parametro in ingresso al metodo set è positivo (> 0), allora lo andiamo ad attribuire alla variabile della classe. Per concludere definiamo il metodo getCosto che in questo caso non fa altro che restituire il valore dell’attributo corrispondente tramite il comando return.


Per quanto riguarda la classe Lavatrice, che estenderà Elettrodomestico e quindi erediterà i suoi attributi e metodi, vengono richiesti come attributi aggiuntivi modello e capacitaCarico.

public class Lavatrice extends Elettrodomestico{
    private String modello;
    private double capacitaCarico;

}

Anche per questa classe creiamo un file chiamato “Lavatrice.java” e scriviamo al suo interno una classe chiamata Lavatrice che in questo caso estende, tramite la parola chiave extends, la classe creata precedentemente (Elettrodomestico). Inseriamo i suoi due nuovi attributi privati, uno di tipo Stringa (modello) e uno di tipo Double (capacitaCarico).


Successivamente viene richiesto un costruttore parametrizzato, ovvero il metodo che viene chiamato quando si crea un nuovo oggetto della classe.

public class Lavatrice extends Elettrodomestico{
    private String modello;
    private double capacitaCarico;

    public Lavatrice(int ID, String descrizione, double costo, String modello, double capacitaCarico){
        super(ID, descrizione, costo);
        setModello(modello);
        setCapacitaCarico(capacitaCarico);
    }

}

Inseriamo un costruttore che ha in ingresso sia i due attributi definiti precedentemente che gli attributi della classe Elettrodomestico, sua classe genitore (int ID, String descrizione, double costo, String modello, double capacitaCarico).

All’interno del costruttore la primissima cosa da fare è richiamare il costruttore della classe Elettrodomestico tramite l’operatore super, al quale passiamo i tre parametri che abbiamo definito all’interno della classe Elettrodomestico. Grazie all’operatore super verrà usato il costruttore della classe genitore (Elettrodomestico) per gestire i tre attributi ID, descrizione e costo per come è stato stabilito nel costruttore implementato nella classe genitore.

Subito dopo inseriamo i due metodi set relativi ai due attributi passando i parametri modello e capacitaCarico. Anche se ancora non abbiamo definito e implementato questi due metodi set, li inseriamo fin da subito e li definiremo in un secondo momento.


Per concludere ci viene richiesto il il metodo toString, ovvero il metodo che viene richiamato in automatico quando stampiamo un oggetto della classe e che ci mostra le informazioni di essa. A completamento della classe, anche se non richiesto, inseriamo anche i metodi set e get per gli attributi modello e capacitaCarico.

public class Lavatrice extends Elettrodomestico{
    private String modello;
    private double capacitaCarico;

    public Lavatrice(int ID, String descrizione, double costo, String modello, double capacitaCarico){
        super(ID, descrizione, costo);
        setModello(modello);
        setCapacitaCarico(capacitaCarico);
    }

    public void setModello(String modello){
        this.modello = modello;
    }

    public void setCapacitaCarico(double capacitaCarico){
        this.capacitaCarico = capacitaCarico;
    }

    public String getModello(){
        return this.modello;
    }

    public double getCapacitaCarico(){
        return this.capacitaCarico;
    }

    @Override
    public String toString(){
        return super.toString() + " Modello: " + this.modello + " Capacità carico: " + this.capacitaCarico;
    }
}

Essendo il metodo toString ereditato dalla classe Object (tutte le classi che creiamo estendono Object), inseriamo @Override per essere sicuri di andare a sovrascrivere il metodo toString. Subito sotto andiamo a dichiarare un metodo pubblico, che restituisce obbligatoriamente una stringa, che si chiama appunto toString e con nessun parametro in ingresso. All’interno inseriamo un semplice return con la stringa che desideriamo restituire, solitamente si mettono i parametri importanti della classe accompagnati da una piccola descrizione.

Nei metodi set attribuiamo semplicemente il parametro in ingresso all’attributo corrispondente della classe tramite il riferimento this e nei metodi get restituiamo il parametro della classe corrispondente.


Per concludere l’esercizio viene richiesta una classe per testare le due create precedentemente creando una List in cui vengono memorizzati alcuni oggetti Elettrodomestico e alcuni oggetti Lavatrice e che verrà infine stampata a schermo.

import java.util.Scanner;
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        List<Elettrodomestico> elettrodomestici = new ArrayList<>();

        for(int i = 0; i < 5; i++){
            System.out.print("ID: ");
            int ID = sc.nextInt();
            System.out.print("Descrizione: ");
            String descrizione = sc.next();
            System.out.print("Costo: ");
            double costo = sc.nextDouble();
            System.out.print("Modello:");
            String modello = sc.next();
            System.out.print("Capacità carico:");
            double capacitaCarico = sc.nextDouble();
            elettrodomestici.add(new Lavatrice(ID, descrizione, costo, modello, capacitaCarico));
        }

        for(int i = 0; i < 5; i++){
            System.out.print("ID: ");
            int ID = sc.nextInt();
            System.out.print("Descrizione: ");
            String descrizione = sc.next();
            System.out.print("Costo: ");
            double costo = sc.nextDouble();
            elettrodomestici.add(new Elettrodomestico(ID, descrizione, costo));
        }

        Iterator<Elettrodomestico> iter = elettrodomestici.iterator();

        while(iter.hasNext()){
            System.out.println(iter.next());
        }
    }
}

Per realizzare questa classe, che chiameremo Main, faremo scegliere all’utente i parametri degli oggetti Elettrodomestico e Lavatrice. Prima di tutto importiamo “import java.util.Scanner” per poter utilizare lo Scanner e “import java.util.*” per usare la classe ArrayList e l’interfaccia List. Successivamente creiamo la classe pubblica Main e al suo interno creiamo subito il classico metodo main pubblico, statico e void con in ingresso la dicitura “String[] args”. Dentro questo metodo creiamo un nuovo oggetto Scanner chiamato sc e un nuovo oggetto List di Elettrodomestico e lo istanziamo come ArrayList. Abbiamo creato la List di tipo Elettrodomestico per poter immagazzinare al suo interno entrambi i tipi di oggetto (essendo Lavatrice un’estensione di Elettrodomestico). Dopo inseriamo un ciclo for che va da 0 al numero di oggetti Lavatrice che desideriamo inserire nella List e al suo interno richiamiamo un Println per specificare cosa si sta inserendo e uno Scanner (questo procedimento va ripetuto per ogni attributo della classe); infine aggiungiamo il nuovo oggetto alla List. Lo stesso procedimento va effettuato per gli oggetti di tipo Elettrodomestico. Infine per stampare il contenuto della List creiamo un Iterator e gli attribuiamo l’Iterator della List, dentro un ciclo While inseriamo un Println di iter.next e come condizione iter.hasNext, il primo serve per richiamare l’elemento successivo della List mentre il secondo per verificare se vi sono altri elementi.


L’intero codice sorgente dell’esercizio si trova su Github qui!

Sei in possesso di altri compiti d’esame o esercizi e vuoi che li svolga? Contattami e inserisci il link per il download qui!
Per qualsiasi dubbio non esitare a lasciare un commento!

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.