Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può...

28
Java Pattern MVC Model – View - Controller

Transcript of Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può...

Page 1: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Java

Pattern MVC

Model – View - Controller

Page 2: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Design Pattern – da WikipediaUn design pattern può essere definito "una soluzione progettuale generale a un problema ricorrente". Il termine fu inizialmente introdotto in architettura in un celebre saggio di Christopher Alexander; in seguito, proprio l'opera di Alexander ispirò la nascita di un settore dell'ingegneria del software dedicato all'applicazione del concetto di design pattern alle architetture software, soprattutto object-oriented. Oggi, l'espressione design pattern viene usata principalmente con riferimento a questo particolare contesto.

Page 3: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

MVC – da WikipediaModel-View-Controller (MVC, talvolta tradotto in italiano Modello-Vista-Controllore) è il nome di un design pattern fondamentale nello sviluppo di interfacce grafiche di sistemi software object-oriented. Originariamente impiegato dal linguaggio Smalltalk, il pattern è stato esplicitamente o implicitamente sposato da mumerose tecnologie moderne, come framework basati su Java (Swing, JSF e Struts), su Objective C o su .NET.

A causa della crescente diffusione di tecnologie basate su MVC nel contesto di framework o piattaforma middleware per applicazioni Web, l'espressione framework MVC o sistema MVC sta entrando nell'uso anche per indicare specificatamente questa categoria di sistemi (che comprende per esempio Struts, Spring e Tapestry).

Page 4: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

MVC – da WikipediaModel è il cuore dell'applicazione. Definisce i dati e le operazioni che possono essere eseguiti su essi. Fornisce delle funzioni per l'accesso e l'aggiornamento. Può inoltre avere la responsabilità di notificare ai componenti della View eventuali aggiornamenti verificatisi in seguito a richieste del Controller, al fine di permettere alle View di presentare agli occhi degli utenti dati sempre aggiornati.

View è l'interfaccia (grafica, GUI, ma anche no) con cui l'utente interagisce.

Il controller ha la responsabilità di trasformare le interazioni dell'utente della View in azioni eseguite dal Model. Ma il Controller non rappresenta un semplice "ponte" tra View e Model. Realizzando la mappatura tra input dell'utente e processi eseguiti dal Model e selezionando la schermate della View richieste, il Controller implementa la logica di controllo dell'applicazione.

Page 5: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Pattern MVC

Model

View Controller

Page 6: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

MVC – Modelpublic class Model { int x[] = new int[10]; // lista degli elementi int current=0; // elemento attivo int delta=5; // di quanto cambia la x ogni volta public Model() { for (int e = 0; e < 10; e++) { x[e] = 100; // posizione iniziale } }

void increaseCurrent() {x[current]+=delta;} void decreaseCurrent() {x[current]-=delta;} void setCurrent(int c) {current=c; } int getCurrent() {return current;} int[] getX() {return x;}}

Page 7: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

MVC – View 1public class View1 extends JPanel { Model model=null;

public View1(Model m) { model=m; } public void paintComponent(Graphics g) { Dimension d=this.getSize(); g.setColor(Color.YELLOW); g.fillRect(0,0,d.width,d.height); g.setColor(Color.BLUE); int [] x=model.getX(); for (int i=0;i<x.length; i++) { int y=10+i*27; g.fillOval(x[i]-3,y-3,6,6); } }}

Page 8: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

MVC – View 2 – parte 1public class View2 extends JPanel { Model model=null; JLabel[] s=null;

public View2(Model m) { model=m; s=new JLabel[10]; this.setLayout(new GridLayout(10,1)); for (int i=0;i<10;i++) { s[i]=new JLabel(); this.add(s[i]); } }

Page 9: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

MVC – View 2 – parte 2public void paintComponent(Graphics g) { int [] x=model.getX(); int selected=model.getCurrent(); for (int i=0;i<x.length;i++) { String h="<HTML><CENTER><B>"; if (i==selected) h=h+"<FONT COLOR=\"RED\">"; s[i].setText(h+x[i]); } Dimension d=this.getSize(); g.setColor(Color.ORANGE); g.fillRect(0, 0, d.width, d.height); }}

Page 10: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

MVC – Controller – parte 2public class Controller implements KeyListener { Model model; JFrame f; public Controller(Model m, JFrame f) { model=m; this.f=f; } public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { char c=e.getKeyChar(); switch (c) { case '+' : model.increaseCurrent(); break; case '-' : model.decreaseCurrent(); break; default: System.out.println(c); if ('0'<=c && c<='9') model.setCurrent(c-'0'); else Toolkit.getDefaultToolkit().beep(); } f.repaint();} }

Page 11: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

