Gwiazd zgodnie z rys. 2.5. W wierszu 4 widać nie tylko deklarację związku występujeW, ale także określenie wskazujące na to, że ten związek ma związek odwrotny Film: :gwiazdy. Ponieważ związek gwiazdy jest zdefiniowany w innej klasie, więc jego nazwa musi być poprzedzona nazwą tej klasy (Fi m) i podwójnym dwukropkiem. Notacja z dwukropkiem służy do odwoływania się do cech z innej klasy.
1) interface Gwiazda {
2) attributo string nazwisko;
3) attribute Struct Adr
{string ulica, string miasto) adres;
4) relationship Set<Filmy> występujeW
inverse Filmy::gwiazdy;
I;
RYSUNKK 2.5
Klasa Gwiazda, która obrazuje związek i jego odwrotność
□
W przykładzie 2.4 występują dwa wzajemnie odwrotne związki, z których każdy wiąże obiekt (film lub gwiazdę filmową) ze zbiorem obiektów. Jak już wspomnieliśmy, istnieją jeszcze inne związki, które wiążą pojedynczy obiekt z pojedynczym obiektem innej klasy. Notacja określenia odwrotności nie zmienia się. Zasadę ogólną można zapisać następująco: jeśli związek R w klasie C wiąże z obiektem x klasy C zbiór jednego lub więcej obiektowy,,
Yi.....Vn, to związek odwrotny do R wiąże z każdym z obiektów y, obiekt x
(a także niekiedy i inne obiekty).
Zrozumienie tych zasad często okazuje się łatw iejsze po przedstawieniu związku R między klasami Ca 73 jako listy par lub krotek. Każda para składa się /. obiektu .v z klasy (' oraz obiektu y z klasy D
C
D
y i
*2 .V2
leśli związek /ć jest typu set<D>, to jedna wartość ze zbioru C może pojawić iię w kilku parach. Natomiast jeśli związek R jest typu D. to jedna wartość ze sbiom (' może wystąpić tylko w jednej parze.
Związek odwrotny do R jest zbiorem par o elementach w odwróconej kolejności.
O C
Zauważmy, że ta zasada obowiązuje także wówczas, gdy C i D oznaczają tę samą klasę. Istnieją nawet pewne związki, które przeprowadzają klasę w siebie, jak to jest na przykład w przypadku związku „być dzieckiem” w klasie
„Osoby”.
O wymaganiach dotyczących związków odw rotnych
Język OD!., jako język projektowania oderwany od implementacji, wymaga, aby związki miały swoje odwrotności. Należ)' to interpretować następująco: jeśli można od obiektu, powiedzmy od jakiegoś filmu, przejść do obiektu powiązanego z nim, na przykład do obiektu typu gwiazdy filmowej, to także można pokonać drogę w przeciwną stronę, od gwiazdy filmowej do filmów, w' których ona występowała. Załóżmy, że gwiazdą filmową jest Charlton lleston. Możemy prześledzić wszy stkie tytuły filmów, a także ich obsadę. Stąd możemy uzyskać wykaz wszystkich filmów, w' których występował Ueston. W języku ODL ten odw rotny proces musi być jednoznacznie nazwanym związkiem.
Jeśli jednak przejdziemy od języ ka ODL do jego realizacji w językach programowania, na przykład w C++, to przekonamy się, że możemy deklarować powiązania tylko w klasie Filmy i nic ma sposobności utworzyć żad nych powiązań od obiektów typu gwiazda filmowa do obiektów klasy Filmy. Stąd leż realizacja języka ODL poprzez. C++ dopuszcza tylko związki „w jedną stronę”. Ale ponieważ tutaj omawiamy proces projektowania, a nic implementację, w ięc zakładamy, żc związki mają odwrotności.
Często zdarza się, żc duże znaczenie ma fakt czy związek jest jednoznaczny. Izn. czy wriąże dany obiekt / jedynym, wybranym obiektem, czy też danemu obiektowa odpowiada wiele innych obiektów. Możliwości wyboru w języku ODL dostarcza dostępność operatora Set. W przypadku pary Związków wzajemnie odwrotnych istnieją cztery' możliwości: związek może być jednoznaczny w' obie strony, w jedną z dwóch stron lub w żadną.
Omawiany związek między gwiazdami filmowymi a filmami nie jest jednoznaczny w żadną stronę. Oznacza to, żc zazwyczaj w filmie występuje kilka gwiazd, a także żc każda gwiazda występowała w kilku filmach. Kolejny przykład powstał z poprzedniego przez dołączenie klasy Studio, która reprezentuje studio producenta filmów.
PRZYKŁAD 2.5
Na rysunku 2.6 przedstawiono deklaracje trzech klas: Film, Gwiazda i Studio. Pierwsze dwie z nich już znamy z przykładów 2.1 oraz. 2.2. Obiekty klasy Studio mają atrybuty nazwa i adres; zdefiniowano je w wierszach 1.1