180 likes | 312 Views
Design Patterns. Iterator & Mediator. Gruppe 8. Presentasjonsgruppe: Resten av gruppen: Marianne Ates Andrè Johansen Tom Vidar Lunde Hege-Kristin Johansen Marit Bøe Finden Herman Kolås Jonas Lillevold. Objekt-orientert design.
E N D
Design Patterns Iterator & Mediator
Gruppe 8 Presentasjonsgruppe: Resten av gruppen: Marianne Ates Andrè Johansen Tom Vidar Lunde Hege-Kristin Johansen Marit Bøe Finden Herman Kolås Jonas Lillevold
Objekt-orientert design En samling elementer – klasser og objekter – som er tilrettelagt slik at de til sammen fungerer som en helhet
Design Patterns Begrepet oppsto i 1994/95 i boka: ”Designpattern – Elements of Reusable Object Oriented Software” Av: Erich Gamma, Richard Helm, Ralph Johnson og John Vlissides.
Design Patterns • Definisjon: • Designpatterns kan beskrives ved at de i en abstrakt formbeskriver et designproblem i en gitt sammenheng, samtbeskriver hvordan elementene – klassene og objektene – børorganiseres for å løse problemet.
Fordeler med Designpatterns Bruk av Designpatterns bidrar til: • Bedre arkitektur • Bedre kommunikasjon mellom prosjektdeltakerne • Bedre forståelse av problemstillinger og hvordan de skal/bør løses • At systemer ikke bare blir bedre, men også produsert raskere • Å gi systemer lengre livsløp samt lavere totale livskostnader
Patternkatalog Det finnes tre hovedtyper designpatterns. Katalogene her er organisert med base på hovedformålet: • Creation pattern – dvs pattern som brukes med formål å abstraktere hvordan objekter produseres / instantieres. • Structural patterns – dvs pattern med formål å bygge større objektkomposisjoner / - strukturer. • Behavior patterns – dvs patterns med formål å komponere funksjoner med basis i hvordan et antall objekter kommuniserer og funksjonerer. • VI skal ta for oss 2 typer av designpattern; iterator og mediator pattern som er katalogisert som behavior patterns
Iterator Pattern • Definisjon: • Tilrettelegge en ensartet metode for å sekvensielt traversere et objekts elementer uten at den underliggende datastrukturen eksponeres.
Client Iterator First() Next() IsDone() CurrentItem() ConcreateAggregate CreateIterator() ConcreateIterator UML Class Diagram: Iterator Pattern Aggregate CreateIterator() Return new ConcreateIterator(this);
Iterator Pattern: UML class - diagram • The Client (Klienten):Ønsker å aksessere en liste • Klasser og/eller elementer som er med i mønsteret er: • The Aggregate (samling):Interfacet som oppretter et objekt som gir adgang til klienten (i.e. Iterator) • Iteratoren (abstrakt iterator):Definerer et Interface for å opprette et Iterator objekt. Interfacet brukes av klienten til å aksessere (gi tilgang) og traversere elementene I lista. • ConcreteAggregate (Collection, samling):Koden som implementerer Iterator. Oppretter et Interface for å returnere en instans av klassen ConcreteIterator. • ConcreteIteratorImplementerer Iterator Interfacet.
Iterator Pattern Fordeler: • Klienten ser et enkelt interface fra Aggregate. • Det er forskjellige måter å traversere et Aggregate. • Klienten kan fremføre mer en èn traveresering på samme liste og samtidig. • Interfacet sørger for at Aggregatet er konsistent, uavhangig av hvilken struktur som implementasjonen bruker. Ulemper: • Dynamisk fordeling av Iterator ender ofte opp med “lekkasjer” fordi det er lett å glemme å slette dem. Relaterte Pattern: • Composite • Factory • Memento
Code Example (modified from [Bono, 2001]) // Aggregatetemplate <class Type> class List { friend class ListIter<Type> public: //. . . }; // Iteratortemplate <class Type> class ListIter { public: ListIter(const List<Type> &l); const Type &curr() const; Type &curr(); void next(); int done() const; private: Node<Type> *curr; }; // Concrete Iterator - iterListIter<int> iter(list); int n = 0; int sum = 0; while (!iter.done()) { sum += iter.curr(); };// Implementation// constructortemplate <class Type> ListIter<Type>:: ListIter(const List<Type> &l) : curr(l.listp) { } // curr()template <class Type> const<Type> & ListIter<Type>:: curr() const { return curr->value; } // next()template <class Type> void ListIter<Type>:: next() { curr = curr->next; } // done()template <class Type> int ListIter<Type>:: done() const { return curr == NULL; } // Clientvoid main () { // Concrete Aggregate - listList<int> list = new List<int>(...); ... cout << "Average = " << avg(list); ... } float avg (const List<int> &list) { Eks. kode
Mediator Pattern • Definisjon: • La et objekt være ansvarlig for å koordinere hvordan et antall andre objekter kommuniserer med hverandre og derigjennom kunne styre ulike typer av kommunikasjonsmønstre.
Forandring på systemet rammer bare Mediator, andre objekter kan brukes som de er. Siden Mediator (mekler) og dens colleagues (kollegaer) bare er knyttet sammen ved hjelp av en løs kopling, kan begge bli variert og brukt om igjen uavhengig av hverandre. Siden Mediator benytter seg av ”en-til-mange” relasjoner blir systemet lettere å forstå. Siden alle hendelsene mellom colleagues (kollegaer) er integrert i Mediator, fører dette ofte til at Mediator-klassen blir veldig kompleks og dermed vanskelig å opprettholde. Fordeler - Ulemper