Komentarz. W poszukiwaniu zaginionego wzorca

Podobne dokumenty
Wprowadzenie do programowania aplikacji mobilnych

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

Wstęp [2/2] Wbrew częstemu przekonaniu, nie są one gotowymi rozwiązaniami, to tylko półprodukty rozwiązania.

Wzorce projektowe. dr inż. Marcin Pietroo

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

Technologia Programowania 2016/2017 Wykład 4

WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)

Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Komentarz. Pieniądze wielkie pieniądze

Wzorce projektowe. dr inż. Marcin Pietroo

Programowanie obiektowe

Programowanie Zespołowe

Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1)

Program szkolenia: Wzorce projektowe i ich implementacja w C# oraz testowanie automatyczne

Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Projektowanie obiektowe Wzorce projektowe

Zaawansowane programowanie w C++ (PCP)

Testowanie oprogramowania Wzorce projektowe

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

Podstawy modelowania programów Kod przedmiotu

Projektowanie obiektowe Wzorce projektowe. Gang of Four Strukturalne wzorce projektowe (Wzorce interfejsów)

Programowanie w języku Java WYKŁAD

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017


Projektowanie oprogramowania: wzorce architektoniczne i projektowe

Wzorce projektowe Michał Węgorek

Technologia Programowania 2016/2017 Wykład 5

Wzorce projektowe i refaktoryzacja

problem w określonym kontekście siły istotę jego rozwiązania

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce odpowiedzialności

Praca z kodem legacy : strategie, naprawa błędów, refaktoryzacja oraz

Wskazówki projektowe. Programowanie Obiektowe Mateusz Cicheński

Historia modeli programowania

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015

Adaptywny kod : zwinne programowanie, wzorce projektowe i SOLID-ne zasady / Gary McLean Hall. Gliwice, cop Spis treści

Programowanie obiektowe - 1.

Wzorce projektowe. dr inż. Marcin Pietroo

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?

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

Inżynieria oprogramowania (Software Engineering) Wykład 1

PRZEWODNIK PO PRZEDMIOCIE

1) Wzorzec projektowy Adapter. Zastosowanie:

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

szkolenia pod drzewem Wybrane Techniki XP bnd 2008 Tomasz Włodarek. Materiał udostępniany na podstawie licencji Creative Commons (by-nc-nd) 1.00.

Bezpieczeństwo systemów komputerowych

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

NAJLEPSZE STRATEGIE SKUTECZNYCH PROGRAMISTÓW. TECHNIKI PRACY Z KODEM KOD: NSKOD

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Plik pobrano z Tytuł: Wzorce projektowe, cz. 2 Strategy Ostatnia aktualizacja:

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Programowanie w Javie nazwa przedmiotu SYLABUS A. Informacje ogólne

Zapisywanie algorytmów w języku programowania

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Wzorce projektowe cz. I. Wzorce projektowe cz. I 1/33

Wymagania Uczestnik szkolenia musi mieć możliwość korzystania z Internetu. Kurs nie zakłada znajomości podstaw programowania.

Modelowanie. Wykład 1: Wprowadzenie do Modelowania i języka UML. Anna Kulig

Wprowadzenie niektórych zagadnień OOP oraz wzorce operacyjne

Język programowania. Andrzej Bobyk

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Program szkolenia: Receptury testowania automatycznego - problemy, strategie, taktyki, techniki, narzędzia

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Receptury - niezbędnik projektanta i architekta

Ogólne zasady projektowania algorytmów i programowania

PRZEWODNIK PO PRZEDMIOCIE

Programowanie i projektowanie obiektowe

K_W04 K_W04 K_W04. Opis

I Międzyszkolny Konkurs Matematyczny dla uczniów szkół podstawowych w roku szkolnym 2015/2016

Wydział Ekonomiczno-Informatyczny w Wilnie. 1. Podstawy programowania strukturalnego (C) 2. Wstęp do programowania obiektowego

Projektowanie oprogramowania. Termin zajęć: poniedziałek, a podstawie materiału ze strony.

