Command (action, transaction, polecenie)

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

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

Abstract Factory (fabryka abstrakcyjna)

Metody Metody, parametry, zwracanie wartości

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Builder (budowniczy) Cel: Przykład:

Wykład 4: Klasy i Metody

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

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

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe

Projektowanie obiektowe Wzorce projektowe

Zaawansowane programowanie obiektowe - wykład 5

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Zaawansowane programowanie w C++ (PCP)

Wzorce projektowe. dr inż. Marcin Pietroo

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

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

Aplikacje w środowisku Java

Aplikacje RMI

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Dokumentacja do API Javy.

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Programowanie obiektowe

Klasy abstrakcyjne, interfejsy i polimorfizm

Systemy Rozproszone - Ćwiczenie 6

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

PARADYGMATY PROGRAMOWANIA Wykład 4

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

WYKŁAD 10. Wzorce projektowe czynnociowe Command Strategy

Klasy abstrakcyjne i interfejsy

Aplikacje RMI Lab4

Wykład 7: Pakiety i Interfejsy

Java Platform Micro Edition

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

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

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie obiektowe i zdarzeniowe

Programowanie 2. Język C++. Wykład 3.

Wzorce projektowe. dr inż. Marcin Pietroo

Polimorfizm. dr Jarosław Skaruz

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Podstawy programowania obiektowego

Tworzenie i wykorzystanie usług

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

Kurs WWW. Paweł Rajba.

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Decorator (dekorator)

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

UML a kod. C++, Java i C#

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Wywoływanie metod zdalnych

Podstawy i języki programowania

Wzorce projektowe. dr inż. Marcin Pietroo

Projektowanie obiektowe Wzorce projektowe. Gang of Four Wzorce rozszerzeń

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Wzorce oprogramowania Gof (cd) zastosowane w modelu obiektowym

Fragmenty są wspierane od Androida 1.6

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

Wywoływanie metod zdalnych

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Wzorce projektowe. Wstęp

Programowanie komputerowe. Zajęcia 7

Template method (metoda szablonowa)

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

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Klasy i obiekty cz I Klasy, obiekty, podstawy używania obiektów

Spis treści. 1 Java T M

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

Programowanie zdarzeniowe

Programowanie Obiektowe i C++

Michał Jankowski. Remoting w.net 2.0

Klasy cd. Struktury Interfejsy Wyjątki

Wzorce projektowe. dr Jarosław Skaruz

Zaawansowane aplikacje WWW - laboratorium

Java: interfejsy i klasy wewnętrzne

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

10. Programowanie obiektowe w PHP5

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Programowanie obiektowe i zdarzeniowe

