Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Frameworks Hændelsesstyret programmering: ”Don’t call us - we call you”

Lignende præsentationer


Præsentationer af emnet: "Frameworks Hændelsesstyret programmering: ”Don’t call us - we call you”"— Præsentationens transcript:

1 Frameworks Hændelsesstyret programmering: ”Don’t call us - we call you”

2 DAIMIIntroducerende Objektorienteret Programmering10A.2 Lagdelt design  Ofte bygger vi en applikation op lagvis af gradvist mere komplicerede stykker: Windows 95 Java Turtle Figurtegning

3 DAIMIIntroducerende Objektorienteret Programmering10A.3 Lagdelt design  Hvert lag kan opfattes som brugere af lagene nedenunder.  Det øverste lag har kontrollen/styringen af applikationen. Windows 95 Java Turtle Figurtegning

4 DAIMIIntroducerende Objektorienteret Programmering10A.4 read-dispatch-print-loop  Mange tekstbaserede programmer implementerer den samme fundamentale struktur: read-dispatch-print-loop read:Lad brugeren indtaste en kommando dispatch:Fortolk og udfør kommandoen print:Vis resultatet af kommandoen loop:Og start forfra igen  Eksempler: showboat  Denne løkke kalder vi kontrolløkken

5 DAIMIIntroducerende Objektorienteret Programmering10A.5 Hændelsesstyret programmering  I hændelsesstyret programmering har man samme basale mekanisme, men der er ikke os, som definerer kontrolløkken, men derimod et lag, som kan opfattes som liggende “over” vores programkode: Windows 95 Java Vores applikation Kontrollag

6 DAIMIIntroducerende Objektorienteret Programmering10A.6 Kontrollaget  Kontrollaget definerer kontrolløkken, kommunikerer med brugeren og kalder vores applikationslag, når brugerens handling er fortolket: read:Lad brugeren udføre en handling dispatch:Fortolk og kald applikationslaget loop:Og start forfra igen  “Don’t call us - we will call you”

7 DAIMIIntroducerende Objektorienteret Programmering10A.7 GUI’s  Hændelsesstyret programmering er de-facto standarden for, hvordan grafiske brugergrænseflader programmeres: Kontrollag: Loop indtil brugeren klikker på en knap. Kald applikations- lagets “start” eller “stop” metode Applikationslag: Tilbyder metoderne “start” og “stop”

8 DAIMIIntroducerende Objektorienteret Programmering10A.8 Bindingen mellem lagene  Kontrollaget og applikationslaget skal bindes sammen på en generelt måde - det er jo ikke os selv, som skriver kontrollaget, så hvordan kan det eksempelvis kalde “start” og “stop”?  Nogle forslag - har vi nogle mekanismer, der kan specialiserer et kontrollag til vores formål?

