Lecture overview -- Keyboard shortcut: 'u'  Previous page: Iterator ideen -- Keyboard shortcut: 'p'  Next page: Generelt om designmønstre [Section] -- Keyboard shortcut: 'n'  Lecture notes - all slides and notes together  slide -- Keyboard shortcut: 't'  Help page about these notes  Alphabetic index  Course home  Page 6 : 31
Forelæsningsnoter i Objekt-orienteret Programmering
Designmønstre
Iterator opfattet som et designmønster

Her vil vi beskrive Iterator opfattet som et designmønster. Vi følger beskrivelses skabelonen fra Gamma og co. 'Design pattern bog', jf. henvisningen herunder. For nogle forhold beskriver vi faktiske egenskaber af Iterator. For andre forhold (kursiverede) beskriver på et mere overordnet niveau hvad de enkelte dele af dokumentationsskabelonen indeholder

Som et designmønster beskrives Iterator i en bredere kontekst end 'gennemløb af en kædet liste'

Beskrivelsen af Iterator følger en skabelon, der er fælles for et helt katalog af mere eller mindre relaterede designmønstre

  • Formål

    • At give sekventiel tilgang til et aggregeret objekt' uden at røbe objektets datarepræsentation

  • Motivation

    • Undgå at udvide aggregate klassen med gennemløbs metoder

    • Motiverende diskussion gennem 'prototypiske eksempler': listeiterator og træiterator

    • Introducerer ideen om polymorf iteration

Betegnelsen 'aggregate' klassen hentyder naturligvis til en klasse som aggregerer en række bestanddele. Vi kalder også undertiden en sådan klasse for en Container.

Polymorf iteration opnås ved at definere én fælles grænseflade (ala Java interface) for en bred klasse af gennemløb. Derved overlever en klientklasse selv om den underliggende liste og/eller iterator skiftes ud

  • Anvendelighed

    • Mønstret bruges når man vil gennemløbe et aggregeret objekts indhold uden at udstille dets interne repræsentation

    • Understøtter flere samtidige gennemløb

    • Tilbyder gennem polymorfe iteratorer en uniform grænseflade for gennemløb af forskellige aggregerede strukturer

  • Struktur

Strukturdiagram for en iterator, hvor vi anvender generelle begreber i modsætning til listebegreber. Her og i det følgende benytter vi en OMT agtig grafisk notation, ligesom i Design Patterns bogen. Notationen ligner UML, som den kendes fra kurset System Analyse og Design. Vi forklarer notationen i takt med at vi skrider frem. Den stiplede pil fra ConcreteAggregate til ConcreteIterator betyder at ConcreteAggregate har skabt ConcreteIterator

  • Deltagere

    • Kort beskrivelse af deltager klasser i mønstret: Iterator, ConcreteIterator, Aggregate, og ConcreteAggregate

  • Samarbejde

    • Kort beskrivelse af den måde objekterne, som indgår i mønstret, samarbejder med hinanden

  • Konsekvenser

    • Muliggør variationer i gennemløb ved at implementere flere iteratorklasser med sammen grænseflade

    • Gør aggregate klassen simplere, idet funktionalitet udfaktoriseres til Iterator klassen

    • Mere end ét gennemløb kan være aktivt ad gangen idet hver Iterator objekt har sin egen tilstand

  • Implementation

    • Fyldig diskussion af Implementors i forskellige programmeringssprog

  • Eksempel program

    • Illustration af Iterator aspekter gennem konkrete programfragmenter

  • Kendte anvendelser

    • Beskrivelse af publicerede eller kendte programmer, hvor mønstret bliver anvendt i praksis

  • Relaterede mønstre

    • Alternative mønstre, eller mønstre der anvendes sammen med Iterator

  • Bog om design patterns: 'Design Patterns - Elements of reusable object-oriented software' af Gamma, Helm, Johnson og Vlissides, Addison Wesley, 1995
    The reference above goes to paper material
 

Design Patterns bogen, som er refereret ovenfor, er den mest kendt og udbredte bog om mønstre. Men der er også en del andre. En del af materialet i disse noter er tilpasset direkte fra denne bog.