Salve, ho bisogno di consigli per risolvere questo esercizio in Java, la traccia è questa:
Migliorate la classe DataSet in modo che possa essere usata con un oggetto di tipo Measurer oppure per elaborare oggetti di tipo Measurable.
Suggerimento: fornite un costruttore senza parametri che crei un oggetto di tipo Measurer, il quale elabori oggetti di tipo Measurable.
Le interfacce sono queste:
public interface Measurable
{
double getMeasure();
}
---------------------------------------------------------
/**
* Descrive una qualsiasi classe i cui esemplari possano misurare altri oggetti.
*/
public interface Measurer
{
/**
* Calcola la misura di un oggetto
* @param anObject l'oggetto da misurare
* @return la misura
*/
double measure(Object anObject);
}
------------------------------------------------------
La Classe DataSet
/**
* Calcola la media di un insieme di valori.
*/
public class DataSet
{
/**
* Costruiesce un insieme vuoto di dati con un misuratore assegnato.
* @param aMeasurer il misuratore che viene usato per misurare i valori dei dati
*/
public DataSet(Measurer aMeasurer)
{
sum = 0;
count = 0;
maximum = null;
measurer = aMeasurer;
}
/**
* Aggiunge un valore all'insieme di dati.
* @param x il valore da aggiungere
*/
public void add(Object x)
{
sum = sum + measurer.measure(x);
if (count == 0 || measurer.measure(maximum) < measurer.measure(x)) maximum = x;
count++;
}
/**
* Restituisce la media dei dati inseriti.
* @return la media oppure 0 se non sono stati inseriti valori.
*/
public double getAverage()
{
if (count == 0) return 0;
else return sum / count;
}
/**
* Restituisce il dato maggiore tra i dati inseriti.
* @return il dato maggiore o null se non sono stati inseriti valori
*/
public Object getMaximum()
{
return maximum;
}
private double sum;
private int count;
private Object maximum;
private Measurer measurer;
}
-------------------------------------------------------------
Ciò che segue è un esempio di come funziona la classe DataSet originale aggiungendo la classe RectangleMeasurer e la classe DataSetTester2
import java.awt.Rectangle;
/**
* Gli oggetti di questa classe misurano rettangoli in base alla loro area.
*/
public class RectangleMeasurer implements Measurer
{
public double measure(Object anObject)
{
Rectangle aRectangle = (Rectangle) anObject;
double area = aRectangle.getWidth() * aRectangle.getHeight();
return area;
}
}
-----------------------------------------------------------------------------
import java.awt.Rectangle;
/**
* Illustra l'utilizzo di un oggetto di tipo Measurer.
*/
public class DataSetTester2
{
public static void main(String[] args)
{
Measurer m = new RectangleMeasurer();
DataSet data = new DataSet(m);
data.add(new Rectangle(5, 10, 20, 30));
data.add(new Rectangle(10, 20, 30, 40));
data.add(new Rectangle(20, 30, 5, 10));
System.out.println("Average area = " + data.getAverage());
Rectangle max = (Rectangle) data.getMaximum();
System.out.println("Maximum area rectangle = " + max);
}
}
--------------------------------------------------------
Output di DataSetTester2
Average area = 616.6666666666666
Maximum area rectangle = java.awt.Rectangle[x=10,y=20,width=30,height=40]
---------------------------------------------------------
Ora dovrei come da suggerimento scrivere un costruttore senza parametri
public DataSet()
{
sum = 0;
count = 0;
maximum = null;
}
però non so come continuare: il suggerimento dice di creare un oggetto di tipo Measurer che elabori oggetti di tipo Measurable ma non so come.