9 DAIMIIntroducerende Objektorienteret Programmering10A.9 Specialisering af kontrollag  Kontrollaget er realiseret ved hjælp af abstrakte klasser, og vi kan specialisere disse til vores specielle formål. abstract class controller { public abstract void ButtonPressed(); } class mycontroller extends controller { public void ButtonPressed() { Session.start(); } Kontrollag Applikationslag

10 DAIMIIntroducerende Objektorienteret Programmering10A.10 Eksempel: Multimedie  Det Egyptiske museum i Cairo har bedt os om at lave en Web-baseret multimediepræsentation af Howard Carters udgravning af Tutankhamons grav, 1922-1928.  Man skal kunne bevæge sig mellem de forskellige kamre i graven, se billeder af kamrene, samt få en beskrivelse af, hvad man ser på billedet.

11 DAIMIIntroducerende Objektorienteret Programmering10A.11 Tutankhamons grav Forrum Annex Grav- kammer Skatkam. Korridor Trappe Ens ‘virtuelle’ jeg; kan flyttes ved angivelse af en kompasretning, e.g. “west” flytter “jeg’et” til forrummet. N (passer ikke, men hva’...)

12 DAIMIIntroducerende Objektorienteret Programmering10A.12 Brugergrænseflade

13 DAIMIIntroducerende Objektorienteret Programmering10A.13 To opgaver!  En af de (dyrtkøbte) erfaringer i software udvikling er vigtigheden af at skille ens kode af i to dele: Den som tager sig af brugergrænse- fladen, og den som tager sig af selve problemstillingen (domænet). Altså: Opgave 1: Et systemdesign som kan beskrive et antal forbundne rum samt et ’virtuelt’ jeg. Opgave 2: Et systemdesign for en brugergrænseflade som kan vise billeder, tekst og som har et redskab til navigation.  Hvad er opgave 3 ?

14 DAIMIIntroducerende Objektorienteret Programmering10A.14 Opgave 1: Domænet  Til at løse opgave 1 bruger vi Arnow&Weiss’ udmærkede model til system-design §5: Problembeskrivelse Find primære klasser/objekter Definere opførsel og samspil (testscenarie) Realisere enkelte klasser.  Nogle bud?

15 DAIMIIntroducerende Objektorienteret Programmering10A.15 Opgave 2: GUI  Til at lave grænsefladen vil vi bruge et  Framework: En mængde af samarbejdende klasser som tilsammen danner et genanvendeligt design for en specifik type af softwaresystemer. ioop.media indeholder Presenter frameworket som er et brugergrænseflade design som stiller billedvisning, tekstfelt og navigationsknapper til rådighed.

16 DAIMIIntroducerende Objektorienteret Programmering10A.16 UML klassediagram Kammer Virtuelle jeg Billede Beskrivelse Bevæger sig i/ befinder sig i 1 1 1 1..4 Er forbundet med GravPræsentation 1 1 flytter præsentere indtryk ImagePresenter Framework Applikationslag

17 DAIMIIntroducerende Objektorienteret Programmering10A.17 Framework  “ImagePresenter” er et framework, som skal specialiseres til en given præsentation: ImagePresenterGravPræsentation java.applet.Applet northButtonPressed() westButtonPressed() … showImage( filename ) northButtonPressed() { virtualMe.move( NORTH ); } Hændelsesløkken ligger i Applet, ImagePresenter håndterer kompasknapperne og kalder de abstrakte metoder “northButtonPressed” osv.

18 DAIMIIntroducerende Objektorienteret Programmering10A.18 Frameworks  Et framework behøver ikke at være et kontrollag. Man bruger betegnelsen om et mængde af (abstrakte) klasser, som tilsammen danner en ramme/et skelet for en mængde af applikationer. En konkret applikation skabes ved at specialisere enkelte klasser til en given sammenhæng Lufthavnssystemer, specialiseret til given lufthavn Reservationssystem, specialiseret til givet område Banksystem, specialiseret til given bank Etc...

19 DAIMIIntroducerende Objektorienteret Programmering10A.19 Genbrug  Fordelen er at funktionalitet og modeller som er ens kan samles i frameworket og dermed genbruges i forskellige sammenhænge.

20 DAIMIIntroducerende Objektorienteret Programmering10A.20 Eksempel: Turtle demo ImagePresenter java.applet.Applet showImage( filename ) Presenter createCenterComp() northButtonPressed() westButtonPressed() … TurtlePresenter createCenterComponent() { return turtle’s sandkasse } (Se TurtlePresentation.java i ugesedlens kawa projektet)

21 DAIMIIntroducerende Objektorienteret Programmering10A.21 Implementation, domæne... Kammer Billede Beskrivelse 1 1..4 Er forbundet med class room { Vector exit; public room(... ) {... exit = new Vector(); for ( int i = 0; i < 4; i++ ) { exit.addElement( null ); } public room leadsTo( int direction ) { return (room) exit.elementAt(direction); } Mapping: 0 = nord, 1 = øst, 2 = syd, 3 = vest

22 DAIMIIntroducerende Objektorienteret Programmering10A.22 Implementation... Forrum Annex Grav- kammer Forrum Annex Grav- kammer Skatkam. Korridor Trappe Korridor

23 DAIMIIntroducerende Objektorienteret Programmering10A.23 Implementation  Det er svært at huske sådanne talværdier: Hvad var 2? Syd eller øst?  Bedre at udtrykke dem ved hjælp af konstanter: class direction { final static int NORTH = 0; final static int EAST = 1; final static int SOUTH = 2; final static int WEST = 3; } I klassen TutankhamonPresentation: public void northButtonPressed() { guest.move(direction.NORTH); }

24 DAIMIIntroducerende Objektorienteret Programmering10A.24 Implementation...  Oprettelse af kamre og layout: room antechamber = new room("You are a dark room known as the antechamber. "+ "There are a lot of precious antiques here, but...”, "tutantechamber.jpg" ); antechamber.connectTo( staircase, direction.SOUTH ); antechamber.connectTo( annex, direction.NORTH ); antechamber.connectTo( tomb, direction.EAST ); void connectTo( room otherRoom, int atExit ) { // Safe programming: if ( otherRoom == null || atExit direction.WEST ) { System.out.println( "ERROR: No room given, or wrong direction in method connectTo" ); } else { exit.setElementAt( otherRoom, atExit ); }


Download ppt "Frameworks Hændelsesstyret programmering: ”Don’t call us - we call you”"

Lignende præsentationer


Annoncer fra Google