SlideShare a Scribd company logo
1 of 73
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

More Related Content

Viewers also liked

Connected prosthetics - Mark McWilliams
Connected prosthetics - Mark McWilliamsConnected prosthetics - Mark McWilliams
Connected prosthetics - Mark McWilliamsUXconference
 
Design for neonatology - Dominika Potuzakova
Design for neonatology - Dominika PotuzakovaDesign for neonatology - Dominika Potuzakova
Design for neonatology - Dominika PotuzakovaUXconference
 
Conference Powerpoint Presentations
Conference Powerpoint PresentationsConference Powerpoint Presentations
Conference Powerpoint Presentationsapdh1312
 

Viewers also liked (6)

Connected prosthetics - Mark McWilliams
Connected prosthetics - Mark McWilliamsConnected prosthetics - Mark McWilliams
Connected prosthetics - Mark McWilliams
 
Design for neonatology - Dominika Potuzakova
Design for neonatology - Dominika PotuzakovaDesign for neonatology - Dominika Potuzakova
Design for neonatology - Dominika Potuzakova
 
Conference ppt
Conference pptConference ppt
Conference ppt
 
Conference Powerpoint Presentations
Conference Powerpoint PresentationsConference Powerpoint Presentations
Conference Powerpoint Presentations
 
Ppt for national conference
Ppt for national conferencePpt for national conference
Ppt for national conference
 
IEEE Presentation
IEEE PresentationIEEE Presentation
IEEE Presentation
 

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

Effective Code Transformations in C++
Effective Code Transformations in C++Effective Code Transformations in C++
Effective Code Transformations in C++Marco Arena
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of KotlinErik Minarini
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 
Angular: Servizi e DI
Angular:  Servizi e DIAngular:  Servizi e DI
Angular: Servizi e DIValerio Como
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSAndrea Saltarello
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
Flavio atzeni smau mi 2013
Flavio atzeni smau  mi 2013Flavio atzeni smau  mi 2013
Flavio atzeni smau mi 2013Paradisi63
 
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Codemotion
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 
Mocking Objects Practices
Mocking Objects PracticesMocking Objects Practices
Mocking Objects PracticesGrUSP
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerMatteo Magni
 
Servizi e Dependency Injection in Angular
Servizi e Dependency Injection in AngularServizi e Dependency Injection in Angular
Servizi e Dependency Injection in AngularValerio Como
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNetMauro Servienti
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)lukebonham
 
Reactive programming principles
Reactive programming principlesReactive programming principles
Reactive programming principlesRiccardo Cardin
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerMatteo Magni
 

Similar to 20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriented @JavaConference2005 Milano-IT [ITA] (20)

Pillole di C++
Pillole di C++Pillole di C++
Pillole di C++
 
Effective Code Transformations in C++
Effective Code Transformations in C++Effective Code Transformations in C++
Effective Code Transformations in C++
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of Kotlin
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Angular: Servizi e DI
Angular:  Servizi e DIAngular:  Servizi e DI
Angular: Servizi e DI
 
OrientDB & Big Data
OrientDB & Big DataOrientDB & Big Data
OrientDB & Big Data
 
Layered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRSLayered Expression Trees feat. CQRS
Layered Expression Trees feat. CQRS
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Flavio atzeni smau mi 2013
Flavio atzeni smau  mi 2013Flavio atzeni smau  mi 2013
Flavio atzeni smau mi 2013
 
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Mocking Objects Practices
Mocking Objects PracticesMocking Objects Practices
Mocking Objects Practices
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesigner
 
Servizi e Dependency Injection in Angular
Servizi e Dependency Injection in AngularServizi e Dependency Injection in Angular
Servizi e Dependency Injection in Angular
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
Vb.Net
Vb.NetVb.Net
Vb.Net
 
Reactive programming principles
Reactive programming principlesReactive programming principles
Reactive programming principles
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesigner
 

More from Francesco Cirillo

