class Samochód {
Osoba właściciel;
Void Ustaw W!ascicicla(Osoba w){
for(vector<samochod>::iterator it = właściciel.samochody.begin(); it < właściciel.samochody,end(); it++) if(&(*it)==this) wlasciciel.samochody.erase(it):
wlasciciel=w;
wlascicicl.samochody.push_back(this)
}
Osoba PodajWIascicicl {return właściciel:}; void DodąjSamochodO { wlasciciel.Dodaj Samochod(this);}
Projektowanie systemów- informatycznych, wykład 2
Class Osoba {
vectoKsamochod> samochody': public:
void DodajSamochod(samochod s) {s.UstawWlasciciela(this)):} vector<samochod>PobierzSamochody(void) {return samochody;} fricnd class samochód;
_
Asocjacja dwukierunkowa jest to para połączonych ze sobą cech będących swoimi odwrotnościami. Klasa Samochód ma cechę właściciel:Osoba[l|, a klasa Osoba ma cechę samochody:Samochód[*J.
Implementacja dwukierunkowej asocjacji jest dość skomplikowana na slajdzie zaprezentowano przykład w języku C++ implementacji dwukierunkowej asocjacji miedzy klasami Osoba i Samochód. W takiej sytuacji zwykle wybieramy klasę implementującą właściwość pojedynczej krotności jako nadrzędną, która zarządza asocjacją. W naszym przykładzie jest to klasa Samochód. Do zarządzania asocjacją służą funkcje publiczne UstawWlasciciela, PodajWlasciciela oraz Dodaj Samochód. W takiej sytuacji klasa Osoba musi zrezygnować z kapsułkowania parametru samochody na rzecz klasy Samochód. W języku C++ można to zaimplementować poprzez deklarację przyjaźni klasy Samochód z klasą Osoba (friend class samochód).
15