PRZEWODNIK PO PRZEDMIOCIE

Przykłady wybranych fragmentów prac egzaminacyjnych z komentarzami Technik technologii drewna 311[32]

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Semestr letni Brak Tak

Projektowanie, tworzenie aplikacji mobilnych na platformie Android

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

Typy, klasy typów, składnie w funkcji

Wzorce logiki dziedziny

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

PROJEKTOWANIE. kodowanie implementacja. PROJEKT most pomiędzy specyfikowaniem a kodowaniem

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

Lab 9 Podstawy Programowania

Metoda Karnaugh. B A BC A

Programowanie obiektowe

ECDL Podstawy programowania Sylabus - wersja 1.0

Programowanie obiektowe

Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming

Technologie obiektowe

Programowanie w Baltie klasa VII

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Zad. 7: Fabryka obiektów i singleton

Transkrypt:

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 oraz różnorodnych usług. Z tego względu zarządzanie zmianami w programie staje się coraz bardziej uporczywe i nieprzewidywalne. Szczęśliwie pojawiło się kilku poszukiwaczy, którzy odnaleźli wzorce pozwalające na radykalne zmiany w tej materii. Miejmy nadzieje, że inżynierowie szybko wprowadzą poprawki. Dzięki za udział w poszukiwaniach! Co było do zrobienia? Drugie zadanie przedstawiało zagadnienie dotyczące zarządzania zmianami w kodzie źródłowym programu oraz związanym z tym nieustannym procesem refaktoryzacji. Głównym zadaniem uczestników było zlokalizowanie w kodzie newralgicznego fragmentu, który powodował największe niedogodności przy wprowadzaniu obsługi instalacji usług na nowych systemach. Następnie należało wyodrębnić zaproponować (najlepiej z uzasadnieniem) - wzorzec projektowy, który usuwał te niedogodności. Dodatkowo zadanie umożliwiało refaktoryzację jako potwierdzenie własnej tezy. W trakcie refaktoryzacji można było użyć dowolnej techniki, jednak tak aby zachować istniejącą funkcjonalność. Było również możliwe dobieranie dodatkowych wzorców. Każdy dodatkowy wzorzec, rzecz jasna, rozsądnie zaaplikowany pozwalał na zwiększenie punktacji. Rozwiązanie Głównym problemem przy wprowadzaniu nowych usług i installer'ów był rozrastający się kod w klasie ServiceInstaller oraz narastająca lawinowo ilość kolejnych installer'ów. W ServiceInstaller należało zamienić blok 'if...else' na generyczną pętlę, która nie ulegała by modyfikacji przy wprowadzaniu nowych elementów. Natomiast installer'y należałoby ukryć pod warstwą abstrakcji. Zdecydowanie najlepiej w takiej sytuacji pasuje wzorzec Visitor, gdzie visitorami są poszczególne installer'y natomiast komponenty to elementy akceptujące visitora. Podpowiedzią był fakt, że na każdym komponencie serwisu wywoływana jest taka sama operacja - install, zaś konkretna implementacja jest wybierana w trakcie wykonywania programu. Dzięki temu unikamy bezpośredniej zależności komponent - installer, a zyskujemy dowolność w dobieraniu installerów mający wykonać operację instalacji. Innym wzorcem podobnie realizującym ten schemat jest wzorzec Bridge. Przy czym należałoby uzyskać więcej szczegółów na tematu rozwoju programu, aby dokonać wyboru pomiędzy Bridge a Visitor.

