Introduktion til design patterns.

Relaterede dokumenter
Objekt-orienteret programmering uden klasser: Self.

4 Basal Objekt-orienteret Programmering I.

Hassansalem.dk/delpin User: admin Pass: admin BACKEND

Objektorienteret design med arv og polymorfi:

Objektorientering. Programkvalitet

Arkitektur for begyndere

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Singleton pattern i C#

Singleton pattern i Java

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.

13 Objekt-orienteret Design.

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Undervisningsbeskrivelse

29 Opsamling af Objekt-orienteret Programmering.

Opdatering i tabellen

2 Abstrakte datatyper.

Multiparadigme Programmering

Designmønstre Baggrund og eksempler

Lektion 3. Grundlæggende programmering i VR

Begreber om Godt Software

Database for udviklere. Jan Lund Madsen PBS10107

Casper Fabricius ActiveRecord. O/RM i Ruby on Rails

Object-Relational Mapping

CCS Formål Produktblad December 2015

2. Systemarkitektur... 2

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav.

Introduction til.net remoting i C#

Procedurer for styring af softwarearkitektur og koordinering af udvikling

3 Algebraisk Specifikation af Abstrakte Datatyper.

A Profile for Safety Critical Java

Introduction til.net remoting i VB.NET

Aftenskole i programmering sæson Registrering af tid. Sæson 2 - Lektion 5

IT-arkitektur. IT-arkitektur Arkitektur på forskellige niveauer. Efter denne lektion skal du:

Objects First with Java A Practical Introduction Using BlueJ

Hvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter

Martin Geisler. Uge 49, 2001

Komme-i-gang vejledning til Septimana. For skemalægger og systemadministratorer

DM531 - Softwarearkitektur Projekt - TaxaTracer, Statisk Kort. Martin Dissing-Hansen Alexander Poopeiko Jens Riise Danielsen

CSA 1019 Imperative and OO Programming

Bringe taksonomier i spil

Component based software enginering Diku 2005 Kritikopgave

EA3 eller EA Cube rammeværktøjet fremstilles visuelt som en 3-dimensionel terning:

Forelæsning Uge 15 Mandag

Version Dato Beskrivelse /11/2012 Initial version /03/2013 Tilføjet eksempel med Template Agent, generelt udvidet dokumentet.

Metaklasser i Smalltalk.

SecureAware Opfølgning Manual

OM AT SKRIVE PROGRAM. OM AT SKRIVE PROGRAM - Studio Transformation & Architectural herritage - 6. oktober Maj Bjerre Dalsgaard

Kursuskatalog 2018 TwinCAT 2 TwinCAT 3

Undervisningsbeskrivelse

Undervisningsbeskrivelse

Specialeforsvar: Fundamentet for et fleksibelt container bibliotek

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Videregående Programmering for Diplom-E Noter

DOKUMENTBROKER Koncept

12 Metaobjekt protokoller i CLOS.

Dagens program. Domæner. change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog. Hvad er widgets.

IT-Basecamp Real World Java EE Patterns Adam Bien. Real World Java EE Patterns, Adam Bien Copyright Lund&Bendsen A/S

Der er forsøgt skrevet en lille notits hver gang der er lavet noget, dog kan der være nogle ting som ikke er blevet kommenteret.

BIM Shark brugervejledning v1 Februar 2016

Høringssvar vedr. Serviceinterface for Person

Indhold. Dansk forord... 7

Undervisningsbeskrivelse

Abstrakte datatyper C#-version

Opgaveteknisk vejledning Word Tornbjerg Gymnasium 10. december 2015

ECdox som favorit. Indledning 1. Internet Explorer 2. Chrome 4. Safari 5. Favorit på mobile enheder 6 Android 6 IOS 7. ECdox på mobile enheder 7

Specialiseringen Rapport Lavede Af Rasmus R. Sørensen Side 1 af 6

Lonbox PCM2001 betjeningsenhed

