Suunnittelumalleja, MVC. Juha Järvensivu 2008

Samankaltaiset tiedostot
Graafisen käyttöliittymän ohjelmointi Syksy 2013

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VIII Suunnittelumallit Observer ja State

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

T Henkilökohtainen harjoitus: FASTAXON

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Viestinvälitysarkkitehtuurit

Oliosuunnittelu. Oliosuunnittelu

Viestinvälitysarkkitehtuurit Lähtökohta:

Java UI-komponentit (JTable) Juha Järvensivu 2007

C# ja.net. Juha Järvensivu 2007

Kehyspohjainen ohjelmistokehitys

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Rajapinta (interface)

Ohjelmistoarkkitehtuurit kevät

Mikä yhteyssuhde on?

Olio-ohjelmointi Suunnittelumallit Observer ja State. 1. Observer (Tarkkailija)

Osio 4: Graafinen käyttöliittymä

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Osio 4: Graafinen käyttöliittymä

Hirviö. Design Patterns

Ohjelmistotuotanto. Luento

Ohjelmistoarkkitehtuurit

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Ohjelmistotuotanto, suunnittelu Syksy Suunnittelu. Suunnittelun tulos. Suunnitteluprosessin työvaiheet. Suunnitteluprosessi.

Muusta kuin vesisioista

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Java ja grafiikka. Ville Sundberg

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

4. Olio-ohjelmoinista lyhyesti 4.1

QT model view. Juha Järvensivu 2008

Tietorakenteet, laskuharjoitus 7,

6. Suunnittelu. Suunnittelun tulos

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Leikepöydän käyttö.net ja QT. Juha Järvensivu 2008

Listarakenne (ArrayList-luokka)

Metodien tekeminen Javalla

Ohjelmistotuotanto, s

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

2. Olio-ohjelmoinista lyhyesti 2.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Suunnittelun tulos. 6. Suunnittelu. Suunnitteluprosessin työvaiheet. Suunnitteluprosessi. 6.1 Arkkitehtuurisuunnittelu.

UML ja luokkien väliset suhteet

Ohjelmistojen mallintaminen, suunnittelumalleja

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Object Framework - One. OF-1 is a high-productive Multi-UI OpenEdge data driven development framework. Veli-Matti Korhonen

Graafisen käyttöliittymän ohjelmointi

Ohjelmistotekniikan menetelmät, arkkitehtuuria ja rajapintoja

Sunnittelumallit Harjoitustehtävät syksy 2015 / Simo Silander

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Ohjelmistoarkkitehtuurit Kevät 2014 Arkkitehtuurityylit vol 2

Olio-ohjelmointi Javalla

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Java kahdessa tunnissa. Jyry Suvilehto

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

JAVA-OHJELMOINTI 3 op A274615

Delegaatit ja tapahtumakäsittelijät

TIE Ohjelmistojen suunnittelu

Luokan muodostimet (Constructors)

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

YHTEYSSUHDE (assosiation)

Rinnakkaisuus. Juha Järvensivu 2008

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Ohjelmistotuotanto. Luento

15. Ohjelmoinnin tekniikkaa 15.1

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

9. Periytyminen Javassa 9.1

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

Sovelmat. Janne Käki

3. Komponentit ja rajapinnat

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Rinnakkaisuus (.NET) Juha Järvensivu 2007

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Lista luokan sisällä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

812336A C++ -kielen perusteet,

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

Ohjelmistotekniikan menetelmät, UML

Olio-ohjelmointi Käyttöliittymä

9. Periytyminen Javassa 9.1

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Luokat ja oliot. Ville Sundberg

3. Binääripuu, Java-toteutus

Web Services tietokantaohjelmoinnin perusteet

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin jatkokurssi, kurssikoe

3. Software components and interfaces


Palveluperustaiset arkkitehtuurityylit

Transkriptio:

Suunnittelumalleja, MVC Juha Järvensivu juha.jarvensivu@tut.fi 2008

Sisältö Tarkkailija Strategia Rekursiokooste Tehdas-metodi MVC

Tarkkailija suunnittelumalli

Tarkkailijamalli (Observer) Määrittelee olioiden välille yksi moneen riippuvuuden siten, että kun yhden olion tila muuttuu, siitä riippuvat oliot saavat ilmoituksen ja päivittyvät automaattisesti

Tarkkailijamalli (Observer) UI UI View1 View2 View3 Data Data Data

