La nuova classe HSystemExt estende la classe HSystem.
La classe Multisplit rappresenta un'estensione delle classe Split che prevede più uscite. Il costruttore accetta, oltre al nome, il numero di uscite.
Il metodo connect() riceve due parametri: l'elemento da collegare ed il numero dell'uscita a cui collegarlo. Le uscite sono numerate a partire da 0
Per sapere quali elementi sono connessi in uscita ad un multisplit, è possibile utilizzare il metodo getOutputs() che restituisce un array con gli elementi connessi. Se nessun elemento è connesso ad una certa uscita, la cella corrispondente dell'array è null.In preparazione alla simulazione è possibile utilizzare il metodo setProportions() che accetta una serie di double che definiscono la proporzione con cui ripartire il flusso in ingresso sulle uscite.
Il metodo layout() della classe HSystemExt (attenzione: non HSystem) restituisce una stringa che contiene la disposizione degli element del sistema utilizzando caratteri ASCII e opportune spaziature.
Ogni elemento viene stampato nella forma "[name]Type" dove name è il nome dell'elemento e Type è la classe dell'elemento. La connessione tra uscita di un elemento e ingresso di un altro è rappresentata dal simbolo "->" mentre l'assenza di un elemento connesso in uscita è rappresentata da "*". Nel caso di più elementi connessi a valle di un elemento si usa il carattere "+" e si riporta la prima connessione sulla stessa riga, e in righe successive si ripete "+" (allineato verticalmente al primo) e poi si riportano le altre connessioni. Le righe che separano le connessioni multiple (almeno una, ma potrebbero essere più di una se a valle ci sono altri elementi con uscite multiple) si riporta il carattere "|" allineato verticalmente a "+".
Per esempio, un sistema composto da una Source connessa a un Tap, che è connesso a uno Split le cui uscite sono connesse a due Sink, avrebbe un layout simile al seguente:
[Src]Source -> [R]Tap -> [T]Split +-> [sink A]Sink | +-> [sink B]Sink
Il metodo deleteElement() della classe HSystemExt permette di eliminare un elemento precedentemente aggiunto al sistema; il metodo accetta come parametro il nome dell'elemento da eliminare.
Se l'elemento è uno Split o un Multisplit con più di una uscita connessa, non viene effettuata alcuna operazione ed il metodo restituisce false.
Altrimenti (Split o Multisplit con al più una uscita connessa oppure un altro tipo di elemento) l'elemento viene rimosso dal sistema e, se l'elemeto da eliminare è connesso ad altri elementi in ingresso e/o in uscita, occorre modificare modificare le connessioni di conseguenza in modo che l'elemento a monte sia connesso a quello a valle. In questo secondo caso il metodo restituisce true. Riprendendo l'esempio in R6, il layout dopo l'eliminazione di R deve essere il seguente:
[Src]Source -> [T]Split +-> [sink A]Sink | +-> [sink B]Sink
La classe HSystemExt contiene un overload del metodo simulate che accetta come parametro il valore booleano enableMaxFlowCheck: se quest'ultimo è settato a vero, il metodo deve effettuare il controllo aggiuntivo sulla portata massima, notificando un errore se la portata in ingresso di un elemento è superiore alla sua portata massima. Il metodo simulate accetta in ingresso anche un oggetto che implementa la classe SimulationObserverExt, estensione dell'interfaccia SimulationObserver, che aggiunge a quest'ultima il metodo notifyFlowError, attraverso il quale è possibile notificare l'errore sulla portata massima, passando il tipo di elemento (nome della classe), il nome dell'elemento, il flusso in ingresso e la sua portata massima.