20111117 Is Software Evolution really effective? @XPDayGE2011 Karlsruhe-GE [ENG]
20111117 Is Software Evolution really effective? @XPDayGE2011 Karlsruhe-GE [ENG]20111117 Is Software Evolution really effective? @XPDayGE2011 Karlsruhe-GE [ENG]
20111117 Is Software Evolution really effective? @XPDayGE2011 Karlsruhe-GE [ENG]Francesco Cirillo
 
20111119 Is Software Evolution really effective? @IAD2011 Rome-IT [ENG]
20111119 Is Software Evolution really effective? @IAD2011 Rome-IT [ENG]20111119 Is Software Evolution really effective? @IAD2011 Rome-IT [ENG]
20111119 Is Software Evolution really effective? @IAD2011 Rome-IT [ENG]Francesco Cirillo
 
20100506 Dinamiche di Team @BetterSoftware2010 Firenze-IT [ITA]
20100506 Dinamiche di Team @BetterSoftware2010 Firenze-IT [ITA]20100506 Dinamiche di Team @BetterSoftware2010 Firenze-IT [ITA]
20100506 Dinamiche di Team @BetterSoftware2010 Firenze-IT [ITA]Francesco Cirillo
 
20100302 Dinamiche di Team Brainstorming @UniRM3 Roma-IT [ITA]
20100302 Dinamiche di Team Brainstorming @UniRM3 Roma-IT [ITA]20100302 Dinamiche di Team Brainstorming @UniRM3 Roma-IT [ITA]
20100302 Dinamiche di Team Brainstorming @UniRM3 Roma-IT [ITA]Francesco Cirillo
 
20091203 Design Emergente Più Cambiamenti Più Profitti @UxConference2009 Luga...
20091203 Design Emergente Più Cambiamenti Più Profitti @UxConference2009 Luga...20091203 Design Emergente Più Cambiamenti Più Profitti @UxConference2009 Luga...
20091203 Design Emergente Più Cambiamenti Più Profitti @UxConference2009 Luga...Francesco Cirillo
 
20090507 Metodi Agili e Aumento del Roi @Better Software2009 Firenze IT [ITA]
20090507 Metodi Agili e Aumento del Roi @Better Software2009 Firenze IT [ITA]20090507 Metodi Agili e Aumento del Roi @Better Software2009 Firenze IT [ITA]
20090507 Metodi Agili e Aumento del Roi @Better Software2009 Firenze IT [ITA]Francesco Cirillo
 
20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]
20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]
20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]Francesco Cirillo
 
20080619 Diventare Agili Dalla Università ad un Team Agile @UniRM3 Roma-IT [ITA]
20080619 Diventare Agili Dalla Università ad un Team Agile @UniRM3 Roma-IT [ITA]20080619 Diventare Agili Dalla Università ad un Team Agile @UniRM3 Roma-IT [ITA]
20080619 Diventare Agili Dalla Università ad un Team Agile @UniRM3 Roma-IT [ITA]Francesco Cirillo
 
20080124 XPLabs Tour08 @UniAQ.it L'Aquila-IT [ITA]
20080124 XPLabs Tour08 @UniAQ.it L'Aquila-IT [ITA]20080124 XPLabs Tour08 @UniAQ.it L'Aquila-IT [ITA]
20080124 XPLabs Tour08 @UniAQ.it L'Aquila-IT [ITA]Francesco Cirillo
 
20071201 Eliminare For @JavaDayRoma2 Roma-IT [ITA]
20071201 Eliminare For @JavaDayRoma2 Roma-IT [ITA]20071201 Eliminare For @JavaDayRoma2 Roma-IT [ITA]
20071201 Eliminare For @JavaDayRoma2 Roma-IT [ITA]Francesco Cirillo
 
20071123 XPLabs Tour07 Bonsai @ItalianAgileDay2007 Bologna-IT [ITA]
20071123 XPLabs Tour07 Bonsai @ItalianAgileDay2007 Bologna-IT [ITA]20071123 XPLabs Tour07 Bonsai @ItalianAgileDay2007 Bologna-IT [ITA]
20071123 XPLabs Tour07 Bonsai @ItalianAgileDay2007 Bologna-IT [ITA]Francesco Cirillo
 
