Le cosiddette “port” sono porte per classificatori incapsulati. Rappresentano un punto in cui il classificatore interagisce con il suo ambiente. A parte le porte, il classificatore incapsulato è un sistema autonomo. Poiché la sua struttura interna e gli elementi di comportamento sono indipendenti dal resto del sistema, è anche possibile definire tale classificatore in modo indipendente. Finché un sistema soddisfa i limiti della porta, è possibile riutilizzare il classificatore incapsulato in diversi ambienti.
Inoltre, l’UML consente più punti di aggancio per il classificatore. È possibile definire le proprie regole per ciascuna porta. La porta è una proprietà del classificatore, quindi si impostano le sue regole nell’area Properties. Esse includono i servizi offerti dal classificatore al suo ambiente e i servizi di cui ha bisogno. È possibile distinguere tra diversi flussi di informazioni identificando la porta che si sta utilizzando.
Anche le porte stesse hanno proprietà. Quando la porta esegue le funzioni pubblicate del classificatore, indica la proprietà isService. Se si verifica isService = true, la porta è considerata un componente indispensabile delle funzioni esternamente visibili del classificatore incapsulato. Se isService = false, la porta non è una delle funzionalità essenziali e può quindi essere modificata o cancellata, proprio come le altre funzioni interne.
Le porte interagiscono con le interfacce. Ci sono interfacce già pronte e necessarie (vedi il paragrafo “Interfacce”). L’interfaccia connessa alla porta specifica le interazioni che passano tramite la porta. Poiché il punto di aggancio è una proprietà, ha un tipo. Il valore di isConjugated si interpone tra il tipo e l’interfaccia della porta. Se il valore è “vero”, l’interfaccia richiesta si può derivare direttamente dal tipo di porta o dall’insieme di interfacce implementate dal tipo di porta. Un’interfaccia pronta è derivata in questo caso dall’insieme di interfacce. Se isConjugated è “vero”, l’interfaccia fornita deriva dal tipo.
Se un classificatore incapsulato genera un’istanza, vengono create istanze appropriate per ciascuna delle sue porte. Una porta mantiene la rispettiva istanza in base al suo tipo e alla sua molteplicità (vedi sotto). L’UML chiama le istanze punti di interazione. Ogni istanza ha riferimenti univoci che si distinguono tra le diverse richieste di funzionalità comportamentali indirizzate alle sue porte.
Le porte con la proprietà isBehavior = true mandano una richiesta all’istanza del classificatore incapsulato. La richiesta assume il comportamento specificato dall’istanza. Le cosiddette “Behavior Ports” (porte comportamentali) non inoltrano richieste all’interno del classificatore. Se non è impostato alcun comportamento nel diagramma delle classi, i messaggi su queste porte andranno persi.
Potete modellare una porta come un piccolo quadrato sul frame del classificatore a cui appartiene. Nella porta disegnate l’interfaccia necessaria o già fornita. Se non specificate alcuna proprietà speciale per la porta, disegnate l’interfaccia senza porta.