Metodyka projektowania obiektowego

Wielkość: px
Rozpocząć pokaz od strony:

Download "Metodyka projektowania obiektowego"

Transkrypt

1 Metodyka projektowania obiektowego Zajęcia 4 Wzorce projektowe PW

2 Treść Wprowadzenie: historia, motywacja Katalog wzorców na podstawie klasycznej pozycji Design Patterns, Elements of Reusable OO Software Wzorce kreacyjne Wzorce strukturalne Wzorce behawioralne Podobieństwa wzorców Podsumowanie i wnioski Ćwiczenia 2

3 Motywacja Powtórne wykorzystanie sprawdzonych rozwiązań? Oczywiście! Przecież: Typowe problemy można rozwiązywać w powtarzalny sposób. Sposoby rozwiązania można przedstawić na tyle abstrakcyjnie, aby były możliwe do wykorzystania w różnych kontekstach. Znajomość katalogu typowych rozwiązań powinna przyspieszyć rozwiązanie konkretnego problemu, a wynik będzie do pewnego stopnia sprawdzony. Motto: dobre projekty mają pewne cechy wspólne. 3

4 Wzorce w programowaniu Wzorce w inżynierii oprogramowania: wzorce implementacyjne poziom języka programowania algorytmy sposoby rozwiązywania problemów obliczeniowych wzorce projektowe interakcja między klasami wzorce architektoniczne sposób integracji komponentów wzorce analityczne poziom opisu rzeczywistości katalog przypadków użycia poziom modelowania 4

5 Dawno, dawno temu... Egipcjanie, Hindusi, Tybetańczycy, Chińczycy, Grecy, Rzymianie,... 5

6 Historia: 1977 Wzorzec opisuje problem, który powtarza się wielokrotnie w danym środowisku, oraz podaje istotę jego rozwiązania w taki sposób, aby można było je zastosować miliony razy bez potrzeby powtarzania tej samej pracy Christopher Alexander A pattern language Wzorzec projektowy = zestaw sprawdzonych koncepcji architektonicznych służących konstruowaniu środowiska mieszkalnego i środowiska pracy zarówno dla jednostek jak i dla społeczności. 6

7 Historia: 1987,,Alexander zaproponował, aby domy i biura projektowali ich przyszli użytkownicy. Uważa on, ze ci ludzie najlepiej wiedzą, czego oczekują od określonej budowli. Zgadzamy się z tym i uważamy, że dotyczy to również programów komputerowych. Użytkownicy powinni sami pisać programy dla siebie.",,język wzorców prowadzi projektanta, dostarczając mu działających rozwiązań wszystkich problemów, które mogą powstać w trakcie projektowania. JW to sekwencja fragmentów wiedzy zapisanych w określonym stylu i uporządkowana tak, że naprowadza projektanta na właściwe pytania i odpowiedzi we właściwym czasie." Kent Beck, Ward Cunningham,,Using Pattern Languages for Object-Oriented Programs" 7

8 Historia, 1994 Wzorzec projektowy identyfikuje i opisuje pewną abstrakcję, której poziom znajduje się powyżej poziomu abstrakcji pojedynczej klasy, instancji lub komponentu. E. Gamma, R. Helm, R. Johnson, J. Vlissides Ponad 30 wznowień w ciągu 10 lat! 8

9 Wzorce projektowe Wzorce dostarczają gotowych rozwiązań, przez co przyspieszają proces produkcji oprogramowania. Wzorce projektowe stanowią abstrakcyjny opis zależności pomiędzy klasami. Ich wykorzystanie prowadzi do pewnej standaryzacji kodu. Standardowy kod jest pewniejszy, efektywniejszy i łatwiej go zrozumieć. Przez swą ogólność wzorce mogą też zwrócić uwagę na słabości projektu i dostarczyć gotowych rozwiązań problemów, które mogą nie być oczywiste we wczesnym jego stadium (rozszerzanie funkcjonalności, zmiana skali, itp.) Opis wzorców jest też szkołą dobrego programowania. 9

10 Treść Wprowadzenie: historia, motywacja Katalog wzorców na podstawie klasycznej pozycji Design Patterns, Elements of Reusable OO Software Wzorce kreacyjne Wzorce strukturalne Wzorce behawioralne Podobieństwa wzorców Podsumowanie i wnioski Ćwiczenia 10

11 Standardowy opis WP (1) Zaproponowany w DP opis WP zawiera rozdziały: Nazwa wzorca projektowego oraz Klasyfikacja Każdy wzorzec powinien posiadać opisową oraz unikalną nazwę, która pomaga w jego rozpoznaniu oraz odwoływaniu się do niego. Wzorzec powinien zostać zakwalifikowany zgodnie z pewnym schematem, np. takim, jak ten zaproponowany w DP. Klasyfikacja ułatwia stosowanie wzorca. Intencja Opis celu, który stoi za wzorcem oraz powody jakimi się należy kierować podczas jego wyboru. Inne nazwy wzorca Wzorzec może mieć więcej niż jedną nazwę, co powinno zostać udokumentowane. 11

12 Standardowy opis WP (2) Motywacja Scenariusz zawierający problem powiązany z kontekstem, w który wzorzec może być stosowany. Stosowalność Przedstawienie sytuacji, w której wzorzec jest użyteczny reprezentujące jego część związaną z kontekstem. Struktura Graficzna reprezentacja wzorca: zwykle jako schematy UML dotyczące klas oraz interakcji między nimi. Elementy Lista klas i obiektów stosowanych w tym wzorcu oraz opis ich znaczenia. 12

13 Standardowy opis WP (3) Powiązania Opis wzajemnej interakcji klas i obiektów wykorzystywanych we wzorcu. Konsekwencje Przedstawienie korzyści, skutków ubocznych oraz innych kosztów, które powoduje zastosowanie wzorca. Implementacja Prezentacja implementacji wzorca w wybranym języku. Przedstawienie technik stosowanych podczas praktycznego wykorzystania wzorca, sugestia najlepszej drogi do udanej implementacji. 13

14 Standardowy opis WP (4) Przykładowy kod Ilustracja jak wzorzec może zostać zastosowany w jednym z języków programowania. Przykłady zastosowania Znane przykłady zastosowania wzorca w rzeczywistych programach. Związane wzorce Odniesienie wzorca do innych, z którymi się wiąże przez wspólne stosowanie, lub wymienną stosowalność oraz przedstawienie różnic w stosunku do podobnych wzorców. 14

15 Systematyka (DP, 1994) Wzorce kreacyjne abstrakcyjne metody tworzenia obiektów uniezależnienie systemu od sposobu tworzenia obiektów Wzorce strukturalne sposób wiązania obiektów w struktury właściwe wykorzystanie dziedziczenia i kompozycji Wzorce behawioralne algorytmy i przydział odpowiedzialności opis przepływu kontroli i interakcji 15

