• Save
20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriented @JavaConference2005 Milano-IT [ITA]
Upcoming SlideShare
Loading in...5
×
 

20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriented @JavaConference2005 Milano-IT [ITA]

on

  • 210 views

 

Statistics

Views

Total Views
210
Views on SlideShare
205
Embed Views
5

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 5

http://www.linkedin.com 5

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriented @JavaConference2005 Milano-IT [ITA] 20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriented @JavaConference2005 Milano-IT [ITA] Presentation Transcript

  • Ridurre il costo del cambiamento applicando il Design Object-Oriented Francesco Cirillo Chief Executive Officer XPLabs S.R.L. Java Conference 2005
  • Introduzione – Il nostro obiettivo... – L'obiettivo del Design Tradizionale – L'obiettivo del Design Emergente – Metodo ● Guidati dal cambiamento ● Approccio responsibility-driven – Per 50 min, dimenticatevi dell'esistenza dei framework :) – Libro e reviewer Java Conference 2005
  • C'era una volta una servlet... Java Conference 2005
  • Un giorno la servlet incontra Bruno... Java Conference 2005
  • E se... – ...il nostro cliente ci chiedesse di accedere ai dati su un file xml o un formato proprietario? Java Conference 2005
  • Applichiamo OCP... Java Conference 2005
  • Attenzione! – Non barare, Francesco! Java Conference 2005
  • OK, OK... Java Conference 2005
  • Reifichiamo la creazione del tipo di Broker... Java Conference 2005
  • Un'idea per il testing... Java Conference 2005
  • E se... – ...il nostro cliente ci chiedesse di produrre i report in formato pdf? Java Conference 2005
  • Come funziona? pw.println(“Nome: <B>” + risorsa.nome() + “</B><BR>”); pw.println(“Ruolo: <B>” + risorsa.ruolo() + “</B><BR>”); pw.println(“Codice: <B>” + risorsa.codice() + “</B><BR>”); pw.println(“Compenso: <B>” + risorsa.calcolaRetribuzione() +“</B><BR>”); Java Conference 2005
  • Come funziona? Java Conference 2005
  • Due oggetti tristi... Java Conference 2005
  • Attento al Datastore! – Perché un Datastore è pericoloso? – Come possiamo migliorare il nostro design? Java Conference 2005
  • Come eravamo... Java Conference 2005
  • Class Diagram Java Conference 2005
  • Il Datastore non c'è più! Java Conference 2005
  • Applichiamo OCP... Java Conference 2005
  • Sembra una buona soluzione, invece... – Voglio separare la logica della scrittura in HTML o PDF da quella della organizzazione del layout... – (=e se domani dovesse cambiare solo il layout...) Java Conference 2005
  • Altre chiusure... Java Conference 2005
  • Oggetti tristi... – Ci sono altri oggetti tristi nel nostro sistema? Java Conference 2005
  • E se... – ...il nostro cliente ci chiedesse di considerare per gli impiegati anche gli straordinari ● dalle 18.00 si applica un moltiplicatore 1,5 – ...o cambiare la politica di remunerazione di commerciali e/o manager? Java Conference 2005
  • “Odio” i class diagram! Java Conference 2005
  • “Odio” i datastore! Java Conference 2005
  • Ecco i datastore... public class Contratto { public class Strisciata { public Contratto(double importo) public Strisciata(int ingresso, { int uscita) { this.importo = importo; this.ingresso = ingresso; } this.uscita = uscita; } public double importo() { return importo; public int ingresso() { } return ingresso; } private double importo; } public int uscita() { return uscita; } private int ingresso; private int uscita; } Java Conference 2005
  • Oggetti tristi... Java Conference 2005
  • Il commerciale sa fare tutto... public class Commerciale... { ... public double calcolaRetribuzione() { double compenso = 1000.0; for (int i = 0; i < contratti.size(); i++) { Contratto contratto = (Contratto) contratti.get(i); compenso += (contratto.importo()*3.0)/100.0; } return compenso; } ... } Java Conference 2005
  • L'impiegato sa fare tutto... public class Impiegato... { ... public int calcolaRetribuzione() { double compenso; int lavoro = 0; for (int i = 0; i < strisciate.size(); i++) { Strisciata strisciata = (Strisciata) strisciate.get(i); lavoro += (strisciata.uscita() - strisciata.ingresso()); } compenso += lavoro * 30.0; return compenso; } ... } Java Conference 2005
  • “Odio” i class diagram! Java Conference 2005
  • Un oggetto felice! public class Contratto { public Contratto(double importo) { this.importo = importo; } public double compenso() { return importo()*3.0/100.0; } private double importo() { return importo; } private double importo; } Java Conference 2005
  • Un oggetto felice! public class Strisciata { public Strisciata(int ingresso, int uscita) { this.ingresso = ingresso; this.uscita = uscita; } public int lavoro() { return uscita() - ingresso(); } private int ingresso() { return ingresso; } private int uscita() { return uscita; } private int ingresso; private int uscita; } Java Conference 2005
  • Il commerciale sa delegare... public class Commerciale... { ... public double calcolaRetribuzione() { double compenso = 1000; for (int i = 0; i < contratti.size(); i++) { Contratto contratto = (Contratto) contratti.get(i); compenso += contratto.compenso(); } return compenso; } ... } Java Conference 2005
  • L'impiegato può delegare di più... public class Impiegato... { ... public double calcolaRetribuzione() { double compenso; int lavoro = 0; for (int i = 0; i < strisciate.size(); i++) { Strisciata strisciata = (Strisciata) strisciate.get(i); lavoro += strisciata.lavoro(); } compenso = lavoro * 30.0; return compenso; } ... } Java Conference 2005
  • L'impiegato sta imparando a delegare... public class Impiegato... { ... public int calcolaRetribuzione() { double compenso; int lavoro = 0; for (int i = 0; i < strisciate.size(); i++) { Strisciata strisciata = (Strisciata) strisciate.get(i); lavoro += (strisciata.uscita() - strisciata.ingresso()); compenso += lavoro * 30.0; } return compenso; } ... } Java Conference 2005
  • L'impiegato sa delegare... public class Impiegato... { ... public int calcolaRetribuzione() { double compenso; int lavoro = 0; for (int i = 0; i < strisciate.size(); i++) { Strisciata strisciata = (Strisciata) strisciate.get(i); compenso += strisciata.compenso(); } return compenso; } ... } Java Conference 2005
  • Da qui... Java Conference 2005
  • Primo passo, ma... Java Conference 2005
  • Insegniamo ai nostri oggetti a calcolare! Java Conference 2005
  • Applichiamo OCP... Java Conference 2005
  • E se... – ...il nostro cliente ci chiedesse di usare il nostro sistema da un telefono cellulare, da un client via socket, o da un'applicazione con GUI? Java Conference 2005
  • Diamo un'occhiata d'insieme... Java Conference 2005
  • ReportMensileServlet... – Cosa dovrebbe fare? ● Semplice meccanismo di comunicazione: inoltrare richieste – Cosa fa ancora? ● Gestisce l'input del cliente ● Coordina le funzionalità di alto livello ● Coordina l'accesso al DB ● Gestisce i casi eccezionali ● Scrive la pagina HTML con le info dell'azienda Java Conference 2005
  • ReportMensileServlet... – Cosa dovrebbe fare? ● Semplice meccanismo di comunicazione: inoltrare richieste – Cosa fa ancora? ● Gestisce l'input del cliente ● Coordina le funzionalità di alto livello ● Coordina l'accesso al DB ● Gestisce i casi eccezionali ● Scrive la pagina HTML con le info dell'azienda Java Conference 2005
  • Portiamo fuori queste responsabilità... Java Conference 2005
  • Portiamo fuori queste DipartimentoRisorseUmaneInHtml::produciBustePaga() ... responsabilità... List risorse = broker.estraiRisorse(); for(int i = 0; i < risorse.size(); i++) { BustaPaga busta = new BustaPaga(new ConvertitoreHtml(), new LayoutAcmeInc()); RisorsaUmana risorsa =(RisorsaUmana)risorse.get(i); risorsa.scriviSu(busta); bustepaga.aggiungiBustaPaga(busta); } ... Java Conference 2005
  • Portiamo fuori queste responsabilità... Java Conference 2005
  • Aggiungiamo comportamento... Java Conference 2005
  • Da qui... Java Conference 2005
  • Applichiamo OCP Java Conference 2005
  • DipartimentoRisorseUmaneHtml... – Cosa dovrebbe fare? ● Glue object: coordinare – Cosa fa? ● Coordina le funzionalità di alto livello ● Coordina l'accesso al DB ● Gestisce i casi eccezionali ● Scrive la pagina HTML con le info dell'azienda Java Conference 2005
  • DipartimentoRisorseUmaneHtml... – Cosa dovrebbe fare? ● Glue object: coordinare – Cosa fa? ● Coordina le funzionalità di alto livello ● Coordina l'accesso al DB ● Gestisce i casi eccezionali ● Scrive la pagina HTML con le info dell'azienda Java Conference 2005
  • EccezioneRisorsaNonTrovata! Java Conference 2005
  • Eccezioni... No grazie! Java Conference 2005
  • Eccezioni... No grazie! Java Conference 2005
  • Eccezioni... No grazie! Java Conference 2005
  • ReportMensileServlet... – Cosa dovrebbe fare? ● Semplice meccanismo di comunicazione: inoltrare richieste – Cosa fa ancora? ● Gestisce l'input Java Conference 2005
  • ReportMensileServlet... – Cosa dovrebbe fare? ● Semplice meccanismo di comunicazione: inoltrare richieste – Cosa fa ancora? ● Gestisce l'input //doGet mioNavigatore.comandoPer(parametri).esegui(); Java Conference 2005
  • Da qui... Java Conference 2005
  • Liberiamo la servlet! Java Conference 2005
  • DipartimentoRisorseUmaneHtml... – Cosa dovrebbe fare? ● Glue object: coordinare – Cosa fa? ● Coordina le funzionalità di alto livello ● Coordina l'accesso al DB ● Gestisce i casi eccezionali ● Scrive la pagina HTML con le info dell'azienda Java Conference 2005
  • DipartimentoRisorseUmaneHtml... – Cosa dovrebbe fare? ● Glue object: coordinare – Cosa fa? ● Coordina le funzionalità di alto livello ● Coordina l'accesso al DB ● Gestisce i casi eccezionali ● Crea la pagina HTML ● Scrive le info dell'azienda sulla pagina HTML Java Conference 2005
  • Da qui... Java Conference 2005
  • Reifichiamo i componenti html! Java Conference 2005
  • Non esiste un unico design! Java Conference 2005
  • DipartimentoRisorseUmaneHtml... – Cosa dovrebbe fare? ● Glue object: coordinare – Cosa fa? ● Coordina le funzionalità di alto livello ● Coordina l'accesso al DB ● Gestisce i casi eccezionali ● Crea la pagina HTML ● Scrive le info dell'azienda sulla pagina HTML ● Coordina gli oggetti HTML di sua responsabilità Java Conference 2005
  • Ricapitolando... Java Conference 2005
  • Siamo arrivati a... Java Conference 2005
  • Siamo arrivati a... Java Conference 2005
  • Conclusioni ● Attraverso il design abbiamo ottenuto un sistema in cui a basso costo (aggiungendo un nuovo modulo senza modificare i preesistenti) è ora possibile: – Modificare le fonti di persistenza (rdbms, xml, dummy) – Modificare il layout della busta paga – Modificare il tipo di risorsa umana – Modificare il tipo di output della busta paga (html, pdf, ...) – Modificare le strategie di calcolo delle retribuzioni per impiegati, manager e commerciali – Modificare il tipo di client (http, wap, socket, GUI) – Modificare la gestione dei parametri della servlet Java Conference 2005
  • Conclusioni ● Rispetto a prima: – Maggiore numero di classi – Responsabilità più atomiche – Maggiore testabilità – Maggiore coesione e minore accoppiamento ● I miti dell'OO: – Riuso – Metodi da una due righe – No if e switch (neanche for :) ) – I Design Pattern Java Conference 2005
  • Conclusioni ● Differenze: – Anticipare – Faremergere ● Elementi comuni: – Approccio di sintesi – Umiltà Java Conference 2005
  • Ridurre il costo del cambiamento con l'OOD ● Domande? Java Conference 2005