Cel i zakres trzeciego wykładu
|
|
- Michalina Marciniak
- 8 lat temu
- Przeglądów:
Transkrypt
1 Cel i zakres trzeciego wykładu Tytuł: Diagramy sekwencji, pakietów, stanu i wdrożenia w perspektywie implementacyjnej Cel wykładu: Zaprezentować sposób przygotowania wyżej wymienionych diagramów w perspektywie implementacyjnej. Zakres wykładu 1) Zasady tworzenia diagramów sekwencji 2) Zasady tworzenia diagramów pakietów 3) Sposoby implementacji diagramów stanów 4) Zasady tworzenia diagramów wdrożeń Projektowanie systemów informatycznych, wykład 3 1 1
2 Diagram sekwencji przedstawia sposób wymiany komunikatów pomiędzy obiektami z zachowaniem ich kolejności. Pomijają natomiast całkowicie aspekt dostępu i operacji na danych, związany z komunikacją. Uczestnikami diagramów sekwencji są obiekty, opisane nazwą obiektu i jego klasą, które wymieniają między sobą komunikaty. Diagramy sekwencji Projektowanie systemów informatycznych, wykład 3 2 Diagramy interakcji to modele opisujące, jak współpracują ze sobą grupy obiektów. UML definiuje kilka rodzajów diagramów interakcji, z których najczęściej używanym jest diagram sekwencji. Zwykle diagram sekwencji przedstawia zachowanie się systemu dotyczące jednego przypadku użycia. Diagram pokazuje kilka przykładowych obiektów i komunikaty przez nie wymieniane w ramach przypadku użycia. Pierwszy przykładowy diagram sekwencji będzie dotyczył następującego prostego scenariusza: załóżmy że mamy zamówienie i zamierzamy wywołać na nim polecenie obliczające wartość tego zamówienia. W tym celu najpierw należy wybrać wszystkie pozycje zamówienia i określić ich ceny na podstawie reguł cenowych ustalonych dla zamawianych produktów. Następnie zamówienie musi obliczyć ogólną zniżkę, obliczaną na podstawie reguł ustalonych dla danego klienta. Na rysunku został przedstawiony diagram sekwencji ukazujący jedną z możliwych implementacji tego scenariusza. Diagramy sekwencji ilustrują interakcje wymieniając każdego jej uczestnika razem z pionową linią oznaczającą czas, w którym ten uczestnik bierze udział w interakcji. Kolejno pojawiające się komunikaty są uporządkowane od góry do dołu. Widać wyraźnie, że instancja klasy Zamówienie wysyła komunikaty pobierzllość i pobierzprodukt do klasy Pozycje Zamówienia. Można też dostrzec, jak jest zapisywana metoda wywoływana przez klasę Zamówienie na sobie samej, oraz to, że inna wywoływana w ten sposób metoda wysyła komunikat pobierzinformacjeozniżkach do instancji klasy Klient. Diagram jednak nie przedstawia wszystkiego bardzo dobrze. Sekwencja komunikatów pobierzllość, pobierzprodukt, pobierzcennik oraz obliczcenę jest wysyłana dla każdej pozycji zamówienia, natomiast obliczzniżkę jest wywoływana tylko raz. Nie można na podstawie tego diagramu stwierdzić, że tak jest, chociaż można wprowadzić dodatkową notację, która to umożliwi. Na przedstawionych diagramach nadano uczestnikom nazwy składające się tylko z nazwy obiektu. Pełniejsza składnia ma postać nazwaobiektu : nazwakiasy, gdzie zarówno nazwa obiektu, jak i nazwa klasy może być pominięta. Jeśli opuści się nazwę obiektu, to trzeba pozostawić dwukropek. Na każdej linii czasu są umieszczane słupki aktywności reprezentujące chwile, w których uczestnik bierze udział w interakcji. Oznaczają one obecność jednej z metod uczestnika na stosie wywołań. Słupki aktywności są w UML-u opcjonalne. Odpowiednie nazewnictwo często pomaga w powiązaniu uczestników na diagramie. Wywołanie komunikatu pobierzprodukt zwraca Produkt mający tę samą nazwę, a więc będący tym samym uczestnikiem, co Produkt, do którego jest wysyłany komunikat pobierzcennik. Proszę zwrócić uwagę na to, że użyto strzałki zwrotnej tylko w tym wywołaniu tak aby podkreślić istnienie odpowiedniości. Można używać strzałek zwrotnych we wszystkich wywołaniach, ale lepiej stosować je tylko tam, gdzie niosą one dodatkową informację. Pierwszy komunikat nie ma wysyłającego go uczestnika i nadchodzi z nieokreślonego źródła. Jest nazywany komunikatem wykrytym. 2
3 Inna wersja diagramu sekwencji z pop. slajdu Projektowanie systemów informatycznych, wykład 3 3 Inne podejście do tego samego scenariusza zostało pokazane na aktualnym slajdzie. Podstawowy problem pozostaje ten sam, ale sposób, w który uczestnicy współpracują ze sobą w celu jego rozwiązania, jest zupełnie inny. Zamówienie prosi każdą PozycjęZamówienia, aby obliczyła swoją własną Cenę. PozycjaZamówienia następnie zleca wykonanie obliczenia ceny wszystkim instancjom klasy produkt, które znajdują się na liście zamówienia. Tu warto zwrócić uwagę na to, jak jest przedstawione przekazywanie parametru. Podobnie, aby obliczyć wysokość zniżki, Zamówienie wywołuje metodę na Kliencie. Klient do wykonania swojego zadania potrzebuje dodatkowej informacji z Zamówienia, więc wywołuje na Zamówieniu metodę pobierzcenępodstawową w celu pobrania danych. Pierwsze, co można powiedzieć na temat tych dwóch ostatnich diagramów, jest to, że diagram sekwencji bardzo jasno przedstawia różnice we wzajemnej komunikacji uczestników. To jest ogromna zaleta diagramów interakcji. Nie nadają się one dobrze do przedstawiania szczegółów algorytmów, takich jak pętle lub zachowania warunkowe, ale wywołania między uczestnikami ukazują wyjątkowo przejrzyście i dają naprawdę dobry obraz działań wykonywanych przez poszczególnych uczestników. Drugą sprawą jest oczywista różnica w stylach między dwiema zaprezentowanymi interakcjami. Na poprzednim slajdzie przedstawiono sterowanie scentralizowane, w którym jeden z uczestników wykonuje zdecydowaną większość zadań, a inni uczestnicy dostarczają tylko dane. Na aktualnym slajdzie pokazano sterowanie rozproszone, w którym przetwarzanie jest rozdzielone między wielu uczestników i każdy z nich wykonuje mały fragment algorytmu. Oba style mają swoje wady i zalety. Wiele osób, zwłaszcza tych, które mają małe doświadczenie w technikach obiektowych, jest bardziej przyzwyczajonych do sterowania scentralizowanego. Z wielu względów jest ono mniej skomplikowane, ponieważ całe przetwarzanie dokonuje się w jednym miejscu. Przy sterowaniu rozproszonym można odnieść wrażenie, że ciągle skacze się po różnych obiektach, a sam program jakoś trudno uchwycić. Pomimo to, w projektowaniu obiektowym preferuje się sterowanie rozproszone. Jednym z zadań dobrego projektu jest zlokalizowanie efektów zachodzących zmian. Dane i metody, które uzyskują dostęp do tych danych, często zmieniają się równocześnie. A więc umieszczenie danych i metod ich używających razem w jednym miejscu, jest najważniejszą zasadą projektowania obiektowego. Ponadto, sterowanie rozproszone daje więcej okazji do użycia polimorfizmu zamiast logiki warunkowej. Jeśli algorytmy ustalania cen produktów są różne dla różnych typów produktów, to mechanizm sterowania rozproszonego pozwala na użycie klas pochodnych klasy Produkt w celu poprawnego uwzględnienia tych różnic. Ogólnie styl obiektowy daje możliwość użycia wielu małych obiektów z wieloma małymi metodami, dających mnóstwo okazji do zastosowania przeciążania funkcji i różnych ich wariacji. Jest to coś, czego bardzo trudno nauczyć. Wydaje się, że jedynym sposobem na zrozumienie tego podejścia jest popracowanie w środowisku obiektowym o silnie rozproszonym sterowaniu. 3
4 Tworzenie i usuwanie obiektów Projektowanie systemów informatycznych, wykład 3 4 Na diagramach sekwencji można stosować pewną dodatkową notację oznaczającą tworzenie i usuwanie uczestników. Aby utworzyć uczestnika, należy narysować strzałkę komunikatu łączącą się bezpośrednio z prostokątem uczestnika. Nazwa komunikatu jest w tym wypadku opcjonalna. Można tę nazwę opisać typem konstruktora, którego wywołuje się do tworzenia obiektu. Nazwa nowy jest uniwersalna i nie pokazuje, którego konstruktora użyto. Jeśli uczestnik zaraz po pojawieniu się wykonuje jakąś czynność, na przykład wywołuje komunikat kwerendy, to słupek aktywacji jest umieszczany bezpośrednio pod prostokątem uczestnika. Usunięcie uczestnika jest oznaczane dużym krzyżykiem w kształcie litery X. Strzałka komunikatu skierowana w stronę tego krzyżyka oznacza, że jeden uczestnik jawnie usuwa innego uczestnika. Krzyżyk umieszczony na końcu linii czasu oznacza, że uczestnik usuwa się sam. W środowisku, w którym zwalnianie pamięci przebiega automatycznie (Java,.NET) nie usuwa się obiektów bezpośrednio, ale nadal warto używać krzyżyków w celu wskazania, kiedy obiekt już przestaje być potrzebny i jest gotowy do usunięcia. Jest to również wskazane dla operacji zamykania, w celu zaznaczenia, że obiekt nie będzie już używany. 4
5 Rodzaje komunikatów Projektowanie systemów informatycznych, wykład 3 5 W nowej wersji języka UML strzałka z wypełnionym grotem oznacza komunikat synchroniczny, a strzałka z grotem otwartym należy do komunikatu asynchronicznego. Jeśli obiekt wysyła komunikat synchroniczny, to musi zaczekać na jego zrealizowanie, na przykład na wykonanie podprocedury. Jeśli natomiast obiekt wysyła komunikat asynchroniczny, to może kontynuować przetwarzanie, nie czekając na odpowiedź. Komunikaty asynchroniczne występują w aplikacjach wielowątkowych i w oprogramowaniu pośredniczącym opartym na komunikatach. Asynchroniczność umożliwia szybsze reagowanie i redukuje występowanie sprzężeń czasowych, ale utrudnia wykrywanie błędów w kodzie programu. 5
6 Pętle i instrukcje warunkowe procedure wysłanie foreach (pozycjazamówienia) if (produktwartość > zł) ostrożny.wysłanie else zwykły.wysłanie end if end for if (wymaganepotwierdzenie) komunikator.potwierdzenie end procedurę Projektowanie systemów informatycznych, wykład 3 6 Częstym problemem towarzyszącym diagramom sekwencji jest to, jak pokazać pętle i zachowania warunkowe. Przede wszystkim warto od razu zaznaczyć, że nie jest to coś, przy czym diagramy sekwencji dobrze się spisują. Aby pokazać tego typu struktury sterujące, znacznie lepiej użyć diagramu czynności lub nawet samego kodu programu. Diagramy sekwencji należy traktować jako sposób wizualnego przedstawienia, w jakie interakcje wchodzą ze sobą obiekty, a nie jako sposób modelowania logiki sterującej systemem. Jeśli chodzi o samą notację, to zarówno pętle, jak i instrukcje warunkowe korzystają z ramek interakcji, które służą do wyróżnienia fragmentu diagramu sekwencji. Na slajdzie zilustrowano nieskomplikowany algorytm oparty na pseudokodzie zaprezentowanym na lewo od diagramu. Ogólnie, ramki składają się z pewnego obszaru diagramu sekwencji, który może być dodatkowo podzielony na kilka fragmentów. Każda ramka ma operator a każdemu wydzielonemu fragmentowi ramki może towarzyszyć warunek. Aby przedstawić pętlę, używa się operatora loop i jednego fragmentu ramki, a podstawę iteracji umieszcza się w warunku. Dla instrukcji warunkowej można użyć operatora alt, a w każdym fragmencie ramki umieścić warunek. Zostaje wykonany tylko ten fragment, którego warunek jest prawdziwy. Jeśli istnieje tylko jeden obszar, to rządzi nim operator opt. Ramki interakcji są nowością w UML-u 2.0. Na diagramach przygotowanych przed pojawieniem się UML-a 2.0 stosowano inne podejścia. 6
7 Operatory ramek interakcji alt (od alternative) określający warunek wykonania bloku operacji, odpowiadający instrukcji if-else; warunek umieszcza się wówczas wewnątrz bloku w nawiasach kwadratowych opt (od optional) reprezentujący instrukcję if (bez else). Fragment zostaje wykonany tylko wówczas, gdy zawarty w nim warunek jest prawdziwy. Jest to odpowiednik operatora alt z jednym wyjściem. par (od parallel) nakazujący wykonać operacje równolegle Loop - definiujący pętlę typu for (o określonej z góry liczbie iteracji) lub while (wykonywanej dopóki pewien warunek jest prawdziwy) critical oznaczający obszar krytyczny. Fragment może mieć tylko jeden wątek uruchomiony w danej chwili. neg (od negation)negacja. Fragment przedstawia niepoprawną interakcję. W ten sposób opisujemy niepożądane interakcje w systemie. ref (od reference) Referencja. Odwołuje się do interakcji zdefiniowanej na innym diagramie. Ramka jest rysowana tak, aby przykrywać linie czasu biorące udział w interakcji. Można zdefiniować parametry i wartość zwrotną. sd (od sequence diagram) Diagram sekwencji. Używany do otoczenia ramką całego diagramu sekwencji, w miarę potrzeby. Projektowanie systemów informatycznych, wykład 3 7 7
8 Kiedy używać diagramów sekwencji Należy stosować diagramy sekwencji, aby spojrzeć na zachowanie się kilku obiektów w ramach jednego przypadku użycia systemu. Diagramy sekwencji są użyteczne do przedstawiania współpracy obiektów nie są jednak najlepsze do podawania ścisłej definicji zachowań. Do obserwowania zachowania się jednego obiektu w ramach kilku przypadków użycia należy zastosować diagram stanów. Do badania zachowania w wielu przypadkach użycia lub wielu wątkach należy rozważyć zastosowanie diagramów czynności. Projektowanie systemów informatycznych, wykład 3 8 8
9 Diagramy pakietów (1) Pakiet jest elementem grupującym pozwalającym na pogrupowanie dowolnych bytów UML-a w jednostki wyższego poziomu. Najczęstszym sposobem użycia pakietów jest grupowanie klas. Właśnie to użycie zostanie zaprezentowane w tym fragmencie wykładu. W modelu UML: Każda klasa jest składnikiem jednego pakietu Pakiety mogą być składnikami innych pakietów. Umożliwia to utworzenie hierarchicznej struktury, w której pakiety najwyższego poziomu są podzielone na mniejsze pakiety mające swoje własne podpakiety itd., aż hierarchia osiągnie najniższy poziom w postaci klas. Pakiet może zawierać zarówno pakiety podrzędne, jak i klasy. W językach programowania pakiety odpowiadają takim elementom, jak pakiety w Javie i przestrzenie nazw w językach C++ i.net. Projektowanie systemów informatycznych, wykład 3 9 Klasy są podstawowym składnikiem struktury systemu obiektowego. Są bardzo przydatne, jednak do tworzenia struktury ogromnych systemów, mających po kilkaset klas, potrzeba czegoś więcej. UML umożliwia grupowanie klas w pakiety. Diagramy pakietów służą do bardzo ogólnej prezentacji systemu. Pakiety są wykonywane w perspektywie projektowej lub implementacyjnej stąd na wykładzie z modelowania systemów informatycznych tego typu diagramy nie były prezentowane. Każdy pakiet reprezentuje przestrzeń nazw, co oznacza, że każda klasa musi mieć jednoznaczną nazwę wewnątrz zawierającego ją pakietu. Jeśli chcemy utworzyć klasę o nazwie Data i klasa Data już istnieje w pakiecie System, to nadal możemy mieć klasę Data, jeśli umieścimy ją w odrębnym pakiecie. Aby rozpoznać, która jest która, można użyć w pełni kwalifikowanej nazwy, tzn. nazwy uwzględniającej również zawierający klasę pakiet. Do określania nazw pakietów w UML-u używa się podwójnych dwukropków, więc na przykład klasy Data mogłyby mieć nazwy System::Data oraz MartinFowler::Użytkil::Data. 9
10 Diagramy pakietów (2) Projektowanie systemów informatycznych, wykład 3 10 Na diagramach pakiety są oznaczane za pomocą folderów z zakładkami. Na rysunku pokazano przykład takiego diagramu. Można uwidocznić tylko nazwę pakietu lub też jego zawartość. Wszędzie można używać zamiennie w pełni kwalifikowanych nazw lub zwykłych nazw prostych. Zawartość pakietu można przedstawić za pomocą ikon klas i uwzględnić wszystkie szczegóły klasy, nawet do poziomu diagramu klasy. Wypisanie samych nazw klas ma sens wtedy, gdy chcemy jedynie wskazać, jakie klasy znajdują się w poszczególnych pakietach. Znacznie częściej spotyka się krótkie nazwy klas, takie jak Datę (z pakietu java.util), niż nazwy w pełni kwalifikowane. W UML-u klasy w pakietach mogą być publiczne lub prywatne. Klasa publiczna jest częścią interfejsu pakietu i może być używana przez inne pakiety. Klasa prywatna jest ukryta. W różnych środowiskach programistycznych stosuje się różne reguły dotyczące zakresów widoczności występujących między poszczególnymi elementami pakietów. Należy przestrzegać konwencji środowiska programistycznego, nawet jeśli wymaga to nagięcia zasad UML-a. Dobrą praktyką jest ograniczenie interfejsu pakietu do niewielkiego podzbioru operacji klas publicznych. Można to osiągnąć, nadając wszystkim klasom prywatny zasięg widoczności, tak aby były one widziane tylko przez inne klasy tego pakietu, i dorzucając do pakietu dodatkowe klasy publiczne dla definicji zachowania publicznego. Te dodatkowe klasy, zwane fasadami, zlecają wykonanie operacji publicznych ich prywatnym partnerom w ramach pakietu. W jaki sposób zdecydować, które klasy umieścić w poszczególnych pakietach? Jest to dość trudne pytanie i aby umieć na nie odpowiadać, trzeba posiąść duże umiejętności w dziedzinie projektowania. Pakiety powinny być tworzone tak aby były jak najbardziej spójne wewnętrznie i aby było jak najmniej zależności między pakietami. Każdy nowy element wstawiany do pakietu powinien stanowić pełną całość wraz z pozostałymi elementami w pakiecie (powinien być z nimi w pewien sposób powiązany). Dobrym testem na sprawdzenie czy pakiet jest spójny może być próba nadania krótkiej nazwy pakietowi. Jeżeli istnieją problemy z nadaniem takiej nazwy to prawdopodobnie można dodać do pakietu niepowiązane elementy. 10
11 Zależności między pakietami Diagram pakietów przedstawia pakiety i zależności między nimi. Pojęcie zależności wprowadziłem na poprzednim wykładzie slajd 20. Jeżeli w pakiecie A istnieje przynajmniej jedna klasa, która jest zależna od przynajmniej jednej klasy pakietu B to mówimy, że pakiet A jest zależny od pakietu B. W ten sposób zależności między pakietami podsumowują zależności między zawartościami tych pakietów. Projektowanie systemów informatycznych, wykład 3 11 UML wymienia wiele różnych zależności, z których każda ma własną semantykę i słowo kluczowe. Zwykle jednak łatwiej jest zaczynać od ogólnych zależności bez słów kluczowych, a dopiero później, w miarę potrzeb, stosować bardziej wyrafinowane, jeżeli oczywiście jest to potrzebne. W średnich i dużych systemach narysowanie diagramu pakietów może być jedną z najbardziej wartościowych czynności, którą można wykonać w celu skontrolowania wielkoskalowej struktury systemu. W idealnej sytuacji diagram taki powinien zostać wygenerowany z samego kodu, tak aby można było zobaczyć, co rzeczywiście znajduje się w systemie. Dobra struktura pakietów charakteryzuje się przejrzystym przepływem zależności. Tę cechę trudno zdefiniować, ale często łatwiej rozpoznać. Na rysunku pokazano przykładowy diagram pakietów dla aplikacji przedsiębiorstwa, który ma dobrą strukturę i przejrzysty przepływ zależności. Często przejrzysty przepływ zależności można rozpoznać po tym, że wszystkie zależności podążają w jednym kierunku. Mimo że jest to dobry wyznacznik, to widać na rysunku, że pakiety warstwy odwzorowania danych nie są zgodne z tą regułą. Pakiety te stanowią warstwę izolacyjną między pakietami domeny i bazy danych. Im więcej zależności dochodzi do pakietu, tym stabilniejszy musi być interfejs tego pakietu, ponieważ każda zmiana w interfejsie przeniesie się na wszystkie zależne pakiety. A zatem na rysunku pakiet warstwy domeny aktywów musi mieć stabilniejszy interfejs niż pakiet warstwy odwzorowania danych leasingu. Aby pakiet był bardziej stabilny powinien zawierać możliwie dużo interfejsów i klas abstrakcyjnych (patrz slajd 25 z poprzedniego wykładu). Relacje zależności nie są przechodnie (poprzedni wykład slajd 20). Aby dostrzec, dlaczego jest to istotne w wypadku zależności, spójrzmy ponownie na rysunek na slajdzie. Zmiana w klasie pakietu aktywa-domena może pociągnąć za sobą zmianę w pakiecie leasing-domena. Ale ta zmiana niekoniecznie przeniknie do warstwy prezentacji dziedziny leasingu. (Stanie się tak tylko wtedy, gdy dziedzina leasingu zmieni swój interfejs.) 11
12 Pakiet jak zbiór klas abstrakcyjnych i interfejsów Aplikacja Bramka Bazy danych Bramka Oracle Bramka SQL Server Bramka Test Stub Projektowanie systemów informatycznych, wykład 3 12 Zdarza się, że jeden pakiet definiuje interfejs implementowany przez kilka innych pakietów, na przykład tak jak na zaprezentowanym rysunku. W takim wypadku relacja implementacji wskazuje na to, że bramka bazy danych definiuje Merfejs, a inne klasy bramek bazodanowych zapewniają implementację. W praktyce oznaczałoby to, że pakiet bramki bazodanowej zawiera interfejsy i klasy abstrakcyjne zaimplementowane całkowicie przez inne pakiety. Bardzo częstą praktyką jest umieszczanie interfejsu i jego implementacji w osobnych pakietach. 12
13 Przykład pakietu z interfejsem Ogrzewanie::Grzejnik Oświetlenie::Lampa Projektowanie systemów informatycznych, wykład 3 13 Załóżmy, że należy zaprojektować element interfejsu użytkownika do włączania i wyłączania różnych urządzeń. Element ten powinien współpracować z wieloma różnymi urządzeniami, takimi jak grzejniki i światła. Musi wywoływać metodę na przykład dla grzejnika, ale nie powinien być od niego zależny. Powstania zależności między grzejnikiem a elementem sterującym można uniknąć, definiując w pakiecie elementu sterującego interfejs, który następnie zostanie zaimplementowany przez dowolną klasę, która zechce współpracować z tym elementem sterującym. Ilustruje to rysunek na slajdzie 13
14 Używanie diagramów pakietów Diagramy pakietów są przydatne w dużych systemach, gdyż pozwalają na uzyskanie obrazu zależności między głównymi elementami. Diagramy pakietów dobrze odpowiadają często stosowanym strukturom programistycznym. Rysowanie diagramów pakietów i zależności pomaga w utrzymywaniu pod kontrolą zależności występujących w aplikacji. Diagramy pakietów reprezentują mechanizm grupowania w czasie kompilowania programu. Projektowanie systemów informatycznych, wykład
15 Diagram stanów Diagram stanów przedstawia maszynę stanową składającą się ze stanów, przejść, zdarzeń i czynności. Opisuje on stany pewnego procesu, które są istotne z punktu widzenia modelu pojęciowego tego procesu, oraz przejścia pomiędzy stanami wymuszane poprzez wywoływane usługi obiektu. Określa też reakcje obiektu na zdarzenia zachodzące podczas jego użycia. Diagram stanów odnosi się do modelowania dynamicznych aspektów systemu. Projektowanie systemów informatycznych, wykład 3 15 Zasady tworzenia diagramów stanów zaprezentowano na wykładzie dotyczącym modelowania systemów informatycznych w poprzednim semestrze. W celu przypomnienia podstawowych informacji dotyczących diagramów stanów proszę przeczytać odpowiedni fragment kursu modelowania systemów informatycznych. Na niniejszym wykładzie zamierzam zaprezentować jedynie sposoby implementacji diagramów stanów na podstawie przykładu. Będąc studentem, a nie było to tak dawno (niestety za kilka lat to ostatnie wtrącenie będę musiał wykreślić), namiętnie grałem w gry strategiczne typu Heroes of Might and Magic, Age of Empires, Red Alert. Niestety teraz nie mam już czasu na tego typu intelektualne przygody. Ponieważ jednak darze sentymentem gry strategiczne to mój przykład będzie związany z pewnym aspektem tego typu gier. Załóżmy, że gramy w grę gdzie musimy rozbudowywać osadę. Pierwszym budynkiem jaki należy zbudować aby stworzyć wioskę jest chata sołtysa. Następnie rozbudowujemy wioskę tworząc kolejne chaty i zakłady rzemieślnicze, koszary itd. Kiedy liczba mieszkańców przekroczy 100 wtedy możemy zlecić rozbudowanie (upgrade) chaty sołtysa do ratusza. Wydanie zlecenia rozbudowy chaty sołtysa pod warunkiem osiągnięcia liczby 100 mieszkańców oznacza przekształcenie wioski w miasto. Miasto rozbudowujemy dalej o nowe budynki również takie których nie mogliśmy tworzyć we wiosce. Wydanie zlecenia rozbudowy ratusza do zamku królewskiego pod warunkiem osiągnięcia liczby 1000 mieszkańców oznacza przekształcenie miasta w stolicę. Status stolicy oznacza dodatkowe przywileje oraz umożliwia budowanie nowych budynków, których nie można było budować w mieście (zwłaszcza budynki obronne). Oczywiście nasza osada może zostać zaatakowana przez obcą armię. Wtedy może stracić status stolicy jeżeli liczba mieszkańców spadnie poniżej 1000 lub status miasta jeżeli liczba mieszkańców spadnie poniżej 100. Jeżeli natomiast we wiosce zostanie zburzona chata sołtysa, w mieście ratusz, a w stolicy zamek królewski to osada przestaje istnieć. Oczywiście jest to przykład uproszczony i z punktu widzenia logiki gry można by się do niego w kilku miejscach przyczepić. Przykład uprościłem specjalnie aby stworzyć w miarę prosty i czytelny diagram stanów zaprezentowany na następnym slajdzie. 15
16 Przykład diagramu stanów Wybud. chaty sołtysa [odpowiednia ilość miejsca na planszy] Wioska Zburzenie chaty sołtysa [lm < 100]/ Zablokowanie budowania budynków miasta i niemożność korzystania z bud. miasta Zlecenie wybud. ratusza [lm 100]/ Możliwość budowania budynków miejskich Zburzenie ratusza Miasto Zlecenie wybud. ZK [lm 1000 ]/ Możliwość budowania budynków stolicy [lm < 1000]/Zablokowanie budowania budynków stolicy i niemożność korzystania z bud. stolicy Stolica Legenda: Zburzenie ZK ZK zamek królewski lm liczba mieszkańców Projektowanie systemów informatycznych, wykład
17 Implementacja diagramu stanów - switch void Osada::ObslugaPrzejścia(ZdarzenieOsady Zd) { switch (StanAktualny){ case StanOsady.Wioska: switch(zd){ case ZdarzenieOsady.ZlecenieWybudRatusza: if(lm>=100) StanAktualny = StanOsady.Miasto; break; case ZdarzenieOsady.ZburzenieChatySoltysa: StanAktualny = StanOsady.Zburzona; break; } break; case StanOsadyMiasto: switch(zd){ case ZdarzenieOsady.ZlecenieWybudZK: if(lm>=1000) StanAktualny = StanOsady.Stolica; break; case ZdarzenieOsady.ZburzenieRatusza: StanAktualny = StanOsady.Zburzona; break; case StanOsadyStolica: switch(zd){ case ZdarzenieOsady.ZburzenieZK: StanAktualny = StanOsady.Zburzona; } if(lm < 1000) StanAktualny = StanOsady.Miasto; }// Koniec switch(stanaktualny) }//koniec funkcji Obsluga zdarzenia } if(lm < 100) StanAktualny = StanOsady.Wioska; break; Projektowanie systemów informatycznych, wykład 3 17 Najbardziej bezpośrednim podejściem jest zaimplementowanie diagramu stanów za pomocą zagnieżdżonej instrukcji switch. Na aktualnym slajdzie zaprezentowano przykład takiej implementacji dla diagramu ze slajdu 16. Proszę zauważyć, że funkcja ObsługaPrzejścia obsługuje tzw. przejścia automatyczne czyli takie, które zachodzą automatycznie przy spełnieniu określonego warunku. Przejścia takie nie są rezultatem generacji jakiegokolwiek zdarzenia Zd. Stąd czy funkcja będzie działać poprawnie dla tego typu przejść? Funkcja ta będzie działać poprawnie dla przejść automatycznych wtedy gdy będzie wywoływana przy każdym obiegu pętli komunikatów niezależnie czy wygenerowano ZdarzenieOsady czy nie. Można również postąpić inaczej i obsługę przejść automatycznych umieścić w osobnej funkcji, która będzie wywoływana w każdym obiegu pętli obsługi komunikatów. Wtedy funkcję ObsługaPrzejścia będzie można wywoływać tylko wtedy gdy wygenerowano ZdarzenieOsady. W powyższym pseudokodzie nie uwzględniono przejścia realizowanego przez zdarzenie wybudowania chaty sołtysa. Przejście to prowadzi od pseudostanu do stanu Wioska i jest związane z utworzeniem obiektu klasy Osada stąd nie może być obsłużone w funkcji z klasy Osada. Przejście to powinno być obsłużone w globalnej funkcji obsługi przejść. Rezultatem tego przejścia będzie utworzenie obiektu klasy Osada, ustawienie jej parametrów początkowych i dodanie obiektu do kolekcji wszystkich obiektów gry. Proszę również zauważyć, że w niniejszym kodzie nie zaprezentowano akcji typu odblokowania, zablokowania budowania budynków miasta lub stolicy przy odpowiednich przejściach. Dzieje się tak dlatego, że w kodzie możliwość budowania budynków miasta lub stolicy rozpoznaje się po stanie osady. Mimo że podejście z instrukcją switch wydaje się najbardziej oczywiste prowadzi do powstania długiego i nieczytelnego kodu nawet w prostych przypadkach. 17
18 Implementacja diagramu stanów klasa abstrakcyjna Kontroler ZmianaStanuNa(StanOsady ) ObsZlecenieWybudRatusza(Kontroler* K) ObsZburzenieChatySoltysa(Kontroler* K) ObsZlecenieWybudZK(Kontroler* K) ObsZburzenieRatusza(Kontroler* K) ObsZburzenieZK(Kontroler* K) ObsZdAutomatycznych() stan 1 StanOsady ObsZlecenieWybudRatusza(Kontroler* K) ObsZburzenieChatySoltysa(Kontroler* K) ObsZlecenieWybudZK(Kontroler* K) ObsZburzenieRatusza(Kontroler* K) ObsZburzenieRatusza(Kontroler* K) ObsZburzenieZK(Kontroler* K) ObsZdAutomatycznych(Kontroler* K) stan->obszdautomatycznych(this) StanWioska StanMiasto StanStolica StanKoniec ObsZlecenieWybudRatusza(Kontroler* K) ObsZburzenieChatySoltysa(Kontroler* K) ObsZdAutomatycznych(Kontroler* K) ObsZlecenieWybudZK(Kontroler* K) ObsZburzenieRatusza(Kontroler* K) ObsZdAutomatycznych(Kontroler* K) ObsZburzenieZK(Kontroler* K) ObsZdAutomatycznych(Kontroler* K) If(lm >= 100) K->ZmianaStanuNa(StanMiasto); If(lm < 100) K->ZmianaStanuNa(StanWioska); Projektowanie systemów informatycznych, wykład 3 18 W metodzie ze wzorcem klasy stanów tworzy się hierarchię klas stanów do obsługi zachowania się tych stanów. Każdy stan na diagramie ma jedną podklasę stanów. Kontroler ma metody dla każdego zdarzenia, które po prostu powodują odesłanie do odpowiedniej klasy stanów. Na szczycie hierarchii zdarzeń znajduje się klasa abstrakcyjna (StanOsady), która implementuje wszystkie możliwe metody obsługi zdarzeń tak aby nic nie robiły. Każda klasa konkretnego stanu przeciąża metody obsługujące przejścia wychodzące z tego stanu. Powyższy przykład pokazuje diagram klas UML, z fragmentami kodu w C++, prezentujący klasy implementacyjne diagramu stanów ze slajdu
19 Implementacja diagramu stanu tablica stanów Stan źródłowy Stan docelowy Zdarzenie Dozór Procedura Pseudostan Wioska WybudChatySołtysa Odpowiednia ilość miejsca na planszy Umożliwienie rozbudowy osady Wioska Koniec ZburzenieChatySoltysa Wioska Miasto ZlecenieWybudRatusza lm 100 Umożliwienie budowy budynków miasta Miasto Koniec ZburzenieRatusza Miasto Wioska lm < 100 Zablokowanie budowania budynków miejskich oraz możliwości korzystania z nich Miasto Stolica ZlecenieWybudZK lm 1000 Umożliwienie budowy budynków stolicy Stolica Koniec ZburzenieZK Stolica Miasto lm < 1000 Zablokowanie budowania budynków miejskich oraz możliwości korzystania z nich Projektowanie systemów informatycznych, wykład 3 19 Tabela stanów to trzecie podejście polegające na zakodowaniu informacji z diagramu stanów w postaci tabeli danych. Przykładowemu diagramowi ze slajdu 16 odpowiada tabela zaprezentowana na niniejszym slajdzie. Po sporządzeniu tabeli tworzy się interpreter, który używa tablicy stanów w czasie wykonywania programu, albo generator kodu, który tworzy klasy na podstawie tabeli stanów. Tabela ma taką zaletę, że może być modyfikowana bez ponownej kompilacji programu. Wzorzec stanów jest łatwiejszy do przygotowania, gdy jest potrzebny doraźnie, chociaż potrzeba nowej klasy dla każdego stanu, to nie ma przy tym zbyt dużo kodowania. Niezależnie od tego jaki sposób implementacji stosujemy to zwykle w realnych zadaniach implementacja stanów prowadzi do bardzo skomplikowanego kodu stąd zastosowanie narzędzi CASE w postaci generatorów kodu jest tu ze wszech miar uzasadnione. 19
20 Diagramy wdrożenia Diagramy wdrożenia przedstawiają fizyczny układ systemu. Pokazują, w których częściach sprzętu działają poszczególne fragmenty oprogramowania. Klient-przeglądarka Znacznik z wartością Serwer aplikacji przeglądarka Klient dedykowany {OS=Windows} ReaClient.exe http/internet http/sieć lokalna Węzeł urządzenia Serwer WWW {OS=Linux} {serwer WWW = apache} {Obsługa konta} {liczba wdrożeń = 5} Ścieżka komunikacyjna Zapytanie SQL SQL server System bazodanowy kont klientów Oracle Wdrożony artefakt Węzeł środowiska wykonawczego Projektowanie systemów informatycznych, wykład 3 20 Diagramy wdrożeń przygotowywane są na etapie projektowania systemu i pokazują miejsca wdrożeń poszczególnych fragmentów systemu, więc okazują się bardzo pomocne w wypadku dużych systemów oraz systemów rozproszonych. Na rysunku znajduje się prosty przykład diagramu wdrożenia. Głównymi elementami diagramu są węzły połączone za pomocą ścieżek komunikacyjnych Węzeł jest to coś, co może utrzymywać jakąś część oprogramowania. Są dwa rodzaje węzłów. Pierwszym jest węzeł urządzenia, czyli sprzęt. Węzeł urządzenia może reprezentować komputer albo mniej złożoną część sprzętu komputerowego podłączoną do systemu. Drugim rodzajem jest węzeł środowiska wykonawczego. Reprezentuje on oprogramowanie, które samo się uruchamia lub zawiera inne oprogramowanie Przykładem może tu być system operacyjny. Węzły zawierają artefakty, czyli oprogramowanie w fizycznej postaci najczęściej pliki. Pliki mogą być zbiorami wykonywalnymi (na przykład.exe, pliki binarne, biblioteki DLL, pliki JAR, asemblacje lub skrypty) lub plikami danych, plikami konfiguracyjnymi, dokumentami HTML itp. Wpisanie artefaktu do węzła oznacza, że artefakt ten jest wdrożony do tego węzła w działającym systemie. Artefakty można przedstawić albo za pomocą ramek klas, albo wypisując ich nazwy w węźle. W wypadku użycia pierwszego sposobu można dodać ikonę dokumentu lub słowo kluczowe «artifact». Węzły lub artefakty można oznaczyć za pomocą znaczników z wartościami. W ten sposób można podać różne interesujące informacje o węźle, takie jak producent, system operacyjny, lokalizacja itd. Często w systemach istnieje kilka fizycznych węzłów wykonujących to samo logiczne zadanie. Można to pokazać za pomocą kilku ramek węzłów lub za pomocą znacznika z liczbą wdrożeń (Przykładowo na rysunku 5 serwerów WWW). Ścieżki komunikacyjne między węzłami ilustrują, w jaki sposób poszczególne elementy komunikują się ze sobą. Ścieżki te można oznaczyć etykietami i zapisać w nich informacje o użytych protokołach komunikacyjnych. 20
Język UML w modelowaniu systemów informatycznych
Język UML w modelowaniu systemów informatycznych dr hab. Bożena Woźna-Szcześniak Akademia im. Jan Długosza bwozna@gmail.com Wykład 5 Diagram sekwencji - wprowadzenie I Diagram sekwencji (ang. sequence
Bardziej szczegółowoTECHNOLOGIE OBIEKTOWE WYKŁAD 2. Anna Mroczek
TECHNOLOGIE OBIEKTOWE WYKŁAD 2 Anna Mroczek 2 Diagram czynności Czym jest diagram czynności? 3 Diagram czynności (tak jak to definiuje język UML), stanowi graficzną reprezentację przepływu kontroli. 4
Bardziej szczegółowoKurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017
Wykład 12 7 czerwca 2017 Czym jest UML? UML składa się z dwóch podstawowych elementów: notacja: elementy graficzne, składnia języka modelowania, metamodel: definicje pojęć języka i powiazania pomiędzy
Bardziej szczegółowoWymiar poziomy: oś na której umieszczono instancje klasyfikatorów biorące udział w interakcji.
Wymiar poziomy: oś na której umieszczono instancje klasyfikatorów biorące udział w interakcji. Wymiar pionowy: oś czasu przedstawiajaca ułożone chronologicznie komunikaty Podstawowe notacje graficzne Konceptualny
Bardziej szczegółowoKomputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl
Komputerowe Systemy Przemysłowe: Modelowanie - UML Arkadiusz Banasik arkadiusz.banasik@polsl.pl Plan prezentacji Wprowadzenie UML Diagram przypadków użycia Diagram klas Podsumowanie Wprowadzenie Języki
Bardziej szczegółowoUML cz. III. UML cz. III 1/36
UML cz. III UML cz. III 1/36 UML cz. III 2/36 Diagram współpracy Diagramy współpracy: prezentują obiekty współdziałające ze sobą opisują rolę obiektów w scenariuszu mogą prezentować wzorce projektowe UML
Bardziej szczegółowoUML w Visual Studio. Michał Ciećwierz
UML w Visual Studio Michał Ciećwierz UNIFIED MODELING LANGUAGE (Zunifikowany język modelowania) Pozwala tworzyć wiele systemów (np. informatycznych) Pozwala obrazować, specyfikować, tworzyć i dokumentować
Bardziej szczegółowoAnaliza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas
Analiza i projektowanie obiektowe 2016/2017 Wykład 10: Tworzenie projektowego diagramu klas Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Projektowy
Bardziej szczegółowoPodstawy programowania III WYKŁAD 4
Podstawy programowania III WYKŁAD 4 Jan Kazimirski 1 Podstawy UML-a 2 UML UML Unified Modeling Language formalny język modelowania systemu informatycznego. Aktualna wersja 2.3 Stosuje paradygmat obiektowy.
Bardziej szczegółowoProgramowanie obiektowe
Laboratorium z przedmiotu - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia. Wprowadzenie teoretyczne.
Bardziej szczegółowoAnaliza i programowanie obiektowe 2016/2017. Wykład 6: Projektowanie obiektowe: diagramy interakcji
Analiza i programowanie obiektowe 2016/2017 Wykład 6: Projektowanie obiektowe: diagramy interakcji Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Przejście
Bardziej szczegółowoProgramowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.
Bardziej szczegółowoDiagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com
Diagramy klas dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com O czym będzie? Notacja Ujęcie w różnych perspektywach Prezentacja atrybutów Operacje i metody Zależności Klasy aktywne,
Bardziej szczegółowoJęzyk UML w modelowaniu systemów informatycznych
Język UML w modelowaniu systemów informatycznych dr hab. Bożena Woźna-Szcześniak Akademia im. Jan Długosza bwozna@gmail.com Wykład 10 Diagramy wdrożenia I Diagramy wdrożenia - stosowane do modelowania
Bardziej szczegółowoByć może jesteś doświadczonym programistą, biegle programujesz w Javie,
Kompendium PHP 01 Być może jesteś doświadczonym programistą, biegle programujesz w Javie, C++, Pythonie lub jakimś innym języku programowania, których jak myślę, powstało już tyle, że chyba nie ma osoby,
Bardziej szczegółowoPLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),
PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 2. Przygotowanie środowiska pracy
Bardziej szczegółowoModelowanie diagramów klas w języku UML. Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014
Modelowanie diagramów klas w języku UML Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014 Czym jest UML - Unified Modeling Language - Rodzina języków modelowania graficznego - Powstanie na przełomie lat 80
Bardziej szczegółowoDiagramy sekwencji. wymienianych między nimi
Diagramy sekwencji Graficzne przedstawienie interakcji pomiędzy instancjami klasyfikatorów systemu w postaci sekwencji komunikatów wymienianych między nimi Przykład diagramu sekwencji Układ diagramu wymiar
Bardziej szczegółowoJęzyk UML w modelowaniu systemów informatycznych
Język UML w modelowaniu systemów informatycznych dr hab. Bożena Woźna-Szcześniak Akademia im. Jan Długosza bwozna@gmail.com Wykład 8 Diagram pakietów I Diagram pakietów (ang. package diagram) jest diagramem
Bardziej szczegółowoXQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery
http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod
Bardziej szczegółowoTemat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych
PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA W ELBLĄGU INSTYTUT INFORMATYKI STOSOWANEJ Sprawozdanie z Seminarium Dyplomowego Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych
Bardziej szczegółowoRysunek 1: Przykłady graficznej prezentacji klas.
4 DIAGRAMY KLAS. 4 Diagramy klas. 4.1 Wprowadzenie. Diagram klas - w ujednoliconym języku modelowania jest to statyczny diagram strukturalny, przedstawiający strukturę systemu w modelach obiektowych przez
Bardziej szczegółowoDiagramu Związków Encji - CELE. Diagram Związków Encji - CHARAKTERYSTYKA. Diagram Związków Encji - Podstawowe bloki składowe i reguły konstrukcji
Diagramy związków encji (ERD) 1 Projektowanie bazy danych za pomocą narzędzi CASE Materiał pochodzi ze strony : http://jjakiela.prz.edu.pl/labs.htm Diagramu Związków Encji - CELE Zrozumienie struktury
Bardziej szczegółowoPodstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
Bardziej szczegółowoInżynieria oprogramowania
Inżynieria oprogramowania Wykład 8 Inżynieria wymagań: analiza przypadków użycia a diagram czynności Patrz: Stanisław Wrycza, Bartosz Marcinkowski, Krzysztof Wyrzykowski, Język UML 2.0 w modelowaniu systemów
Bardziej szczegółowoSpis treúci. 1. Wprowadzenie... 13
Księgarnia PWN: W. Dąbrowski, A. Stasiak, M. Wolski - Modelowanie systemów informatycznych w języku UML 2.1 Spis treúci 1. Wprowadzenie... 13 2. Modelowanie cele i metody... 15 2.1. Przegląd rozdziału...
Bardziej szczegółowoTutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.
AGH, EAIE, Informatyka Winda - tutorial Systemy czasu rzeczywistego Mirosław Jedynak, Adam Łączyński Spis treści 1 Wstęp... 2 2 Przypadki użycia (Use Case)... 2 3 Diagramy modelu (Object Model Diagram)...
Bardziej szczegółowoWzorce projektowe. dr inż. Marcin Pietroo
Wzorce projektowe dr inż. Marcin Pietroo Adapter - strukturalny wzorzec projektowy, którego celem jest umożliwienie współpracy dwóm klasom o niekompatybilnych interfejsach - adapter przekształca interfejs
Bardziej szczegółowoProjektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34
Projektowanie oprogramowania cd. Projektowanie oprogramowania cd. 1/34 Projektowanie oprogramowania cd. 2/34 Modelowanie CRC Modelowanie CRC (class-responsibility-collaborator) Metoda identyfikowania poszczególnych
Bardziej szczegółowoLaboratorium z przedmiotu Programowanie obiektowe - zestaw 04
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych kolekcji. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych
Bardziej szczegółowoKonstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.
Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class
Bardziej szczegółowoInformacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;
Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze
Bardziej szczegółowoWzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski
Adapter: opis Wzorce Strukturalne Tomasz Borzyszkowski Alternatywna nazwa: Wrapper (opakowanie) Rola obiektu Adapter: pełni wobec Klienta rolę otoczki, która umożliwia przetłumaczenie jego żądań na protokół
Bardziej szczegółowoZapisywanie algorytmów w języku programowania
Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym
Bardziej szczegółowoPHP: bloki kodu, tablice, obiekty i formularze
1 PHP: bloki kodu, tablice, obiekty i formularze SYSTEMY SIECIOWE Michał Simiński 2 Bloki kodu Blok if-else Switch Pętle Funkcje Blok if-else 3 W PHP blok if i blok if-else wyglądają tak samo i funkcjonują
Bardziej szczegółowoPodstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Bardziej szczegółowoDiagramy ERD. Model struktury danych jest najczęściej tworzony z wykorzystaniem diagramów pojęciowych (konceptualnych). Najpopularniejszym
Diagramy ERD. Model struktury danych jest najczęściej tworzony z wykorzystaniem diagramów pojęciowych (konceptualnych). Najpopularniejszym konceptualnym modelem danych jest tzw. model związków encji (ERM
Bardziej szczegółowoAnaliza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32
Analiza i projektowanie oprogramowania Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania 2/32 Cel analizy Celem fazy określania wymagań jest udzielenie odpowiedzi na pytanie:
Bardziej szczegółowoProgramowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,
Bardziej szczegółowoWykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Bardziej szczegółowoIteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1
Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1 Zofia Kruczkiewicz 1 Zunifikowany iteracyjno- przyrostowy proces tworzenia oprogramowania kiedy? Przepływ działań Modelowanie przedsiębiorstwa
Bardziej szczegółowoZagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)
Zagadnienia (1/3) Rola modelu systemu w procesie analizy wymagań (inżynierii wymagań) Prezentacja różnego rodzaju informacji o systemie w zależności od rodzaju modelu. Budowanie pełnego obrazu systemu
Bardziej szczegółowoznajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Bardziej szczegółowoObiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.
Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody
Bardziej szczegółowoDiagramy czynności Na podstawie UML 2.0 Tutorial
Diagramy czynności Na podstawie UML 2.0 Tutorial http://sparxsystems.com.au/resources/uml2_tutorial/ Zofia Kruczkiewicz 1 Diagramy czynności 1. Diagramy czyności UML http://sparxsystems.com.au/resources/uml2_tutorial/
Bardziej szczegółowoPakiety i interfejsy. Tomasz Borzyszkowski
Pakiety i interfejsy Tomasz Borzyszkowski Pakiety podstawy W dotychczasowych przykładach nazwy klas musiały pochodzić z jednej przestrzeni nazw, tj. być niepowtarzalne tak, by nie doprowadzić do kolizji
Bardziej szczegółowokoniec punkt zatrzymania przepływów sterowania na diagramie czynności
Diagramy czynności opisują dynamikę systemu, graficzne przedstawienie uszeregowania działań obrazuje strumień wykonywanych czynności z ich pomocą modeluje się: - scenariusze przypadków użycia, - procesy
Bardziej szczegółowoWypożyczalnia VIDEO. Technologie obiektowe
Wypożyczalnia VIDEO Jest to program do obsługi wypożyczalni i wypożyczeń klientów. Głównym zadaniem programu jest zarządzanie wypożyczeniami i drukowanie potwierdzenia wypożyczenia oraz naliczenie punktów
Bardziej szczegółowoLaboratorium 6 DIAGRAM KLAS (Class Diagram)
Laboratorium 6 DIAGRAM KLAS (Class Diagram) Opisuje strukturę programu (a także zależności między nimi), co znajduje odzwierciedlenie w kodzie. Charakteryzuje zależności pomiędzy składnikami systemu: klasami,
Bardziej szczegółowoJAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.
JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod
Bardziej szczegółowoJĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona
Bardziej szczegółowo1 Wprowadzenie do algorytmiki
Teoretyczne podstawy informatyki - ćwiczenia: Prowadzący: dr inż. Dariusz W Brzeziński 1 Wprowadzenie do algorytmiki 1.1 Algorytm 1. Skończony, uporządkowany ciąg precyzyjnie i zrozumiale opisanych czynności
Bardziej szczegółowoProgramowanie w języku Python. Grażyna Koba
Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i
Bardziej szczegółowoWykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki
Studia Podyplomowe INFORMATYKA Podstawy Informatyki Wykład V Rzut okiem na języki programowania 1 Kompilacja vs. interpretacja KOMPILACJA Proces, który przetwarza program zapisany w języku programowania,
Bardziej szczegółowoWykład 5: Klasy cz. 3
Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu
Bardziej szczegółowoLaboratorium modelowania oprogramowania w języku UML. Ćwiczenie 3 Ćwiczenia w narzędziu CASE diagram sekwencji. Materiały dla studentów
Zakład Elektrotechniki Teoretycznej i Informatyki Stosowanej Wydział Elektryczny, Politechnika Warszawska Laboratorium modelowania oprogramowania w języku UML Ćwiczenie 3 Ćwiczenia w narzędziu CASE diagram
Bardziej szczegółowoTECHNOLOGIE OBIEKTOWE. Wykład 3
TECHNOLOGIE OBIEKTOWE Wykład 3 2 Diagramy stanów 3 Diagram stanu opisuje zmiany stanu obiektu, podsystemu lub systemu pod wpływem działania operacji. Jest on szczególnie przydatny, gdy zachowanie obiektu
Bardziej szczegółowoTEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Bardziej szczegółowoPLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),
PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 1. Wprowadzenie do aplikacji internetowych
Bardziej szczegółowoDiagramy czynności. Widok logiczny. Widok fizyczny
Diagramy czynności System widoków 4+1 Kruchtena Widok logiczny Widok fizyczny Widok procesu Widok przypadków użycia Widok konstrukcji Diagramy czynności są jedynym diagramem w widoku procesu modelowanego
Bardziej szczegółowoPętle. Dodał Administrator niedziela, 14 marzec :27
Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać
Bardziej szczegółowoWstęp [2/2] Wbrew częstemu przekonaniu, nie są one gotowymi rozwiązaniami, to tylko półprodukty rozwiązania.
Adrian Skalczuk Szymon Kosarzycki Spis Treści Wstęp [1/2] Wzorce projektowe są nieodłącznym przyjacielem programisty pozwalają pisać czystszy kod, łatwiejszy do zrozumienia przez innych i zapewniają pewien
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Laboratorium 11 - przegląd wybranych wzorców mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 24 maja 2017 1 / 38 mgr inż. Krzysztof Szwarc Programowanie obiektowe Wzorce
Bardziej szczegółowoUML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.
UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami
Bardziej szczegółowoŹródło: S. Wrycza, B. Marcinkowski, K. Wyrzykowski Język UML 2.0 w modelowaniu systemów informatycznych Helion DIAGRAMY INTERAKCJI
DIAGRAMY INTERAKCJI DIAGRAMY STEROWANIA INTERAKCJĄ Diagramy sterowania interakcją dokumentują logiczne związki między fragmentami interakcji. Podstawowe kategorie pojęciowe diagramów sterowania interakcją
Bardziej szczegółowoWstęp do programowania 2
Wstęp do programowania 2 wykład 10 Zadania Agata Półrola Wydział Matematyki UŁ 2005/2006 http://www.math.uni.lodz.pl/~polrola Współbieżność dotychczasowe programy wykonywały akcje sekwencyjnie Ada umożliwia
Bardziej szczegółowoWprowadzenie do programowania
do programowania ITA-104 Wersja 1 Warszawa, Wrzesień 2009 ITA-104 do programowania Informacje o kursie Zakres tematyczny kursu Opis kursu Kurs przeznaczony jest do prowadzenia przedmiotu do programowania
Bardziej szczegółowo1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Bardziej szczegółowoJeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.
Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji
Bardziej szczegółowoC++ Przeładowanie operatorów i wzorce w klasach
C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje
Bardziej szczegółowoKATEDRA INFORMATYKI STOSOWANEJ PŁ INŻYNIERIA OPROGRAMOWANIA
KATEDRA INFORMATYKI STOSOWANEJ PŁ INŻYNIERIA OPROGRAMOWANIA Przygotował: mgr inż. Radosław Adamus Wprowadzenie Podstawą każdego projektu, którego celem jest budowa oprogramowania są wymagania, czyli warunki,
Bardziej szczegółowoProjekt z przedmiotu Specjalizowane języki programowania Temat: Zastosowanie programowania obiektowego w środowisku LabView
Projekt z przedmiotu Specjalizowane języki programowania Temat: Zastosowanie programowania obiektowego w środowisku LabView Wykonali: Krzysztof Przybyłek Piotr Misiuda IVFDS Istotę programowania obiektowego
Bardziej szczegółowoObiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody
Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,
Bardziej szczegółowoPodstawy programowania, Poniedziałek , 8-10 Projekt, część 1
Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem
Bardziej szczegółowoZadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.
Zadanie: Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób. Na kolejnych zajęciach projekt będzie rozwijana i uzupełniana o kolejne elementy omawiane
Bardziej szczegółowoDiagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.
Umiejętność czytania oraz tworzenia diagramów klas UML jest podstawą w przypadku zawodu programisty. Z takimi diagramami będziesz spotykał się w przeciągu całej swojej kariery. Diagramy klas UML są zawsze
Bardziej szczegółowoGenerated by Foxit PDF Creator Foxit Software http://www.foxitsoftware.com For evaluation only. System Szablonów
System Szablonów System szablonów System szablonów to biblioteka, która pozwala oddzielić warstwę prezentacji od warstwy logicznej. Aplikacja WWW najpierw pobiera wszystkie dane, przetwarza je i umieszcza
Bardziej szczegółowoJava. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego
Bardziej szczegółowoZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia
ZP/ITS/11/2012 Załącznik nr 1a do SIWZ ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia Przedmiotem zamówienia jest: Przygotowanie zajęć dydaktycznych w postaci kursów e-learningowych przeznaczonych
Bardziej szczegółowoUwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)
Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie
Bardziej szczegółowoECDL Podstawy programowania Sylabus - wersja 1.0
ECDL Podstawy programowania Sylabus - wersja 1.0 Przeznaczenie Sylabusa Dokument ten zawiera szczegółowy Sylabus dla modułu Podstawy programowania. Sylabus opisuje, poprzez efekty uczenia się, zakres wiedzy
Bardziej szczegółowoWidoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?
Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz
Bardziej szczegółowoMateriały do laboratorium MS ACCESS BASIC
Materiały do laboratorium MS ACCESS BASIC Opracowała: Katarzyna Harężlak Access Basic jest językiem programowania wykorzystywanym w celu powiązania obiektów aplikacji w jeden spójny system. PROCEDURY I
Bardziej szczegółowoZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja
ZPKSoft WDoradca 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja 1. Wstęp ZPKSoft WDoradca jest technologią dostępu przeglądarkowego do zasobów systemu ZPKSoft Doradca.
Bardziej szczegółowoProgramowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści
Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop. 2017 Spis treści O autorach 11 Podziękowania 12 Wprowadzenie 13 CZĘŚĆ I ZACZNIJ PROGRAMOWAĆ JUŻ DZIŚ Godzina 1. Praktyczne
Bardziej szczegółowoJęzyk UML w modelowaniu systemów informatycznych
Język UML w modelowaniu systemów informatycznych dr hab. Bożena Woźna-Szcześniak Akademia im. Jan Długosza bwozna@gmail.com Wykład 4 Diagramy aktywności I Diagram aktywności (czynności) (ang. activity
Bardziej szczegółowoOracle11g: Programowanie w PL/SQL
Oracle11g: Programowanie w PL/SQL OPIS: Kurs pozwala zrozumieć zalety programowania w języku PL/SQL. Studenci uczą się tworzyć bloki kodu wykonywanego po stronie serwera, który może być współużytkowany
Bardziej szczegółowoJęzyk UML w modelowaniu systemów informatycznych
Język UML w modelowaniu systemów informatycznych dr hab. Bożena Woźna-Szcześniak Akademia im. Jan Długosza bwozna@gmail.com Wykład 11 Diagramy struktur złożonych Klasyfikator - definiuje cechy strukturalne
Bardziej szczegółowoAnaliza i projektowanie obiektowe 2016/2017. Wykład 8: Przypisywanie obiektom odpowiedzialności (2)
Analiza i projektowanie obiektowe 2016/2017 Wykład 8: Przypisywanie obiektom odpowiedzialności (2) Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Wzorce
Bardziej szczegółowoProjektowanie obiektowe Wzorce projektowe
Projektowanie obiektowe Wzorce projektowe Gang of Four Kreacyjne wzorce projektowe (wzorce konstrukcyjne) 1 Roadmap Memento Factory Method Abstract Factory Prototype Builder 2 Wzorce konstrukcyjne wzorce
Bardziej szczegółowoWykład Ćwiczenia Laboratorium Projekt Seminarium
WYDZIAŁ ELEKTRONIKI KARTA PRZEDMIOTU Nazwa w języku polskim Języki programowania Nazwa w języku angielskim Programming languages Kierunek studiów (jeśli dotyczy): Informatyka - INF Specjalność (jeśli dotyczy):
Bardziej szczegółowoW przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby
Część XI C++ W folderze nazwisko36 program za każdym razem sprawdza oba warunki co niepotrzebnie obciąża procesor. Ten problem można rozwiązać stosując instrukcje if...else Instrukcja if wykonuje polecenie
Bardziej szczegółowoPodstawy inżynierii oprogramowania
Podstawy inżynierii oprogramowania Modelowanie. Podstawy notacji UML Aleksander Lamża ZKSB Instytut Informatyki Uniwersytet Śląski w Katowicach aleksander.lamza@us.edu.pl Zawartość Czym jest UML? Wybrane
Bardziej szczegółowoStruktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski
Struktura systemu operacyjnego Schemat budowy systemu operacyjnego model warstwowy Schemat budowy systemu operacyjnego części składowe Większość systemów operacyjnych opiera się o koncepcję jądra, która
Bardziej szczegółowoWzorce projektowe. dr inż. Marcin Pietroo
Wzorce projektowe dr inż. Marcin Pietroo Wzorce projektowe Wzorzec projektowy (ang. design pattern) w inżynierii oprogramowania, rozwiązanie często pojawiających się, powtarzalnych problemów projektowych.
Bardziej szczegółowoProjektowanie obiektowe Wzorce projektowe. Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów)
Projektowanie obiektowe Wzorce projektowe Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów) 1 Roadmap Adapter Bridge Composite Facade 2 Pojęcia obiekt interfejs typ klasa 3 Co to jest delegacja?
Bardziej szczegółowo1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Bardziej szczegółowo1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie
Bardziej szczegółowoSkrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać
MatLab część III 1 Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać komentarze poprzedzone znakiem % Skrypty
Bardziej szczegółowo