20071027 XPLabs Tour Bonsai @LinuxDayRoma2007 Roma-IT [ITA]
20071027 XPLabs Tour Bonsai @LinuxDayRoma2007 Roma-IT [ITA]20071027 XPLabs Tour Bonsai @LinuxDayRoma2007 Roma-IT [ITA]
20071027 XPLabs Tour Bonsai @LinuxDayRoma2007 Roma-IT [ITA]Francesco Cirillo
 
20061028 XPLabs Tour06 Bonsai @LinuxDayRoma2006 Roma-IT [ITA]
20061028 XPLabs Tour06 Bonsai @LinuxDayRoma2006 Roma-IT [ITA]20061028 XPLabs Tour06 Bonsai @LinuxDayRoma2006 Roma-IT [ITA]
20061028 XPLabs Tour06 Bonsai @LinuxDayRoma2006 Roma-IT [ITA]Francesco Cirillo
 
20060703 XP Values and Principles @Essap2006 Varese-IT [ITA]
20060703 XP Values and Principles @Essap2006 Varese-IT [ITA]20060703 XP Values and Principles @Essap2006 Varese-IT [ITA]
20060703 XP Values and Principles @Essap2006 Varese-IT [ITA]Francesco Cirillo
 
20060627 SOA @JavaConference2006 Milano-IT [ITA]
20060627 SOA @JavaConference2006 Milano-IT [ITA]20060627 SOA @JavaConference2006 Milano-IT [ITA]
20060627 SOA @JavaConference2006 Milano-IT [ITA]Francesco Cirillo
 
20051216 Il Prossimo Passo @Italian AgileDay2005 Milano-IT [ITA]
20051216 Il Prossimo Passo @Italian AgileDay2005 Milano-IT [ITA]20051216 Il Prossimo Passo @Italian AgileDay2005 Milano-IT [ITA]
20051216 Il Prossimo Passo @Italian AgileDay2005 Milano-IT [ITA]Francesco Cirillo
 
20040503 Easy Tracking @AICA2004 Milano-IT [ITA]
20040503 Easy Tracking @AICA2004 Milano-IT [ITA]20040503 Easy Tracking @AICA2004 Milano-IT [ITA]
20040503 Easy Tracking @AICA2004 Milano-IT [ITA]Francesco Cirillo
 

More from Francesco Cirillo (17)

20111117 Is Software Evolution really effective? @XPDayGE2011 Karlsruhe-GE [ENG]
20111117 Is Software Evolution really effective? @XPDayGE2011 Karlsruhe-GE [ENG]20111117 Is Software Evolution really effective? @XPDayGE2011 Karlsruhe-GE [ENG]
20111117 Is Software Evolution really effective? @XPDayGE2011 Karlsruhe-GE [ENG]
 
20111119 Is Software Evolution really effective? @IAD2011 Rome-IT [ENG]
20111119 Is Software Evolution really effective? @IAD2011 Rome-IT [ENG]20111119 Is Software Evolution really effective? @IAD2011 Rome-IT [ENG]
20111119 Is Software Evolution really effective? @IAD2011 Rome-IT [ENG]
 
20100506 Dinamiche di Team @BetterSoftware2010 Firenze-IT [ITA]
20100506 Dinamiche di Team @BetterSoftware2010 Firenze-IT [ITA]20100506 Dinamiche di Team @BetterSoftware2010 Firenze-IT [ITA]
20100506 Dinamiche di Team @BetterSoftware2010 Firenze-IT [ITA]
 
20100302 Dinamiche di Team Brainstorming @UniRM3 Roma-IT [ITA]
20100302 Dinamiche di Team Brainstorming @UniRM3 Roma-IT [ITA]20100302 Dinamiche di Team Brainstorming @UniRM3 Roma-IT [ITA]
20100302 Dinamiche di Team Brainstorming @UniRM3 Roma-IT [ITA]
 
