Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 4
  • 527

 Jak w temacie.

 Przykładowo: mamy system aukcyjny, w którym istnieją klasy:

 Licytator - mechanizm przeprowadzający aukcję internetową,

 Licytant - uczestnik aukcji internetowej skladający w jej ramach oferty

Jak w takim układzie zamodelować klasę "Oferta", łączącą Licytanta i Licytatora? Proszę o wyjaśnienie różnic, co oznaczałoby zamodelowanie jej jako klasy asocjacyjnej, łączącej Licytatora i Licytanta, a co zamodelowanie asocjacji ternarnej między tymi trzema klasami?

Jakub_Stefaniak
  • Zapytał
  • @ Jakub_Stefaniak | 23.10.2014
    • 11
    • 0
    • 1

Odpowiedź (1)

  • 2

Klasa asocjacji jest bytem o właściwościach zarówno klasy jak i asocjacji, stosowanym wówczas, gdy sam związek pomiędzy klasami ma swoje właściwości. Jeśli zatem mamy do czynienia z sytuacją, w której istnieje powiązanie pomiędzy instancjami klas, a na dodatek jest ono na tyle skomplikowane, że warto określić jego atrybuty i związane z nimi operacje, to powinniśmy zastosować klasę asocjacji. Klasa ta, oprócz właściwości powiązania, musi również zawierać specyfikację samego powiązania.

 

Spójrzmy na nasz przykład: Licytant składa ofertę dla danej aukcji, która jest obsługiwana przez Licytatora. Załóżmy, że chcemy zamodelować Ofertę jako klasę asocjacji pomiędzy Licytantem i Licytatorem. Atrybutami Oferty (a także samego powiązania) będzie liczba egzemplarzy licytowanego przedmiotu oraz data złożenia oferty. Nasz model zatem będzie wyglądał następująco:

 

 

 

Wynika z niego, że istnieje powiązanie pomiędzy Licytantem i Licytatorem, które charakteryzuje się tym, że dla danej pary Licytant-Licytator zostanie stworzona instancja klasy Oferta, która będzie zawierała określone wartości atrybutów oraz referencje do konkretnego Licytanta i Licytatora. Należy zaznaczyć, że istnienie egzemplarza Oferty jest ściśle uzależnione od istnienia związku pomiędzy Licytantem a Licytatorem – instancja Oferty nie zostanie utworzona, jeśli nie będzie powiązania pomiędzy odpowiednimi instancjami Licytanta i Licytatora. Cykl jej życia zależy również od tego powiązania.

 

Implementacja powyższego modelu w praktyce oznacza, że Licytant i Licytator muszą przechowywać referencje na instancje klasy asocjacji, która z kolei przechowuje referencje na obiekt znajdujący się na drugim końcu asocjacji.

 

Rozważmy teraz asocjację ternarną:

 

 

 

W asocjacji ternarnej  (i ogólnie w n-arnej) wszystkie klasy są równoważne. Instancja każdej z nich musi przechowywać referencje na instancje znajdujące się na pozostałych końcach asocjacji w postaci dwuelementowych krotek (n-1). Każda asocjacja n-arna może być zdefiniowana za pomocą klasy asocjacji – wówczas ona przejmuje obowiązek przechowywania tych powiązań.

 

 Powyższe rozważania mają charakter poglądowy. Aby ustalić szczegółowy sposób implementacji omawianych modeli, należy uszczegółowić definicje asocjacji o krotności i nawigowalność.

 

 Źródła:

  1. OMG Unified Modeling Language TM (OMG UML) Version 2.5, OMG, 2013 http://www.omg.org/spec/UML/2.5
  2. Pilone D., Pitman N., UML 2.0 Almanach, Helion 2007
  3. Larman C., UML i wzorce projektowe.. , Helion 2011

 

 

  • Odpowiedział
  • @ | 30.12.2015
  • TRENER ALTKOM AKADEMII