Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Ridurre il costo del
cambiamento applicando il
Design Object-Oriented
 Francesco Cirillo
 Chief Executive Officer
 XPLabs ...
Introduzione
– Il nostro obiettivo...
– L'obiettivo del Design Tradizionale
– L'obiettivo del Design Emergente
– Metodo
  ...
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?




  ...
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?




                               ...
Come funziona?



pw.println(“Nome: <B>” + risorsa.nome() + “</B><BR>”);
pw.println(“Ruolo: <B>” + risorsa.ruolo() + “</B>...
Come funziona?




                 Java Conference 2005
Due oggetti tristi...




                        Java Conference 2005
Attento al Datastore!
–   Perché un Datastore è pericoloso?
–   Come possiamo migliorare il nostro
    design?




       ...
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
  organi...
Altre chiusure...




                    Java Conference 2005
Oggetti tristi...
–   Ci sono altri oggetti tristi nel nostro
    sistema?




                                      Java ...
E se...
– ...il nostro cliente ci chiedesse di
  considerare per gli impiegati anche gli
  straordinari
        ● dalle 18...
“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)...
Oggetti tristi...




                    Java Conference 2005
Il commerciale sa
fare tutto...

 public class Commerciale... {
 ...
   public double calcolaRetribuzione() {
     double ...
L'impiegato sa
fare tutto...

 public class Impiegato... {
 ...
   public int calcolaRetribuzione() {
     double compenso...
“Odio” i class diagram!




                          Java Conference 2005
Un oggetto felice!
     public class Contratto {

         public Contratto(double importo) {
           this.importo = im...
Un oggetto felice!
      public class Strisciata {
          public Strisciata(int ingresso, int uscita) {
            thi...
Il commerciale sa
delegare...

  public class Commerciale... {
  ...
    public double calcolaRetribuzione() {
      doubl...
L'impiegato può
delegare di più...

  public class Impiegato... {
  ...
    public double calcolaRetribuzione() {
      do...
L'impiegato sta imparando
a delegare...

 public class Impiegato... {
 ...
   public int calcolaRetribuzione() {
     doub...
L'impiegato sa delegare...

  public class Impiegato... {
  ...
    public int calcolaRetribuzione() {
      double compen...
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 vi...
Diamo un'occhiata
d'insieme...




                    Java Conference 2005
ReportMensileServlet...
– Cosa dovrebbe fare?
    ● Semplice meccanismo di

      comunicazione: inoltrare richieste
– Cos...
ReportMensileServlet...
– Cosa dovrebbe fare?
    ● Semplice meccanismo di

      comunicazione: inoltrare richieste
– Cos...
Portiamo fuori queste
responsabilità...




                        Java Conference 2005
Portiamo fuori queste
DipartimentoRisorseUmaneInHtml::produciBustePaga()
 ...
responsabilità...
 List risorse = broker.est...
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 funzion...
DipartimentoRisorseUmaneHtml...

– Cosa dovrebbe fare?
    ● Glue object: coordinare

– Cosa fa?
    ● Coordina le funzion...
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
– Cos...
ReportMensileServlet...
– Cosa dovrebbe fare?
    ● Semplice meccanismo di

      comunicazione: inoltrare richieste
– Cos...
Da qui...




            Java Conference 2005
Liberiamo la servlet!




                        Java Conference 2005
DipartimentoRisorseUmaneHtml...

– Cosa dovrebbe fare?
    ● Glue object: coordinare

– Cosa fa?
    ● Coordina le funzion...
DipartimentoRisorseUmaneHtml...

– Cosa dovrebbe fare?
    ● Glue object: coordinare

– Cosa fa?
    ● Coordina le funzion...
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 funzion...
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 sen...
Conclusioni
●   Rispetto a prima:
    –  Maggiore numero di classi
     – Responsabilità più atomiche
     – Maggiore test...
Conclusioni
●   Differenze:
    – Anticipare
    – Faremergere
●   Elementi comuni:
    – Approccio    di sintesi
    – Um...
Ridurre il costo del
cambiamento con l'OOD

●   Domande?




                        Java Conference 2005
Upcoming SlideShare
Loading in …5
×

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

227 views

Published on

  • Be the first to comment

  • Be the first to like this

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

  1. 1. Ridurre il costo del cambiamento applicando il Design Object-Oriented Francesco Cirillo Chief Executive Officer XPLabs S.R.L. Java Conference 2005
  2. 2. 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
  3. 3. C'era una volta una servlet... Java Conference 2005
  4. 4. Un giorno la servlet incontra Bruno... Java Conference 2005
  5. 5. E se... – ...il nostro cliente ci chiedesse di accedere ai dati su un file xml o un formato proprietario? Java Conference 2005
  6. 6. Applichiamo OCP... Java Conference 2005
  7. 7. Attenzione! – Non barare, Francesco! Java Conference 2005
  8. 8. OK, OK... Java Conference 2005
  9. 9. Reifichiamo la creazione del tipo di Broker... Java Conference 2005
  10. 10. Un'idea per il testing... Java Conference 2005
  11. 11. E se... – ...il nostro cliente ci chiedesse di produrre i report in formato pdf? Java Conference 2005
  12. 12. 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
  13. 13. Come funziona? Java Conference 2005
  14. 14. Due oggetti tristi... Java Conference 2005
  15. 15. Attento al Datastore! – Perché un Datastore è pericoloso? – Come possiamo migliorare il nostro design? Java Conference 2005
  16. 16. Come eravamo... Java Conference 2005
  17. 17. Class Diagram Java Conference 2005
  18. 18. Il Datastore non c'è più! Java Conference 2005
  19. 19. Applichiamo OCP... Java Conference 2005
  20. 20. 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
  21. 21. Altre chiusure... Java Conference 2005
  22. 22. Oggetti tristi... – Ci sono altri oggetti tristi nel nostro sistema? Java Conference 2005
  23. 23. 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
  24. 24. “Odio” i class diagram! Java Conference 2005
  25. 25. “Odio” i datastore! Java Conference 2005
  26. 26. 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
  27. 27. Oggetti tristi... Java Conference 2005
  28. 28. 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
  29. 29. 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
  30. 30. “Odio” i class diagram! Java Conference 2005
  31. 31. 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
  32. 32. 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
  33. 33. 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
  34. 34. 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
  35. 35. 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
  36. 36. 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
  37. 37. Da qui... Java Conference 2005
  38. 38. Primo passo, ma... Java Conference 2005
  39. 39. Insegniamo ai nostri oggetti a calcolare! Java Conference 2005
  40. 40. Applichiamo OCP... Java Conference 2005
  41. 41. 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
  42. 42. Diamo un'occhiata d'insieme... Java Conference 2005
  43. 43. 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
  44. 44. 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
  45. 45. Portiamo fuori queste responsabilità... Java Conference 2005
  46. 46. 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
  47. 47. Portiamo fuori queste responsabilità... Java Conference 2005
  48. 48. Aggiungiamo comportamento... Java Conference 2005
  49. 49. Da qui... Java Conference 2005
  50. 50. Applichiamo OCP Java Conference 2005
  51. 51. 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
  52. 52. 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
  53. 53. EccezioneRisorsaNonTrovata! Java Conference 2005
  54. 54. Eccezioni... No grazie! Java Conference 2005
  55. 55. Eccezioni... No grazie! Java Conference 2005
  56. 56. Eccezioni... No grazie! Java Conference 2005
  57. 57. ReportMensileServlet... – Cosa dovrebbe fare? ● Semplice meccanismo di comunicazione: inoltrare richieste – Cosa fa ancora? ● Gestisce l'input Java Conference 2005
  58. 58. ReportMensileServlet... – Cosa dovrebbe fare? ● Semplice meccanismo di comunicazione: inoltrare richieste – Cosa fa ancora? ● Gestisce l'input //doGet mioNavigatore.comandoPer(parametri).esegui(); Java Conference 2005
  59. 59. Da qui... Java Conference 2005
  60. 60. Liberiamo la servlet! Java Conference 2005
  61. 61. 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
  62. 62. 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
  63. 63. Da qui... Java Conference 2005
  64. 64. Reifichiamo i componenti html! Java Conference 2005
  65. 65. Non esiste un unico design! Java Conference 2005
  66. 66. 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
  67. 67. Ricapitolando... Java Conference 2005
  68. 68. Siamo arrivati a... Java Conference 2005
  69. 69. Siamo arrivati a... Java Conference 2005
  70. 70. 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
  71. 71. 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
  72. 72. Conclusioni ● Differenze: – Anticipare – Faremergere ● Elementi comuni: – Approccio di sintesi – Umiltà Java Conference 2005
  73. 73. Ridurre il costo del cambiamento con l'OOD ● Domande? Java Conference 2005

×