Refaktoryzacja do wzorców projektowych
|
|
- Sabina Przybylska
- 8 lat temu
- Przeglądów:
Transkrypt
1 IDZ DO PRZYK ADOWY ROZDZIA KATALOG KSI EK ZAMÓW DRUKOWANY KATALOG Wydawnictwo Helion ul. Chopina Gliwice tel. (32) helion@helion.pl TWÓJ KOSZYK CENNIK I INFORMACJE ZAMÓW INFORMACJE ONOWOŒCIACH ZAMÓW CENNIK CZYTELNIA SPIS TREŒCI KATALOG ONLINE DODAJ DO KOSZYKA FRAGMENTY KSI EK ONLINE Refaktoryzacja do wzorców projektowych Autor: Joshua Kerievsky T³umaczenie: Pawe³ Koronkiewicz ISBN: Tytu³ orygina³u: Refactoring to Patterns Format: B5, stron: 320 Zmodernizuj kod swoich aplikacji pod k¹tem stosowania wzorców projektowych Dowiedz siê, czym jest refaktoryzacja Poznaj zasady stosowania wzorców projektowych WprowadŸ wzorce projektowe do kodu Ÿród³owego aplikacji Refaktoryzacja to zmiana konstrukcji kodu bez modyfikowania jego dzia³ania. Najczêstszym powodem refaktoryzowania kodu jest koniecznoœæ jego uporz¹dkowania lub usuniêcia z niego funkcji niewykorzystywanych w projekcie. Czêsto równie stosuje siê refaktoryzacjê, aby zmodernizowaæ kod pod k¹tem zastosowania w nim wzorców projektowych. Wprowadzenie wzorców projektowych do kodu znacznie u³atwia jego póÿniejsze modyfikacje i ewentualne rozbudowy. Stosowanie technik programowania ekstremalnego nierozerwalnie wi¹ e ze sob¹ wzorce projektowe i refaktoryzacjê kodu. Ksi¹ ka Refaktoryzacja do wzorców projektowych opisuje teoretyczne i praktyczne zagadnienia zwi¹zane z refaktoryzowaniem kodu pod k¹tem wzorców projektowych. Przedstawia opisy niskopoziomowych przekszta³ceñ, które umo liwiaj¹ programiœcie bezpieczn¹ zmianê konstrukcji kodu prowadz¹c¹ do zaimplementowania b¹dÿ usuniêcia okreœlonych wzorców z programu. Zawiera równie szczegó³owy opis ³¹czenia tych przekszta³ceñ w procesie refaktoryzacji oraz sposobów implementowania wzorców w kodzie. Ka de z omówionych w ksi¹ ce przekszta³ceñ zosta³o zilustrowane praktycznymi przyk³adami. Podstawowe zasady refaktoryzacji Zasady stosowania wzorców projektowych Najczêstsze powody wprowadzania wzorców do kodu Implementowanie wzorców projektowych Zmiany sposobów tworzenia obiektów Upraszczanie i uogólnianie kodu Jeœli chcesz zmodernizowaæ kod swoich aplikacji, w tej ksi¹ ce znajdziesz wszystkie informacje na ten temat
2 Spis treści Przedmowa Ralpha Johnsona...11 Przedmowa Martina Fowlera...13 Wstęp...15 O czym jest ta książka?...15 Jaki jest cel tej książki?...15 Dla kogo jest ta książka?...16 Co trzeba wiedzieć?...16 Jak korzystać z tej książki?...17 Historia tej książki...17 Na ramionach gigantów...18 Podziękowania Dlaczego napisałem tę książkę...21 Planowanie na wyrost...21 Wzorce jako panaceum...22 Brak właściwego planowania...23 Programowanie sterowane testami i ciągła refaktoryzacja...24 Refaktoryzacja i wzorce...25 Projektowanie jako proces ewolucyjny Refaktoryzacja...27 Czym jest refaktoryzacja?...27 Dlaczego refaktoryzujemy?...28 Co dwie głowy...29
3 6 SPIS TREŚCI Kod czytelny dla człowieka...29 Porządek...30 Zasada małych kroków...31 Dług konstrukcyjny...32 Rozwijanie architektury...33 Przekształcenia złożone i oparte na testach...33 Zalety przekształceń złożonych...34 Narzędzia do refaktoryzacji Wzorce...37 Czym jest wzorzec projektowy?...37 Fan wzorców...38 Jest wiele sposobów implementowania każdego wzorca...40 Zmiana do, w stronę i od wzorca...42 Czy wzorce zwiększają złożoność kodu?...43 Znajomość wzorców...44 Rozpoczynanie pracy od pełnego projektu Zapachy kodu...47 Duplicated Code (powtórzenia kodu)...48 Long Method (długa metoda)...49 Conditional Complexity (złożoność warunków)...50 Primitive Obsession (pierwotna obsesja)...50 Indecent Exposure (nieprzyzwoite obnażanie się)...51 Solution Sprawl (rozrzucanie rozwiązania)...51 Alternative Class with Different Interfaces (podobna klasa o innych interfejsach)...51 Lazy Class (leniwa klasa)...52 Large Class (duża klasa)...52 Switch Statements (instrukcje switch)...52 Combinatorial Explosion (eksplozja kombinatoryczna)...52 Oddball Solution (osobliwe rozwiązanie) Katalog refaktoryzacji ukierunkowanych na wzorce...55 Format opisu przekształceń...55 Przykłady...56 Obsługa XML...57 HTML Parser...57 Kalkulator ryzyka kredytu...58 Punkt wyjścia...58 Jak wykorzystać tę książkę do nauki...58
4 SPIS TREŚCI 7 6. Tworzenie obiektów...61 Replace Constructors with Creation Methods (zastąp konstruktory metodami tworzącymi egzemplarze)...62 Motywacja...62 Mechanika...64 Przykład...64 Odmiany...69 Move Creation Knowledge to Factory (przenieś operację tworzenia obiektów do fabryki)...71 Motywacja...73 Mechanika...75 Przykład...75 Encapsulate Classes with Factory (zahermetyzuj klasy, wprowadzając fabrykę)...81 Motywacja...82 Mechanika...82 Przykład...83 Odmiany...86 Introduce Polymorphic Creation with Factory Method (wprowadź polimorficzne tworzenie obiektów wzorzec Factory Method)...88 Motywacja...89 Mechanika...90 Przykład...91 Encapsulate Composite with Builder (użyj klasy Builder do hermetyzacji obiektów Composite)...95 Mechanika...97 Przykład...98 Odmiany Inline Singleton (wstaw kod klasy Singleton w miejscu wywołania) Motywacja Mechanika Przykład Upraszczanie kodu Compose Method (zbuduj metodę z kilku elementów) Motywacja Mechanika Przykład Replace Conditional Logic with Strategy (zastąp wyrażenia warunkowe wzorcem Strategy) Motywacja Mechanika Przykład Move Embellishment to Decorator (przenieś upiększenia do klasy Decorator) Motywacja Mechanika Przykład Replace State-Altering Conditionals with State (zastąp wyrażenia warunkowe zmiany stanu klasami State) Motywacja Mechanika Przykład...156
5 8 SPIS TREŚCI Replace Implicit Tree with Composite (zastąp niejawne drzewo strukturą Composite) Motywacja Mechanika Przykład Replace Conditional Dispatcher with Command (zastąp dyspozycje oparte na warunkach obiektami Command) Motywacja Mechanika Przykład Uogólnianie kodu Form Template Method (utwórz metodę szablonową) Motywacja Mechanika Przykład Extract Composite (wyodrębnij kompozyt) Motywacja Mechanika Przykład Replace One/Many Distinctions with Composite (zastąp zróżnicowanie jeden-wiele wzorcem Composite) Motywacja Mechanika Przykład Replace Hard-Coded Notifications with Observer (zastąp powiadomienia zapisane w kodzie wzorcem Observer) Motywacja Mechanika Przykład Unify Interfaces with Adapter (zunifikuj interfejsy, wprowadzając adapter) Motywacja Mechanika Przykład Extract Adapter (wyodrębnij adapter) Motywacja Mechanika Przykład Odmiany Replace Implicit Language with Interpreter (zastąp niejawny język interpreterem) Motywacja Mechanika Przykład Ochrona Replace Type Code with Class (zastąp kod typu klasą) Motywacja Mechanika Przykład...261
6 SPIS TREŚCI 9 Limit Instantiation with Singleton (ogranicz tworzenie egzemplarzy, stosując singleton) Motywacja Mechanika Przykład Introduce Null Object (wprowadź obiekt pusty) Motywacja Mechanika Przykład Akumulacja Move Accumulation to Collecting Parameter (przenieś operacje gromadzenia danych do parametru zbierającego) Motywacja Mechanika Przykład Move Accumulation to Visitor (przenieś operacje gromadzenia danych do inspektora) Motywacja Mechanika Przykład Narzędzia Chain Constructors (połącz konstruktory w łańcuch) Motywacja Mechanika Przykład Unify Interfaces (zunifikuj interfejsy) Motywacja Mechanika Przykład Extract Parameter (wyodrębnij parametr) Motywacja Mechanika Przykład Posłowie Bibliografia Skorowidz...315
7 4 Zapachy kodu Gdy nauczysz się patrzeć na swoje słowa z krytycznym dystansem, zauważysz, że czytając ten sam fragment po pięć czy sześć razy z rzędu, za każdym razem odkrywasz nowy problem [Barzun, 229]. Refaktoryzację, a więc poprawianie konstrukcji kodu, rozpoczynamy od określenia, który kod wymaga poprawienia. Katalogi refaktoryzacji są tu pomocne, ale nie opisują wszystkich sytuacji. Aby rozpoznać problemy we własnych rozwiązaniach, musimy zawczasu dobrze poznać typowe problemy konstrukcyjne. Problemy konstrukcyjne mają swoje źródło w kodzie, który jest: wielokrotnie powtarzany, niejasny, skomplikowany. Tak określone kryteria na pewno ułatwią wyszukiwanie miejsc, w których można wprowadzić ulepszenia. Z drugiej strony, wielu programistów uważa, że taka lista jest zbyt ogólna. Nie wiedzą, jak wykryć duplikacje w kodzie, który nie jest w oczywisty sposób identyczny. Nie są pewni, czy dany kod w jasny sposób informuje o swoim celu. Nie potrafią odróżnić kodu prostego i złożonego. W rozdziale Brzydkie zapachy w kodzie książki Refactoring [F] Martin Fowler i Kent Beck dają dodatkowe wskazówki dotyczące identyfikowania problemów konstrukcyjnych. Porównują te problemy do zapachów i wyjaśniają, które przekształcenia lub połączenia przekształceń najskuteczniej likwidują zapach. Zapachy kodu Fowlera i Becka pojawiają się wszędzie: w metodach, klasach, hierarchiach, pakietach (przestrzeniach nazw, modułach) i całych systemach. Ich nazwy, takie jak Feature Envy (zazdrość o funkcje), Primitive Obsession (obsesja na punkcie wartości prostych albo prymitywna obsesja) czy Speculative Generality (ogólność spekulatywna), to propozycja bogatego i kolorowego słownictwa, które programiści mogą wykorzystać do sprawnej wymiany informacji o problemach konstrukcyjnych. Uznałem, że warto rozważyć, które z 22 zapachów kodu Fowlera i Becka są związane z przekształceniami omawianymi w tej książce. W trakcie pracy zdefiniowałem pięć kolejnych, które powinny skłonić do przekształceń ukierunkowanych na wzorce. W sumie przekształcenia w tej książce powiązałem z 12 zapachami kodu. Tabela 4.1 wymienia wszystkie 12 zapachów, wraz z przekształceniami, które mogą pomóc w ich usunięciu. Na kolejnych kilku stronach omówię każdy z zapachów i zalecane refaktoryzacje.
8 48 4. ZAPACHY KODU TABELA 4.1. Zapach a Przekształcenie Duplicated Code (48) [F] Form Template Method (188) Introduce Polymorphic Creation with Factory Method (88) Chain Constructors (302) Replace One/Many Distinctions with Composite (203) Extract Composite (195) Unify Interfaces with Adapter (223) Introduce Null Object (271) Long Method (49) [F] Compose Method (118) Move Accumulation to Collecting Parameter (280) Replace Conditional Dispatcher with Command (177) Move Accumulation to Visitor (286) Replace Conditional Logic with Strategy (123) Conditional Complexity (50) Replace Conditional Logic with Strategy (123) Move Embellishment to Decorator (136) Replace State-Altering Conditionals with State (154) Introduce Null Object (271) Primitive Obsession (50) [F] Replace Type Code with Class (258) Replace State-Altering Conditionals with State (154) Replace Conditional Logic with Strategy (123) Replace Implicit Tree with Composite (165) Replace Implicit Language with Interpreter (243) Move Embellishment to Decorator (136) Encapsulate Composite with Builder (95) Indecent Exposure (51) Encapsulate Classes with Factory (81) Solution Sprawl (51) Move Creation Knowledge to Factory (71) Alternative Classes with Different Interfaces (51) [F] Unify Interfaces with Adapter (223) Lazy Class (52) [F] Inline Singleton (111) Large Class (52) [F] Replace Conditional Dispatcher with Command (177) Replace State-Altering Conditionals with State (154) Replace Implicit Language with Interpreter (243) Switch Statements (52) [F] Replace Conditional Dispatcher with Command (177) Move Accumulation to Visitor (286) Combinatorial Explosion (53) Replace Implicit Language with Interpreter (243) Oddball Solution (45) Unify Interfaces with Adapter (223) a Numery stron wskazują stronę książki, na której omawiam zapach. [F] oznacza, że zapach został omówiony przez Martina Fowlera i Kenta Becka w rozdziale Brzydkie zapachy w kodzie książki Refactoring [F]. Duplicated Code (powtórzenia kodu) Duplicated Code Zduplikowany kod to najbardziej rozpowszechniony i najostrzejszy z zapachów. Bywa wyraźny lub subtelny. Jawna duplikacja to identyczne fragmenty kodu. Powtórzenia ukryte znajdziemy w strukturach lub procedurach przetwarzania, które jedynie zewnętrznie różnią się od siebie. Oba rodzaje duplikacji, pojawiające się w podklasach pewnej hierarchii, można usunąć przekształceniem Form Template Method (188). Jeżeli metoda jest podobnie implementowana w podklasach, a głównym wyróżnikiem jest etap tworzenia obiektu, przekształcenie Introduce Polymorphic Creation with Factory Method (88) otworzy drogę do usunięcia duplikacji przy użyciu wzorca Template Method.
9 LONG METHOD 49 Jeżeli kod powtarza się w konstruktorach klasy, można odwołać się do przekształcenia Chain Constructors (302). Jeżeli inny kod przetwarza pojedynczy obiekt, a inny kolekcję, można usunąć duplikację przekształceniem Replace One/Many Distinctions with Composite (203). Jeżeli każda podklasa hierarchii implementuje własny obiekt Composite, kod może okazać się identyczny. Wówczas niezbędne jest przekształcenie Extract Composite (195). Jeżeli przetwarzamy obiekty w różny sposób tylko dlatego, że mają inne interfejsy, przekształcenie Unify Interfaces with Adapter (223) zapoczątkuje proces usuwania powtarzającego się kodu logiki przetwarzania. Jeżeli korzystamy z pewnego kodu warunkowego do obsługi sytuacji, gdy obiekt ma wartość null, i taki kod powtarza się w wielu różnych miejscach, przekształcenie Introduce Null Object (271) pozwoli usunąć duplikację i uprościć system. Long Method (długa metoda) Long Method W swoim opisie tego zapachu Fowler i Beck [F] przytaczają kilka ważkich argumentów przemawiających za wyższością krótkich metod nad długimi. Podstawowym argumentem jest podział logiki. Gdy mamy dwie długie metody, szanse na powtórzenia kodu są duże. Gdy podzielimy je na mniejsze, znajdziemy wiele sposobów na przejrzysty podział logiki między nimi. Fowler i Beck zwracają też uwagę na to, że małe metody funkcjonują jako naturalny opis kodu. Jeżeli nie jest oczywiste, co robi pewien fragment kodu, wyłączenie go do niewielkiej, odpowiednio nazwanej metody na pewno zwiększy przejrzystość kodu. Systemy zbudowane głównie na podstawie niewielkich metod zazwyczaj łatwiej rozbudowywać i konserwować, bo są przejrzyste i jest w nich niewiele powtórzeń kodu. Jaki jest optymalny rozmiar takiej niewielkiej metody? Rzekłbym, że do dziesięciu wierszy kodu, przy czym większość metod nie powinna mieć więcej niż pięć. Gdy podążamy tą ścieżką, możemy wprowadzić też kilka metod bardziej rozbudowanych, o ile tylko ich konstrukcja będzie przejrzysta i nie pojawi się duplikacja kodu. Niektórzy programiści unikają pisania małych metod w obawie przed spadkiem wydajności, który może pojawić się w efekcie wielokrotnego przekazywania wywołań. Podejście nie sprawdza się z kilku powodów. Po pierwsze, dobry projektant nie dąży do przedwczesnej optymalizacji kodu. Po drugie, łączenie kilku niewielkich metod nie wpływa zazwyczaj na wydajność łatwo to potwierdzić, korzystając z narzędzia do profilowania. Po trzecie, gdy faktycznie pojawiają się problemy z szybkością pracy, można przeprowadzić refaktoryzację ukierunkowaną na wydajność i wcale nie rezygnować z zasady ograniczania rozmiaru metod. Gdy natrafiam na długą metodę, jednym z moich pierwszych odruchów jest przekształcenie jej do postaci określanej jako Composed Method [Beck, SBPP]. Prowadzi do tego przekształcenie Compose Method (118). Jednym z niezbędnych etapów jest zazwyczaj przekształcenie Extract Method [F]. Jeżeli kod przekształcany do postaci metody złożonej gromadzi dane w pewnej wspólnej zmiennej, warto rozważyć przekształcenie Move Accumulation to Collecting Parameter (280). Jeżeli metoda jest długa, ponieważ zawiera rozbudowaną instrukcję switch, odpowiedzialną za dyspozycję i obsługę żądań, można ją nieco odchudzić przekształceniem Replace Conditional Dispatcher with Command (177). Jeżeli instrukcja switch służy do gromadzenia danych z wielu klas o różnych interfejsach, można zmniejszyć jej rozmiary, stosując przekształcenie Move Accumulation to Visitor (286). Jeżeli metoda jest długa, ponieważ zawiera wiele wersji pewnego algorytmu i instrukcje warunkowe, określające właściwą wersję w czasie wykonywania, dobrą techniką zmniejszenia jej rozmiarów będzie przekształcenie Replace Conditional Logic with Strategy (123).
10 50 4. ZAPACHY KODU Conditional Complexity (złożoność warunków) Logika wyrażeń warunkowych jest niewinna w swojej surowości, o ile tylko pozostaje prosta i nie jest bardziej rozbudowana niż kilka wierszy kodu. Niestety, nie służy jej czas i rozwój. Proste początkowo wyrażenia mogą zamienić się w nieprzenikniony gąszcz, gdy tylko dodamy kilka nowych funkcji. Jeżeli wyrażenia warunkowe służą do wybierania jednego z wariantów obliczeń, rozważamy przekształcenie Replace Conditional Logic with Strategy (123). Jeżeli wyrażenia warunkowe służą do wybierania pomiędzy różnymi nietypowymi zachowaniami klasy, możemy skorzystać z Move Embellishment to Decorator (136). Jeżeli problem złożoności dotyczy wyrażeń, które decydują o zmianie stanu obiektu, można uprościć kod przekształceniem Replace State-Altering Conditionals with State (154). Wyrażenia warunkowe służą często do rozpatrywania przypadku wartości null. Jeżeli ten sam schemat powtarza się w wielu miejscach aplikacji, można skrócić kod, wprowadzając obiekt null, a więc stosując przekształcenie Introduce Null Object (271). Primitive Obsession (pierwotna obsesja) Typy pierwotne albo, inaczej, typy proste liczby całkowite, ciągi, wartości zmiennoprzecinkowe, tablice i inne elementy niskiego poziomu mają charakter ogólny i są wykorzystywane w wielu różnych aplikacjach. Klasy, w przeciwieństwie do nich, są tworzone odpowiednio do potrzeb i mogą być dowolnie wyspecjalizowane. W wielu przypadkach są one prostszym i bardziej naturalnym modelem rzeczywistości. Dodatkowo, gdy już stworzymy pewną klasę, często odkrywamy, że możemy w niej umieścić kod z innych części systemu. Fowler i Beck [F] piszą o zapachu Primitive Obsession, który pojawia się wtedy, gdy typy proste są stosowane w kodzie nadzwyczaj często. Zjawisko to występuje najczęściej, gdy nie zdecydowaliśmy jeszcze, jakie abstrakcje wysokiego poziomu mogą uczynić kod bardziej prostym i przejrzystym. Przekształcenia przedstawione przez Fowlera zawierają wiele rozwiązań takiego problemu. Wykorzystuję je w tej książce, proponując też inne. Jeżeli wartość prosta decyduje o wykorzystywanej logice klasy i nie zapewnia zarazem bezpieczeństwa typów (tj. klient może przypisać wartość niebezpieczną lub niewłaściwą), rozważamy przekształcenie Replace Type Code with Class (258). Uzyskamy w ten sposób zabezpieczenie typu wartości i możliwość wprowadzania nowych zachowań (na co nie pozwalają typy pierwotne). Jeżeli o zmianach stanu obiektu decyduje złożona logika z wyrażeniami warunkowymi, oparta na wartościach prostych, można skorzystać z przekształcenia Replace State-Altering Conditionals with State (154). Wynikiem będą osobne klasy reprezentujące poszczególne stany i uproszczona logika zmian stanu. Jeżeli skomplikowana logika z wyrażeniami warunkowymi decyduje o wykorzystywanym algorytmie i ta logika opiera się na wartościach prostych, stosujemy przekształcenie Replace Conditional Logic with Strategy (123). Jeżeli niejawnie tworzymy strukturę drzewiastą, ograniczając się do wartości prostych, takich jak ciąg znakowy, praca z kodem może być utrudniona i podatna na błędy. Może też prowadzić do powtórzeń kodu. Rozwiązaniem jest przekształcenie Replace Implicit Tree with Composite (165). Jeżeli wiele metod klasy zapewnia obsługę licznych kombinacji wartości prostych, możemy mieć do czynienia z niejawnym językiem. Wówczas pomocne jest przekształcenie Replace Implicit Language with Interpreter (243).
11 ALTERNATIVE CLASS WITH DIFFERENT INTERFACES 51 Jeżeli wartości proste pojawiają się w klasie tylko po to, aby uzupełnić podstawowe funkcje obiektu, można rozważyć przekształcenie Move Embellishment to Decorator (136). Nawet jeżeli utworzyliśmy pewną klasę, jej konstrukcja może być zbyt prosta, aby faktycznie ułatwić budowanie klientów. Tak może być w przypadku skomplikowanego w obsłudze obiektu Composite [DP]. Pomocą może być usprawnienie budowy obiektów uzyskane przez przekształcenie Encapsulate Composite with Builder (95). Indecent Exposure (nieprzyzwoite obnażanie się) Ten zapach sygnalizuje brak tego, co David Parnas nazwał ukrywaniem informacji [Parnas]. Pojawia się, gdy metody lub klasy, które nie powinny być widoczne dla klientów, są dla nich w pełni dostępne. Takie niefrasobliwe ujawnianie kodu powoduje, że klienty dowiadują się o elementach programu, które nie są dla nich ważne lub są ważne tylko pośrednio. Wpływa to na złożoność systemu. Zapach usuwa przekształcenie Encapsulate Classes with Factory (81). Nie każda klasa, z której korzystają klienty, musi być publiczna (nie musi mieć publicznego konstruktora). Do niektórych klas można odwoływać się poprzez ogólniejsze interfejsy. Warunkiem jest właśnie ukrycie konstruktorów klasy i budowanie egzemplarzy za pośrednictwem klasy Factory. Solution Sprawl (rozrzucanie rozwiązania) Gdy kod i (lub) dane związane z pewnym zakresem odpowiedzialności są rozrzucone po wielu klasach, czuć zapach Solution Sprawl. Jest on często wynikiem szybkiego dodawania funkcji do systemu, z pominięciem niezbędnego etapu upraszczania i konsolidowania projektu. Solution Sprawl to brat bliźniak Shotgun Surgery (chirurgia śrutówką), zapachu opisanego przez Fowlera i Becka [F]. Piszą oni, że poczujemy go, gdy okaże się, że wprowadzenie lub zmodyfikowanie pewnej funkcji wymaga zmian w wielu różnych miejscach w kodzie. Oba zapachy to ten sam problem, choć nieco inaczej rozpoznawany. Solution Sprawl pojawia się w trakcie obserwacji i analizy, a Shotgun Surgery w trakcie pracy z kodem. Move Creation Knowledge to Factory (71) to przekształcenie, które rozwiązuje problem rozrzuconego kodu tworzenia egzemplarzy. Alternative Class with Different Interfaces (podobna klasa o innych interfejsach) Alternative Class with Different Interfaces Kolejny zapach opisany przez Fowlera i Becka [F] pojawia się, gdy dwie podobne klasy mają różne interfejsy. Jeżeli w projekcie znajdziemy dwie zbliżone klasy, można często przekształcić je tak, aby korzystały ze wspólnego interfejsu. W pewnych przypadkach nie można bezpośrednio zmienić interfejsu klasy, bo nie można modyfikować jej kodu. Najbardziej typową sytuacją tego rodzaju jest korzystanie z różnego rodzaju bibliotek. Wówczas możemy skorzystać z przekształcenia Unify Interfaces with Adapter (223).
12 52 4. ZAPACHY KODU Lazy Class (leniwa klasa) Fowler i Beck piszą o tym zapachu: Klasa, która nie zarabia na siebie, powinna zostać usunięta [F, 83]. Jakże często można spotkać Singleton [DP], który nie zarabia na siebie. W rzeczywistości schemat Singleton może być dodatkowym kosztem, prowadzącym do pogłębienia uzależnienia od danych udostępnianych globalnie. Inline Singleton (111) to szybka i humanitarna metoda eliminacji singletonów. Large Class (duża klasa) Fowler i Beck [F] zauważają, że obecność zbyt wielu zmiennych egzemplarza sygnalizuje zazwyczaj, że klasa ma zbyt wiele obowiązków. Duże klasy mają zazwyczaj zbyt wiele zakresów odpowiedzialności. Extract Class [F] i Extract Subclass [F] to podstawowe przekształcenia usuwające ten zapach i prowadzące do przeniesienia odpowiedzialności. Są one elementem opisywanych w tej książce złożonych przekształceń ukierunkowanych na wzorce. Ich celem jest zmniejszenie rozmiaru klasy. Replace Conditional Dispatcher with Command (177) to przekształcenie wyłączające zachowania do osobnych klas Command [DP]. Jeżeli klasa realizuje wiele zachowań w odpowiedzi na bardzo zróżnicowane żądania, jej rozmiar można w ten sposób zmniejszyć kilkakrotnie. Replace State-Altering Conditionals with State (154) pozwala zmniejszyć dużą klasę ze znaczną ilością kodu zmieniającego jej stan poprzez wprowadzenie delegacji do rodziny klas State [DP]. Przekształcenie Replace Implicit Language with Interpreter (243) zmniejsza rozmiar klasy w wyniku przekształcenia pełnego powtórzeń kodu, który w istocie emuluje pewien język, w klasę Interpreter [DP]. Switch Statements (instrukcje switch) Instrukcje switch (i równoważne struktury if...elseif...elseif...) nie są z gruntu złe. Są szkodliwe tylko wtedy, gdy sprawiają, że kod jest nadmiernie skomplikowany lub sztywny. Wówczas powinniśmy dążyć do przekształcenia instrukcji warunkowych w konstrukcję opartą na obiektach. Przekształcenie Replace Conditional Dispatcher with Command (177) to opis rozbijania dużej instrukcji switch na kolekcję obiektów Command [DP], które mogą być wywoływane bez korzystania z wyrażeń warunkowych. Przekształcenie Move Accumulation to Visitor (286) to przykład programu, w którym instrukcje switch służą do pobierania danych z obiektów, które różnią się interfejsami. Wprowadzenie wzorca Visitor [DP] umożliwia usunięcie instrukcji warunkowych i zapewnia większą ogólność kodu. Combinatorial Explosion (eksplozja kombinatoryczna) Combinatorial Explosion Ten zapach to subtelny przypadek duplikacji kodu. Pojawia się, gdy w wielu miejscach kodu implementowane są te same czynności, operujące na różnych rodzajach lub ilościach danych albo obiektów.
13 ODDBALL SOLUTION 53 Przykładem może być zbiór metod do generowania zapytań. Każda z nich wykonuje zapytanie oparte na pewnych warunkach i danych. Aby zapewnić obsługę większej liczby wyspecjalizowanych zapytań, dodajemy nowe metody. W efekcie uzyskujemy eksplozję metod obsługujących najróżniejsze operacje dostępu do bazy danych niejawny język zapytań. Metody te, jak i cały zapach, można usunąć przekształceniem Replace Implicit Language with Interpreter (243). Oddball Solution (osobliwe rozwiązanie) Oddball Solution Gdy pewien problem jest rozwiązywany w systemie w określony sposób, ale w pewnym miejscu pojawia się inne podejście do tej samej kwestii, jedno z nich należy uznać za niespójne. Ten zapach sygnalizuje zazwyczaj subtelne powtórzenia kodu. Usuwanie tego rodzaju duplikacji rozpoczynamy od wybrania jednego z rozwiązań. W pewnych przypadkach to, które jest używane rzadziej, może być w istocie lepsze. Można wówczas przeprowadzić przekształcenie Substitute Algorithm [F], prowadzące do ujednolicenia rozwiązania w całym systemie. Gdy rozwiązanie jest stosowane spójnie, pojawia się możliwość zgromadzenia przetwarzania w jednym miejscu. Zapach Oddball Solution pojawia się często tam, gdzie istnieje pewna uznana metoda wywoływania zbioru klas, których interfejsy nie są jednolite. Można wówczas rozważyć przekształcenia Unify Interfaces with Adapter (223) i osłonić klasy wspólnym interfejsem. Wówczas odkryjemy nowe możliwości usunięcia duplikacji kodu.
Praca z kodem legacy : strategie, naprawa błędów, refaktoryzacja oraz
Program szkolenia: Praca z kodem legacy : strategie, naprawa błędów, refaktoryzacja oraz Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Praca z kodem legacy : strategie, naprawa
Wprowadzenie do programowania aplikacji mobilnych
Wprowadzenie do programowania aplikacji mobilnych dr Przemysław Juszczuk dr Przemysław Juszczuk Trochę historii Idea wzorców projektowych wywodzi się jeszcze z wczesnych lat osiemdziesiątych ubiegłego
Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?
Problemy projektowania obiektowego Czy podobne problemy można rozwiązywac w podobny sposób? Czy te problemy można przedstawić w abstrakcyjny sposób, tak aby były pomocne w tworzeniu rozwiązań w różnych
Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz
Wzorce projektowe ArrayList DataGridView Aplikacja i zdarzenia Paweł Chodkiewicz Wzorzec uniwersalne rozwiązanie często powtarzających się problemów. Wzorzec opisuje problem, który powtarza się wielokrotnie
Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1)
Analiza i projektowanie obiektowe 2016/2017 Wykład 11: Zaawansowane wzorce projektowe (1) Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Wzorce projektowe
Zaawansowane programowanie obiektowe - wykład 5
Zaawansowane programowanie obiektowe - wykład 5 dr Piotr Jastrzębski (czynnościowe) opisują zachowanie obiektów, komunikację pomiędzy nimi i ich odpowiedzialność. Interpreter Iterator (kursor) Łańcuch
Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.
Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop. 2017 Spis treści Wstęp 15 Podziękowania 23 Listy kontrolne 25 Tabele 27 Rysunki 29 Część I Proces budowy oprogramowania
Wzorce projektowe i refaktoryzacja
Wzorce projektowe i refaktoryzacja Paweł Kozioł p.koziol@students.mimuw.edu.pl 18.01.2005 Moja praca magisterska Narzędzie dla środowiska Eclipse wspierające stosowanie wzorców projektowych J2EE Prowadzący:
Wzorce 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
Technologia Programowania 2016/2017 Wykład 4
Technologia Programowania 2016/2017 Wykład 4 Wzorce projektowe GoF Jakub Lemiesz Wzorce GRASP a wzorce GoF Znamy 9 wzorców GRASP ogólne zasady Na GRASP opierają się klasyczne wzorce GoF Na wzorcach GoF
Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń
Projektowanie obiektowe Wzorce projektowe Gang of Four Wzorce rozszerzeń 1 Roadmap Decorator Iterator Visitor 2 Wzorce rozszerzeń Mają na celu uczynić proces rozszerzania kodu bardziej czytelnym, prostym
Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych
Projektowanie obiektowe Wzorce projektowe Wprowadzenie do wzorców projektowych 1 Zagadnienia Katalog wzorców projektowych wg Gang of Four Zasady projektowania obiektowego S O L I D MVC - Model-Widok-Kontroler
Programowanie 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
Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton
Dzisiejszy wykład Wzorce projektowe Visitor Client-Server Factory Singleton 1 Wzorzec projektowy Wzorzec nazwana generalizacja opisująca elementy i relacje rozwiązania powszechnie występującego problemu
Program szkolenia: Wzorce projektowe i ich implementacja w C# oraz testowanie automatyczne
Program szkolenia: Wzorce projektowe i ich implementacja w C# oraz testowanie automatyczne Informacje ogólne Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Wzorce projektowe i ich implementacja
Wzorce 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.
Wzorce projektowe. dr inż. Marcin Pietroo
Wzorce projektowe dr inż. Marcin Pietroo Iterator czynnościowy wzorzec projektowy (obiektowy), którego celem jest zapewnienie sekwencyjnego dostępu do podobiektów zgrupowanych w większym obiekcie (np.
Zaawansowane programowanie w C++ (PCP)
Zaawansowane programowanie w C++ (PCP) Wykład 4 - wzorce projektowe. dr inż. Robert Nowak - p. 1/18 Powtórzenie klasy autonomiczne tworzenie nowych typów: dziedziczenie i agregacja dziedziczenie: przedefiniowywanie
Wzorce projektowe Michał Węgorek
Wzorce projektowe Michał Węgorek Wzorce projektowe Plan prezentacji Co to jest i po co to jest? Podział Najczęściej spotykane wzorce Bibliografia Co to jest i po co to jest? Wzorzec projektowy (ang. Design
Wzorce projektowe cz. I. Wzorce projektowe cz. I 1/33
Wzorce projektowe cz. I Wzorce projektowe cz. I 1/33 Wzorce projektowe cz. I 2/33 Historia Wzorce projektowe: wywodzą się z wzorców projektowych w architekturze termin wzorca projektowego wprowadzony do
Komentarz. W poszukiwaniu zaginionego wzorca
Komentarz W poszukiwaniu zaginionego wzorca W poszukiwaniu zaginionego wzorca Administrator nadal z powodzeniem używa tego samego programu do zarządzania usługami. Aczkolwiek pojawia się coraz więcej systemów
Wzorce 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ół
Analiza 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:
Projektowanie oprogramowania: wzorce architektoniczne i projektowe
Projektowanie oprogramowania: wzorce architektoniczne i projektowe Ogólne zasady projektowania Nie staraj się zadziwić innych. Rzeczy oczywiste rób w sposób oczywisty. Nie rozmawiaj z nieznajomym. Projekt
Smarty PHP. Leksykon kieszonkowy
IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK
problem w określonym kontekście siły istotę jego rozwiązania
Wzorzec projektowy Christopher Alexander: Wzorzec to sprawdzona koncepcja, która opisuje problem powtarzający się wielokrotnie w określonym kontekście, działające na niego siły, oraz podaje istotę jego
Technologia Programowania 2016/2017 Wykład 5
Technologia Programowania 2016/2017 Wykład 5 Wzorce GoF Jakub Lemiesz Wzorce GoF Kreacyjne Builder Singleton Simple Factory Factory Method Abstract Factory Prototype Strukturalne Adapter Decorator Proxy
Projektowanie 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
Programowanie Zespołowe
Programowanie Zespołowe Dobre Praktyki dr Rafał Skinderowicz mgr inż. Michał Maliszewski Parafrazując klasyka: Jeśli piszesz w Javie pisz w Javie - Rafał Ciepiela Principal Software Developer Cadence Design
Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki 2011. Promotor dr inż. Paweł Figat
Grzegorz Ruciński Warszawska Wyższa Szkoła Informatyki 2011 Promotor dr inż. Paweł Figat Cel i hipoteza pracy Wprowadzenie do tematu Przedstawienie porównywanych rozwiązań Przedstawienie zalet i wad porównywanych
Program szkolenia: Wzorce projektowe w C++
Program szkolenia: Wzorce projektowe w C++ Informacje: Nazwa: Wzorce projektowe w C++ Kod: CCPP-craft-C++ Patterns Kategoria: Craftsmanship dla programistów C i C ++ Grupa docelowa: developerzy Czas trwania:
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?
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
NAJLEPSZE STRATEGIE SKUTECZNYCH PROGRAMISTÓW. TECHNIKI PRACY Z KODEM KOD: NSKOD
NAJLEPSZE STRATEGIE SKUTECZNYCH PROGRAMISTÓW. TECHNIKI PRACY Z KODEM KOD: NSKOD OPIS Praca programisty oprócz umiejętności i wiedzy technicznej, wymaga również doskonałej pracy z kodem. Umiejętności te
AutoCAD 2005. Pierwsze kroki
IDZ DO PRZYK ADOWY ROZDZIA SPIS TRE CI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG AutoCAD 2005. Pierwsze kroki Autor: Andrzej Pikoñ ISBN: 83-7361-581-4 Format: B5, stron: 216 TWÓJ KOSZYK CENNIK
znajdował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
Etap implementacji. Refaktoryzacja
Etap implementacji Refaktoryzacja Koncepcja refaktoryzacji Termin refaktoryzacja (ang. Refactoring) definiuje się jako mechanizm zmiany struktury kodu bez zmiany jego zachowania (funkcjonalności). Celem
Programowanie obiektowe - 1.
Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która
Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV
Piotr Jarosik, Kamil Jaworski, Dominik Olędzki, Anna Stępień Dokumentacja wstępna TIN Rozproszone repozytorium oparte o WebDAV 1. Wstęp Celem projektu jest zaimplementowanie rozproszonego repozytorium
Testowanie oprogramowania Wzorce projektowe
Testowanie oprogramowania Wzorce projektowe 1/66 Testowanie oprogramowania Wzorce projektowe dr inż. Grzegorz Michalski 17 listopada 2015 Testowanie oprogramowania Wzorce projektowe 2/66 Plan wykładu Agenda
Ogólne zasady projektowania algorytmów i programowania
Ogólne zasady projektowania algorytmów i programowania Pracuj nad właściwie sformułowanym problemem dokładna analiza nawet małego zadania może prowadzić do ogromnych korzyści praktycznych: skrócenia długości
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017 1 Wzorce podstawowe 1.1 Interface vs Abstract class class InterfaceAbstractClass
Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład VII - semestr III Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Wytwarzanie oprogramowania Model tworzenia oprogramowania
ECDL 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
Metody getter https://www.python-course.eu/python3_object_oriented_programming.php 0_class http://interactivepython.org/runestone/static/pythonds/index.html https://www.cs.auckland.ac.nz/compsci105s1c/lectures/
Projektowanie 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?
P³atnik. Przewodnik IDZ DO KATALOG KSI EK TWÓJ KOSZYK CENNIK I INFORMACJE CZYTELNIA PRZYK ADOWY ROZDZIA SPIS TREŒCI KATALOG ONLINE
IDZ DO PRZYK ADOWY ROZDZIA SPIS TREŒCI KATALOG KSI EK KATALOG ONLINE P³atnik. Przewodnik Autor: Adam Józefiok ISBN: 83-246-0404-9 Format: A5, stron: 288 ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK DODAJ DO KOSZYKA
Wypoż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
Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce odpowiedzialności
Projektowanie obiektowe Wzorce projektowe Gang of Four Wzorce odpowiedzialności 1 Roadmap Singleton Observer Mediator Proxy Flyweight 2 Wzorce odpowiedzialności Udostępniają techniki centralizacji, delegowania
Programowanie obiektowe
Programowanie obiektowe Metody statyczne i klasowe Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) PO w. VI Jesień 2013 1 / 23 W poprzednich odcinkach... Klasy kategorie obiektów Przynależność
Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)
Program szkolenia: Całościowe podejście do testowania automatycznego dla programistów Ruby (TDD, BDD, Spec. by Example, wzorce, narzędzia) Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania:
Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka
1 Omówienie wzorców wykorzystywanych w Prism 5.0 Dominika Różycka Czym jest wzorzec projektowy? 2 3 Wzorzec projektowy 1. Uniwersalne i sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych
Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35
Wzorce projektowe cz. II Wzorce projektowe cz. II 1/35 Wzorce projektowe cz. II 2/35 Iterator Przeznaczenie Wzorzec zapewnia sekwencyjny dostęp do elementów obiektu zagregowanego bez ujawniania jego reprezentacji
Matematyka z komputerem dla gimnazjum
IDZ DO PRZYK ADOWY ROZDZIA KATALOG KSI EK ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK CENNIK I INFORMACJE ZAMÓW INFORMACJE O NOWO CIACH ZAMÓW CENNIK CZYTELNIA SPIS TRE CI KATALOG ONLINE DODAJ DO KOSZYKA FRAGMENTY
Modelowanie i Programowanie Obiektowe
Modelowanie i Programowanie Obiektowe Wykład I: Wstęp 20 październik 2012 Programowanie obiektowe Metodyka wytwarzania oprogramowania Metodyka Metodyka ustandaryzowane dla wybranego obszaru podejście do
Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych
Spis treści 1. Wstęp... 9 1.1. Inżynieria oprogramowania jako proces... 10 1.1.1. Algorytm... 11 1.2. Programowanie w językach wysokiego poziomu... 11 1.3. Obiektowe podejście do programowania... 12 1.3.1.
Wykł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
Wstę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
Plik pobrano z Tytuł: Wzorce projektowe, cz. 2 Strategy Ostatnia aktualizacja:
Wzorce projektowe, cz. 2 Strategy Druga część z serii wpisów o wzorcach projektowych. Dziś omówię wzorzec Strategii (Strategy). Wstęp Strategia jest wzorcem projektowym, który definiuje rodzinę wymiennych
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015 1 Wzorce podstawowe 1.1 Interface vs Abstract class class InterfaceAbstractClass
Typy, klasy typów, składnie w funkcji
Typy, klasy typów, składnie w funkcji Typy w Haskell Każde wyrażenie w Haskell posiada zdefiniowany typ. Dzięki temu już na etapie kompilacji kodu następuje sprawdzenie poprawności kodu i zabezpiecza nas
Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming
Jarosław Kuchta Wymagania jakości w Agile Programming Wady klasycznych metod zapewnienia jakości Duży narzut na dokumentowanie Późne uzyskiwanie konkretnych rezultatów Trudność w odpowiednio wczesnym definiowaniu
Aplikacje w środowisku VBA. Visual Basic for Aplications
Aplikacje w środowisku VBA Visual Basic for Aplications Podstawowe informacje o VBA Visual Basic for Aplications, w skrócie VBA, to język programowania rozwijany przez Microsoft, którego zastosowanie pozwala
Języki i techniki programowania Ćwiczenia 2
Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...
Obiekt 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
Szablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
C++. Æwiczenia zaawansowane
IDZ DO PRZYK ADOWY ROZDZIA SPIS TRECI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG C++. Æwiczenia zaawansowane Autor: Andrzej Stasiewicz ISBN: 83-7361-766-3 Format: B5, stron: 120 TWÓJ KOSZYK
Wzorce projektowe kreacyjne
Wzorce projektowe kreacyjne Krzysztof Ciebiera 14 pa¹dziernika 2005 1 1 Wst p 1.1 Podstawy Opis Ogólny Podstawowe informacje Wzorce kreacyjne sªu» do uabstrakcyjniania procesu tworzenia obiektów. Znaczenie
Temat 20. Techniki algorytmiczne
Realizacja podstawy programowej 5. 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych problemów; 2) formułuje ścisły opis prostej sytuacji problemowej, analizuje
Funkcje i instrukcje języka JavaScript
Funkcje i instrukcje języka JavaScript 1. Cele lekcji a) Wiadomości Uczeń : zna operatory i typy danych języka JavaScript, zna konstrukcję definicji funkcji, zna pętlę If i For, Do i While oraz podaje
Receptury - niezbędnik projektanta i architekta
Program szkolenia: Receptury - niezbędnik projektanta i architekta Informacje ogólne Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Receptury - niezbędnik projektanta i architekta Craft-Receptury
Programowanie 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.
Programowanie obiektowe
Wykład 12 Marcin Młotkowski 16 maja 2018 Plan wykładu 1 Analiza obiektowa Dziedziczenie Dziedziczenie a składanie 2 Marcin Młotkowski 482 / 537 Dziedziczenie Dziedziczenie a składanie Plan wykładu 1 Analiza
Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np
Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami
IDZ DO KATALOG KSI EK TWÓJ KOSZYK CENNIK I INFORMACJE CZYTELNIA PRZYK ADOWY ROZDZIA SPIS TREŒCI KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG
IDZ DO PRZYK ADOWY ROZDZIA KATALOG KSI EK ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK SPIS TREŒCI KATALOG ONLINE DODAJ DO KOSZYKA CENNIK I INFORMACJE ZAMÓW INFORMACJE ONOWOŒCIACH Sudoku. 101 ³amig³ówek dla zaawansowanych
Programowanie 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.
Scenariusz lekcji opartej na programie Program nauczania informatyki w gimnazjum DKW-4014-87/99
Scenariusz lekcji opartej na programie Program nauczania informatyki w gimnazjum DKW-4014-87/99 Techniki algorytmiczne realizowane przy pomocy grafiki żółwia w programie ELI 2,0. Przedmiot: Informatyka
WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)
WZORCE PROJEKTOWE (I) (DESIGN PATTERNS) Maciej Patan Motywacje W wielu dziedzinach nowoczesnej inżynierii napotykamy na następujące zagadnienia: Czy typowe zadania i problemy można rozwiązywać w powtarzalny
Podstawy 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
Cuchnące testy Systematyka, objawy, leczenie. Bartosz Walter
Cuchnące testy Systematyka, objawy, leczenie Bartosz Walter Hmmm. Coś mi tu śmierdzi nie wiem dokładnie co i skąd, ale coś mi nie pasuje Skąd te zapachy? Jeżeli coś niemiło pachnie, to warto zmienić pieluchę
Refaktoryzacja. Na podstawie
Refaktoryzacja Na podstawie www.refactoring.com 1 Plan Refaktoryzacja Co to jest Ogólne zasady i wskazówki Katalog refaktoryzacji Narzędzia (Eclipse, IntelliJ) 2 Co to jest refaktoryzacja Proces zmian
MVVM Light Toolkit. Julita Borkowska
MVVM Light Toolkit Julita Borkowska Czym jest MVVM Light Toolkit? MVVM Light Toolkit został stworzony w 2009 roku przez Laurenta Bugnion. Jest to biblioteka dostarczająca zestaw komponentów pomocnych podczas
Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne
Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wzorce projektowe Wybrane wzorce strukturalne Fasada Facade Pattern 2 Wzorzec Fasada Facade Pattern koncepcja 3 Wzorzec
Widoki zagnieżdżone, layout. 1. Wprowadzenie Repozytoria danych
Widoki zagnieżdżone, layout 1. Wprowadzenie Repozytoria danych Identyczne operacje na danych często się powtarzają np. pobierz książkę. Jeśli zapytanie realizowane jest za każdym razem w metodzie kontrolera
Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI
1 Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI 1. Obliczenia w arkuszu kalkulacyjnym Rozwiązywanie problemów z wykorzystaniem aplikacji komputerowych obliczenia w arkuszu kalkulacyjnym wykonuje
Specyfikowanie wymagań przypadki użycia
Specyfikowanie wymagań przypadki użycia Prowadzący Dr inż. Zofia 1 La1 La2 Forma zajęć - laboratorium Wprowadzenie do laboratorium. Zasady obowiązujące na zajęciach. Wprowadzenie do narzędzi wykorzystywanych
Informatyka klasa III Gimnazjum wymagania na poszczególne oceny
Informatyka klasa III Gimnazjum wymagania na poszczególne oceny Algorytmika i programowanie Rozwiązywanie problemów i podejmowanie decyzji z wykorzystaniem komputera, stosowanie podejścia algorytmicznego
PROJEKTOWANIE. kodowanie implementacja. PROJEKT most pomiędzy specyfikowaniem a kodowaniem
PROJEKTOWANIE określenie wymagań specyfikowanie projektowanie kodowanie implementacja testowanie produkt konserwacja Faza strategiczna Analiza Dokumentacja Instalacja PROJEKT most pomiędzy specyfikowaniem
Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści
Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop. 2017 Spis treści Przedmowa 11 1. Jak w programie 21 Czym jest program? 21 Uruchamianie interpretera języka Python 22 Pierwszy
Zastosowania Robotów Mobilnych
Zastosowania Robotów Mobilnych Temat: Zapoznanie ze środowiskiem Microsoft Robotics Developer Studio na przykładzie prostych problemów nawigacji. 1) Wstęp: Microsoft Robotics Developer Studio jest popularnym
Baza danych sql. 1. Wprowadzenie
Baza danych sql 1. Wprowadzenie Do tej pory operowaliście na listach. W tej instrukcji pokazane zostanie jak stworzyć bazę danych. W zadaniu skorzystamy z edytora graficznego struktury bazy danych, który
Być 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,
Programowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 07 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami tworzenia aplikacji okienkowych w C#. Wprowadzenie teoretyczne. Rozważana w
Tabela wewnętrzna - definicja
ABAP/4 Tabela wewnętrzna - definicja Temporalna tabela przechowywana w pamięci operacyjnej serwera aplikacji Tworzona, wypełniana i modyfikowana jest przez program podczas jego wykonywania i usuwana, gdy
Programowanie 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
Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:
Zakres laboratorium: definiowanie struktur terminologia obiektowa definiowanie klas funkcje składowe klas programy złożone z wielu plików zadania laboratoryjne Laboratorium nr 12 Temat: Struktury, klasy.
SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski -
S t r o n a 2 SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski - Copyright by Artur Niewiarowski 2013 ISBN: 978-83-937802-0-4 - Artur Niewiarowski Self-Publishing - All rights reserved. Wszelkie prawa
Projektowanie Zorientowane na Dziedzinę. ang. Domain Driven Design
Projektowanie Zorientowane na Dziedzinę ang. Domain Driven Design 2 Projektowanie Stan posiadania Przypadki użycia Model dziedziny Operacje systemowe Kontrakty dla operacji systemowych Problemy do rozwiązania
Wykł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
Projektowanie obiektowe oprogramowania Wykład 5 wzorce strukturalne Wiktor Zychla 2016
Projektowanie obiektowe oprogramowania Wykład 5 wzorce strukturalne Wiktor Zychla 2016 1 Wzorce strukturalne 1.1 Facade Motto: uproszczony interfejs dla podsystemu z wieloma interfejsami class SmtpFacade