VÆRKTØJER TIL ARKITEKTER GUIDE TIL HÅNDTERING AF DWG, TIPS OG TRICKS

Exceptions i Delphi. Try except

Input fra omgivelser. Målet med øvelsen er:

Lektion 6. Grundlæggende programmering i VR

Design af genbrugeligt objektorienteret software

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

W6 - Model- og Tegningskomposition

Concurrency-mønstre i indlejrede systemer Temadag om Embeddede systemer Teknologisk Institut, 6. december 2004

Objektorienterede metoder

Side 1. Databaser og SQL. Dagens gang. Databasebegreber. Introduktion til SQL Kap 1-5

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

I det kommende afsnit vil vi løbende komme ind på de enkelte resultater og samtidig komme med bud på, hvordan disse kunne løses i fremtiden.

Videregående programmering i Java

Forelæsning Uge 15. Design af applikationer Designmønstre Computerspil 5 Exceptions og filhåndtering

EasyRun En løbers bedste ven

Undervisningsbeskrivelse

Analyse, problemområde, anvendelsesområde

Opgaveteknisk vejledning Word 2016 til Mac. Tornbjerg Gymnasium 10. december 2015

ANSØGNINGSVEJLEDNING TIL ANSØGNINGSPORTALEN, Deltidsuddannelser

Indledning...3. OnTime Kalenderen...3. Daglig brug af OnTime...4. Oversigter / Views...5. Funktioner...7. Brug af ikoner...12

Forskningsprojekt og akademisk formidling Formulering af forskningsspørgsmål

Datatekniker med programmering som speciale

Input/Output: Brugergrænseflader. dopsys

Indholdsfortegnelse. Indledning...side 1. Problemformulering... side 1. Metode... side 1. Beskrivelse af institutionen..side 1

Real-time programming safety in Java and Ada

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Datatekniker med programmering som speciale

Aftenskole i programmering sæson Watch Me. Sæson 2 - Lektion 19

Forelæsning Uge 15 Mandag

Studieordning for bacheloruddannelsen i softwareudvikling ved IT-Universitetet i København

Litterær artikel I den litterære artikel skal du analysere og fortolke en (eller flere) skønlitterære tekster samt perspektivere den/dem.

DANSK IT ARKITEKTUR CERTIFICERING

Transkript:

Introduktion til design patterns. Genbrug. Pattern languges i arkitektur. Standardbeskrivelse af design patterns. Oversigt over design patterns. Observer. Composite. Decorator. Abstract Factory. Patterns i andre sprog og paradigmer. Sproglig eller værktøjsmæssig understøttelse. Kurt Nørmark, Aalborg Universitet 11/27/96 s. 1 Denne lektion er baseret på den ny-klassiske bog Design Patterns - Elements of Reusable Object-Oriented Software af Gamma, Helm, Johnson og Vlissides fra Addison Wesley. I resten af denne lektion vil vi kort og godt referere denne bog som pattern-bogen. Som det fremgår af pattern bogen er fremstillingen og behandlingen af design pattern primært rettet mod traditionelle, objekt-orienterede programmeringssprog, såsom C++. Dog diskuteres Smalltalk også undertiden i bogen. 1

Genbrug i objekt-orienteret programudvikling. Niveauer af genbrug i objekt-orienteret programudvikling. Genbrug af klasser. Et af de oprindelige idealer omkring OOP. Genbrug af design Idealet bag design patterns Genbrug af applikationer. Idealet bag frameworks. Kurt Nørmark, Aalborg Universitet 11/27/96 s. 2 Reusability har igennem mange år været et stort og vigtigt emne i faget - ikke mindst i relation til praksis. Årsagen er naturligvis, at der er mange penge at spare, hvis man kan genbruge nogle af (eller dele af) de programmer, som bliver skrevet til forskellige formål. Der er udviklet adskillige teorier, og skrevet en del bøger om emnet. Objekt-orienteret programmering er specielt håbefuldt hvad angår genbrug. Årsagen er, at med objekt-orienteret programmering forfølger vi typisk en bottom-up strategi, hvor et antal generelle moduler udvikles inden de konkrete applikationsbehov tilgodeses. Det har dog vist sig svært at opnå massivt genbrug. Derfor arbejder nogle med genbrug på et mere overordnet niveau, f.eks. design niveau. Design patterns er udtryk for genbrug af abstrakte designs. Frameworks er et andet begreb, som er relevant i denne sammenhæng. Et framework er mere grovkornet end et design pattern. Et framework er, i modsætning til et design pattern, et generelt program, med åbninger der tillader specialisering af programmet til bestemte (relaterede) anvendelser. 2

