Zasady projektowania obiektowego

Podobne dokumenty
Projektowanie obiektowe oprogramowania Wykład 4 - SOLID GRASP Wiktor Zychla 2012

Wykład 4. Projektowanie. MIS n Inżynieria oprogramowania Październik 2014

Wykład 5. Inżynieria oprogramowania MIS s MIO s MIS n Listopad 2014

Projektowanie obiektowe oprogramowania Wykład 3 - SOLID GRASP Wiktor Zychla 2016

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

Projektowanie obiektowe oprogramowania Wykład 3 - SOLID GRASP Wiktor Zychla 2017

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

Wprowadzenie do programowania aplikacji mobilnych

Projektowanie obiektowe oprogramowania Wykład 3 - SOLID GRASP Wiktor Zychla 2018

Techniki projektowania wzorce projektowe

Projektowanie aplikacji JEE z użyciem wzorców projektowych i notacji UML

Wzorce projektowe. dr inż. Marcin Pietroo

Programowanie obiektowe

Wskazówki projektowe. Programowanie Obiektowe Mateusz Cicheński

Programowanie Zespołowe

Analiza i projektowanie obiektowe 2016/2017. Wykład 8: Przypisywanie obiektom odpowiedzialności (2)

Program szkolenia: Wzorce projektowe w C++

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

Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka

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

Projektowanie obiektowe Wzorce projektowe

Programowanie zorientowane obiektowo. Mateusz Kołecki

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Projektowanie i architektura frameworka w języku PHP. Tomasz P.F. Kowalczyk

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

Technologia Programowania 2016/2017 Wykład 5

Dobry start do profesjonalnego programowania w C++ dla. początkujących programistów

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

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

Programowanie w języku Java WYKŁAD

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

Oracle PL/SQL. Paweł Rajba.

Projektowanie logiki aplikacji

Zaawansowane programowanie w C++ (PCP)

Technologia Programowania 2016/2017 Wykład 4

Program szkolenia: Zaawansowane programowanie w C++

Podstawy modelowania programów Kod przedmiotu

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

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

Wzorce projektowe. dr inż. Marcin Pietroo


Paweł Rajba

Technologia programowania

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

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

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

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

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

PHP 5 język obiektowy

Programowanie w języku Java WYKŁAD

Diagramy klas. dr Jarosław Skaruz

Szczególne problemy projektowania aplikacji internetowych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

Wzorce logiki dziedziny

SOLIDnie śmierdzący kod.

Program szkolenia: Wzorce projektowe i architektoniczne oraz efektywne techniki Object Oriented Design dla projektantów systemów

Projektowanie Zorientowane na Dziedzinę. ang. Domain Driven Design

Analiza i projektowanie aplikacji Java

Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35

Programowanie komponentowe 5

Technologia Programowania 2016/2017 Wykład 6

Spring Framework - wprowadzenie i zagadnienia zaawansowane

Wzorce projektowe i refaktoryzacja

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

Wypożyczalnia VIDEO. Technologie obiektowe

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Projektowanie obiektowe oprogramowania Wykład 5 wzorce strukturalne Wiktor Zychla 2016

Dokumentacja do API Javy.

Programowanie obiektowe

Zagadnienia (1/3) Data-flow diagramy przepływów danych ERD diagramy związków encji Diagramy obiektowe w UML (ang. Unified Modeling Language)

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Dobre zasady tworzenia oprogramowania w kropelce

Podstawy programowania III WYKŁAD 4

Programowanie obiektowe

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

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

Zaawansowane programowanie obiektowe - wykład 5

MVVM Light Toolkit. Julita Borkowska

Technologie obiektowe

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

Programowanie obiektowe

Technologia programowania

Aplikacje w środowisku Java

Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1

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

UML cz. II. UML cz. II 1/38

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

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

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

Receptury - niezbędnik projektanta i architekta

Wzorce projektowe warstwy danych

WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)

Zaawansowane programowanie w języku C++ Klasy w C++

PRZEWODNIK PO PRZEDMIOCIE

Inżynieria Wytwarzania Systemów Wbudowanych

