z6, Politechnika Wrocławska, PWR - W10- Automatyka i Robotyka, Sem4, Infa 3 C++

[ Pobierz całość w formacie PDF ]
Informatyka 3 – Laboratorium 6
Asocjacja / Agregacja / Kompozycja
Informatyka 3 / Projektowanie Obiektowe
Politechnika Wrocławska MVLAB
Autorzy:
mgr inż. Maksymilian Sidorowicz
mgr inż. Bolesław Jodkowski
Informacje ogólne
Programowanie obiektowe, język:
C++;
Środowisko pracy:
Microsoft Visual Studio 2005;
Środowisko na potrzeby pracy poza zajęciami można pobrać:
·
z kont studenckich MSDN AA dla Wydz. Mechanicznego PWr,
·
w darmowej wersji udostępnianej przez producenta: Visual Studio 2005 Express.
Literatura:
·
J. Liberty, "C++ dla każdego", Helion 2002,
·
B. Stroustrup, "Język C++", WNT 2002,
·
J.Grębosz, "Symfonia C++", Editions 2000 rok 2006,
·
B. Eckel, "Thinking in C++ Edycja polska", Helion 2002,
·
1
 Informatyka 3 – Laboratorium 6
Wielokrotne wykorzystanie kodu klasy
kodu klasy
Dziedziczenie przedstawione w ramach poprzednich laboratoriów
wielokrotnego wykorzystania kodu klasy
ramach poprzednich laboratoriów było jednym z dwóch sposobów
wielokrotnego wykorzystania kodu klasy w C++. Innym sposobem są tzw.
asocjacje
było jednym z dwóch sposobów
socjacje
.
Asocjacja jest to dowolne powiązanie pomiędzy dw
dowolne powiązanie pomiędzy dwiema klasami.
Klasa A
Klasa A
Klasa B
Rysunek
Rysunek 1 Graficzne przedstawienie asocjacji
W szczególności wyróżnia się asocjację kierunkową, która
- klasa A zawiera obiekt klasy B,
- klasa A zawiera wskaźnik do obiektu klasy
- klasa A zawiera metodę modyfikującą pewien publiczny składn
W szczególności wyróżnia się asocjację kierunkową, która występuje, gdy np.:
zawiera wskaźnik do obiektu klasy B
zawiera metodę modyfikującą pewien publiczny składnik klasy B.
Jak widać sposobów na realizację
sposobów na realizację, powiązań pomiędzy obiektami można wyróżnić wiele
, powiązań pomiędzy obiektami można wyróżnić wiele.
Przykład prostej asocjacji kierunkowej
Przykład prostej asocjacji kierunkowej
O asocjacji mówi się, gdy obiekty „znają się”, czyli istnieje jakakolwiek relacja między obiektami.
Przykładowo jeden obiekt chce wykonać metodę innego obiektu.
O asocjacji mówi się, gdy obiekty „znają się”, czyli istnieje jakakolwiek relacja między obiektami.
ekt chce wykonać metodę innego obiektu.
O asocjacji mówi się, gdy obiekty „znają się”, czyli istnieje jakakolwiek relacja między obiektami.
Rozważmy przykład „szlabanu wjazdowego” i „pilota sterującego”:
Rozważmy przykład „szlabanu wjazdowego” i „pilota sterującego”:
Świat rzeczywisty:
Żeby pilot był w stanie otworzyć konkretny szlaban, musi wysyłać sygnał na odpowiedniej
częstotliwości, z odpowiednią modulacją i odpowiednim kodem
znać adres szlabanu, który ma otworzyć.
nie składają się z obiektów klasy
"składa-się-z".
Żeby pilot był w stanie otworzyć konkretny szlaban, musi wysyłać sygnał na odpowiedniej
częstotliwości, z odpowiednią modulacją i odpowiednim kodem - można powiedzieć, że pilot musi
znać adres szlabanu, który ma otworzyć. Trzeba jednocześnie zauważyć, że ani obiekty klasy
nie składają się z obiektów klasy
Cszlabany
, ani odwrotnie. Prosta asocjacja nie musi być relacją
Żeby pilot był w stanie otworzyć konkretny szlaban, musi wysyłać sygnał na odpowiedniej
można powiedzieć, że pilot musi
ni obiekty klasy
Cpiloty
, ani odwrotnie. Prosta asocjacja nie musi być relacją
Programowanie obiektowe:
Przeanalizujmy sytuację: Klasa
Cpiloty
obiektami klasy
Cszlabany
.
Cpiloty
, ma umożliwić „znanie się” (asocjację) swoim obiekto
, ma umożliwić „znanie się” (asocjację) swoim obiektom z
Cszlabany
Cszlabany
Cpiloty
Cszlabany* pMojSzlaban
void start();
Cpiloty
Cszlabany* pMojSzlaban
void otworz();
void otworz();
Rysunek 2 Przykład prostej asocjacji kierunkowej (nie wszystkie elementy klas
Przykład prostej asocjacji kierunkowej (nie wszystkie elementy klas
zostały uwzględnione)
Przykład prostej asocjacji kierunkowej (nie wszystkie elementy klas
2
     Informatyka 3 – Laboratorium 6
Atrybut
pMojSzlaban
jest wskaźnikiem umożliwiającym obiektom klasy
Cpiloty
przechowywanie
adresu pamięci, pod którym znajduje się obiekt klasy
Cszlabany
. Przekazanie „z zewnątrz” tego
adresu spowoduje powstanie relacji asocjacji między obiektem klasy
Cpiloty
, a obiektem klasy
Cszlabany
.
Metoda
Cpiloty::start()
ma wywoływać metodę
otworz()
na zasocjowanym obiekcie klasy
Cszlabany
.
W tym celu musi się do tego obiektu odwołać. Jest to możliwe dzięki atrybutowi typu wskaźnikowego
pMojSzlaban
, który przetrzymuje adres pamięci do obiektu klasy
Cszlabany
. Metoda
start()
zostanie
zatem zdefiniowana w następujący sposób:
void Cpiloty::start()
{
pMojSzlaban->otworz(); //działamy na wskaŹniku!
}
//– operator strzałki zamiast kropki!
Adres do obiektu klasy
Cszlabany
może zostać przekazany obiektowi klasy Cpiloty w funkcji
nadrzędnej, np. main().
Zadanie 1 - asocjacja
„SCHEDULER 1”
Co to w ogóle jest ‘scheduler’?
Cprog
Csched
Cprog* pprog1;
Cprog* pprog2;
...
.
.
void run(int ileRazy);
int myState;
int myId;
...
..
2
void update();
Rysunek 3 Schemat zadania do implementacji.
W ramach zadania 1. należy stworzyć klasę
Csched
, której obiekty będą mogły w prosty sposób
zarządzać wywoływaniem metod dwóch obiektów klasy
Cprog
.
1.
Obiekt klasy
Csched
ma mieć możliwość wejścia w relację asocjacji z dwoma obiektami klasy
Cprog
, z których każdy ma nadany inny numer identyfikacyjny przetrzymywany w atrybucie
myId
.
2.
Metoda
Csched::run(int ileRazy)
ma wywoływać w pętli for metody
update()
naprzemiennie na
obu agregowanych obiektach określoną przez argument (
int ileRazy
) liczbę razy.
3.
Metody
update()
wywołane na obu obiekrach klasy
Cprog
mają zwiększać wartość atrybutów
myState
o jeden i wyświetlać na ekranie informację o: numerze identyfikacyjnym obiektu oraz
jego stanie. Początkowa wartość atrybutów
myState
ma być zerowa (konstruktor).
4.
W programie głównym utwórz po dwa obiekty klasy
Cprog
oraz utwórz obiekt klasy
Cshed
.
Utwórz odpowiednią relację asocjacji. Przetestuj działanie ‘schedulera’.
3
 Informatyka 3 – Laboratorium 6
Kompozycja i agregacja
W obrębie asocjacji wyróżniamy relacje typu "
W obrębie asocjacji wyróżniamy relacje typu "
składa-się-z
". Dzielimy je na kompozycje
kompozycje i agregacje.
Gdy klasa w swojej deklaracji zawiera
klas są powiązane czasem istnienia. Jak wiadomo, s
długo, jak żyje sam obiekt. Takie powiązanie nazywamy
Gdy klasa w swojej deklaracji zawiera obiekt innej klasy jako swój element składowy
klas są powiązane czasem istnienia. Jak wiadomo, składniki danego obiektu przeważnie
jak żyje sam obiekt. Takie powiązanie nazywamy
kompozycją
.
jako swój element składowy, obiekty tych
przeważnie żyją tak
Kompozycja jest to rodzaj asocjacji w której obiekty powiązanych klas mają
istnienia
i pozostają w relacji "część
relacją mocną.
socjacji w której obiekty powiązanych klas mają
ściśle zależny czas
i pozostają w relacji "część-całość", czy też "składa się z". Mówi się, że Kompozycja jest
ściśle zależny czas
Mówi się, że Kompozycja jest
Ciało
2
2
Głowa
Głowa
Ręka
Noga
Rysunek
Rysunek 4 Graficzne przedstawienie kompozycji
Powiązanie klas obiektów w relacji "składa się z"
Agregacją. Mówi się, że Agregacja jest relacją słabą.
w relacji "składa się z", których czas istnienia jest niezależny nazywane jest
. Mówi się, że Agregacja jest relacją słabą.
czas istnienia jest niezależny nazywane jest
Samochód
2 .. 5
4 .. 5
Kierownica
Kierownica
Drzwi
Koło
Rysunek
Rysunek 5 Graficzne przedstawienie agregacji
4
Informatyka 3 – Laboratorium 6
Np.: klasa
Samochód
zawiera odpowiednią ilość wskaźników do obiektów klas
Kierownica
,
Drzwi
,
Koło
. Obiekt klasy Samochód może zostać utworzony i zniszczony niezależnie od czasu istnienia
obiektów klas, z których się składa (części samochodowe są wymienialne, czasami też wykorzystuje
się ponownie części używane).
Zadanie 2 - kompozycja
Wielokąt jako figura geometryczna składa się z co najmniej 3 punktów wyznaczających wierzchołki
wielokąta. Można powiedzieć, że dany wielokąt jest skomponowany z danej ilości punktów
wyznaczających jego wierzchołki.
CWielokat
CPunkt
CPunkt* MojeWierzcholki[100];
int IleMamWierzcholkow;
int MojNumer;
double X;
double Y;
3..100
CWielokat(int IleWierzcholkow = 3);
~CWielokat();
CPunkt();
~CPunkt();
void SetPointXY(int Numer, double X,
double Y);
void Opis();
void Info();
Rysunek 6 Specyfikacja zagadnienia
CWielokat::Opis()
– Wyświetla na ekranie informacje o własnych wierzchołkach.
CPunkt::Info()
– Wyświetla na ekranie informacje o własnych współrzędnych i numerze.
CPunkt::CPunkt()
– Inicjuje współrzędne punktu zerami.
void SetPointXY(int Numer, double X, double Y)
– przypisuje współrzędne wierzchołkowi o
numerze
Numer
.
Obiekty klasy
CWielokat
będą reprezentować konkretne wielokąty geometryczne. W tym celu będą
składać się z obiektów klasy
CPunkt
. Dla uproszczenia przyjmijmy, że obiekty klasy
CWielokat
mogą
zawierać od 3 do 100 (zamiast nieskończenie wielu) obiektów klasy
CPunkt
.
Atrybut będący tablicą wskaźników
MojeWierzcholki[]
umożliwia obiektom klasy
CWielokat
przechowywanie adresów pamięci do swoich potencjalnych obiektów klasy
CPunkt
(potencjalnych,
ponieważ obiekty te jeszcze nie istnieją). Atrybut
CWielokat:: IleMamWierzcholkow
przechowuje
informację o ilości skomponowanych obiektów klasy
CPunkt
(ilości wierzchołków wielokąta).
W klasie
CWielokat
musi istnieć metoda, która umożliwi swoim obiektom (konkretnym wielokątom)
tworzenie nowych obiektów klasy
Cpunkt
(konkretnych punktów). Zważywszy na to, że
implementujemy relację kompozycji, która zdefiniowana jest jako zależność czasu życia, to taką
metodą musi być konstruktor klasy. Przykładowo:
CWielokat::CWielokat(int IleWierzcholkow)
,
któremu możemy przekazać przez argument ilość obiektów klasy
CPunkt
do skomponowania.
Definicja konstruktora klasy
CWielokat
może wyglądać tak:
5
[ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • telefongry.keep.pl






  • Formularz

    POst

    Post*

    **Add some explanations if needed