Inspiration fra patterns i arkitektur. Inspirationen til design patterns er hentet fra Christopher Alexander s arbejde med med pattern languages inden for arkitektur. Alexander beskriver 253 patterns for design af byer, bygninger, rum, møbler mv. Patterns på forskellige niveauer. Standard beskrivelse af patterns: Navn Grafisk illustration context (patterns på højere niveau) problemformulering konsekvenser (med reference til patterns på lavere niveauer). Etablerer alt i alt ny omhyggeligt valgt terminologi pattern language udtryksformer Arbejdet bygger på idealistikse holdninger til hvad udgør god arkitektur. Living structures Kurt Nørmark, Aalborg Universitet 11/27/96 s. 3 Alexander s arbejde er beskrevet i bogen Alexander et al, A Pattern Language, Oxford University Press, 1977. På WWW har jeg en link til et essay, som bl.a. giver en god fornemmelse for naturen af Alexander s arbejde. 3

Design patterns. Beskrivelser af kommunikerende objekter - og klasser som er tilpasset løsning af generelle design problemer i en bestemt kontekst. Design patterns indfanger den objekt-orienterede struktur af et design snarere end den algoritmisk idé i et design. Essentielle elementer af design patterns: Pattern navnet: Udvider fagsproget og gør det muligt på en kvalificeret måde at tale om væsentlige elementer i et design. Problemet: Beskriver repræsentative problemer, hvor et design pattern kan anvendes. Løsningen: Skabelon der giver en abstrakt beskrivelse af en løsning på problemet, i termer af generelle arrangemener af klasser og objekter. Konsekvenser: Bekriver pragmatiske trade-offs omkring anvendelse af et design pattern. Kurt Nørmark, Aalborg Universitet 11/27/96 s. 4 4

Beskrivelse af design patterns. Det er et væsentlig karakteristika ved design patterns at disse dokumenteres ud fra en standard disposition. Også på dette område er inspirationen hentet direkte fra Alexander s arbejde inden for arkitektur. Pattern navn og klassifikation. Hensigt. Andre navne for pattern et. Motivation. Anvendelighed. Struktur (klasse- og objektdiagrammer). Deltagere. Samarbejde. Konsekvenser. Implementation Eksempelprogrammer. Kendte anvendelser. Relaterede patterns. Kurt Nørmark, Aalborg Universitet 11/27/96 s. 5 Pattern bogen indeholder et katalog med 23 pattern. Hvert af disse er dokumenteret i forhold til overskrifterne listet ovenfor. Dette bidrager til en form for standard dokumentation for design patterns. Der er en betydelig redundans imellem nogle af afsnittene i dokumentationen af design patterns. Dette betyder dog i praksis, at ideen bag et bestemt pattern træder tydeligere frem for læseren - netop idet læseren får mere en én chance for at forstå det essentielle omkring et mønster. 5

Oversigt over design patterns. I pattern bogen inddeles design patterns i tre kategorier: Creational patterns, structural patterns og behavioral patterns. Creational patterns Abstract factory Builder Factory Method Prototype Singleton Structural patterns Adapter Bridge Composite Decorator Facade Flyweight Proxy Behavioral patterns Chain of responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template method Visitor Kurt Nørmark, Aalborg Universitet 11/27/96 s. 6 De fedt kursiverede design patterns i listen ovenfor vil blive nærmere behandlet i denne lektion. I næste lektion planlægger vi at se nærmere på bl.a. de kursiverede design patterns. 6

