Idraulica
Realizzare il sistema software per la descrizione e la simulazione di
un sistema idraulico.
Tutte le classi si trovano nel package idraulica.
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.
Suggerimento: data una List è
possibile generare un array contenente gli elementi tramite il metodo
toArray() che riceve come parametro un array vuoto di dimensioni
opportune.
Es:
Elemento[] risultato =
(Elemento[])lista.toArray(new
Elemento[lista.size()])
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().
E' 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.
Un caso particolare di T è il ripartitore, rappresentato dalla
classe Ripartitore; il
costruttore di questa classe riceve come parametro il numero di uscite.
In questo caso il metodo getNumeroUscite()
restituisce il numero di uscite del ripartitore.
R4: Simulazione
E' possibile fare un carico delle portate e di come vengono ripartite.
E' 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.
Per i ripartitori è possibile indicare la ripartizione tramite
il metodo setProporzioni() che
riceve un array di floating point che definiscono le proporzioni con
cui viene ripartito il flusso in entrata sulle uscite. La dimension
dell'array deve essere parti al numero di 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)