Che cosa significano queste frecce del diagramma UML nel pattern di Iterator?

2

Che cosa significano queste frecce del diagramma UML nel pattern Iterator che sono tracciate da ConcreteAggregate a ConcreteIterator e al contrario. Ho esaminato approfonditamente la legenda (notazioni) dei diagrammi UML, ma immagino che sia più confuso che spiegare.

Per quanto comprendo le frecce significa che ConcreteAggregate dipende da ConceteIterator , e ConcreteIterator usa ConceteAggregate . Ma cosa significa chiaramente? Qual è la differenza di uses e depends on ?

    
posta Narek 25.10.2016 - 15:37
fonte

3 risposte

2

The Gang Of Four Book non usa UML ma OMT (o è almeno basato su OMT)

  • La freccia tratteggiata significa "istanziazione", quindi dice che ConcreteAggregate crea ConcreteIterator .
  • La freccia normale significa contenimento (una relazione più debole dell'aggregazione, quindi mentre conosce l'altro oggetto non è responsabile per il suo ciclo di vita).
    Il ConcreteIterator contiene un ConcreteAggregate . Questo è visibile anche nella chiamata del costruttore visualizzata return new ConcreteIterator(this)

Fonte: The GoF Book

    
risposta data 31.10.2016 - 16:56
fonte
1

La classe ConcreteAggregate dipende dalla classe ConcreteIterator perché il metodo CreateIterator() crea un'istanza della classe ConcreteIterator e la restituisce al chiamante come un'istanza della più generica classe Iterator .

La classe ConcreteIterator ha un costruttore che non è mostrato in questo diagramma. Quello che deve essere il caso è che il metodo CreateIterator() passi la propria istanza (cioè, this ) come parametro per quel costruttore. La classe ConcreteIterator memorizza il riferimento che gli è stato passato come variabile membro, mostrato in questo diagramma UML come associazione unidirezionale.

Non l'hai chiesto, ma ti dirò che ci sono molti problemi con l'UML su questo diagramma. Pertanto, non utilizzare questo libro per imparare UML!

Ad esempio:

  • I triangoli mostrati nelle relazioni di generalizzazione devono essere disegnati sul top della linea, non sul centro della linea.
  • Le punte di freccia dell'associazione dovrebbero essere aperte (come <-- ).
  • Le associazioni non mostrano proprietà di fine associazione, come quella che rappresenta la variabile membro che il costruttore per gli insiemi di classi ConcreteIterator . Mi aspetterei di vedere qualcosa come creatingAggregate vicino alla punta della freccia.
  • Le associazioni non mostrano alcuna molteplicità, che per impostazione predefinita [1..1] in UML. Ciò implica che un'istanza della classe Client deve avere un riferimento a un'istanza della classe Iterator in ogni momento , che è ovviamente impossibile. (Un'istanza di Client deve prima chiamare quel metodo CreateIterator() per ottenere quel riferimento!) Quella molteplicità avrebbe dovuto essere facoltativa [0..1].
  • Il metodo CreateIterator() non mostra alcun tipo di ritorno di Iterator .

La correzione di alcuni di questi errori potrebbe aver reso questo libro più comprensibile per te.

    
risposta data 31.10.2016 - 15:21
fonte
0

ConcreteAggregate ha una dipendenza in fase di compilazione su ConcreteIterator , come mostrato nel codice nella casella di annotazione. L'autore del diagramma pensava che questa dipendenza fosse abbastanza importante da mostrare non solo il commento, ma anche la freccia tratteggiata, una notazione che può indicare qualsiasi tipo di dipendenza.

Le due classi sono anche associate, indicate dalla linea continua. L'associazione è unidirezionale (indicata dalla freccia), il che significa che ConcreteIterator è a conoscenza dell'associazione ma ConcreteAggregate non lo è. In pratica, ciò significa che un'istanza di ConcreteIterator contiene un riferimento a un'istanza di ConcreteAggregate .

Questo diagramma si concentra sulle relazioni rilevanti per l'operazione CreateIterator() . Questa prima indicazione di ciò è la mancanza di altre responsabilità mostrate per Aggregate .

    
risposta data 25.10.2016 - 18:53
fonte

Leggi altre domande sui tag