MVC – finestra –a parte 1public class Finestra extends JFrame { JPanel contentPane; View1 view1 = null; View2 view2 = null;

//Overridden so we can exit when window is closed protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } }

C’e’ poi la solita classeche contiene il main e

che crea la finestra

Page 12: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

MVC – finestra – parte 2

public Finestra() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); Model m=new Model(); View1 view1=new View1(m); View2 view2=new View2(m); this.addKeyListener(new Controller(m, this)); contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(new GridLayout(1,2)); this.setSize(new Dimension(400, 300)); this.setTitle("Frame Title"); contentPane.add(view1, null); contentPane.add(view2, null); }

}

Page 13: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Java

Pattern Singleton

Come fare perchè una classe possaavere solo

una unica istanza condivisa?

Page 14: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Singleton - Esempio –1/2

class Arbitro {

static Arbitro instance= null;

private Arbitro() { String s = ""; }

public static Arbitro getArbitro() { if (instance ==null) instance=new Arbitro(); return instance; }

public void fischia() { //... }

}

Page 15: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Singleton - Esempio – 2/2

package myPackage;

public class Simple { public static void main(String a[]) { new Simple(); }

Simple() { //Arbitro a=new Arbitro(); Arbitro b=Arbitro.getArbitro(); Arbitro c=Arbitro.getArbitro(); System.out.println(b==c); }}

Page 16: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Java

Serialization

Page 17: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Il problema della persistenza

Persistenza dei datiquando l’applicazione non è running:

salvataggio della struttura interna di un oggetto.

E’ un problema ricorsivo!

Serializzazione: trasformazione di oggetti in “stream di dati” (seriali).

Il JDK prevede delle API per la serializzazione,e la maggior parte delle sue classi sono serializzabili.

Page 18: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

persistenza selettiva

Le variabili dichiarate

transient

non vengono serializzate.

Page 19: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Supporto di JDK alla persistenza

ObjectOutputStream: converte oggetti dalla rappresentazionein memoria a quella serializzata.ObjectInputStream: converte oggetti dalla rappresentazioneserializzata a quella in memoria.Serializable: interfaccia senza metodi che marca una classecome seralizzabile.

Externalizable: interfaccia con metodi (sottoclasse di Serializable) che fornisce maggior controllo sul processo di serializzazione.ObjectInputValidation: interfaccia per verificare la correttadecodifica di un oggetto.

Page 20: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Principali Metodi di ObjectOutputstream

ObjectOutputStream(OutputStream) costruttorewriteObject(Object) serializza Objectclose()flush()reset()writeInt(int) writeFloat(float) writeDouble(double)

Page 21: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Principali Metodi di ObjectInputstream

ObjectInputStream(InputStream) costruttoreObject readObject() deserializza Objectavailable() dice quanti bytes ci sono da leggereint readInt()float writeFloat() double writeDouble()

Page 22: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Esempio –Writer 1/2

package serialDemo;import java.io.*;import java.util.*;

public class Writer {

HashMap hm=new HashMap(); public Writer() { System.out.println("WRITER-------------------------"); for (int k=1;k<=10;k+=2) { String key=new String("a"+k); Integer ik=new Integer(k); hm.put(key,ik); } System.out.println(hm.size()); Iterator i=hm.keySet().iterator(); while (i.hasNext()) { Object o=i.next(); System.out.println(o.toString()+"#"+ hm.get(o).toString()); }

Page 23: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Esempio –Writer 2/2

FileOutputStream ofs=null; ObjectOutputStream oos=null; try { ofs=new FileOutputStream("serializedStream.txt"); oos=new ObjectOutputStream(ofs); oos.writeObject(hm); } catch (IOException ex) { ex.printStackTrace(); } }//--------------------------------------------- public static void main(String[] args) { Writer writer = new Writer(); }}

Page 24: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Esempio –Reader 1/2

package serialDemo;import java.io.*;import java.util.*;

public class Reader {

HashMap hm=null; //------------------------------------------ public static void main(String[] args) { Reader reader = new Reader(); }

Page 25: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Esempio –Reader 2/2

public Reader() { System.out.println("READER -------------------------"); FileInputStream ofs=null; ObjectInputStream oos=null; try { ofs=new FileInputStream("serialiazidStream.txt"); oos=new ObjectInputStream(ofs); hm=(HashMap)oos.readObject(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); }catch (IOException ex) { ex.printStackTrace(); } System.out.println(hm.size()); Iterator i=hm.keySet().iterator(); while (i.hasNext()) { Object o=i.next(); System.out.println(o.toString()+" #“ +hm.get(o).toString()); } }

Page 26: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Java

Ripasso

Page 27: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Polimorfismo – ripassoabstract class OP {

int f(int a,int b);}

class Somma extends OP { int f(int a,int b){ return a+b; }}class Sottrazione extends OP { int f(int a,int b){ return a-b; }}

Page 28: Java Pattern MVC Model – View - Controller. Design Pattern – da Wikipedia Un design pattern può essere definito "una soluzione progettuale generale a.

Polimorfismo - ripassoclass Test { public static void main(String[] a) {

new Test; }

public Test() { OP o; ... if (i!=0) o=new Somma(); else o=new Sottrazione(); ... System.out.println(o.f(3,2)); }}

Qual’è l’output ?