Memento. Obnovení operačního systému ( Windows | Linux...) Všichni víme, co jsou transekce v databázi Memento – zálohování databáze.

Slides:



Advertisements
Podobné prezentace
Funkce Připomeňme si program pro výpočet faktoriálu:
Advertisements

Proxy. Definice  zástupce nebo náhradník za dotyčný objekt  proxy i zastoupený objekt dědí od stejného interfacu  proxy kontroluje přístup k objektu.
Pole, ukazatele a odkazy
Uživatelská rozhraní Uživatelská rozhraní 9. cvičení.
1NPRG054 Vývoj vysoce výkonného software /2013 David Bednárek Domácí úkol.
Práce se soubory. Ukládání dat Textové soubory s jednoduchou strukturou (např..txt a.csv) textové soubory s vnitřní hierarchií (např..xml) Soubory binárního.
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Singleton 1 1.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Čtvrté cvičení Objektové programování Objektový model v Javě
C++0x stručný náhled na nadcházející revizi standardu programovacího jazyka C++ (ISO/IEC 14882) Jan Ringoš.
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
PB161 – Programování v jazyce C++ Objektově Orientované Programování
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
C# - Exceptions (výjimky)
Identity Field Radim Veselý ČVUT v Praze Radim Veselý ČVUT v Praze Michal Kouřík ČVUT v Praze
Objektové programování
Podpora vláken a jejich synchronizace v jazyce C# Jan Kučera Jan Mittner Petr Effenberger 4IT353 Klient/server aplikace v Javě.
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Composite [kompozit, ne kompozajt]. Composite Výslovnost  kompozit, ne kompozajt Účel  Popisuje, jak postavit hierarchii tříd složenou ze dvou druhů.
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Association table mapping Jakub Chalupa Naim Ashhab ČVUT FEL A7B36ASS – Architektura SW systémů LS 2014.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
12/04/20151 Kolekce (1) Kolekce (collection) představují standardní datové struktury (seskupení) prvků (objektů) Jsou definovány ve jmenném prostoru System.Collections.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Decorator. Rozšiřuje objekty o dodatečné chování  rozšiřuje konkrétní objekty, ne třídy  rozšiřuje objekt dynamicky, tj. za běhu Upřednostňuje kompozici.
Návrh podle kontraktu - klasická metodika a moderní nástroje Tomáš Pitner Masarykova univerzita v Brně Fakulta informatiky
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
Pokročilé programování v C++ (část B)
Foreign key mapping Jakub Chalupa Naim Ashhab ČVUT FEL
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Kam se ubírá jazyk C#? Dr. Ing. Dalibor Kačmář Academic Developer Evangelist Developer & Platform Evangelist Group Microsoft Czech & Slovakia Anders Hejlsberg.
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
Prototyp. O čem to bude? Prototyp Účel  vytváření objektů  nový objekt se vytváří kopírováním (klonováním) vzoru – prototypu.
Observer Martin Dráb Návrhové vzory, Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
Iterator Iterator – Problém struct Item { int _value; Item * _next; Item( int value, Item * next ) : _value( value ), _next( next ) { } }; void Print(
Template Method. Motivační příklad – reálný svět Čaj 1) Uvař vodu 2) Dej do hrnku sáček čaje 3) Zalij hrnek 4) Přisyp cukr a vymačkej citrón Káva 1) Uvař.
Uživatelská rozhraní Cvičení 12a Martin Němec A
Iterator. C historie int * rand_numbers(int n) { int *numbers = malloc(n * sizeof(int)); int *it = numbers; while (it < numbers + n) *it++ = rand(); //
Proxy. Proxy poskytuje bariéru mezi klientem a reálnou implementací.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Memento. Motivace – kalkulačka 210° sin * /20 ? 0.25 ^2 ?
Strategy. Motivace Ze života - jak to taky může vypadat (R): source("../algorithms/HOCForLOCF.R") source("../algorithms/HOCForLOCFv2.R") source("../MILP/MILP.R")
SOLID principy v OOP návrhu
Y36PJC Programování v jazyce C/C++
Y36PJC Programování v jazyce C/C++
Návrhový vzor Flyweight
Abstract Factory.
Lazy load Použity informace z knihy Patterns of Enterprise Application Architecture od M. Fowlera Jan Sládek.
Strategy „Definujte rodinu algoritmů, zapouzdřuje je aby byly vzájemně zaměnitelné. Strategie umožňuje, aby se algoritmus nebyl závislý na klientech, kteří.
Bridge.
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Proxy 1.
Adapter
Composite “Spojuj a panuj”.
Bridge.
Transkript prezentace:

Memento

Obnovení operačního systému ( Windows | Linux...) Všichni víme, co jsou transekce v databázi Memento – zálohování databáze

Občas je potřeba udělat kroky zpět Memento –kroky zpět Dead move

Memento Známý také jako  Token, Snapshot Účel  Kategorie: behavioral patterns (vzory chování)  Uchovávání vnitřního stavu objektu bez porušení zapouzdření Motivace  Undo/rollback  Checkpointy  Pro dočasné operace nebo zotavení z chyb Použití  Save/Load funkce ve hrách  Transakce v databázích  Složité matematické výpočty, při kterých se můžou ztratit dlouho počítaná data  V grafických editorech, pro uchování stavu obrazovky při posouvaní objektů

Memento – struktura Struktura Účastníci  Originator : Objekt, jehož vnitřní stav chceme uložit  Memento : Reprezentuje uložené stavy Originátoru  Caretaker : Řídí ukládání/načítání Mementa do/z Originátoru

Memento – účastníci Memento  Uchovává vnitřní stav Originátoru  Implementuje 2 různá rozhraní:  Wide Interface – pro Originator  Narrow Interface – pro Caretaker  Chrání privátní data Originátora Originátor  Vytváří Memento pro uchování svého vnitřního stavu  Používá Memento pro obnovení svého vnitřního stavu Caretaker  Je zodpovědný za uchování Mementa  Nevidí obsah Mementa

Memento – interakce Caretaker požádá Originator o Memento. Nějaký čas jej podrží a pak vrátí zpátky Originátoru.

Memento – souvislosti Vlastnosti  Uchovává vnitřní stav objektu a umožňuje jeho pozdější obnovení  Uchovává stav mimo vlastní objekt  Zjednodušuje Originator  Zabraňuje odhalení vnitřních částí Originátoru  Caretaker může aplikovat různé strategie pro uchovávání/zahazování   Může být paměťově náročné  Je úzce svázané s typem objektu, jehož obsah si pamatuje  Definice dvou různých rozhraní může být v některých jazycích složitá

C++  Memento – privátní metody Zpřístupněné Originátoru pomocí klíčového slova friend class Originator { public: Memento* createMemento(); void setMemento(const Memento*); private: State* state_; }; class Memento { public: virtual ~Memento(); private: friend class Originator; Memento(); void setState(State*); State* getState(); private: State* state_; }; Metody zpřístupněné Originátoru Memento – implementace

Java  Memento je vnitřní třída třídy Originator Bez problémů přistoupí k privátním položkám třídy Originator class Originator { private String state; public void set(String state) { this.state = state; } public Memento getMemento() { return new Memento(state); } public void restoreFromMemento(Memento memento) { state = memento.getSavedState(); } public static class Memento { private final String state; private Memento(String stateToSave) { state = stateToSave; } private String getSavedState() { return state; } Memento – implementace

C# // Originator [Serializable()] class Originator { List state = new List (); public void Operation (string s) { state.Add(s); foreach (string line in state) Console.WriteLine(line); Console.WriteLine("======================="); } // The reference to the memento is passed back to the client public Memento SetMemento() { Memento memento = new Memento(); return memento.Save(state); } public void GetMemento(Memento memento) { state = (List ) memento.Restore(); } Memento – implementace [Serializable()] // Serializes by deep copy to memory and back class Memento { MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); public Memento Save (object o) { formatter.Serialize(stream, o); return this; } public object Restore() { stream.Seek(0, SeekOrigin.Begin); object o = formatter.Deserialize(stream); stream.Close(); return o; } class Caretaker { public Memento Memento {get; set;} }

Memento – implementace Serializace  Levný způsob zachycení aktuálního stavu Originátoru  Snazší perzistence Ukládání přírůstkových změn  Memento obsahuje změny vůči předcházejícímu stavu  Originator musí dostat Mementa ve správném pořadí  Můžeme kombinovat přírůstková Mementa s Mementy obsahujícími plný stav

Memento – příklady Kalkulačka s funkcí undo  Uživatel chce mít možnost vrátit se zpátky ve výpočtu  Ne všechny funkce jsou inverzní – je nutno použít Memento  Zabrání opakování složitých výpočtů při chybě uživatele

Memento – příklady class CalculatorMemento { private: friend class Calculator; CalculatorMemento(); CalculatorMemento(const int value) : value_(value) { } void setState(const int value) { value_ = value; } int getState() const { return value_; } int value_; } Kalkulačka – Memento Stav Originátoru. Hodnota na kalkulačce Zabrání vytváření Mementa mimo Originator

Memento – příklady class Calculator { public: Calculator() : value_(0) { } void execute(const Command command, const int value) {... } const CalculatorMemento *createMemento() { return new CalculatorMemento(value_); } void setMemento(const CalculatorMemento *m) { value_ = m->getState(); } private: int value_; }; Kalkulačka – Originator Originator se nestará o objekt Mementa

Memento – příklady class CalculatorWithUndo { public: void execute(const Command command, const int value) { undoStack_.push(calculator_.createMemento()); calculator_.execute(command, value); } void undo() { if (!undoStack_.empty()) { const CalculatorMemento *m = undoStack_.top(); calculator_.setMemento(m); delete m; undoStack_.pop(); } private: std::stack undoStack_; Calculator calculator_; }; Kalkulačka s funkcí undo – Caretaker Uložení stavu před vykonáním příkazu Caretaker má zodpovědnost za objekt Mementa Zásobník pro jednotlivá Mementa a undo operace

Memento – příklady class Game { // nine spaces char[] board = { 'X', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; public void Play(int pos) { } // The reference to the memento is passed back to the client public Memento Save() { Memento memento = new Memento(); return memento.Save(board); } public void Restore(Memento memento) { board = (char[])memento.Restore(); Player = board[0]; } public void DisplayBoard() { } Piškvorky s funkcí undo C# – Originator

Memento – příklady [Serializable()] // Serializes by deep copy to memory and back class Memento { MemoryStream stream = new MemoryStream(); static BinaryFormatter formatter = new BinaryFormatter(); public Memento Save(object o) { formatter.Serialize(stream, o); return this; } public object Restore() { stream.Seek(0, SeekOrigin.Begin); object o = formatter.Deserialize(stream); stream.Close(); return o; } Piškvorky s funkcí undo C# – Memento a Caretaker class Caretaker { public Memento Memento { get; set; } }

Memento – shrnutí Kdy užít Memento  Je-li potřeba zachovat vnitřní stav objektu  Je-li nepřípustné porušit zapouzdření Související návrhové vzory  Command Užívá Memento pro vrácení při nevratných operacích  Iterator Mementa mohou být použita pro iteraci