Model-view-controller. Model-view-controller er en klassisk objekt-orienteret strukturering af en brugergrænseflade i et Smalltalk program. Input Controller View Model I relation til moderne design patterns er model-view-controller opdelt i et antal mindre omfattende mønstre: Observer: Understøtter multiply views på en model. Composite: Understøtter views med subviews. Strategy Kurt Nørmark, Aalborg Universitet 11/27/96 s. 7 Mange brugergrænseflader i Smalltalk er implementeret ved brug af model-viewcontroller idéen. Man kan sagtens sige, at model-view-controller er et design pattern i sin helhed. Blot har forfatterene af pattern-bogen valgt at slå ned på patterns, der er på et lidt lavere niveau, således at forstå at to (måske tre) patterns fra bogen indgår i model-view-controller. 7

Observer (1). En én-mange sammenhæng mellem et objekt og dets observatører. Når objektet skifter tilstand bliver observatørerne adviseret og opdateret automatisk. Løs og minimal kobling mellem subject objektet og dets observatører. Subject Attach(observer) Detach(observer) Notify observers for all o in observers do o.update Observer Update ConcreteSubject GetState SetState return SubjectState subject Concrete Observer Update ObserverState observerstate := subject.getstate SubjectState Kurt Nørmark, Aalborg Universitet 11/27/96 s. 8 Med denne og de følgende slides går vi over til at studere konkrete bud på design patterns. Materialet på slides er taget forholdsvis direkte fra pattern bogen. 8

Observer (2). En konkret observatør ændres, hvorved tilstanden i modellen (subject objektet) ændres. Subject objektet sender sig selv Notify beskeden, som meddeler alle observatører, at modellen er opdateret. Hver observatør henter den fornødne tilstand(sændring) i subjekt objekt med henblik på at opdatere sig selv. aconcretesubject aconcretobserver anotherconcreteobserver Notify SetState Update GetState Update GetState Kurt Nørmark, Aalborg Universitet 11/27/96 s. 9 9

Composite (1). Sammensætning af objekter i hierarkier af helheder og dele. Manipulation af helheder afstedkommer tilsvarende manipulation af dele. Statisk strukturdiagram af typisk eksempel: Graphic Add(Graphic) Remove(Graphic) GetChild(Graphic) Line Rectangle Text Picture Add(Graphic) Remove(Graphic) GetChild(Graphic) graphics forall g in graphics g. Kurt Nørmark, Aalborg Universitet 11/27/96 s. 10 10

Composite (2). Objektdiagram af typisk eksempel: apicture apicture aline arectangle atext aline arectangle Når et Picture-objekt tegnes bliver alle del-picture objekter tegnet. Klienten af Pictures opnår et homogent syn på sammensatte og atomare pictures. Klienten skal ikke bekymre sig om andet en helheds objektets tegning. Det er et problem at understøtte Add, Delete og GetChild på atomare objekter. Kurt Nørmark, Aalborg Universitet 11/27/96 s. 11 11

Composite (3) Generaliseret strukturdiagram: Client Component Operation Add(Graphic) Remove(Graphic) GetChild(Graphic) Leaf Operation Composite Operation Add(Graphic) Remove(Graphic) GetChild(Graphic) children forall g in graphics g.operation Kurt Nørmark, Aalborg Universitet 11/27/96 s. 12 12

Decorator (1). Tilføjer egenskaber til et objekt på en dynamisk basis i modsætning til statisk udvidelse af en klasse via nedarvning VisualComponent TextView Decorator component component. ScrollDecorator ScrollTo scrollposition BorderDecorator Border borderwidth Decorator::; Border Kurt Nørmark, Aalborg Universitet 11/27/96 s. 13 13