16 Katalog wzorców projektowych W DP opisano 23 wzorce: 5 kreacyjnych: Abstract Factory, Builder, Factory Method, Prototype, Singleton 7 strukturalnych: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy 11 behawioralnych: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor Katalogi wzorców (np. Portland Pattern Repository są ciągle uzupełniane. Przykład: AbstractFactoryPattern 16

17 Treść Wprowadzenie: historia, motywacja Katalog wzorców na podstawie klasycznej pozycji Design Patterns, Elements of Reusable OO Software Wzorce kreacyjne Wzorce strukturalne Wzorce behawioralne Podobieństwa wzorców Podsumowanie i wnioski Ćwiczenia 17

18 Wzorce kreacyjne Abstract Factory (fabryka abstrakcyjna) sposób enkapsulacji grupy fabryk wytwarzających podobne obiekty. Zwykle interfejs implementowany przez konkretne fabryki. Klient nie troszczy się o konkretny rodzaj obiektu, bo używa interfejsów do komunikacji z produktami. (Co zrobić?) Builder (budowniczy) zawiera algorytm tworzenia skomplikowanych obiektów tak, aby klient mógł po prostu zażądać określonego obiektu. Builder jest interfejsem i jednocześnie oddziela proces tworzenia obiektu od jego reprezentacji, aby można było tworzyć podobne obiekty według określonego wzoru. (Jak to zrobić?) Factory Method (metoda wytwórcza) sposób delegacji tworzenia obiektu do podklas tak, aby to one mogły decydować, co dokładnie jest tworzone. Prototype (prototyp) metoda tworzenia obiektów przez klonowanie pewnego obiektu prototypowego. Singleton metoda zapewnienia istnienia pojedynczej instancji danej klasy. 18

19 Singleton: Nazwa: Singleton Cel: zapewnienie, że wewnątrz danej aplikacji istnieje dokładnie jedna instancja tej klasy. Utworzenie tej instancji i umożliwienie dostępu do niej. Motywacja i stosowalność: czasem potrzebna jest wyłącznie jedna instancja obiektu, którą wywołuje wiele różnych części aplikacji. W takich przypadkach tworzenie obiektu, a następnie niszczenie go (lub pozostawianie do zniszczenia przez gc) jest marnotrawstwem zasobów. 19

20 Singleton: struktura, uczestnicy, powiązania Singleton jest odpowiedzialny za tworzenie instancji własnej klasy ogranicza dostęp do konstruktora do własnej klasy i podklas (prywatny lub chroniony konstruktor) definiuje statyczną metodę getinstance() udostępniającą instancję klasy 20

21 Singleton: implementacje: C++ class singleton { private: singleton() { singleton(const singleton &); singleton& operator=(const singleton&); public: string method() { return "sample method"; ~singleton() { static singleton& getinstance() { static singleton instance; return instance; ; 21

22 Singleton: implementacje: Java public final class Singleton { private final static Singleton singleinstance = new Singleton(); public static Singleton getinstance() { return singleinstance; private Singleton() { public final class Singleton { public final static Singleton singleinstance = new Singleton(); private Singleton() { 22

23 Singleton: implementacje: Java public class Singleton { private static class Instance { static final Singleton instance = new Singleton(); private Singleton() { public static Singleton getinstance() { return Instance.instance; 23

24 Singleton: konsekwencje Singleton przejmuje odpowiedzialność za tworzenie instancji własnej klasy Klient nie zarządza instancją klasy; otrzymuje ją na żądanie Singleton może zarządzać także swoimi podklasami Singleton można łatwo rozszerzyć do puli obiektów Singleton zachowuje się podobnie do zmiennej globalnej (antywzorzec!) może powodować zwiększenie liczby powiązań w systemie 24

25 Abstract Factory: Nazwa: Abstract Factory Cel: hermetyzacja tworzenia obiektów. Motywacja i stosowalność: tworzenie rodzin powiązanych lub zależnych obiektów, udostępnianie biblioteki klas poprzez interfejs, odseparowanie sposobu tworzenia obiektów od sposobu ich używania, ukrywanie specyficznych dla danej platformy szczegółów, zwiększenie rozszerzalności 25

26 Abstract Factory: struktura 26 wikimedia.org

27 Abstract Factory: uczestnicy Abstract Factory: definicja interfejsu do tworzenia obiektów implementujących Abstract Product Abstract Poduct: definicja interfejsu, który muszą implementować obiekty tworzone przez fabryki Concrete Factory: implementacja Abstract Factory dostarczająca własnych metod do tworzenia obiektów implementujących interfejsy Abstract Product ConcreteProduct: konkretna implementacja Abstract Product 27

28 Abstract Factory: przykład (1) 28 apwebco.com

29 Abstract Factory: przykład (2) // Factories // Abstract: public interface FinancialToolsFactory { public TaxProcessor createtaxprocessor(); public ShipFeeProcessor createshipfeeprocessor(); 29 apwebco.com

30 Abstract Factory: przykład (3) // Concrete 1 public class CanadaFinancialToolsFactory implements FinancialToolsFactory { public TaxProcessor createtaxprocessor() { return new CanadaTaxProcessor(); public ShipFeeProcessor createshipfeeprocessor() { return new CanadaShipFeeProcessor(); 30 apwebco.com

31 Abstract Factory: przykład (4) // Concrete 2 public class EuropeFinancialToolsFactory implements FinancialToolsFactory { public TaxProcessor createtaxprocessor() { return new EuropeTaxProcessor(); public ShipFeeProcessor createshipfeeprocessor() { return new EuropeShipFeeProcessor(); 31 apwebco.com

32 Abstract Factory: przykład (5) // Products public interface ShipFeeProcessor { void calculateshipfee(order order); public interfacetaxprocessor { void calculatetaxes(order order); 32 apwebco.com

33 Abstract Factory: przykład (6) // Products: Concrete public class EuropeShipFeeProcessor implements ShipFeeProcessor { public void calculateshipfee(order order) { // insert here Europe specific ship fee calculation public class CanadaShipFeeProcessor implements ShipFeeProcessor { public void calculateshipfee(order order) { // insert here Canada specific ship fee calculation 33 apwebco.com

34 Abstract Factory: przykład (7) // Products: Concrete public class EuropeTaxProcessor implements TaxProcessor { public void calculatetaxes(order order) { // insert here Europe specific taxt calculation public class CanadaTaxProcessor implements TaxProcessor { public void calculatetaxes(order order) { // insert here Canada specific taxt calculation 34 apwebco.com

35 Abstract Factory: przykład (8) // Client... Customer customer = new Customer(); Order order = new Order(); OrderProcessor orderprocessor = null; FinancialToolsFactory Factory = null; if (countrycode == "EU") { Factory = new EuropeFinancialToolsFactory(); else if (countrycode == "CA") { Factory = new CanadaFinancialToolsFactory(); orderprocessor = new OrderProcessor(Factory); orderprocessor.processorder(order); apwebco.com

36 Abstract Factory: konsekwencje Elastyczna konfiguracja rodzaju tworzonych obiektów Uniezależnienie klienta od sposobu tworzenia obiektów Uniezależnienie klienta od konkretnej implementacji obiektów Utrudnienie dodawania kolejnych typów produktów (gdyż wymaga poprawiania wszystkich fabryk) 36

37 Builder: Nazwa: Builder Cel: odseparowanie procesu konstrukcji złożonych obiektów od ich reprezentacji: ten sam proces konstrukcji może tworzyć różne reprezentacje. Motywacja i stosowalność: tworzenie obiektów przez określanie ich typu i zawartości, odseparowanie procesu tworzenia złożonego obiektu od szczegółów tworzenia skłdowych, oddzielenie kodu tworzącego od reprezentacji 37

38 Builder: struktura 38 wikimedia.org

39 Builder: uczestnicy Poduct: typ tworzonych obiektów Builder: definicja interfejsu do tworzenia obiektów implementujących Product Director: zna algorytm realizacji struktury, wykorzystuje obiekty Builder do konstrukcji części i składa te części w całość Concrete Builder: implementacja Abstract Builder dostarczająca własnych metod do tworzenia obiektów Product 39

40 Builder: przykład (1) // Product class Pizza { private String dough = ""; private String sauce = ""; private String topping = ""; public void setdough (String dough) { this.dough = dough; public void setsauce (String sauce) { this.sauce = sauce; public void settopping (String topping) { this.topping = topping; public String tostring() { return dough + "+" + topping + "+" + sauce; 40 wikipedia.org

41 Builder: przykład (2) // Abstract Builder abstract class PizzaBuilder { protected Pizza pizza; Składniki algorytmu public Pizza getpizza() { return pizza; public void createnewpizzaproduct() { pizza = new Pizza(); public abstract void builddough(); public abstract void buildsauce(); public abstract void buildtopping(); 41 wikipedia.org

42 Builder: przykład (3) // Director class Waiter { private PizzaBuilder pizzabuilder; Algorytm public void setpizzabuilder (PizzaBuilder pb) { pizzabuilder = pb; public Pizza getpizza() { return pizzabuilder.getpizza(); public void constructpizza() { pizzabuilder.createnewpizzaproduct(); pizzabuilder.builddough(); pizzabuilder.buildsauce(); pizzabuilder.buildtopping(); 42 wikipedia.org

43 Builder: przykład (4) // Client class BuilderDemo { public static void main(string[] args) { Waiter waiter = new Waiter(); PizzaBuilder hawaiian_pizzabuilder = new HawaiianPizzaBuilder(); PizzaBuilder spicy_pizzabuilder = new SpicyPizzaBuilder(); waiter.setpizzabuilder ( hawaiian_pizzabuilder ); //waiter.setpizzabuilder ( spicy_pizzabuilder ); waiter.constructpizza(); Pizza pizza = waiter.getpizza(); System.out.println( pizza ); 43 wikipedia.org

44 Builder: przykład (5) // ConcreteBuilder1 class HawaiianPizzaBuilder extends PizzaBuilder { public void builddough() { pizza.setdough("cross"); public void buildsauce() { pizza.setsauce("mild"); public void buildtopping() { pizza.settopping("ham+pineapple"); // ConcreteBuilder2 class SpicyPizzaBuilder extends PizzaBuilder { public void builddough() { pizza.setdough("pan baked"); public void buildsauce() { pizza.setsauce("hot"); public void buildtopping() { pizza.settopping("pepperoni+salami"); 44 wikipedia.org

45 Builder: konsekwencje Elastyczna konfiguracja rodzaju tworzonych obiektów Uniezależnienie klienta od sposobu tworzenia obiektów Uniezależnienie klienta od konkretnej implementacji obiektów 45

46 Builder a AbstractFactory Builder zawiera logikę tworzenia obiektu: opisuje, w jaki sposób tworzymy obiekt, ale chodzi o konkretny obiekt AbstractFactory odwleka decyzję o typie tworzonego obiektu do momentu wykonania, specyfikowany jest tylko interfejs tworzonego obiektu Builder: jak to zrobić? AbstractFactory: co zrobić? 46

47 Treść Wprowadzenie: historia, motywacja Katalog wzorców na podstawie klasycznej pozycji Design Patterns, Elements of Reusable OO Software Wzorce kreacyjne Wzorce strukturalne Wzorce behawioralne Podobieństwa wzorców Podsumowanie i wnioski Ćwiczenia 47

48 Wzorce strukturalne Adapter (adapter) dopasowuje obiekt/klasę do wymagań klienta: adaptowany obiekt posiada oczekiwane możliwości, ale ma nieodpowiedni interfejs. Bridge (most) oddzielenie abstrakcji od sposobu implementacji tej abstrakcji przez zastosowanie kompozycji i dziedziczenia Composite (kompozyt) traktowanie kolekcji w taki sam sposób, jak jej składowych Decorator (dekorator) umożliwienie dynamicznego modyfikowania właściwości obiektów (a nie klas) Facade (fasada) uproszczenie dostępu do złożonego fragmentu kodu (uproszczenie interfejsu) Flyweight pozwala oszczędzić zasoby przez efektywne (wspólne) przechowywanie podobnych obiektów. Proxy (pośrednik) pośredni dostęp do obiektu (zdalnego, dużego współdzielonego, wrażliwego). 48

49 Bridge: cel Oddzielenie (abstrakcji) interfejsu i implementacji w dwóch ortogonalnych hierarchiach, aby mogły ewoluować niezależnie od siebie Podział implementacji w hierarchi 49

50 Bridge: struktura 50

51 Bridge: uczestnicy Abstraction definiuje zewnętrzny interfejs Implementor przechowuje implementację, nie jest spokrewniony z Abstraction RefinedAbstraction rozszerza Abstraction zawiera uchwyt do Implementora, który jest inicjowany jako ConcreteImplementor, ale używany jako Implementor ConcreteImplementor implementuje Implementor 51

52 Bridge: przykład (1) // Abstraction abstract class Shape { abstract void Draw(); abstract void ResizeByPercentage(double pct); protected DrawingAPI drawingapi; // low-level // high-level // Implementor interface DrawingAPI { void DrawCircle(double x, double y, double radius); 52 wikipedia.org

53 Bridge: przykład (2) // ConcreteImplementor 1/2 class DrawingAPI1 implements DrawingAPI { public void DrawCircle(double x, double y, double radius) { System.out.printf("API1.circle at [%f,%f] radius %f\n", x, y, radius); // ConcreteImplementor 2/2 class DrawingAPI2 implements DrawingAPI { public void DrawCircle(double x, double y, double radius) { System.out.printf("API2.circle at [%f,%f] radius %f\n", x, y, radius); 53 wikipedia.org

54 Bridge: przykład (3) // Refined Abstraction class CircleShape extends Shape { private double x, y, radius; public CircleShape(double x, double y, double radius, DrawingAPI drawingapi) { this.x = x; this.y = y; this.radius = radius; this.drawingapi = drawingapi; // low-level i.e. Implementation specific public void Draw() { drawingapi.drawcircle(x, y, radius); // high-level i.e. Abstraction specific public void ResizeByPercentage(double pct) { radius *= pct; 54 wikipedia.org

55 Bridge: przykład (4) // Client class BridgeDemo { public static void main(string[] args) { Shape[] shapes = new Shape[2]; shapes[0] = new CircleShape(1, 2, 3, new DrawingAPI1()); shapes[1] = new CircleShape(5, 7, 11, new DrawingAPI2()); for (Shape shape : shapes) { shape.resizebypercentage(2.5); shape.draw(); 55 wikipedia.org

56 Bridge: konsekwencje Ortogonalizacja hierarchii Abstraction i Implementor powoduje, że mogą one być rozszerzane niezależnie Implementacja może być współdzielona przez wiele abstrakcji Detale implementacji są ukrywane przed obiektami Client 56

57 Flyweight: cel Współdzielenie obiektów w celu zmniejszenia zapotrzebowania na pamięć Tworzenie instancji na żądanie Wydzielenie z obiektu stanu wewnętrznego (współdzielonego) i zewnętrznego (specyficznego) 57

58 Flyweight: struktura, powiązania FlyweightFactory getflyweight(key : String) +flyweights Flyweight operation(extrinsicstate) if (flyweights[key] exists) { return existing flyweight; else { create new one; add to pool; return the new one; ConcreteFlyweight operation(extrinsicstate) UnsharedConcreteFlyweight operation(extrinsicstate) Client 58

59 Flyweight: uczestnicy Flyweight definiuje interfejs do przyjmowania i odtwarzania stanu zewnętrznego obiektu Concrete Flyweight przechowuje stan wewnętrzny (współdzielony) jest niezależny od kontekstu (z wyjątkiem stanu zewnętrznego) Flyweight Factory tworzy i przechowuje obiekty Flyweight Client otrzymuje obiekty Flyweight za pośrednictwem Flyweight Factory 59

60 Flyweight: przykład (1) interface GraphicObject { // The Flyweight public void printatposition( int x, int y ); class GraphicChar implements GraphicObject { // ConcreteFlyweight1 char c; String fontface; public GraphicChar(char c, String fontface) { this.c = c; this.fontface = fontface; public void printatposition(int x, int y) { System.out.printf("Printing '%c' in '%s' at position %d:%d.\n", c, fontface, x, y); 60

61 Flyweight: przykład (2) class Picture implements GraphicObject { // ConcreteFlyweight2 String filename; int width,height; public Picture( String filename, int width, int height ) { this.filename= filename; this.width = width; this.height = height; public void printatposition(int x, int y) { System.out.printf( "Printing '%s' scaled to %dx%d at position %d:%d.\n", filename, width, height, x, y ); 61

62 Flyweight: przykład (3) class GraphicObjectFactory { HashMap<String, GraphicObject> pool = new HashMap<String, GraphicObject>(); public int getnum() { return pool.size(); public String tostring() {// for testing... public GraphicObject get(character c, String fontface) { GraphicObject go; String key = "C: " + c.tostring() + "@" + fontface; if ((go = pool.get(key)) == null) { go = new GraphicChar(c, fontface); pool.put(key, go ); return go;... 62

63 Flyweight: przykład (4)... public GraphicObject get(string filename, int width, int height) { GraphicObject go; String key = "P: " + filename + "@" + width + "x" + height; if ((go = pool.get(key)) == null) { go = new Picture(fileName,width,height); pool.put(key, go ); return go; 63

64 Flyweight: przykład (5) class FlyWeightExample { public static void main(string[] args) { GraphicObjectFactory gof = new GraphicObjectFactory(); ArrayList<GraphicObject> document = new ArrayList<GraphicObject>(); document.add( gof.get("smile.jpg", 100, 100) ); document.add( gof.get(' ', "Times") );... int x=0, y=0; for (GraphicObject c : document) { c.printatposition( x++, y); 64

65 Flyweight: konsekwencje Zmniejszenie wymagań pamięciowych programu zmniejszenie ogólnej liczby obiektów zmniejszenie rozmiaru stanu obiektów stan zewnętrzny może być przechowywany lub wyliczany Wzrost złożoności obliczeniowej dodatkowy nakład na zarządzanie stanem zewnętrznym 65

66 Treść Wprowadzenie: historia, motywacja Katalog wzorców na podstawie klasycznej pozycji Design Patterns, Elements of Reusable OO Software Wzorce kreacyjne Wzorce strukturalne Wzorce behawioralne Podobieństwa wzorców Podsumowanie i wnioski Ćwiczenia 66

67 Wzorce behawioralne (1) Chain of Responsibility (łańcuch odpowiedzialności) oddzielenie (uniezależnienie) nadawcy i odbiorcy zdarzenia. Zarządzanie kolejnością (strukturą) przekazywania żądań. Command (polecenie) realizacja obiektu-polecenia Interpreter realizacja gramatyk specjalizowanych języków i interpreterów tych języków. Iterator nawigacja po kolekcji obiektów bez znajomości wewnętrznej struktury tej kolekcji. Mediator pośrednik między dużą liczbą klas. Obiekt (jedyny) znający wszystkie klasy systemu. Zmniejsza powiązania między klasami. Memento zachowywanie stanu obiektu w celu późniejszego odtworzenia. 67

68 Wzorce behawioralne (2) Observer (obserwator) zarządzanie jednostronną komunikacją pomiędzy obiektem obserwowanym i (dynamicznie zmienną) listą obiektów obserwujących. State (stan) reprezentacja stanu/zachowania obiektu przez wewnętrzny składnik, który może się dynamicznie zmieniać. Strategy (strategia) delegacja definicji algorytmu do klas rozszerzających interfejs. Template Method (szablon metody) definiowanie szablonu metody w klasie pierwotnej; detale są definiowane w klasach pochodnych Visitor (odwiedzający) odseparowanie algorytmów od struktur danych przez abstrakcję zarówno tych struktur (z punktu widzenia algorytmów), jak i algorytmów (z p. widzenia struktur). 68

69 Command: cel Rozprzęgnięcie obiektów wykonujących operacje i operacji Hermetyzacja operacji w postaci obiektów (polecenie i argumenty) Umożliwienie parametryzacji klientów obiektami poleceń Wsparcie dla poleceń odwracalnych 69

70 Command: struktura Client Invoker Command execute() Receiver action() ConcreteCommand state execute() receiver->action() 70

71 Command: interakcje client : Client invoker : Invoker command : Command new Command() receiver : Receiver storecommand(command) configure(receiver) execute( ) action( ) 71

72 Command: uczestnicy Command definicja interfejsu obiektu reprezentującego polecenie Concrete Command jest powiązany z właściwym obiektem Receiver implementuje akcję w postaci metody execute() Client tworzy Concrete Command Invoker ustala odbiorcę akcji każdego obiektu Command wywołuje metodę execute() obiektu Command Receiver jest przedmiotem akcji wykonanej przez Command 72

73 Command: przykład (1) class ExitAction extends AbstractAction { private Component target; public ExitAction(String name, Icon icon, Component t){ putvalue(action.name, name); putvalue(action.small_icon, icon); putvalue(action.short_description, name + " the program"); target = t; public void actionperformed(actionevent evt) { int answer = JoptionPane.showConfirmDialog( target, "Are you sure you want to exit? ", "Confirmation", JoptionPane.YES_NO_OPTION ); if( answer == JoptionPane.YES_NO_OPTION) System.exit(0); 73

74 Command: przykład (2) class SubmitAction extends AbstractAction { private Component target; public SubmitAction(String name, Icon icon, Component t){ putvalue(action.name, name); putvalue(action.small_icon, icon); putvalue(action.short_description, name + " the program"); target = t; public void actionperformed(actionevent evt) { JOptionPane.showMessageDialog(target, "submit action clicked "); 74

75 Command: przykład (3)... Action ea = new ExitAction("Exit", null, this); Action sa = new SubmitAction("Submit", null, this);... JPopupMenu pop = new JPopupMenu("PopMenu"); pop.add(sa); pop.add(ea);... JButton subbtn = new JButton(sa); JButton exitbtn = new Jbutton(ea);... 75

76 Command: konsekwencje Usunięcie powiązania między nadawcą i przedmiotem polecenia Łatwe dodawanie kolejnych obiektów Command Możliwość manipulacji obiektami Command polecenia złożone: wzorzec Composite Polecenia mogą być odwracalne zapamiętanie stanu przez ConcreteCommand wykorzystanie wzorca Memento 76

77 Memento: cel zachowanie (w celu późniejszego odtworzenia) stanu obiektu, zasada hermetyzacji nie powinna być naruszana 77

78 Memento: struktura 78

79 Memento: uczestnicy StatefullComponent potrafi przekazać swój aktualny stan i odtworzyć go na podstawie dostarczonej informacji StateHolder (Memento) przechowuje stan obiektu StatefullComponent 79

80 Memento: przykład class Memento { int num; Memento(int c) { num = c; int getnum() { return num; java.util.list<integer> list; java.util.list<memento> undo;... list.add(i, new Integer(num)); undo.add(i, new Memento(num)); 80

81 Memento: konsekwencje zachowanie hermetyzacji obiektu StatefullComponent uproszczenie klienta ewentualnie podwójny interfejs obiektu StateHolder potencjalny wzrost zapotrzebowania na pamięć 81

82 State: cel wykorzystanie dziedziczenia do elastycznej definicji zachowania obiektu obiekt zmienia swoje zachowanie, gdy zmienia swój wewnętrzny stan: pozorna zmiana klasy obiektu 82

83 State: struktura Client Context +currentstate State request() 1 handle() currentstate->handle() ConcreteStateA handle() ConcreteStateB handle() Klient kontaktuje się z konkretnymi implementacjami State poprzez Context, który odwołuje się do tych obiektów przez ich nadklasę. 83

84 State: uczestnicy Context posiada referencję (typu State) do obiektu reprezentującego bieżący stan State definiuje interfejs pozwalający hermetyzować zachowanie związane z każdym stanem Concrete State definiuje własną implementację określającą zachowanie specyficzne dla tego stanu 84

85 State: przykład (1) abstract class Connection { // State public abstract void open(); public abstract void close(); public abstract void log(); class Accounting extends Connection { // Concrete1 public void open() { System.out.println("open database for accounting"); public void close() { System.out.println("close the database"); public void log() { System.out.println("log activities"); //... 85

86 State: przykład (2) class Sales extends Connection { // Concrete2 public void open() { System.out.println("open database for sales"); public void close() { System.out.println("close the database"); public void log() { System.out.println("log activities"); public void update() { // 86

87 State: przykład class Management extends Connection { // Concrete3 public void open() { System.out.println("open database for management"); public void close() { System.out.println("close the database"); public void log() { System.out.println("log activities"); //... 87

88 State: przykład class Controller { public static Accounting acct; public static Sales sales; public static Management manage; private static Connection current; Controller() { acct = new Accounting(); sales = new Sales(); manage = new Management();... 88

89 89 State: przykład... public void makeaccountingconnection() { current = acct; public void makesalesconnection() { current = sales; public void makemanagementconnection() { current = manage; public void open() { current.open(); public void close() { current.close(); public void log() { current.log();

90 State: konsekwencje Kod związany ze jednym stanem jest zapisany w jednym obiekcie uproszczenie i uealastycznienie kodu Zachowanie obiektu nie jest zaszyte w jego implementacji i może się zmieniać w trakcie wykonania programu Łatwo jest dodawać nowe typy zachowań (kolejne podklasy klasy Stan) Zabezpieczenie przed stanem niespójnym możliwość współdzielenia obiektów State obiekty State zwykle definiują tylko zachowanie obiekty State zwykle są bezstanowe (stan może być przechowywany w obiekcie Context) 90

91 ChainOfResponsibility: cel Usunięcie powiązania pomiędzy nadawcą i odbiorcą żądania Umożliwienie wielu obiektom obsługi żądania 91

92 ChainOfResponsibility: struktura Client Handler handlerequest() +successor ConcreteHandler1 handlerequest() ConcreteHandler2 handlerequest() Obiekty Handler tworzą najczęściej listę jednokierunkową (łańcuch), wzdłuż której są przekazywane żądania. 92

93 ChainOfResponsibility: uczestnicy Handler definiuje interfejs do obsługi żądań Concrete Handler obsługuje jeden rodzaj żądania, pozostałe przekazuje do następnika w łańcuchu posiada referencję typu Handler do następnika Client inicjuje przetwarzanie, przekazując żądanie do pierwszego obiektu Handler w łańcuchu 93

94 ChainOfResponsibility: konsekwencje Ograniczone powiązania Klient i każdy obiekt Handler nie wiedzą, który z pozostałych obiektów Handler obsługuje dany typ żądania nadawca i odbiorca żądania nie mają o sobie żadnej wiedzy Możliwość elastycznego przydziału odpowiedzialności do obiektów Handler Ułatwione testowanie Brak gwarancji obsłużenia żądania 94

95 Chain of Responsibility: przykład 1 Filter dofilter() Inbox +filterchain Filter1 +next Filter2 +next Filter3 filter(msg : Message) dofilter() dofilter() dofilter() filterchain.dofilter() if (! iseligible()) next.dofilter() Obiekt Inbox wywołuje pierwszy obiekt Filter w łańcuchu. Kolejne filtry przekazują sobie sterowanie 95

96 Chain of Responsibility: przykład 2 Inbox filters : Set filter(msg : Message) for (f : filters) { if (f.dofilter()) { break; Filter dofilter() Filter1 Filter2 Filter3 dofilter() dofilter() dofilter() Obiekt Inbox wywołuje kolejno obiekty Filter. 96

97 Decorator: cel Umożliwienie dynamicznego dodawania funkcjonalności do obiektu Stworzenie elastycznej alternatywy dla tworzenia podklas 97

98 Decorator: struktura Klient wysyła komunikat do obiektu Decorator, który przekazuje go obiektowi ConcreteComponent oraz wykonuje dodatkowe operacje ( dekoracje ) 98

99 Decorator: uczestnicy AComponent definiuje wspólny interfejs obiektów, które można dekorować ConcreteComponent realizuje podstawową funkcjonalność obiektu Decorator posiada referencję typu Component i do tego obiektu deleguje komunikaty rozszerza funkcjonalność obiektu ConcreteComponent 99

100 Decorator: interakcje 100 javaworld.com

101 Decorator: java.io URL url = new URL( args[0] ); BufferedReader ulrin = new BufferedReader( new InputStreamReader( url.openstream()));... Filereader fr = new FileReader(args[1]); BufferedReader filein = new BufferedReader( fr ); LineNumberReader lin = new LineNumberReader( filein );... FileReader filein= new FileReader( args[2] ); StreamTokenizer in= new StreamTokenizer( filein ); 101

102 Decorator: java.io 102 javaworld.com

103 Decorator: java.swing JBorderLabel label1 = new JBorderLabel("JLabel Subclass"); BorderDecorator label2 = new BorderDecorator(new JLabel("Decorated JLabel")); BorderDecorator checkbox1 = new BorderDecorator(new JCheckBox("Decorated JCheckBox")); 103 onjava.com

104 Decorator: konsekwencje Większa elastyczność w przydziale odpowiedzialności niż w przypadku dziedziczenia Możliwość dodawania funkcjonalności w trakcie wykonywania programu, gdy jest ona potrzebna Tożsamość obiektu z którym komunikuje się klient może się zmieniać wskutek dekoracji Łatwiejsze testowanie poszczególnych dekoratorów 104

105 Visitor: cel Reprezentacja operacji do wykonania na elementach heterogenicznej struktury Realizacja operacji w sposób specyficzny dla typu odwiedzanego elementu Umożliwienie tworzenia nowych operacji bez konieczności modyfikacji klas wewnątrz struktury 105

106 Visitor: struktura Client Visitor visit(concreteelementa) visit(concreteelementb) ConcreteVisitor١ visit(concreteelementa) visit(concreteelementb) ConcreteVisitor٢ visit(concreteelementa) visit(concreteelementb) ObjectStructure foreach() Element accept(visitor) ConcreteElementA accept(visitor) operationa() ConcreteElementB accept(visitor) operationb() visitor->visit(this) visitor->visit(this) 106

107 Visitor: interakcje : ObjectStructure : ConcreteElementA : ConcreteElementB : ConcreteVisitor١ accept() visit() operationa( ) accept() visit() operationb( ) 107

108 Visitor: interakcje class ConcreteElementA extends Element { //... public void accept(avisitor v) { v.visitconcreteelementa(this); //... public void operationa() { //... class ConcreteVisitor1 extends Visitor { public void visitconcreteelementa( ConcreteElementA e ) { e.operationa(); 108

109 Visitor: uczestnicy Visitor definiuje przeciążone metody dla każdego obiektu ConcreteElement do odwiedzenia Element definiuje metodę accept() przyjmującą obiekt Visitor jako parametr Object Structure posiada iterator pozwalający na dostęp do każdego elementu struktury 109

110 Visitor: przykład (1) interface Expression { // Element void accept(expressionvisitor v); class IntExp implements Expression { // ConcreteElementA int value; IntExp( int v ) { value = v; public void accept(expressionvisitor v) { v.visitintexp(this); 110

111 Visitor: przykład (2) class AddExp implements Expression { // ConcreteElementB Expression e1, e2; AddExp( Expression e1, Expression e2 ) { this.e1 = e1; this.e2 = e2; public void accept(expressionvisitor v) { v.visitaddexp(this); 111

112 Visitor: przykład (3) class MulExp implements Expression { // ConcreteElementC Expression e1, e2; MulExp( Expression e1, Expression e2 ) { this.e1 = e1; this.e2 = e2; public void accept(expressionvisitor v) { v.visitmulexp(this); 112

113 Visitor: przykład (4) class ExpressionPrinter implements ExpressionVisitor { // ConcreteVisitor public void visitintexp(intexp e) { System.out.print(e.value); public void visitaddexp(addexp e) { e.e1.accept(this); System.out.print(" + "); e.e2.accept(this); public void visitmulexp(mulexp e) { e.e1.accept(this); System.out.print(" * "); e.e2.accept(this); 113

114 Visitor: przykład (5) public class VisitorDemo { // Client public static void main( String [] args ) { IntExp i1= new IntExp( 1 ); IntExp i2= new IntExp( 2 ); IntExp i3= new IntExp( 3 ); AddExp ae= new AddExp( i1, i2 ); MulExp me= new MulExp( ae, i3 ); ExpressionVisitor visitor = new ExpressionPrinter(); me.accept( visitor ); System.out.println( "" ); 114

115 Visitor: konsekwencje Możliwość odwiedzenia obiektów niespokrewnionych ze sobą Łatwe dodawanie nowych obiektów Visitor pod warunkiem, że akceptują postać metody visit Utrudnione dodawanie nowych typów Element konieczność modyfikacji klasy Visitor i jej podklas Możliwość zbierania informacji z elementów struktury w sposób dla nich specyficzny Naruszenie hermetyzacji obiektów Visitor i Element obiekty muszą odwoływać się do swoich publicznych metod 115

116 Treść Wprowadzenie: historia, motywacja Katalog wzorców na podstawie klasycznej pozycji Design Patterns, Elements of Reusable OO Software Wzorce kreacyjne Wzorce strukturalne Wzorce behawioralne Podobieństwa wzorców Podsumowanie i wnioski Ćwiczenia 116

117 Podsumowanie: podobieństwa i różnice Te wzorce używają relacji "zawiera" Adapter: opakuj obiekt tak, aby dopasowac jego interfejs Facade: opakuj skomplikowany system uproszczonym interfejsem Proxy: opakuj obiekt dodatkową funkcjonalnością 117

118 Podsumowanie: podobieństwa i różnice Te wzorce używają relacji "dziedziczy" Strategy: zdefiniuj interfejs algorytmu w klasie bazowej i implementuj w podklasach FactoryMethod: zdefiniuj w klasie bazowej metodę zróbobiekt i przeciążaj ją w klasach pochodnych Visitor: stwórz dwie hierarchie, które wzajemnie się obsługują 118

119 Podsumowanie: podobieństwa i różnice Te wzorce opakowują hierarchię dziedziczenia Builder: hierarchia "budowniczych" State: hierarchia możliwych zachowań Bridge: hierarchia abstrakcji + hierarchie implementacji Observer: hierarchia obserwatorów reagujących na zmiany stanu obiektu obserwowanego 119

120 Podsumowanie: podobieństwa i różnice Te wzorce reprezentują rekursywne opakowania Composite: traktuj tak samo obiekt i kolekcję Decorator: opakuj opakowanie opakowania Chain of Responsibility: przerzucaj się pracą do wykonania Interpreter: mapuj problem na język, ten na gramatykę, a ją na wzorzec Composite 120

121 Podsumowanie: podobieństwa i różnice Te wzorce udają, że wszystko jest obiektem Command: polecenie jest obiektem Iterator: iteracja jest interfejsem Mediator: struktura aplikacji jest obiektem Memento: stan obiektu jest obiektem Prototype: operator new można zastąpić metodą obiektu 121

122 Podsumowanie: podobieństwa i różnice Te wzorce nie pasują gdzie indziej Abstract Factory: hierarchia tworząca hierarchie Template Method: hierarchia metod MediatorFlyweight: oszczędzaj zasoby oddzielając to, co zmienne, od tego, co stałe. Singleton: kontroluj, ile czego masz 122

123 Treść Wprowadzenie: historia, motywacja Katalog wzorców na podstawie klasycznej pozycji Design Patterns, Elements of Reusable OO Software Wzorce kreacyjne Wzorce strukturalne Wzorce behawioralne Podobieństwa wzorców Podsumowanie i wnioski Ćwiczenia 123

124 Zakończenie Wzorce nie zostały wymyślone, a jedynie zkatalogowane przez GoF. Wzorce są efektem prac wielu osób. Wzorce są (prawie) gotowymi rozwiązaniami typowych problemów. Wzorce uczą dobrego programowania 124

Wzorce Bartosz projektowe. Jacek Starzyński, ZETiIS PW

Wzorce Bartosz projektowe. Jacek Starzyński, ZETiIS PW Wzorce Bartosz projektowe Walter Jacek Starzyński, ZETiIS PW 1 Motywacja Motto: dobre projekty mają pewne cechy wspólne. Powtórne wykorzystanie sprawdzonych rozwiązań: Typowe problemy można rozwiązywać

Bardziej szczegółowo

Testowanie oprogramowania Wzorce projektowe

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

Bardziej szczegółowo

Wzorce projektowe ArrayList. Aplikacja i zdarzenia. Paweł Chodkiewicz

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

Bardziej szczegółowo

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? 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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

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ół

Bardziej szczegółowo

Programowanie obiektowe

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

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

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

Bardziej szczegółowo

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) 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

Bardziej szczegółowo

Projektowanie oprogramowania: wzorce architektoniczne i projektowe

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

Bardziej szczegółowo

Wzorce projektowe. dr inż. Marcin Pietroo

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.

Bardziej szczegółowo

Wprowadzenie do programowania aplikacji mobilnych

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

Bardziej szczegółowo

Technologia Programowania 2016/2017 Wykład 4

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

Bardziej szczegółowo

WZORCE PROJEKTOWE (I) (DESIGN PATTERNS)

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński (wybrane) Wzorce projektowe Programowanie Obiektowe Mateusz Cicheński Kreacyjne Fabryka abstrakcyjna (Abstract Factory) Budowniczy (Builder) Metoda wytwórcza (Factory Method) Prototyp (Prototype) Singleton

Bardziej szczegółowo

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

(wybrane) Wzorce projektowe. Programowanie Obiektowe Mateusz Cicheński (wybrane) Wzorce projektowe Programowanie Obiektowe Mateusz Cicheński Kreacyjne Fabryka abstrakcyjna (Abstract Factory) Budowniczy (Builder) Metoda wytwórcza (Factory Method) Prototyp (Prototype) Singleton

Bardziej szczegółowo

Projektowanie obiektowe Wzorce projektowe

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

Bardziej szczegółowo

Wzorce oprogramowania Gof (cd) zastosowane w modelu obiektowym

Wzorce oprogramowania Gof (cd) zastosowane w modelu obiektowym Wzorce oprogramowania Gof (cd) (Gang of Four skrót odnoszący się do autorów ksiązki: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software)

Bardziej szczegółowo

Technologia Programowania 2016/2017 Wykład 5

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

Bardziej szczegółowo

Projektowanie obiektowe Wzorce projektowe. Wprowadzenie do wzorców projektowych

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

Bardziej szczegółowo

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 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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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 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

Bardziej szczegółowo

Wzorce projektowe Michał Węgorek

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

Bardziej szczegółowo

Wzorce projektowe. dr inż. Marcin Pietroo

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Zaawansowane programowanie obiektowe - wykład 5

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

Bardziej szczegółowo

Podstawy Programowania Obiektowego

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

Bardziej szczegółowo

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

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej. 1/8 Singleton Cel: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej. Przykład: Niekiedy ważne jest, aby tworzyć tylko jedną instancję jakiejś klasy. Globalne zmienne

Bardziej szczegółowo

Programowanie w języku Java WYKŁAD

Programowanie w języku Java WYKŁAD Programowanie w języku Java WYKŁAD dr inż. Piotr Zabawa Certyfikowany Konsultant IBM/Rational e-mail: pzabawa@pk.edu.pl www: http://www.pk.edu.pl/~pzabawa 24.02.2014 WYKŁAD 1 Wzorce projektowe Znaczenie

Bardziej szczegółowo

Wzorce projektowe. dr inż. Marcin Pietroo

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.

Bardziej szczegółowo

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego

Bardziej szczegółowo

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

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

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wzorce projektowe i refaktoryzacja

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:

Bardziej szczegółowo

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

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

Bardziej szczegółowo

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) 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ółowo

Wypożyczalnia VIDEO. Technologie obiektowe

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

Bardziej szczegółowo

Programowanie obiektowe - 1.

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

Bardziej szczegółowo

Wzorce oprogramowania Gof. zastosowane w modelu obiektowym

Wzorce oprogramowania Gof. zastosowane w modelu obiektowym Wzorce oprogramowania Gof (Gang of Four skrót odnoszący się do autorów ksiązki: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software)

Bardziej szczegółowo

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

Bardziej szczegółowo

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.

Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp. 1/14 Prototype (prototyp) Cel: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp. Przykład: Edytor 3D klient tworzy obiekty różnych kształtów

Bardziej szczegółowo

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie 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ółowo

Wzorce projektowe Wykład 7 część 1

Wzorce projektowe Wykład 7 część 1 Wzorce projektowe Wykład 7 Zofia Kruczkiewicz 1 Wzorce projektowe 1. Identyfikacja wzorców projektowych 2. Przegląd wzorców projektowych 2.1. Wzorce kreacyjne 2.2. Wzorce strukturalne 2.3. Wzorce zachowania

Bardziej szczegółowo

Rysunkowy tutorial Możesz swobodnie dystrybuować ten plik jeśli pozostawisz go w nietkniętym stanie. Możesz także cytować jego fragmenty umieszczając w tekście odnośnik http://mbartyzel.blogspot.com Jak

Bardziej szczegółowo

Command (action, transaction, polecenie)

Command (action, transaction, polecenie) 1/10 Command (action, transaction, polecenie) Cel: Obiekt funkcyjny. Pozwala operować żądaniem jako obiektem wysyłać jako parametr, buforować, kolejkować, składować (dzienniki lub undo). Przykład: class

Bardziej szczegółowo

Builder (budowniczy) Cel: Przykład:

Builder (budowniczy) Cel: Przykład: 1/8 Builder (budowniczy) Cel: Oddzielenie konstruowania złożonego obiektu od jego reprezentacji, tak aby ten sam proces konstrukcji mógł tworzyć różne reprezentacje. Przykład: 2/8 abstract class TableBuilder

Bardziej szczegółowo

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,

Bardziej szczegółowo

Wzorce projektowe cz. III

Wzorce projektowe cz. III Wzorce projektowe cz. III Prowadzący: Bartosz Walter Wzorce projektowe cz. III 1 Decorator: cel UmoŜliwienie dynamicznego dodawania funkcjonalności do obiektu Stworzenie elastycznej alternatywy dla tworzenia

Bardziej szczegółowo

Technologie i usługi internetowe cz. 2

Technologie i usługi internetowe cz. 2 Technologie i usługi internetowe cz. 2 Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 15 luty 2014 r. 1 Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania,

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wzorce projektowe [ wstęp ]

Wzorce projektowe [ wstęp ] Wzorce projektowe [ wstęp ] Motywacje definiowania wzorców projektowych Za twórcę uważany jest amerykański architekt Christopher Alexander Alexander, C., Ishikawa, S., Silverstein, M., The Timeless Way

Bardziej szczegółowo

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 2

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 2 Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 2 Zofia Kruczkiewicz 1 Diagramy maszyn stanowych, wzorce projektowe 1. Modelowanie aktywności za pomocą diagramów sekwencji i aktywności porównanie

Bardziej szczegółowo

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.

Proxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Proxy (pełnomocnik) Cel: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Zastosowanie: Wszędzie tam, gdzie oczekujemy bardziej zaawansowanego odwołania do obiektu, niż zwykły

Bardziej szczegółowo

Polimorfizm. dr Jarosław Skaruz

Polimorfizm. dr Jarosław Skaruz Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody

Bardziej szczegółowo

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

Komputerowe 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ółowo

Modelowanie i Programowanie Obiektowe

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

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. 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ółowo

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to

Bardziej szczegółowo

1) Wzorzec projektowy Adapter. Zastosowanie:

1) Wzorzec projektowy Adapter. Zastosowanie: Projektowanie Systemów Komputerowych Laboratoria/Projekty Krzysztof Regulski AGH, WIMiIP WZORCE STRUKTURALNE PSK - projektowanie systemów komputerowych, notatki w Internecie, Beata Frączek, http://brasil.cel.agh.edu.pl/~09sbfraczek

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie zorientowane obiektowo. Mateusz Kołecki

Programowanie zorientowane obiektowo. Mateusz Kołecki Programowanie zorientowane obiektowo Mateusz Kołecki Plan MVC Wstęp Separacja odpowiedzialnośći Antyprzykład Dobry przykład Wady/zalety MVC MVC to tylko początek - wzorce projektowe Dlaczego chcemy używać

Bardziej szczegółowo

Decorator (dekorator)

Decorator (dekorator) 1/10 Decorator (dekorator) Cel: Dołącza dynamicznie nową funkcjonalność do obiektu elastyczna alternatywa dziedziczenia. Przykład: interface iplik { void zapisz(string tekst); String odczytaj(); class

Bardziej szczegółowo

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

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

Bardziej szczegółowo

PHP 5 język obiektowy

PHP 5 język obiektowy PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje

Bardziej szczegółowo

Abstract Factory (fabryka abstrakcyjna)

Abstract Factory (fabryka abstrakcyjna) 1/9 Abstract Factory (fabryka abstrakcyjna) Cel: Zapewnienie interfejsu do tworzenia rodzin powiązanych obiektów bez specyfikacji konkretnej klasy. Przykład: Aplikacja do ustawiania mebli: osobne rodziny

Bardziej szczegółowo

Diagramy 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 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ółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 7 Marcin Młotkowski 8 kwietnia 2015 Plan wykładu Z życia programisty, część 1 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w

Bardziej szczegółowo

UML [ Unified Modeling Language ]

UML [ Unified Modeling Language ] UML [ Unified Modeling Language ] UML język formalny służący do opisu świata obiektów w analizie obiektowej oraz programowaniu obiektowym. W najnowszej wersji (2.4.x) języka UML wyróżnia się 13 diagramów

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do

Bardziej szczegółowo

Program szkolenia: Wzorce projektowe w C++

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:

Bardziej szczegółowo

Programowanie obiektowe

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

Bardziej szczegółowo

Podstawy Języka Java

Podstawy Języka Java Podstawy Języka Java Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania, w którym programy definiuje się za pomocą obiektów elementów łączących

Bardziej szczegółowo

Enkapsulacja, dziedziczenie, polimorfizm

Enkapsulacja, dziedziczenie, polimorfizm 17 grudnia 2008 Spis treści I Enkapsulacja 1 Enkapsulacja 2 Spis treści II Enkapsulacja 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja

Bardziej szczegółowo

Wzorce projektowe. Wstęp

Wzorce projektowe. Wstęp Wstęp Stworzenie programu łatwego w rozwijaniu i naprawie nie należy do łatwych zadań. Na różnych etapach prac można napotkać wiele niemiłych niespodzianek i przeciwności losu, głównie takich które sami

Bardziej szczegółowo

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia

Bardziej szczegółowo

Template method (metoda szablonowa)

Template method (metoda szablonowa) 1/11 Template method (metoda szablonowa) Cel: Definiuje szkielet algorytmu przy pomocy operacji podstawowych. Konkretyzacja poszczególnych kroków składowych pozostawiona klasom potomnym mogą być one zmieniane

Bardziej szczegółowo

METODY PROGRAMOWANIA

METODY PROGRAMOWANIA METODY PROGRAMOWANIA Wzorzec Repository 21 października 2017 Krzysztof Pawłowski kpawlowski@pjwstk.edu.pl Każdy wzorzec opisuje problem, który ciągle pojawia się w naszej dziedzinie, a następnie określa

Bardziej szczegółowo

WZORCE PROJEKTOWE. Software engineering has accepted as its charter How to program if you cannot. E. Djikstra

WZORCE PROJEKTOWE. Software engineering has accepted as its charter How to program if you cannot. E. Djikstra WZORCE PROJEKTOWE Software engineering has accepted as its charter How to program if you cannot. E. Djikstra 1 * Wykład 1 Wzorzec projektowy opis komunikujących się obiektów i klas dostosowanych do rozwiązania

Bardziej szczegółowo

UML 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. 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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, metody wirtualne i klasy abstrakcyjne Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,

Bardziej szczegółowo

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Diagram 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ółowo

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7 Instrukcja 7 Laboratoria 9, 10 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji

Bardziej szczegółowo

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

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu. Architektura Systemu Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu. Architektura jest zbiorem decyzji dotyczących: organizacji systemu komputerowego,

Bardziej szczegółowo

Technologia Programowania 2016/2017 Wykład 6

Technologia Programowania 2016/2017 Wykład 6 Technologia Programowania 2016/2017 Wykład 6 Mockito, wzorce GoF, MVC Jakub Lemiesz Lista zadań na laboratorium 2 / 48 Testowanie Tradycyjnie: testy jednostkowe, integracyjne, systemowe, testy akceptacyjne

Bardziej szczegółowo

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6 Instrukcja 6 Laboratorium 8 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji

Bardziej szczegółowo

Technologie obiektowe

Technologie obiektowe WYKŁAD dr inż. Paweł Jarosz Instytut Informatyki Politechnika Krakowska mail: pjarosz@pk.edu.pl LABORATORIUM dr inż. Paweł Jarosz (3 grupy) mgr inż. Piotr Szuster (3 grupy) warunki zaliczenia Obecność

Bardziej szczegółowo

Wzorce projektowe cz. II

Wzorce projektowe cz. II Wzorce projektowe cz. II Prowadzący: Bartosz Walter Wzorce projektowe cz. II 1 Factory Method: cel Zdefiniowanie interfejsu do tworzenia obiektów UmoŜliwienie przekazania odpowiedzialności za tworzenie

Bardziej szczegółowo

Modelowanie obiektowe

Modelowanie obiektowe Modelowanie obiektowe ZPO 2018/2019 Dr inż. W. Cichalewski Materiały wykonane przez W. Tylman Diagramy klas Diagramy klas Zawiera informacje o statycznych związkach między elementami (klasami) Są ściśle

Bardziej szczegółowo

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy Pojęcie klasy Program napisany w języku Java składa się ze zbioru klas. Każda klasa zawiera

Bardziej szczegółowo

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

Iteracyjno-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ółowo

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych Wywoływanie metod zdalnych Podejście obiektowe do budowy systemów rozproszonych Wywoływanie metod zdalnych model systemu obiekt aplikacja kliencka interfejs serwer proxy szkielet sieć Istota podejścia

Bardziej szczegółowo

Projektowanie Zorientowane na Dziedzinę. ang. Domain Driven Design

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

Bardziej szczegółowo