Modelowanie i analiza. warstwy biznesowej aplikacji

Projektowanie obiektowe oprogramowania Wykład 7 wzorce czynnościowe (2) Wiktor Zychla 2018

Transkrypt:

Zasady projektowania obiektowego

Nie każdy, kto ma młotek, może nazywać się architektem. wzorce projektowe UML SOLID Robert C. Martin Strategia w metodyce Agile GRASP Responsibility Driven-Design 2

S O L I D SOLID Motivational Posters, by Derick Bailey, is licensed under a Creative Commons Attribution- Share Alike 3.0 United States License. 4

Single Responsibility Principle Open Closed Principle Liskov Substitution Principle Interface Segregation Principle Dependency Inversion Principle 5

Obiekt, który osłania wiersz tabeli lub widoku bazy danych, hermetyzuje operacje dostępu i realizuje elementy logiki dziedziny. 6

7

SRP 8

Ile i jakie odpowiedzialności spoczywają na obiekcie Person? Czy ten wzorzec spełnia zasadę SRP? 9

10

Co pozostało zamknięte, a jaki aspekt implementacji został otwarty? 11

Otwarcie na wszystkie rodzaje zmian nie jest możliwe. Decyzja programisty w tym zakresie może okazać się niewłaściwa. Metodyka Agile może pomóc ujawnić istotne pola dla zmian na wczesnym etapie. Można wtedy dokonać otwarcia pod kątem tych zmian (refaktoryzacja). 12

13

Bazą dobrego projektu obiektowego jest jasno zdefiniowany i spójny kontrakt między współpracującymi obiektami. 14

Interfejs PersonRecordAdapter określa kontrakt czyli odpowiedzialność klas go implementujących (i ich podklas). 15

16

Interfejs klasy Person łączy w sobie kilka odpowiedzialności (dane, logika podatkowa, operacje na bazie danych) obarczając potencjalnych klientów każdą z nich. 17

GUS zależny wyłącznie od zmian w interfejsie PersonBase. 18

19

Komponenty wyższych warstw nie powinny zależeć od niższych. Obydwa powinny zależeć od abstrakcji. Szczegóły powinny być uzależnione od abstrakcji. Nie odwrotnie! Robert C. Martin 20

class DependencyManager { static Policy getpolicy() { UtilityInterface utility = new UtilityLayer(); MechanismInterface mechanism = new MechanismLayer(utility); return new PolicyLayer(mechanism) } } class MechanismLayer implements MechanismInterface { UtilityInterface utility; } MechanismLayer(UtilityInterface utility) { this.utility = utility; } 21

Podstawowe metody realizacji Dependency Injection wykorzystują: settery i konstruktory. Ich wywołanie może być automatyczne na podstawie określonej konfiguracji: kontenery IoC frameworka Spring, kontenery Pico. Istnieje też metoda wstrzykiwania zależności interface injection (pół automatyczna). 22

Jak przetestować działanie metod insert i update oraz metod od nich zależnych w przypadku braku bazy danych? 23

General Responsibility Assignment Software Patterns Craig Larman - UML i wzorce projektowe. Analiza i projektowanie obiektowe oraz iteracyjny model wytwarzania aplikacji, Helion 2011

Kontrakt lub zobowiązanie klasyfikatora Zobowiązania związane z działaniem, to np.: wykonywanie pewnej czynności przez obiekt, jak tworzenie innego obiektu lub przeprowadzanie obliczeń inicjalizacja czynności wykonywanych przez inny obiekt (zmuszenie innego obiektu do wykonania czynności) kontrola i koordynacja czynności wykonywanych przez inne obiekty Zobowiązania związane z wiedzą, to np.: znajomość prywatnych, ukrytych danych, wiedza o obiektach powiązanych, wiedza nt. możliwości operacyjnych obiektu. 25

Information Expert Creator Controller Low Coupling wzorzec ewaluacyjny High Cohesion wzorzec ewaluacyjny Polymorphism Pure Fabrication Indirection Protected Variations 26