Decorator (2). Klient aborderdecorator ascrolldecorator Fra et klient-synspunkt er alle tre objekter VisualComponents. atextview Når der opereres på aborderdecorator tegnes kanten, hvorefter ascrolldecorator tilsendes samme besked. Når der opereres på ascrolldecorator tegnes scroll bars, hvorefter atextview sendes samme besked. Når der opereres på atextview tegnes det tekstuelle syn på objekter (det egentlige arbejde). Et objekt kan erstattes af en af sine decorators. Decorators kan tilføjes eller fjernes på programmets udførelsestidspunkt. Kurt Nørmark, Aalborg Universitet 11/27/96 s. 14 14

Decorator (3). TextView En statisk løsnig med multipel nedarvning. En dårlig og kompliceret løsning TextViewWithScrollbar TextViewWithBorder TextView:: Scrollbar Scrollbar ScrollTo scrollposition Border borderwidth TextViewWithScrollbarAndBorder Scrollbar ScrollTo scrollposition TextView:: Border TextView:: TextViewWithBorder::Border TextViewWithScrollbar::Scrollbar Kurt Nørmark, Aalborg Universitet 11/27/96 s. 15 15

Abstract Factory (1). Muliggør skabelse af familier af relaterede og afhængige objekter uden angivelse af disses konkrete klasser. VidgetFactory Client CreateScrollbar CreateWindow Window MacWidgetFactory Window95WidgetFactory MacWindow Windows95Window CreateScrollBar CrateWindow CreateScrollBar CrateWindow Scrollbar creates MacScrolbar Windows95Scrollbar creates Kurt Nørmark, Aalborg Universitet 11/27/96 s. 16 16

Abstract Factory (2). Mønstret er velegnet til skabelse af familier af produkter (objekter), eksempelvis widgets på en bestemt platform. Skabelse af objekter varetages af et fabrikationsobjekt, som er bundet til en bestemt produktfamilie. Alle fabrikationsobjekter har samme grænseflade. Det er muligt dynamisk set at udskifte ét fabrikationsobjekt med et andet. En klient kender den abstrakte fabrikationsgrænseflade samt de abstrakte grænseflader af de respektive produkter. Kurt Nørmark, Aalborg Universitet 11/27/96 s. 17 17

Abstract Factory (3). AbstractFactory Client CreateProductA CreateProductB AbstractProductA ConcreteFactory2 ConcreteFactory1 ProductA2 ProductA1 CreateProductA CreateProductB CreateProductA CreateProductB AbstractProductB creates ProductB2 ProductB1 creates Kurt Nørmark, Aalborg Universitet 11/27/96 s. 18 18

Design patterns i forhold til andre sprog og paradigmer. I relation til sprog med dynamisk nedarvning (Self): Decorator kan laves ved blot at justere én parent reference. I relation til sprog, hvor klassen af objekter kan ændres dynamisk: Decorator kan laves ved at ændre på klassen af et objekt. I relation til sprog hvor klasser er objekter (Smalltalk og CLOS): I Abstract Factory kan hele factory hierarkiet erstattes med ét fælles objekt, som understøtter en make funktion: make(familie, produkt) make kan slå klassen op i en tabel og instantierer denne. I relation til sprog, som ikke har statisk typing:... I relation til sprog, som hvor funktioner er af første klasse:... Kurt Nørmark, Aalborg Universitet 11/27/96 s. 19 19

Understøttelse af design-pattern i programmeringssprog og programmeringsomgivelser. Understøttelse i programmeringssprog: Kan design patterns indbygges som sproglige konstruktioner i programmeringssprog? Gæt: Umådelig tungt og omstændeligt. Næppe umagen værd. Understøttelse i programmeringsomgivelser: Er det muligt at bevidstgøre programmeringsværktøjet om tilstedeværelsen af design patterns i et program? Markere klasser, som indgår i et design pattern. Særligt attraktivt i sprog, hvor klasser repræsenteres som objekter. Understøtte at en klasse simultant kan indgå i flere design patterns. Eksempelvis: Browse design patterns i et program. Et godt projekt! Kurt Nørmark, Aalborg Universitet 11/27/96 s. 20 20