20091203 Design Emergente Più Cambiamenti Più Profitti @UxConference2009 Luga...
20091203 Design Emergente Più Cambiamenti Più Profitti @UxConference2009 Luga...20091203 Design Emergente Più Cambiamenti Più Profitti @UxConference2009 Luga...
20091203 Design Emergente Più Cambiamenti Più Profitti @UxConference2009 Luga...
 
20090507 Metodi Agili e Aumento del Roi @Better Software2009 Firenze IT [ITA]
20090507 Metodi Agili e Aumento del Roi @Better Software2009 Firenze IT [ITA]20090507 Metodi Agili e Aumento del Roi @Better Software2009 Firenze IT [ITA]
20090507 Metodi Agili e Aumento del Roi @Better Software2009 Firenze IT [ITA]
 
20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]
20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]
20090124 Ricette per Eliminare gli IF @JavaDay3 Roma-IT [ITA]
 
20080619 Diventare Agili Dalla Università ad un Team Agile @UniRM3 Roma-IT [ITA]
20080619 Diventare Agili Dalla Università ad un Team Agile @UniRM3 Roma-IT [ITA]20080619 Diventare Agili Dalla Università ad un Team Agile @UniRM3 Roma-IT [ITA]
20080619 Diventare Agili Dalla Università ad un Team Agile @UniRM3 Roma-IT [ITA]
 
20080124 XPLabs Tour08 @UniAQ.it L'Aquila-IT [ITA]
20080124 XPLabs Tour08 @UniAQ.it L'Aquila-IT [ITA]20080124 XPLabs Tour08 @UniAQ.it L'Aquila-IT [ITA]
20080124 XPLabs Tour08 @UniAQ.it L'Aquila-IT [ITA]
 
20071201 Eliminare For @JavaDayRoma2 Roma-IT [ITA]
20071201 Eliminare For @JavaDayRoma2 Roma-IT [ITA]20071201 Eliminare For @JavaDayRoma2 Roma-IT [ITA]
20071201 Eliminare For @JavaDayRoma2 Roma-IT [ITA]
 
20071123 XPLabs Tour07 Bonsai @ItalianAgileDay2007 Bologna-IT [ITA]
20071123 XPLabs Tour07 Bonsai @ItalianAgileDay2007 Bologna-IT [ITA]20071123 XPLabs Tour07 Bonsai @ItalianAgileDay2007 Bologna-IT [ITA]
20071123 XPLabs Tour07 Bonsai @ItalianAgileDay2007 Bologna-IT [ITA]
 
20071027 XPLabs Tour Bonsai @LinuxDayRoma2007 Roma-IT [ITA]
20071027 XPLabs Tour Bonsai @LinuxDayRoma2007 Roma-IT [ITA]20071027 XPLabs Tour Bonsai @LinuxDayRoma2007 Roma-IT [ITA]
20071027 XPLabs Tour Bonsai @LinuxDayRoma2007 Roma-IT [ITA]
 
20061028 XPLabs Tour06 Bonsai @LinuxDayRoma2006 Roma-IT [ITA]
20061028 XPLabs Tour06 Bonsai @LinuxDayRoma2006 Roma-IT [ITA]20061028 XPLabs Tour06 Bonsai @LinuxDayRoma2006 Roma-IT [ITA]
20061028 XPLabs Tour06 Bonsai @LinuxDayRoma2006 Roma-IT [ITA]
 
20060703 XP Values and Principles @Essap2006 Varese-IT [ITA]
20060703 XP Values and Principles @Essap2006 Varese-IT [ITA]20060703 XP Values and Principles @Essap2006 Varese-IT [ITA]
20060703 XP Values and Principles @Essap2006 Varese-IT [ITA]
 
20060627 SOA @JavaConference2006 Milano-IT [ITA]
20060627 SOA @JavaConference2006 Milano-IT [ITA]20060627 SOA @JavaConference2006 Milano-IT [ITA]
20060627 SOA @JavaConference2006 Milano-IT [ITA]
 
20051216 Il Prossimo Passo @Italian AgileDay2005 Milano-IT [ITA]
20051216 Il Prossimo Passo @Italian AgileDay2005 Milano-IT [ITA]20051216 Il Prossimo Passo @Italian AgileDay2005 Milano-IT [ITA]
20051216 Il Prossimo Passo @Italian AgileDay2005 Milano-IT [ITA]
 