Wzorce dystrybucji i wspólbieżności autonomicznej

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Wstęp do programowania obiektowego. Wykład 2

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Platformy Programistyczne Zagadnienia sieciowe i wątki

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Listy powiązane zorientowane obiektowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Java Język programowania

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

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie w Internecie. Java

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Transkrypt:

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 Application { public Application() { Button[] toolbar = { new Button("New"), new Button("Open"), new Button("Save"),... ; public void action(button btn) { if(btn.action == "New") { document = newdocument(); else...

class Application { public Application() { Button[] toolbar = { new Button(new AkcjaNewDocument()), new Button(new AkcjaOpenDocument()), new Button(new AkcjaSaveDocument()),... ; public void action(button btn) { btn.action.execute(); class AkcjaNewDocument { document = newdocument(); class AkcjaSaveDocument { document.save();... 2/10

3/10 Struktura: Składniki: Command deklaruje interfejs wywołania operacji ConcreteCommand definiuje powiązanie między odbiorcą a poleceniem i implementuje metodę Execute (wywołując tam odpowiednie operacje odbiorcy) Client (np. aplikacja) tworzy obiekt ConcreteCommand i ustawia jego odbiorcę (Receiver) Invoker (np. menu aplikacji) wywołuje operację przy pomocy Commanda Receiver wie, jak wykonać operację (odbiorca operacji)

Zależności: Klient tworzy obiekt konkretnego polecenia i określa jego odbiorcę. Invoker przechowuje obiekty poleceń. Invoker wywołuje polecenie (metoda Execute z obiektu polecenia), w wypadku operacji cofalnych obiekt polecenia zachowuje stan sprzed wywołania metody Obiekt polecenia wywołuje operacje swego odbiorcy, wypełniając żądanie. interface Command { void execute(); class ConcreteCommand implements Command { public class Client { public static void main(...) { ConcreteCommand cmd = new ConcreteCommand(); cmd.execute(); 4/10

5/10 Zastosowanie: By parametryzować obiekty akcją, jaką mają wykonać (np. Menu). W języku C polegałoby to na użyciu wskaźnika na funkcję możemy go składować, a funkcję wywołać później. Command zapewnia to w sposób obiektowy. By specyfikować, kolejkować i wykonywać polecenia w różnym czasie czas życia obiektu Command jest niezależny od czasu życia oryginalnego polecenia. Można też przesłać obiekt żądania do innej przestrzeni adresowej. Implementacja undo pozwala zachować dane konieczne do odwrócenia operacji. Command powinna wówczas zawierać operację Unexecute, cofającą operację Execute. Wykonane operacje przechowywane na liście historii. Dziennik operacji lista wykonanych Poleceń może być zapisana, by móc np. odtworzyć ją jeszcze raz w razie awarii. Może to też służyć jako proste makro. class Matrix { private double[][] matrix;... public void set(int row, int col, double value { matrix[row][col] = value;

class SetCommand implements Command { private int row, col; private double value; public SetCommand(int row, int col, double value) { this.row = row; this.col = col; this.value = value; public void execute(matrix matrix) { matrix.set(row, col, value); public class Client { public static void main(...) { SetCommand cmd = new SetCommand(2, 3, 2.5); Matrix matrix1 = new Matrix(5, 5); cmd.execute(matrix1); Matrix matrix2 = new Matrix(3, 4); cmd.execute(matrix2); 6/10

// inne rozwiązanie: class SetCommand implements Command { private int row, col; private double value; private Matrix receiver; public SetCommand(Matrix receiver, int, int, double) { this.receiver = receiver;... receiver.set(row, col, value); public class Client { public static void main(...) { Matrix mat1 = new Matrix(5, 5); SetCommand cmd = new SetCommand(mat1, 2, 3, 2.5); cmd.execute(); 7/10

8/10 Konsekwencje: 1. Oddziela obiekt wywołujący operację (zleceniodawcę) od obiektu wiedzącego jak ją wykonać (wykonawcy). 2. Operację możemy traktować jak obiekt manipulować nią, rozszerzać, etc. 3. Można składać polecenia w bardziej złożone, np. makra (wzorzec Composite) 4. Łatwo można dodawać kolejne polecenia. Implementacja: 1. Jak bardzo inteligentne powinno być polecenie? może tylko wywołuje operację odbiorcy (definiując jedynie połączenie między odbiorcą a akcją), a może samo wszystko implementuje, odbiorcy nie angażując w ogóle (przydatne, gdy nie chcemy polegać na istniejących klasach, nie ma odbiorcy lub jest bardzo dobrze znany, np. polecenie utworzenia okna może je spełnić równie dobrze, jak każdy inny obiekt). 2. Implementacja undo/redo Command powinien umieć odwrócić swe działanie, czasem będzie musiał przechować dodatkowe informacje: odbiorcę, który wykonuje operację, argumenty operacji, oryginalne wartości, które mogły zostać zmienione w odbiorcy jako efekt wykonania operacji (aby móc przywrócić mu jego pierwotny stan), potrzebujemy całej listy Commandów, aby mieć wielopoziomowe undo.

class SetCommand implements Command { private int row, col; private double value, oldvalue; private Matrix receiver; oldvalue = receiver.get(row, col); receiver.set(row, col, value); public void unexecute() { receiver.set(row, col, oldvalue); public class Client { public static void main(...) { Matrix mat1 = new Matrix(5, 5); Stos<Command> undo = new Stos<Command>(); wykonanie akcji SetCommand cmd = new SetCommand(mat1, 2, 3, 2.5); cmd.execute(); undo.push(cmd); cofnięcie akcji undo.pop().unexecute(); 9/10

10/10 3. Kumulacja błędów w undo/redo zaokrąglenia w wielokrotnym cofaniu operacji będą się nakładać i nie wrócimy do oryginalnego stanu, zatem będziemy niekiedy potrzebowali więcej danych, by przywrócić poprzedni stan wzorzec Memento. Powiązania: Composite do budowy makr Memento może przechować stan potrzebny do cofnięcia operacji polecenie, które kopiujemy przed umieszczeniem w historii działa jak Prototyp class MacroCommand implements Command { private ArrayList<Command> commands; public MacroCommand() { commands = new ArrayList<Command>(); public void add(command cmd) { commands.add(cmd); for(command cmd : commands) cmd.execute();