Progettino
L'obiettivo del progettino è implementare un piccolo generatore d'itinerari stradali.
Il progettino è individuale e dovrà essere consegnato
prima di sostenere la prova scritta.
Il progetto è composto da una classe principale Mappy che gestisce tutte le interazioni con l'utente.
class Mappy {
}
Per generare gli itinerari, la classe principale si serve di
informazioni contenute nelle connessioni. In Java, tali connessioni sono
rappresentate da una classe astratta Connection.
abstract class Connection {
String from;
String to;
float km;
int time;
}
Una connessione contiene le due città che sono
connesse, un numero di chilometri (rappresentato come un numero in virgola mobile) ed un
tempo medio di percorso. Una connessione fra due città può
essere una connessione tramite autostrada, superstrada, o strada statale. In
Java, tali connessioni saranno rappresentate da sotto-classi della
classe Connection. Una classe Motorway contiene il numero dell'autostrada e il costo del pedaggio autostradale.
class Motorway extends Connection {
int number;
float price;
}
Una classe Expressway contiene il nome della superstrada e il numero dei chilometri con doppia carreggiata.
class Expressway extends Connection {
String name;
float safe;
}
Una classe MainRoad contiene il numero della strada statale e un booleano che indica se ci sono semafori su tale strada.
class MainRoad extends Connection {
int number;
boolean trafficLight;
}
Un itinerario è una classe astratta Itinerary. Ha due sotto-classi. La classe ItineraryStep contiene una connessione e il resto dell'itinerario. La classe EmptyItinerary è un itinerario vuoto.
abstract class Itinerary {
}
class ItineraryStep extends Itinerary {
Connection step;
Itinerary next;
}
class EmptyItinerary extends Itinerary {
}
Aggiungere alla class Itinerary i metodi seguenti:
- un metodo statico makeEmpty che restituisce un itinerario vuoto;
- un metodo add che prende una connessione c e restituisce un nuovo itinerario dove la connessione c
è stata aggiunta alla fine. Se tale aggiunta crea un
itinerario che passa due volte nella stessa città, o un itinerario non
continuo, invece di ritornare il nuovo itinerario si solleva
l'eccezione InvalidItinerary;
- un metodo getKilometer che restituisce il numero di chilometri dell'itinerario;
- un metodo getPrice che restituisce il costo dell'itinerario;
- un metodo getTime che restituisce il tempo medio per percorrere l'itinerario.
Sia data l'interface Compare
interface Compare {
boolean isBetter(Itinerary i1, Itinerary i2);
}
che permette di sapere se un itinerario è preferibile ad un altro.
Aggiungere alla class Mappy i metodi seguenti:
- un metodo add che prende una nuova connessione e restituisce void, in modo tale che la nuova connessione può
essere utilizzata per costruire itinerari. Se una connessione
dello stesso tipo fra le stesse città esiste già, l'aggiunta corrisponde ad un aggiornamento, ovvero la nuova
connessione sostituisce la precedente.
- un metodo getItinerary che prende due città e un oggetto best che implementa Compare e restituisce l'itinerario che connette questa due città rispetto al criterio best. Se tale itinerario non esiste solleva un'eccezione NoSuchItinerary.
- un
metodo getItinerary che è un overloading del metodo precedente che prende solamente le due città. In tal caso restituisce
qualsiasi itinerario che connetta le due città. Se tale itinerario non esiste solleva un'eccezione NoSuchItinerary.
Dare delle implementazioni dell'interface Compare che permettano di
ottenere un itinerario con un tempo di percorso minimo, con un numero
di chilometri minimo, con un costo minimo, con un minimo cambio di
strade.
Ogni class di questo progetto deve implementare il metodo toString che
permette di convertire un oggetto in una stringa.
Il progetto dovrà essere corredato di un insieme di esempi che ne illustra
il corretto funzionamento.
Lo studente dovrebbe seguire le convenzioni di codifica
date durante il corso. Per verificare la conformità del progetto, si può
usare l'archivio checkstyle.jar.
Eseguendo
java -jar checkstyle.jar File.java
si genera un file report che indica la conformità del codice.
Laurent Théry
Last modified: Tue May 16 18:16:26 MEST 2006