Tarkkailija (Observer) LuokkaRakenne Subject + Attach() observers Observer + Detach() + Update() + Notify() for all o in observers { o->update() ConcreteSubject - subjectstate + GetState() + SetState() subject ConreteObserver - observerstate + Update() observerstate = subject->getstate() return subjectstate

Tarkkailija (Observer) Observeri rekisteröityy kuuntelemaan mallia

Kutsuminen Tarkkailija (Observer)

Tarkkailija (Observer) Rekisteröinnin peruminen

Tarkkailija (Observer).NET eventtien avulla Java Rajapintojen avulla Observer, Observable

.NET observer public class GUI { public void GUI(Subject s) { s.changed += new EventHandler(update); public void update(object source, EventArgs e) { MessageBox.Show(s.Data); public class Subject { private string data = ""; public event EventHandler Changed; public string Data { get { return data; set { data = value; // Informoidaan tarkkailijoita OnChanged(new EventArgs());

Java observer public class GUI implements Observer { public void GUI(Subject s) { s.addobserver(this); public void update(observable o, Object arg) { String data = s.getdata(); public class Subject extends Observable { private String data = ""; public String getdata() { return data; public void setdata(string d) { data = d; setchanged(); notifyobservers();

Strategia suunnittelumalli

Strategia-suunnittelumalli Määrittelee algoritmiperheen, kapseloi kunkin algoritmin ja tekee niistä keskenään vaihdettavia. Algoritmia voidaan muuttaa muuttamatta sovellusta, joka sitä käyttää

Strategia-suunnittelumalli Käyttö GUI-ohjelmoinnissa Käytetään mm. valintaikkunoiden yhteydessä varmistamaan, että käyttäjä syöttää oikeanmallista tietoa. Esim. vaaditaan, että numeerinen tekstikenttä hyväksyy vain numeroita.

Strategia-suunnittelumalli Luokkarakenne Context + ContextInterface() strategy Strategy + AlgorithmInterface() ConcreteStrategyA ConcreteStrategyB ConcreteStrategyC + AlgorithmInterface() + AlgorithmInterface() + AlgorithmInterface()

Esimerkki (Java Swing borders)

Esimerkki (Java Swing borders) Example 1. The wrong way to paint Swing borders // A hypothetical JComponent.paintBorder method protected void paintborder(graphics g) { switch(getbordertype()) { case LINE_BORDER: paintlineborder(g); break; case ETCHED_BORDER: paintetchedborder(g); break; case TITLED_BORDER: painttitledborder(g); break;...

Esimerkki (Java Swing borders) JComponent setborder() JBorder paintborder()

Esimerkki (Java Swing borders) Example 2. The right way to paint Swing borders // The actual implementation of the JComponent.paintBorder() method protected void paintborder(graphics g) { Border border = getborder(); if (border!= null) { border.paintborder(this, g, 0, 0, getwidth(), getheight());

Esimerkki (Java Swing borders) Example 3. Setter and getter methods for a Swing component's border... private Border border;... public void setborder(border border) { Border oldborder = this.border; this.border = border; firepropertychange("border", oldborder, border); if (border!= oldborder) { if (border == null oldborder == null!(border.getborderinsets(this). equals(oldborder.getborderinsets(this)))) { revalidate(); repaint();... public Border getborder() { return border;

Rekursiokooste

Rekursiokooste (Composite) Malli esittää oliot rekursiivisesti koostettuna puurakenteena. Yksittäisiä olioita ja oliokoosteita voidaan käsitellä samalla tavalla

Rekursiokooste (Composite) Luokkarakenne Component + Operation() + AddGraphic() + Remove() + GetChild(in ind:int) Leaf + Operation() Composite + Operation() + Add() + Remove() + GetChild()

Rekursiokooste (Composite) Käyttö GUI-ohjelmoinnissa Grafiikkasovellukset Käyttöliittymäikkunoiden yhteydessä

Tehdas metodi

Tehdas metodi (factory method) UML class diagram

Tehdasmetodi Käyttö GUI-ohjelmoinnissa UI-komponenttien luonti Object* createlabel(string text) { Object* pobject = new Label(); if(pobject) { pobject->settext(text); pobject->setenabled(true); pobject->setvisible(true); return pobject;

MVC M C V

MVC Model View Controller

MVC

MVC

MVC:n edut 1. Selkeä rakenne 2. Laajennettavuus 3. Modulaarisuus 4. Tuki hajautukselle

Model Irroittaa käyttöliittymän ja datan Hyödyntää Tarkkailijasuunnittelumallia

View Esittää datan käyttäjälle Näkymät voivat olla sisäkkäisiä Voi hyödyntää toteutuksessaan Rekursiokooste (Composite) suunnittelumallia Esim painonapeista koostuva kontrollipaneeli

Controller Käsittelee käyttäjän syötteet Vaihtamalla kontrolleria on mahdollista ohjelman ajon aikana muuttaa tapaa, jolla ohjelma reagoi käyttäjän syötteeseen Esim. asetetaan kontrolleriksi tyhjä toteutus, jolloin näkymä ei reagoi käytäjän syötteisiin Voi hyödyntää Strategia-suunnittelumallia

Lähteitä Observer design pattern http://msdn.microsoft.com/library/default.asp?url=/libr ary/en-us/dnbda/html/observerpattern.asp http://en.wikipedia.org/wiki/observer_pattern Abstract factory http://www.exciton.cs.rice.edu/javaresources/design Patterns/FactoryPattern.htm http://en.wikipedia.org/wiki/abstract_factory_pattern http://www.csharpcorner.com/language/abstractfactorypatternsi ncsrvs.asp http://www.csharpcorner.com/code/2003/jan/abstractpattern.asp

Lähteitä Strategy design pattern http://www.exciton.cs.rice.edu/javaresources/design Patterns/StrategyPattern.htm http://www.javaworld.com/javaworld/jw-04-2002/jw- 0426-designpatterns.html MVC http://ootips.org/mvc-pattern.html http://st-www.cs.uiuc.edu/users/smarch/stdocs/mvc.html http://en.wikipedia.org/wiki/model_view_controller