Idraulica
Realizzare il sistema software per la descrizione e la simulazione di
un sistema idraulico.
Tutte le classi si trovano nel package idraulica.
Si parta dal progetto Eclipse predefinito.
R1: Elementi e Tubi
Un sistema idraulico è composto da elementi (di vario tipo)
connessi tra loro da tubi. Un sistema è rappresentato da un
oggetto di classe Sistema che
offre i metodo aggiungiElemento()
che riceve come parametro un oggetto di classe Elemento e lo aggiunge alla lista
interna. Tramite il metodo getElementi()
è possibile ottenere un array contenente gli elementi, questo
metodo restituisce un array di oggetti Elemento.
R2: Elementi semplici
I tipi di elementi semplici sono: Sorgente,
Rubinetto, Scarico che sono rappresentati
dalle classi omonime.
Tutti gli elementi hanno un nome che può essere letto tramite il
metodo getNome().
È possibile connettere l'uscita di un elemento all'ingresso di un
altro tramite il metodo connetti()
che riceve come parametro l'elemento al cui ingresso deve essere
connesso l'elemento sui cui è invocato: a.connetti(b); connette
l'uscita di a all'ingresso di b. Il metodo connetti() invocato su
Scarico non ha nessun effetto e stampa un messaggio d'errore.
Dato un elemento è possibile sapere a quale elemento è
connesso in uscita tramite il metodo getUscita()
che resituisce un oggetto di tipo Elemento.
R3: Elementi complessi
Oltre agli elementi semplici di cui sopra ci sono degli elementi
complessi. L'elemento a T rappresentato dalla classe Split permette di suddivide l'input
in due flussi in uscita. In tale caso il metodo connetti() riceve un ulteriore
parametro intero che indica l'uscita a cui connettere l'elemento. Tale
intero ha valore 0 per la prima uscita e 1 per la seconda. Per sapere
quali elementi sono connessi in uscita è possibile utilizzare il
metodo getUscite() che
restituisce un array di elementi.
R4: Simulazione
Dato un sistema corretto, ovvero un albero che ha come radice una sorgente
ed in cui ogni percorso termina con uno scarico, è
possibile fare un calcolo delle portate e di come vengono ripartite.
È possibile definire la portate per una sorgente con il metodo setPortata() che riceve come
parametro un numero floating point che rappresenta i metri cubi al
secondo.
Per i rubinetti è possibile impostare la loro apertura tramite
il metodo setOpen() che riceve
come parametro un boolean. Se un rubinetto è aperto la porta
all'ingresso è uguale a quell all'uscita.
Per i raccordi a T la portata in ingresso viene ripartita equamente tra
le due uscite.
Il metodo simula() della
classe Sistema, effettua i calcoli di portata a partire da ogni
sorgente e stampa per ogni elemento connesso a valle le portate in
ingresso e in uscita (per lo scarico solo quella in ingresso).
Suggerimento: dato un oggetto, per
sapere se è un'istanza di una classe si può usare
l'operatore instanceof.
Es.
if(elemento instanceof Sorgente)