Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

 Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering MVC Et mønster for grænseflader.

Lignende præsentationer


Præsentationer af emnet: " Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering MVC Et mønster for grænseflader."— Præsentationens transcript:

1  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering MVC Et mønster for grænseflader

2  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering Model-View-Controller The Swing architecture is rooted in the model-view- controller (MVC) design that dates back to SmallTalk. MVC architecture calls for a visual application to be broken up into three separate parts: A model that represents the data for the application. The view that is the visual representation of that data. A controller that takes user input on the view and translates that to changes in the model. (se http://java.sun.com/products/jfc/tsc/articles/architecture/index.html)

3  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering MVC MVC opdeler en applikation i tre dele: Modellen - funktionalitet og data Views - fremviser information til brugeren Controllers håndterer input. Views og controllers tilsammen udgør grænsefladen. En ”change-propagation mechanism” sikrer konsistens mellem grænsefladen og modellen

4  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering MVC - et eksempel SF pct: 9,8 V pct: 24,5... Parlament

5  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering MVC in action Eksempel: knap opdaterer tekstfelt Tekstfeltet indeholder værdien... Hmmm … burde være et objekt

6  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering Ændring af model Når modellen (=værdien) ændres skal tekstfeltet opdateres –Afhængigheden skal være så lille som muligt fra modellen til grænsefladen –Når modellen ændres kaldes 'update' på alle gr.flade komponenter der lytter public class Counter extends Observable { public void addOne() { count = count +1; setChanged(); notifyObservers(); }... } public class CounterView extends JFrame implements Observer { public void update (Observable model, Object args) { Counter m = (Counter)model; String t = Integer.toString(m.getCount()); tal.setText(t); }... }

7  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering Hvad med bruger input? Controllerens ansvar er at oversætte brugerinput til handlinger i modellen Hvad kan brugerinput være? –Skrivning i tekstfelt –Tryk på knap –... Nyt eksempel: En konto Observable Konto -saldo:double +Konto() +getSaldo():double -notifyObs():void JFrame Observer KontoGUI model:Konto saldoLabel:JLabel saldoText:JTextField +KontoGUI(model:Konto) +update(o:Observable,arg:Object):void +indsæt(b:double) +hæv(b:double)

8  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering Controller Tryk på hæv/indsæt skal fanges af en eventhandler, der skal opdatere modellen private class IndsætController implements ActionListener { public void actionPerformed(ActionEvent e) { String indsættesString = KontoGUI.this.indsætText.getText(); try { double indsættes = Double.parseDouble(indsættesString); model.indsæt(indsættes); } catch (NumberFormatException ex) { KontoGUI.this.update(model,null); }

9  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering Eksempel Lad os se på koden:

10  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering Problem Fleksibel brugergrænseflade –den samme information præsenteres i forskellige vinduer –manipulationer af data skal afspejles med det samme –ændringer i grænsefladen skal være lette og mulige på runtime –Koden for grænsefladen skal være afkoblet fra resten af applikationen

11  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering Løsning MVC –Model indkapsler data og funktionalitet –View fremviser informationer til brugeren, som det modtager fra modellen. Der kan være flere views på model’en –Et view har en tilknyttet controller, der håndterer hændelser. Den oversætter dem til forespørgsler til model eller view

12  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering change-propagation er den eneste kobling mellem modellen og dens views/controllers Struktur (model) Class Model Responsibility er kernen af applikationen registrerer afhængige views og controllers informerer afhængige kompo- nenter om tilstandsændringer Collaborators View Controller

13  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering Struktur (View) View’s tilbyder ofte funktionalitet for controleren til at manipulere displayet (brugbart når der ikke sker ændringer i model’en) Class View Responsibility opretter og initialiserer dens til- knyttede controller fremviser information til brugeren Implementerer update (som kaldes når der notificeres) Modtager data fra modellen Collaborators Model Controller

14  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering Struktur (Controller) Hvis controlerens opførsel afhænger af modellens tilstand kobler den sig på ”change- propagation” (og realiserer update metoden) Class Controller Responsibility modtager brugerinput (hændelser) oversætter hændelser til opdater/ aflæs kald af modellen eller fremvis kald af views Implementerer update (om nødvendigt) Collaborators Model View

15  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering Struktur Model coreData attach(o : Observer) : void detach(o : Observer) : void notify() getData() : coreData Observer update() 0..*0..1 0..* View View(m : Model) makeControler() display() update() Controller Controller(m : Model, v: View) handleEvent() update() 1111

16  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering Dynamik - hændelse aView : ViewaController : Controller aModel : Model : bruger handleEvent( ) setData( ) notify( ) update( ) display( ) getData( ) update( ) getData( )

17  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering ' Dynamik - opstart

18  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering konsekvenser Flere views på den samme model Synkroniserede views Udskiftelige views og controllers –adskillelsen af view og controller betyder at de kan varieres individuelt Framework mulighed

19  Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering  konsekvenser Forøget kompleksitet mulighed for mange (unødige) updates tæt kobling mellem view og controller tæt kobling fra view/controller til model ineffektiv adgang til data svært at portere view/controller


Download ppt " Jens Bennedsen, 2003, revideret af EE- 2004 Introducerende objektorienteret programmering MVC Et mønster for grænseflader."

Lignende præsentationer


Annoncer fra Google