Jak ocenialiśmy Oceniając zadanie posługiwaliśmy się trzema kryteriami: 1. Trafność zaproponowanego wzorca projektowego (maksymalnie 50pkt.) Punktacja wzorców: Visitor 40pkt. Bridge 30pkt. Strategy 10pkt. Mediator 10pkt. Command 8pkt. Builder, Abstract Factory, Factory 4pkt Dodatkową punktacją były objęte odpowiedzi wraz z próbą uzasadnienia lub przekonującym uzasadnieniem: przekonujące uzasadnienie 10pkt. próba uzasadnienia 5pkt. 2. Refaktoryzacja (maksymalnie 80pkt.) Refaktoryzacja oryginalnego kodu była potwierdzeniem tezy stawianej w punkcie pierwszym. Dlatego punktami były objęte: zmiany w kodzie przeprowadzone zgodnie z założeniami Najwięcej otrzymywały rozwiązania ze wzorcem Visitor (60pkt.). Następnie Bridge(40pkt.). Pozostałe wzorce były punktowane do 20pkt. rozsądne zastosowanie dodatkowych wzorców. Za każdą dodatkową refaktoryzację po 10pkt. łatwość wprowadzania nowych elementów po refaktoryzacji. 10pkt. próby minimalizacji ilości klas dla nowych elementów. 1pkt. zachowanie istniejącej funkcjonalności. 10pkt. 3. Punkty extra (maksymalnie 20pkt.) Za wzorcowe, nietypowe, ponadprzeciętne rozwiązania.

Jak poszło? Wszystkich nadesłanych odpowiedzi 35 Najwięcej uzyskanych punktów 140 Najmniej uzyskanych punktów 0 Suma punktów ze wszystkich odpowiedzi 1187 Średnia arytmetyczna 33.91 Większość nadesłanych rozwiązań była zgodna z zadeklarowanym wzorcem projektowym. Niestety pojawiło się tylko kilka, które naprawdę usuwały niedogodności w oryginalnym kodzie. Były to najwyżej punktowane rozwiązania z refaktoryzacją do Visitor lub Bridge. Autorzy tych odpowiedzi wykazali się zrozumieniem zagadnienia oraz dobrą, praktyczną znajomością wzorców. Pozostałe najczęściej typowane to wzorce kreacyjne, tj. Abstract Factory, Builder, Factory Method, Factory nie rozwiązywały one jednak problemu, a z reguły przesuwały go w inne miejsce kodu. Wnioski Najbardziej istotnym elementem w procesie refaktoryzacji jest właściwe rozpoznanie schematu według którego obiekty komunikują się ze sobą. Jest to sztuka wymagająca wprawy, doświadczenia i dokładnej znajomości wzorców. Niewłaściwe dopasowanie wzorca do problematyki może doprowadzić do większej komplikacji i bardziej nieczytelnego kodu. Późniejsze modyfikacje mogą okazać się zmorą. Niestety większość uczestników nietrafnie wytypowała schemat. Co w efekcie dało kod nadal operujący na badaniu typu obiektu (np. instanceof w Java) z tym, że przesunięty do innej klasy i dodatkowo obłożony wyjątkami i rzutowaniem. Liczymy na to, że treść zadania nakłoni do zgłębienia tematu wzorców projektowych. Dodatkowo podkreślamy, że poza najczęściej stosowanymi wzorcami kreacyjnymi istnieją również inne wzorce. Między innymi behawioralne (np. Visitor) i strukturalne (np. Bridge). Zachęcamy do zapoznania się z nimi oraz częstych ćwiczeń. Pamiętajcie - programowanie to rzemiosło. Bez treningu nie da rady osiągnąć poziomu Master

Ciekawostki W jednym z rozwiązań pojawiła się pętla w zależnościach. Kod w C++. Pojawiały się próby ukrycia niezmienionego bloku 'if...else' z ServiceInstaller w innych klasach. 'instanceof' w ServiceInstaller zastąpiony przez Class.forName(className).newInstance() + rzutowanie. Kod w Java. Dostaliśmy rozwiązanie zadania z repozytorium git. A wraz z nim cała historia zmian. Bardzo fajnie. Pamiętajcie tylko, że jeżeli pracujecie w rządowych lub wojskowych instytucjach nie powtarzajcie tego! Najlepsze przykłady refaktoryzacji zaproponowali dwaj programiści C++ (do Visitor) oraz jeden Java (do Bridge). Były to jedyne rozwiązania całkowicie i świadomie rozwiązujące problem.