Sviluppo esonero del 23.01.09 per entrambe i gruppi

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();
	}
}

About the Author

Hello everyone! I'm Andrea Rastelli, a 23 year old programmer, designer, 3D animator and compositor. You may follow me on Twitter and Facebook