20040503 Easy Tracking @AICA2004 Milano-IT [ITA]
20040503 Easy Tracking @AICA2004 Milano-IT [ITA]20040503 Easy Tracking @AICA2004 Milano-IT [ITA]
20040503 Easy Tracking @AICA2004 Milano-IT [ITA]
 

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

  • 1. Ridurre il costo del cambiamento applicando il Design Object-Oriented Francesco Cirillo Chief Executive Officer XPLabs S.R.L. Java Conference 2005
  • 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. C'era una volta una servlet... Java Conference 2005
  • 4. Un giorno la servlet incontra Bruno... Java Conference 2005
  • 5. E se... – ...il nostro cliente ci chiedesse di accedere ai dati su un file xml o un formato proprietario? Java Conference 2005
  • 6. Applichiamo OCP... Java Conference 2005
  • 7. Attenzione! – Non barare, Francesco! Java Conference 2005
  • 8. OK, OK... Java Conference 2005
  • 9. Reifichiamo la creazione del tipo di Broker... Java Conference 2005
  • 10. Un'idea per il testing... Java Conference 2005
  • 11. E se... – ...il nostro cliente ci chiedesse di produrre i report in formato pdf? Java Conference 2005
  • 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. Come funziona? Java Conference 2005
  • 14. Due oggetti tristi... Java Conference 2005
  • 15. Attento al Datastore! – Perché un Datastore è pericoloso? – Come possiamo migliorare il nostro design? Java Conference 2005
  • 16. Come eravamo... Java Conference 2005
  • 17. Class Diagram Java Conference 2005
  • 18. Il Datastore non c'è più! Java Conference 2005
  • 19. Applichiamo OCP... Java Conference 2005
  • 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. Altre chiusure... Java Conference 2005
  • 22. Oggetti tristi... – Ci sono altri oggetti tristi nel nostro sistema? Java Conference 2005
  • 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. “Odio” i class diagram! Java Conference 2005
  • 25. “Odio” i datastore! Java Conference 2005
  • 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. Oggetti tristi... Java Conference 2005
  • 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. 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. “Odio” i class diagram! Java Conference 2005
  • 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. 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. 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. 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. 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. 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. Da qui... Java Conference 2005
  • 38. Primo passo, ma... Java Conference 2005
  • 39. Insegniamo ai nostri oggetti a calcolare! Java Conference 2005
  • 40. Applichiamo OCP... Java Conference 2005
  • 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. Diamo un'occhiata d'insieme... Java Conference 2005
  • 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. 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
  • 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
  • 48. Aggiungiamo comportamento... Java Conference 2005
  • 49. Da qui... Java Conference 2005
  • 50. Applichiamo OCP Java Conference 2005
  • 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. 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. EccezioneRisorsaNonTrovata! Java Conference 2005
  • 54. Eccezioni... No grazie! Java Conference 2005
  • 55. Eccezioni... No grazie! Java Conference 2005
  • 56. Eccezioni... No grazie! Java Conference 2005
  • 57. ReportMensileServlet... – Cosa dovrebbe fare? ● Semplice meccanismo di comunicazione: inoltrare richieste – Cosa fa ancora? ● Gestisce l'input Java Conference 2005
  • 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. Da qui... Java Conference 2005
  • 60. Liberiamo la servlet! Java Conference 2005
  • 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. 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. Da qui... Java Conference 2005
  • 64. Reifichiamo i componenti html! Java Conference 2005
  • 65. Non esiste un unico design! Java Conference 2005
  • 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. Ricapitolando... Java Conference 2005
  • 68. Siamo arrivati a... Java Conference 2005
  • 69. Siamo arrivati a... Java Conference 2005
  • 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. 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. Conclusioni ● Differenze: – Anticipare – Faremergere ● Elementi comuni: – Approccio di sintesi – Umiltà Java Conference 2005
  • 73. Ridurre il costo del cambiamento con l'OOD ● Domande? Java Conference 2005