[ Pobierz całość w formacie PDF ]
.Czasami nazywa siÄ™RozdziaÅ‚ 5." TWÓJ PIERWSZY PROGRAM OBIEKTOWY W C# 171to zależnoÅ›ciÄ… caÅ‚ość / część.ZaimplementowaliÅ›my ten zwiÄ…zek w listingu 5.1 przezzadeklarowanie zmiennej instancji typu Elevator wewnÄ…trz klasy Building(wiersz 51.):51: private static Elevator elevatorA;DziÄ™ki temu Building może zawierać obiekt Elevator i wywoÅ‚ywać jego metodypublic.Klasa może mieć wiele różnych zmiennych instancji zawierajÄ…cych wieleobiektów różnych klas.MoglibyÅ›my np.również wyposażyć Building w zmienneinstancji reprezentujÄ…ce liczbÄ™ obiektów Floor.Ta idea konstruowania klasy (Bu-ilding) za pomocÄ… innych klas (Elevator lub Floor albo obu i wielu innych)nazywa siÄ™ ogólnie agregacjÄ…, a towarzyszÄ…ce jej zależnoÅ›ci to zwiÄ…zki agregacyjne.Jeżeli zwiÄ…zek agregacyjny (jak w przypadku zwiÄ…zku Building-Elevator) odzwier-ciedla sytuacjÄ™, gdzie jedna klasa jest integralnÄ… częściÄ… innej, możemy nazwać tÄ™agregacjÄ™ kompozycjÄ….(Zaraz zobaczymy, dlaczego zwiÄ…zek Elevator-Person jestagregacjÄ…, ale nie jest kompozycjÄ….) ZwiÄ…zek kompozycyjny można zilustrować zapomocÄ… schematu klasy zunifikowanego jÄ™zyka modelowania (Unified ModelingLanguage UML), pokazanego na rysunku 5.3.Dwie prostokÄ…tne ramki symbolizujÄ…klasy, a Å‚Ä…czÄ…ca je linia z czarnym rombem (wskazujÄ…cym na caÅ‚Ä… klasÄ™) ilustruje zwiÄ…-zek kompozycyjny miÄ™dzy klasami.Obie klasy sÄ… oznaczone liczbÄ… 1, aby wskazać,że jeden Building (budynek) ma jednÄ… Elevator (windÄ™).RYSUNEK 5.3.Diagram UMLsymbolizujÄ…cykompozycjÄ™Zunifikowany jÄ™zyk modelowania (UML) Lingua Franca modelowania obiektowegoPseudokod jest przydatnÄ… pomocÄ… w wyrażaniu algorytmów, które sÄ… imple-mentowane w pojedynczych metodach, ponieważ czyta siÄ™ je od góry do doÅ‚u,tak jak Å›rodowisko uruchomieniowe wykonuje program i dlatego, że abstrahujeon od sztywnego rygoru jÄ™zyka komputerowego (Å›redniki, nawiasy itd.).Jednakklasy mogÄ… skÅ‚adać siÄ™ z wielu metod, a wiÄ™ksze programy skÅ‚adajÄ… siÄ™ z wieluklas.Pseudokod nie jest odpowiednim narzÄ™dziem do ilustrowania modeli po-wiÄ…zaÅ„ klas programu, ponieważ klasy zrywajÄ… z sekwencyjnym, proceduralnymsposobem myÅ›lenia (każda klasa może potencjalnie mieć zwiÄ…zek z innÄ… klasÄ…zdefiniowanÄ… w programie) i dlatego, że format pseudokodu jest zbyt szczegółowy,aby zapewnić przeglÄ…d dużego programu obiektowego.172 JZYK C#.SZKOAA PROGRAMOWANIAAby skutecznie zaprezentować zwiÄ…zki klas i caÅ‚Ä… architekturÄ™ programu obiek-towego, potrzebujemy jÄ™zyka, który umożliwia abstrahowanie od wewnÄ™trznychszczegółów metod, a zamiast tego zapewnia Å›rodki do wyrażania zwiÄ…zków klasi pojęć obiektowych na odpowiednim poziomie szczegółowoÅ›ci.W tym celu wiÄ™k-szość programistów obiektowych, bez wzglÄ™du na swój jÄ™zyk programowania, stosujeobecnie jÄ™zyk przedstawiania graficznego o nazwie zunifikowany jÄ™zyk modelowania(Unified Modeling Language UML).UML to jÄ™zyk o wielu cechach i potrzebnajest caÅ‚a książka, aby go wystarczajÄ…co zaprezentować; tu przedstawiono tylkomaÅ‚y podzestaw UML.Szczegółowe informacje o UML można uzyskać w niedochodowej organizacji ObjectManagement Group (OMG) (www.omg.org) na stronie www.omg.org/uml.Napisanowiele dobrych książek o UML, m.in.The Unified Modeling Language User Guide,którÄ… napisali twórcy UML, Grady Booch, James Rumbaugh i Ivar Jacobson.ZwiÄ…zek Elevator-PersonPrzycisk jest integralnÄ… częściÄ… windy, ale pasażer już nie.(Winda jest czynna bezpasażera, ale nie bez przycisków).WiÄ™c gdybyÅ›my nawet w naszej implementacji(z powodów abstrakcyjnych) uczynili pasażera permanentnÄ… częściÄ… Elevator(obiekt Person pozostaje wewnÄ…trz Elevator przez caÅ‚Ä… symulacjÄ™), nie jest tozwiÄ…zek kompozycyjny, a jedynie agregacja.ZwiÄ…zek ten ilustruje UML na rysun-ku 5.4.ProszÄ™ zwrócić uwagÄ™, że biaÅ‚y romb, w przeciwieÅ„stwie do czarnego rombuna rysunku 5.3, symbolizuje agregacjÄ™.RYSUNEK 5.4.Diagram UMLsymbolizujÄ…cyagregacjÄ™CaÅ‚y schemat klasy UML dla programu z listingu 5.1 zostaÅ‚ pokazany na rysunku 5.5.UML umożliwia, tak jak to pokazano, podzielenie prostokÄ…ta reprezentujÄ…cego klasÄ™na trzy przedziaÅ‚y górny przedziaÅ‚ zawiera nazwÄ™ klasy, w Å›rodkowym mieszczÄ…siÄ™ zmienne instancji (lub atrybuty), a w dolnym metody (zachowanie) należącedo klasy.AsocjacjeStaÅ‚e zwiÄ…zki miÄ™dzy klasami, takie jak zwiÄ…zki agregacyjne i kompozycyjne, omó-wione w poprzednich rozdziaÅ‚ach, sÄ… ogólnie nazywane zwiÄ…zkami strukturalnymi lub,bardziej oficjalnie, asocjacjami.IstniejÄ… jednak inne typy asocjacji, które nie sÄ… agre-gacjami (a wiÄ™c nie sÄ… również kompozycjami).Aby dać przykÅ‚ad takiej asocjacji,rozważmy nastÄ™pujÄ…cy scenariusz.Chcemy uczynić naszÄ… symulacjÄ™ windy bardziejrealistycznÄ…, zatem zmieniamy pokazanÄ… wczeÅ›niej poczÄ…tkowÄ… listÄ™ abstrakcji,RozdziaÅ‚ 5." TWÓJ PIERWSZY PROGRAM OBIEKTOWY W C# 173RYSUNEK 5.5.Diagram UML klasz listingu 5.1umożliwiajÄ…c wielu obiektom Person wchodzenie, podróżowanie i wychodzeniez obiektu Elevator, zamiast tylko jednego obiektu Person pozostajÄ…cego na staÅ‚ew windzie.Teraz już o żadnym obiekcie Person nie można powiedzieć, że jest staÅ‚Ä…częściÄ… obiektu Elevator.Możemy po prostu powiedzieć, że klasa Elevator jestskojarzona z klasÄ… Person.Asocjacja jest pokazana za pomocÄ… zwykÅ‚ej linii, tak jakna rysunku 5.6.RYSUNEK 5.6.Asocjacja klasElevator/PersonInne przykÅ‚ady asocjacji, które nie sÄ… agregacjami:º% Pracownik pracuje w Firmie,º% KlientBanku współpracuje z KasjeremBanku.174 JZYK C#.SZKOAA PROGRAMOWANIAUwaga!Asocjacje, które precyzyjnie Å‚Ä…czÄ… dwie klasy, nazywajÄ… siÄ™ asocjacjami binar-nymi; jest to najpopularniejszy rodzaj asocjacji.PodsumowanieTen rozdziaÅ‚ skÅ‚ada siÄ™ z dwóch głównych części.Pierwsza dotyczy leksykalnejstruktury programu zródÅ‚owego C#
[ Pobierz całość w formacie PDF ]