2015-07-29 20 views
5

Dal momento che non ho ancora capito del tutto l'uso corretto dei simboli portuali e di interfaccia nei diagrammi dei componenti, alcune domande:UML2: porte e interfacce nei diagrammi dei componenti

I. Immaginate un pezzo di software che vuole utilizzare un servizio di logger remoto molto speciale su rete (TCP). I messaggi potrebbero essere un po 'di XML. Quindi il logger espone un'interfaccia che specifica cose come handshake, struttura XML, elementi XML ecc. In modo che il logger accetti un messaggio.

enter image description here

a) Ho ragione che questa interfaccia può essere chiamato "ILoggerProtocol", la porta può essere chiamato dopo il servizio che fornisce ("logging")?

b) Quindi il componente nella mia applicazione implementa quell'interfaccia in modo che generi un messaggio conforme per il server?

c) A questo punto una cosa interessante: per la comunicazione, v'è una libreria aggiuntiva "Networking", che fornisce roba TCP semplice, in modo che la connessione TCP, invia messaggi, gestisce gli errori ecc Ho bisogno di questa classe quando ho voglio solo enfatizzare la strada dai messaggi generati al server? La mia porta è quindi l'interfaccia TCP?

d) E quando voglio disegnare l'immagine completa, come posso aggiungere correttamente il componente di rete al diagramma, sottolineando che viene utilizzato ILoggerProtocol E che va su TCP attraverso il componente di rete?

II. Porte all'interno della mia applicazione: ora ci sono due librerie dove si usa solo l'altra; In sostanza, in C/C++, sarebbe #include dell'altro file di intestazione:

enter image description here

E) è che il diagramma corretto?

f) Ho bisogno di porti qui? Se sì, cosa rappresenterebbero in realtà? Che nomi daresti loro?

g) O i lecca-lecca sono sufficienti solo senza i simboli della porta?

III. in materia di lecca-lecca:

enter image description here

h) sono quelle due notazioni fondamentalmente la stessa e intercambiabili? Ho trovato il nome "assembly" per la versione combinata, quindi forse c'è una differenza ...

+0

Ho fatto una breve modifica alla mia risposta. –

risposta

4

Una risposta breve prima (cercando di strappare il resto in seguito): una porta è un elemento incorporato che consente di raggruppare un certo numero di interfacce. Il meglio che posso fare per un esempio è un socket complesso (la porta) che raggruppa cose come l'alimentazione, le linee di comunicazione, il nome (le interfacce).

Ora per i dettagli.

a) Sì, è corretto. Solitamente si utilizza un'associazione stereotipata <<delegate>> per mostrare che l'interfaccia esterna viene utilizzata (/ realizzata se si tratta di un lecca-lecca) da qualche parte all'interno.

b) No. Questa è un'interfaccia richiesta. È usato all'interno ma implementato all'esterno (dove risiede il lecca-lecca).

c & d) Vorrei usare uno <<use>> da MyApplication verso Networking per dimostrarlo. Normalmente non entrerai troppo nel dettaglio (a meno che non sia essenziale). Cose ovvie come TCP sono chiaramente raffigurate con <<use>>

e) È possibile (/ dovrebbe) utilizzare <<include>> o <<use>>.

f & g) vedere la risposta generale di cui sopra

h) Sì. Il primo è una notazione flessibile del secondo.

P.S. Basta rivedere questo aspetto ancora una volta e ho notato che nell'immagine in alto l'associazione diretta interna dovrebbe puntare l'altra direzione e essere stereotipata <<delegate>>.

+0

Thomas, grazie mille. b) con "implementa" intendevo che la mia app creava _counterpart_ per ILoggerProtocol, ovviamente ... f) quindi concludo dalla tua affermazione che nel mio esempio, penso come programmatore: quando una classe include l'altro file di intestazione per uno scopo semplice, non avrei necessariamente bisogno di una porta. Quando includevo i file di intestazione di un altro componente per utilizzare un servizio più complesso o anche servizi diversi, avrei bisogno di porte, giusto? Grazie anche per i suggerimenti sugli stereotipi. Un'immagine dice più di mille parole, ma a volte una parola rende l'immagine ancora più chiara ... – minastaros

+0

Reg. b) implementa significa implementare un'interfaccia definita. Questo è mostrato con un lecca-lecca (significa che lo fornisci). Se si utilizza un'interfaccia (nota anche come importazione di qualcosa), la si mostra come socket (interfaccia richiesta). La porta è un costrutto virtuale per raggruppare le cose. In termini di programmazione: se si importa una lib intera, la lib è la porta. –

+0

Thx, due dettagli: hai detto "... dovrebbe usare <> o <> invece", quindi suggerisci una _dipendenza_ tra i due componenti _instead_ del lecca-lecca? Con o senza i port box? Finora, nei miei libri, ho visto solo le dipendenze d'uso tra un componente e un'interfaccia (notazione della casella, non un lecca-lecca) - reg ports: ho avuto l'idea di port = lib sul lato dell'interfaccia di fornitura. Eppure nel mio primo diagramma, MsgGenerator ha una porta, quindi l'interfaccia che richiede, quindi il delegato, quindi un'altra porta, quindi l'interfaccia di nuovo. Allora, cos'è questo porto esterno? Il _used_ lib? – minastaros