Begreber i GUI-programmering

 

 

I dette kapitel vil vi introducere en række begreber som spiller en rolle i den videre forståelse af GUI-programmering. Vi skal ikke her se på egentlig GUI-programmering.

 

1. Model-View-Controller

Rent design-mæssigt er næsten al implementation af grafiske brugergrænseflader baseret på MVC Pattern (kaldet Model-View-Controller). Dette design pattern beskriver samspillet mellem de grafiske elementer og den bagved liggende datarepræsentation. Hvis man ikke kender MVC, følger her en kort præsentation af design idéen.
Grundidéen i MVC er at opdele systemet i tre dele: Model, View og Controller. I sin simpleste form er dette tre objekter:
Figur 1:
Model, View og Controller
View er output Formålet med view er at vise en repræsentation af de data, der befinder sig i modellen. En sådan repræsentation, kan være baseret på en større eller mindre del af de data der er i modellen, og derfor ikke nødvendigvis lavet så den viser hele modellen. Flere forskellige views kan være tilknyttet samme model, og hver for sig vise forskellige dele af modellens data på forskellig måde. Lidt firkantet kan man sige, at view er systemets output.
Controller er input Formålet med controller er at ændre de data der befinder sig i modellen. Da vi naturligvis arbejder med objektorientering, er der i realiteten tale om at påvirke modellen, og dermed indirekte ændre data. Der er nogle gange også en forbindelse til view, idet man kan give en controller mulighed for at konfigurere hvordan view viser data fra modellen. Lidt forenklet kan man betegne controller som systemets input.
Model er datakernen Model har til opgave at opbevare og ændre de data som systemet har til formål at manipulere i forbindelse med den grafiske brugergrænseflade. Man kan betegne modellen som systemets datakerne.
Når der sker ændringer i modellen meddeles det view som opdaterer sin grafiske repræsentation af de relevante data fra modellen. Samspillet mellem modellen og view følger Observer Pattern, som også spiller en rolle i forbindelse med events (se senere).

 

2. Containere

Container-begrebet spiller en central rolle i organiseringen af de enkelte grafiske elementer i en brugergrænseflade. Mange af de grafiske elementer er selv containere, og derved bliver det muligt at lave nestede strukturer, hvor containere er indeni containere.
Følgende figur illustrerer, på abstrakt vis, denne egenskab ved containere.
Figur 2:
Container-begrebet
At placere containere indeni andre containere, giver mulighed for to ting. Først og fremmest kan man opbygge mere komplekse grafiske elementer, men man får også mulighed for at styrre placeringen af elementerne på skærmen.
Opbygningen med containere indeni containere følger det design pattern, der hedder Composite Pattern. Det er dog ikke nødvendigt at man har en dybere forståelse af dette pattern for at kunne bruge det i denne forbindelse.

 

3. Events

Interaktionen mellem bruger og proces, i brugergrænsefladen, er event-styret. Dvs. at systemet venter på, at en af flere hændelser indtræffer, hvorefter det kommer med en reaktion. Dette perspektiv er meget use-case orienteret, og selve begrebet use-case er givetvis stærkt inspireret af dette design.
Event-propagering Events er objekter, der propageres rundt i systemet, hvor de behandles. Hvis man som objekt ønsker at modtage events vedrørende et grafisk element, skal man tilmelde sig hos det pågældende element. Dette gøres typisk ved at kalde en metoder der hedder add-et-eller-andet-Listener, på elementet, med en reference til sig selv (this) som parameter.
Event-listeners Mange objekter kan tilmelde sig som såkaldte event-listeners, hos det samme element. Alle disse event-listeners vil få besked når en event opstår i forbindelse med det grafiske element.
Selve forholdet mellem event-listeners og de grafiske elementer,de lytter efter events fra, implementeres med Observer Pattern. Man kan sammenligne det med at abbonnere på en nyhedstjenenste; hvor der her er tale om events.