In questo esonero si richiedeva una certa dimestichezza con l’utilizzo delle classi e la gestione di sottoclassi. Difatti fondamentalmente la struttura del codice da realizzare sarebbe dovuta essere:
# Classe Astratta
# Sottoclasse 1
# Sottoclasse 2
Quindi, una volta scritto il codice per la classe astratta occorreva sfruttare i metodi richiesti nelle sottoclassi, e ove richiesto, implementare opportuni algoritmi.
In entrambi i gruppi poi era richiesto di implementare il codice per lo sviluppo di overriding di metodi della superclasse Object, quali toString() e equals().
Il metodo toString() avrebbe dovuto restituire una stringa con le caratteristiche sia della classe stessa, che, possibilmente, della superclasse di appartenenza.
Il metodo equals() invece avrebbe dovuto restituire true o false in funzione del contenuto della classe con un altro oggetto di riferimento, considerando le proprietà che deve avere il metodo equals(), ovvero: riflessività, coerenza, transitività, consistenza.
Per entrambi i gruppi, poi, era richiesta anche la conversione tra due unità di misura differenti e la stampa di tali valori convertiti mediante un metodo statico. Anche in questo caso basta una conoscenza elementare della matematica per risolvere il problema.
GRUPPO 1 esonero2_gruppoa.pdf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | import java.util.*; public class EsoneroGruppo1 { public static void main(String[] argv) { ArrayList barche = new ArrayList(); barche.add( new BarcaAVela("barca1", 100, 2) ); barche.add( new BarcaAMotore("barca2", 120, 60) ); for (int i=0; i<barche.size(); i++) { System.out.println( (Imbarcazione)barche.get(i) ); } } } // --- Classe astratta IMBARCAZIONE abstract class Imbarcazione { //Campi protetti protected String nome; protected int feet; //Campo statico public static final float FEET_X_METER = 3.2808f; //Costruttore public Imbarcazione(String nome, int feet) { setNome(nome); setFeet(feet); } //Metodi publici public void setNome(String nome) { this.nome = nome; } public void setFeet(int feet) { this.feet = feet; } public String getNome() { return nome; } public int getFeet() { return feet; } //Metodi astratti public abstract String toString(); public abstract boolean equals(Object o); //Metodo statico public static float convertFeetToMeter(float feet) { return feet / Imbarcazione.FEET_X_METER; } } //Classe BarcaAVela class BarcaAVela extends Imbarcazione { //Campo privato private int numero_alberi; //Costruttore public BarcaAVela(String nome, int feet, int numero_alberi) { super(nome, feet); this.numero_alberi = numero_alberi; } //Overriding del metodo toString() public String toString() { return "La classe " + this.getClass().getName() + " estende la classe: " + this.getClass().getSuperclass().getName() + "\ncon i campi:" + "\nNome:\t\t" + getNome() + "\nLunghezza:\t" + getFeet() + " ft" + " (equivalenti a: " + Imbarcazione.convertFeetToMeter(getFeet()) + " mt)" + "\nAlberi:\t\t" + numero_alberi; } //Overriding del metodo equals() public boolean equals(Object o) { if (this == o) return true; if (o == null) return false; if (this.getClass() != o.getClass()) return false; BarcaAVela app = (BarcaAVela)o; return app.getNome().equals(getNome()) && app.getFeet() == getFeet() && numero_alberi == app.numero_alberi; } } class BarcaAMotore extends Imbarcazione { //campo privato private int numero_cavalli; //Costruttore public BarcaAMotore(String nome, int feet, int numero_cavalli) { super(nome, feet); this.numero_cavalli = numero_cavalli; } //Overriding del metodo toString() public String toString() { return "La classe " + this.getClass().getName() + " estende la classe: " + this.getClass().getSuperclass().getName() + "\ncon i campi:" + "\nNome:\t\t" + getNome() + "\nLunghezza:\t" + getFeet() + " ft" + " (equivalenti a: " + Imbarcazione.convertFeetToMeter(getFeet()) + " mt)" + "\nCavalli:\t" + numero_cavalli; } //Overriding del metodo equals() public boolean equals(Object o) { if (this == o) return true; if (o == null) return false; if (this.getClass() != o.getClass()) return false; BarcaAMotore app = (BarcaAMotore)o; return app.getNome().equals(getNome()) && app.getFeet() == getFeet() && numero_cavalli == app.numero_cavalli; } } |
GRUPPO 2 esonero2_gruppob.pdf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | import java.util.*; public class EsoneroGruppo2 { public static void main(String[] argv) { ArrayList aerei = new ArrayList(); aerei.add( new AereoTuristico("aereo1", 20, 10, true) ); aerei.add( new AereoDiLinea("aereo2", 400, 15, 4) ); for (int i=0; i<aerei.size(); i++) { System.out.println( (Aereo)aerei.get(i) ); } } } // --- Class astratta Aereo abstract class Aereo { //Campi protetti protected String modello; protected int posti; protected int autonomia; //Campo statico public static final float MILES_X_KILOMETER = 0.6214f; //Costruttore public Aereo(String modello, int posti, int autonomia) { setModello(modello); setPosti(posti); setAutonomia(autonomia); } //Metodi publici public void setModello(String modello) { this.modello = modello; } public void setPosti(int posti) { this.posti = posti; } public void setAutonomia(int autonomia) { this.autonomia = autonomia; } public String getModello() { return modello; } public int getPosti() { return posti; } public int getAutonomia() { return autonomia; } //Metodi astratti public abstract String toString(); public abstract boolean equals(Object o); public abstract int hashCode(); //Metodo statico public static float convertMilesToKilometers(float miles) { return miles / Aereo.MILES_X_KILOMETER; } } //Classe AereoTuristico class AereoTuristico extends Aereo { //Campo privato private boolean elica; //Costruttore public AereoTuristico(String modello, int posti, int autonomia, boolean elica) { super(modello, posti, autonomia); this.elica = elica; } //Overriding del metodo toString() public String toString() { return "La classe: " + this.getClass().getName() + " estende la classe: " + this.getClass().getSuperclass().getName() + "\ncon i campi: " + "\nModello:\t" + getModello() + "\nPosti:\t\t" + getPosti() + "\nAutonomia:\t" + getAutonomia() + "\nAd elica:\t" + ((elica) ? "SI" : "NO"); } //Overriding del metodo equals(Object o) public boolean equals(Object o) { if (this == o) return true; if (o == null) return false; if (this.getClass() != o.getClass()) return false; AereoTuristico app = (AereoTuristico)o; return app.getModello().equals(getModello()) && app.getPosti() == getPosti() && app.getAutonomia() == getAutonomia() && app.elica == elica; } //Override del metodo hashCode() public int hashCode() { return 31 + getModello().hashCode(); } } class AereoDiLinea extends Aereo { //Campo privato private int numero_motori; //Costruttore public AereoDiLinea(String modello, int posti, int autonomia, int numero_motori) { super(modello, posti, autonomia); this.numero_motori = numero_motori; } //Overriding del metodo toString() public String toString() { return "La classe: " + this.getClass().getName() + " estende la classe: " + this.getClass().getSuperclass().getName() + "\ncon i campi: " + "\nModello:\t" + getModello() + "\nPosti:\t\t" + getPosti() + "\nAutonomia:\t" + getAutonomia() + "\nMotori:\t\t" + numero_motori; } //Overriding del metodo equals(Object o) public boolean equals(Object o) { if (this == o) return true; if (o == null) return false; if (this.getClass() != o.getClass()) return false; AereoDiLinea app = (AereoDiLinea)o; return app.getModello().equals(getModello()) && app.getPosti() == getPosti() && app.getAutonomia() == getAutonomia() && app.numero_motori == numero_motori; } //Override del metodo hashCode() public int hashCode() { return 31 + getModello().hashCode(); } } |