Na jakiej zasadzie przydzielać obiektom zobowiązania? Klasie, która posiada informacje niezbędne do realizacji zobowiązania. Powiązane z: Low Coupling High Cohesion 27

Kto powinien być odpowiedzialny za utworzenie nowej instancji pewnej klasy A? Klasa B, jeśli spełniony jest, któryś z warunków: B zawiera A lub agreguje A (kompozycja), B zapamiętuje A, B bezpośrednio używa A, B posiada dane inicjalizacyjne dla A. Powiązane z: Low Coupling Factory Method i Abstract Factory 28

Który z obiektów poza warstwą UI odbiera żądania operacji systemowych i kontroluje (koordynuje) jej wykonanie? Kontroler fasadowy obiekt reprezentujący cały system lub ważny podsystem. Kontroler sesyjny klasa reprezentująca scenariusz przypadku użycia. Powiązane z: Command, Facade Pure Fabrication 29

Jak zmniejszyć liczbę zależności i zasięg zmian, a zwiększyć możliwość ponownego wykorzystania kodu? Przydziel odpowiedzialność tak, by zlikwidować niepotrzebne sprzężenia (powiązania). Skorzystaj z tej zasady podczas oceniania alternatywnych rozwiązań. Powiązane z: Protected Variations 30

Jak sprawić by obiekty miały jasny cel, były zrozumiałe i łatwe w utrzymaniu, a przy okazji zmniejszyć sprzężenie? Przydziel odpowiedzialność tak, by zachować wysoką spójność obiektów. Skorzystaj z tej zasady podczas oceniania alternatywnych rozwiązań. Powiązane z: Low Coupling S o l I d 31

Jak postąpić, gdy zachowanie różni się w zależności od typu? Jeśli powiązane ze sobą możliwości lub zachowania różnią się w zależności od typu (klasy), przydziel zobowiązanie związane z danym zachowaniem za pomocą operacji polimorficznych tym typom, które różnią się zachowaniem. Powiązane z: Protected Variations Wiele wzorców GoF 32

Jaki obiekt powinien otrzymać zobowiązanie, jeśli nie chcemy pogwałcić zasad High Cohesion i Low Coupling (i innych), ale nie odpowiadają nam rozwiązania oferowane np. przez Expert? Przydziel spójny zestaw zobowiązań sztucznej lub pomocniczej klasie, która nie reprezentuje konceptu z dziedziny problemu. Wiele wzorców to przykłady Pure Fabrication 33

Jak przydzielić zobowiązania, by uniknąć bezpośredniego sprzężenia? Przydziel zobowiązanie obiektowi pośredniczącemu, który będzie przekazywał komunikaty pomiędzy innymi komponentami lub usługami. Powiązane z: Protected Variations i Low Coupling Wiele wzorców GoF s o l i D 34

Jak przydzielać zobowiązania obiektom, podsystemom i systemom, by ich zmienność lub niestabilność nie wywierała negatywnego wpływu na pozostałe elementy? Zidentyfikuj punkty przewidywalnej zmienności lub niestabilności (tzw. hot spots). Przydziel zobowiązania tak, by wokół tych punktów powstały stabilne interfejsy. Powiązane z: Low Coupling Większość wzorców GoF s O L i d 35

Zarządzanie zależnościami http://www.marco.panizza.name/dispensetm/slides/exerc/eventnotifier/eventnotifier.html

Simplistic Approach 37

Mediator diagram klas 38

Mediator Approach 39

Observer diagram klas 40

Observer Approach 41

Event Notifier 42

Event Notifier - structure 43

Event Notifier - Zastosowanie When an object should be able to notify other objects of an event without needing to know who these objects are or what they do in response. When an object needs to be notified of an event, but does not need to know where the event originated. When more than one object can generate the same kind of event. When some objects are interested in a broader classification of events, while others are interested in a narrower classification. When an object may be interested in more than one kind of event. When you need to dynamically introduce new kinds of events. When objects participating in notification may be dynamically introduced or removed, as in distributed systems. When you need to filter out events based on arbitrary criteria. 44