際際滷

際際滷Share a Scribd company logo
OOP... Object Whaaat?
A story of engineers, bricks and gears




                                         by Diego Giorgini - @ogeidix
Quello che ci hanno insegnato a scuola non 竪 tutto
quello che serve per vincere la s鍖da...
La nostra s鍖da 竪 costruire progetti complessi
Ma come?
Ma come? ...ok, nel software?


Programmazione procedurale e strutturata
Paradigma di programmazione che prevede lutilizzo chiamate a blocchi di codice detti
subroutine o anche sottoprogrammi.
Le subroutine possono inoltre essere associate a strutture dati cos狸 da mantenere allineata
la struttura del programma con quella dei dati.
                                                                         [tratta da wikipedia]
Ma come? ...ok, nel software?


Programmazione procedurale e strutturata
Paradigma di programmazione che prevede lutilizzo chiamate a blocchi di codice detti
subroutine o anche sottoprogrammi.
Le subroutine possono inoltre essere associate a strutture dati cos狸 da mantenere allineata
la struttura del programma con quella dei dati.
                                                                         [tratta da wikipedia]


Programmazione ad oggetti
La programmazione orientata agli oggetti (Object Oriented Programming, in breve OOP) 竪
uno stile di programmazione che deriva da quello classico procedurale, e pu嘆 essere
considerato una sua estensione. Consiste essenzialmente nella creazione di strutture
dati gerarchiche e combina i dati insieme alle operazioni che li manipolano
                                                                   [tratta da un sito internet]
Ma come? ...ok, nel software?
Gli obiettivi che riusciamo a raggiungere


   Scomposizione del problema in sotto problemi
   Suddivisione del lavoro in pi湛 sviluppatori
   Modularizzazione del progetto
Gli obiettivi che riusciamo a raggiungere


   Scomposizione del problema in sotto problemi
   Suddivisione del lavoro in pi湛 sviluppatori
   Modularizzazione del progetto



           Sono gli stessi obiettivi raggiunti
          dalla programmazione procedurale!
Gli obiettivi che riusciamo a raggiungere


   Scomposizione del problema in sotto problemi
   Suddivisione del lavoro in pi湛 sviluppatori
   Modularizzazione del progetto



           Sono gli stessi obiettivi raggiunti
          dalla programmazione procedurale!

Stiamo facendo programmazione procedurale con
              una sintassi diversa
Gli obiettivi che riusciamo a raggiungere


   Scomposizione del problema in sotto problemi
   Suddivisione del lavoro in pi湛 sviluppatori
   Modularizzazione del progetto
Gli obiettivi che riusciamo a raggiungere


   Scomposizione del problema in sotto problemi
   Suddivisione del lavoro in pi湛 sviluppatori
   Modularizzazione del progetto


            sono comunque ottimi:
Gli obiettivi che riusciamo a raggiungere


   Scomposizione del problema in sotto problemi
   Suddivisione del lavoro in pi湛 sviluppatori
   Modularizzazione del progetto


            sono comunque ottimi:
                 per realizzare un progetto de鍖nito
Gli obiettivi che riusciamo a raggiungere


   Scomposizione del problema in sotto problemi
   Suddivisione del lavoro in pi湛 sviluppatori
   Modularizzazione del progetto


            sono comunque ottimi:
                 per realizzare un progetto de鍖nito
                 per un progetto che resta 鍖sso nel tempo
Gli obiettivi che riusciamo a raggiungere


   Scomposizione del problema in sotto problemi
   Suddivisione del lavoro in pi湛 sviluppatori
   Modularizzazione del progetto


            sono comunque ottimi:
                 per realizzare un progetto de鍖nito
                 per un progetto che resta 鍖sso nel tempo


   Purtroppo non stiamo costruendo un palazzo
Gli obiettivi che riusciamo a raggiungere


   Scomposizione del problema in sotto problemi
   Suddivisione del lavoro in pi湛 sviluppatori
   Modularizzazione del progetto
Gli obiettivi che riusciamo a raggiungere


   Scomposizione del problema in sotto problemi
   Suddivisione del lavoro in pi湛 sviluppatori
   Modularizzazione del progetto


Le necessit dello sviluppo software includono per嘆:
Gli obiettivi che riusciamo a raggiungere


   Scomposizione del problema in sotto problemi
   Suddivisione del lavoro in pi湛 sviluppatori
   Modularizzazione del progetto


Le necessit dello sviluppo software includono per嘆:
   Flessibilit di fronte al cambiamento
   Riuso reale del codice
   Mantenere il sistema aperto alla crescita
Le necessit dello sviluppo software richiedono

  Non moduli statici
Le necessit dello sviluppo software richiedono

  Non moduli statici




                            ma entit dinamiche
Entit dinamiche



   Lattenzione 竪 sul comportamento dinamico

   Il progetto 竪 il risultato della
   collaborazione di diverse entit
Entit dinamiche


Permettono di modi鍖care il comportamento
del sistema inserendo nuove entit con
comportamenti differenti



Il sistema 竪 鍖essibile a nuove
richieste senza bisogno di
modi鍖care quanto realizzato
Entit dinamiche

   Il tuo design 竪 corretto se ogni nuova
   modi鍖ca al progetto richiede meno codice
   della modi鍖ca precedente
                             Matteo Vaccari - @xpmatteo
Progettare entit dinamiche


Il diagramma delle classi? Statico!

Il comportamento viene descritto dal
diagramma di collaborazione
Progettare entit dinamiche

Una automobile          ... statica
Class diagram:
                                  1          1    Volante
           Centralina             1          3

                 1      1                         Pedale
                 2          1 1


        Ruota                            1       Cruscotto
                        2
                                      1..*
          RuotaMotrice                             Luci
Progettare entit dinamiche

Una automobile            ... statica - dinamica
                                                  Collaboration diagram:
                                                             1: Accensione delle frecce
    FrecciaDx:Luce                          1.1 turn_on

                                                                 :Volante
      Stop:Luce           2.1 turn_on
                                                2: Frenata                       1.2 turning_right

                          2.2 brake
                                                 Freno:Pedale
     :Centralina
            2.2.1 brake

                                        2.2.1 braking

    RuotaMDx:RuotaMotrice                                     :Cruscotto
Progettare entit dinamiche

Una automobile               ... statica - dinamica

Class diagram:
                  riceve
                  informazioni da                comunica dati alle
     Centralina                       Pedale                                Luci

Comanda delle                                               ricevono dati dal




                  comunica dati al               riceve dati dal
  RuotaMotrice                       Cruscotto                           Volante
Progettiamo il comportamento delle entit



1. Devono essere educate tra di loro

2. Devono essere educate verso il programmatore

3. Devono essere predisposte per la collaborazione
Progettiamo il comportamento delle entit




1. Devono essere educate tra di loro
Educazione verso gli altri oggetti


  Keep it shy

  The best code is very shy.
  Like a four-year old hiding behind a mothers
  skirt, code shouldnt reveal too much of itself
  and shouldnt be too nosy into others affairs
                                     Andy Hunt & Dave Thomas
Educazione verso gli altri oggetti


 Tell the other guy
 oppure Tell, Dont Ask o Send messages

 Non devono preoccuparsi di sapere con chi
 stanno parlando o come sar svolta la richiesta
 che hanno invocato.
 Devono limitarsi a comunicare gentilmente il
 loro bisogno al vicino.
Progettiamo il comportamento delle entit




2. Devono essere educate verso il programmatore
Educazione verso i programmatori


 Ask for things

 Nel progetto sono presenti:
  1. aree di codice logico (business logic)
  2. aree di codice di inizializzazione (new keywords)
Educazione verso i programmatori


 Ask for things

 Nel progetto sono presenti:
  1. aree di codice logico (business logic)
  2. aree di codice di inizializzazione (new keywords)
 Se queste due aree sono intersecate abbiamo:
  1. dipendenze nascoste al programmatore
  2. dif鍖colt nel realizzare test di unit
Educazione verso i programmatori


 Avoid global state
 Utilizzare uno stato globale mutabile porta a:
  1. Dif鍖colt di debugging e test
  2. API che mentono al programmatore
Educazione verso i programmatori


 Avoid global state
 Utilizzare uno stato globale mutabile porta a:
  1. Dif鍖colt di debugging e test
  2. API che mentono al programmatore
 Attenzione a:
  1. Singleton = AntiPattern
  2. Hidden global state (Random, Date, Time)
  3. *VM Global State VS Application global state
  4. Global state IS TRANSITIVE!
Progettiamo il comportamento delle entit




3. Devono essere predisposte per la collaborazione
Predisposizione al cambiamento


 DRY, Dont Repeat Yourself

 Every piece of knowledge must have a single,
 unambiguous, and authoritative representation
 within a system.
                                  Andy Hunt & Dave Thomas
Predisposizione al cambiamento


 Anti If Campaign

 1. Dif鍖cile da leggere
 2. Dif鍖cile da testare
 3. Freno alla crescita
    del progetto

 La maggior parte degli if pu嘆 essere rimossa
 tramite Polimor鍖smo
Predisposizione al cambiamento


 Design Pattern

 Dividendo le responsabilit di comportamento
 permettono al sistema di evolvere secondo
 differenti direzioni.

 Permettono di intervenire su di un particolare
 aspetto della struttura del sistema in modo
 indipendente dagli altri aspetti.
Predisposizione al cambiamento


 Composition instead of Inheritance

 Be careful about runaway subclassing

 ... ITS AGAIN STATIC!
Come realizzare ci嘆 in modo sistematico


     Refactoring = rimozione delle duplicazioni
       attraverso lindividuazione degli smell



 Message chains Uncommunicative name Magic numbers
Primitive obsession Inconsistent names      Duplicated code
    Comments       Type embedded in name Duplicated 鍖ow
   Long method          Long method       Embedded expressions
     Long class       Long parameter list     Conditionals
Bibliogra鍖a e approfondimenti


 1. UML Tutorial: Collaboration Diagrams - Robert C. Martin
 2. Keep it DRY, Shy, and Tell the Other Guy - Dave Thomas
 3. Clean Code Talks - Misko Hevery
 4. Design Patterns - Gang of four


                               Grazie dellattenzione

Diego Giorgini
tweet me @ogeidix                                                                   http://www.fruktarbo.com




     Questo slide sono rilasciate Creative Commons BY 3.0   http://creativecommons.org/licenses/by/3.0/

More Related Content

Viewers also liked (10)

Udzungwa_Vidunda_WWFTPO_Nov2006
Udzungwa_Vidunda_WWFTPO_Nov2006Udzungwa_Vidunda_WWFTPO_Nov2006
Udzungwa_Vidunda_WWFTPO_Nov2006
Ahmed Ndossa
New look: ensuring that user needs are met in library space
New look: ensuring that user needs are met in library spaceNew look: ensuring that user needs are met in library space
New look: ensuring that user needs are met in library space
Academic & Research Libraries Group
L'tat plateforme & Identit辿 num辿rique (DISIC 2014 11-12)L'tat plateforme & Identit辿 num辿rique (DISIC 2014 11-12)
L'tat plateforme & Identit辿 num辿rique (DISIC 2014 11-12)
Yves Buisson
introduction to big data frameworks
introduction to big data frameworksintroduction to big data frameworks
introduction to big data frameworks
Amal Targhi
Facebook for the workplace (1)
Facebook for the workplace (1)Facebook for the workplace (1)
Facebook for the workplace (1)
digitalnativescoach
El espa単ol en am辿ricaEl espa単ol en am辿rica
El espa単ol en am辿rica
Carlos R鱈os Lemos
Salman_Khan_CV
Salman_Khan_CVSalman_Khan_CV
Salman_Khan_CV
Salman Khan
Dating Sweet Things To Say To Your Boyfriend
Dating Sweet Things To Say To Your Boyfriend
Dating Sweet Things To Say To Your Boyfriend
Dating Sweet Things To Say To Your Boyfriend
scrawnyhitch8504
Brexit? And the future of business
Brexit? And the future of businessBrexit? And the future of business
Brexit? And the future of business
Ogilvy Health
Udzungwa_Vidunda_WWFTPO_Nov2006
Udzungwa_Vidunda_WWFTPO_Nov2006Udzungwa_Vidunda_WWFTPO_Nov2006
Udzungwa_Vidunda_WWFTPO_Nov2006
Ahmed Ndossa
L'tat plateforme & Identit辿 num辿rique (DISIC 2014 11-12)L'tat plateforme & Identit辿 num辿rique (DISIC 2014 11-12)
L'tat plateforme & Identit辿 num辿rique (DISIC 2014 11-12)
Yves Buisson
introduction to big data frameworks
introduction to big data frameworksintroduction to big data frameworks
introduction to big data frameworks
Amal Targhi
Facebook for the workplace (1)
Facebook for the workplace (1)Facebook for the workplace (1)
Facebook for the workplace (1)
digitalnativescoach
El espa単ol en am辿ricaEl espa単ol en am辿rica
El espa単ol en am辿rica
Carlos R鱈os Lemos
Salman_Khan_CV
Salman_Khan_CVSalman_Khan_CV
Salman_Khan_CV
Salman Khan
Dating Sweet Things To Say To Your Boyfriend
Dating Sweet Things To Say To Your Boyfriend
Dating Sweet Things To Say To Your Boyfriend
Dating Sweet Things To Say To Your Boyfriend
scrawnyhitch8504
Brexit? And the future of business
Brexit? And the future of businessBrexit? And the future of business
Brexit? And the future of business
Ogilvy Health

Similar to OOP... Object Whaaat? (20)

Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
Francesca1980
Java Programming Language
Java Programming LanguageJava Programming Language
Java Programming Language
Pasquale Paola
Sviluppo di applicazioni modulari e interoperabilit tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilit tra le applicazioniSviluppo di applicazioni modulari e interoperabilit tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilit tra le applicazioni
Codemotion
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
Mauro Servienti
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)
DotNetMarche
Una fugace occhiata al Test Driven Development (2006)
Una fugace occhiata al Test Driven Development  (2006)Una fugace occhiata al Test Driven Development  (2006)
Una fugace occhiata al Test Driven Development (2006)
Roberto Bettazzoni
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniserviziLe 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
Luca Acquaviva
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
Andrea Saltarello
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
Mauro Servienti
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
Manuel Scapolan
AgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agiliAgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agili
Luca Minudel
Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011
Nicola Junior Vitto
Software Testing Forum 2012 - Polarion e TRS SpA
Software Testing Forum 2012 - Polarion e TRS SpASoftware Testing Forum 2012 - Polarion e TRS SpA
Software Testing Forum 2012 - Polarion e TRS SpA
Emerasoft, solutions to collaborate
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
dotnetcode
How I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignHow I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven Design
Andrea Saltarello
Wpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero teamWpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero team
Alessandro Alpi
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriAcadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Francesco Sciuti
Case study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacyCase study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacy
Mariano Fiorentino
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Marco Breveglieri
Manuale Agile Stelnet
Manuale Agile StelnetManuale Agile Stelnet
Manuale Agile Stelnet
Alberto Buschettu
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
Francesca1980
Java Programming Language
Java Programming LanguageJava Programming Language
Java Programming Language
Pasquale Paola
Sviluppo di applicazioni modulari e interoperabilit tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilit tra le applicazioniSviluppo di applicazioni modulari e interoperabilit tra le applicazioni
Sviluppo di applicazioni modulari e interoperabilit tra le applicazioni
Codemotion
Inversion of Control @ CD2008
Inversion of Control @ CD2008Inversion of Control @ CD2008
Inversion of Control @ CD2008
Mauro Servienti
Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)Introduzione al Domain Driven Design (DDD)
Introduzione al Domain Driven Design (DDD)
DotNetMarche
Una fugace occhiata al Test Driven Development (2006)
Una fugace occhiata al Test Driven Development  (2006)Una fugace occhiata al Test Driven Development  (2006)
Una fugace occhiata al Test Driven Development (2006)
Roberto Bettazzoni
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniserviziLe 7 sfide da affrontare nella migrazione da monolite a miniservizi
Le 7 sfide da affrontare nella migrazione da monolite a miniservizi
Luca Acquaviva
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
Andrea Saltarello
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
Manuel Scapolan
AgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agiliAgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agili
Luca Minudel
Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011
Nicola Junior Vitto
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
dotnetcode
How I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven DesignHow I did it (in .NET): idiomatic Domain Driven Design
How I did it (in .NET): idiomatic Domain Driven Design
Andrea Saltarello
Wpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero teamWpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero team
Alessandro Alpi
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriAcadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostri
Francesco Sciuti
Case study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacyCase study: un approccio modulare in un progetto legacy
Case study: un approccio modulare in un progetto legacy
Mariano Fiorentino
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Marco Breveglieri

OOP... Object Whaaat?

  • 1. OOP... Object Whaaat? A story of engineers, bricks and gears by Diego Giorgini - @ogeidix
  • 2. Quello che ci hanno insegnato a scuola non 竪 tutto quello che serve per vincere la s鍖da...
  • 3. La nostra s鍖da 竪 costruire progetti complessi
  • 5. Ma come? ...ok, nel software? Programmazione procedurale e strutturata Paradigma di programmazione che prevede lutilizzo chiamate a blocchi di codice detti subroutine o anche sottoprogrammi. Le subroutine possono inoltre essere associate a strutture dati cos狸 da mantenere allineata la struttura del programma con quella dei dati. [tratta da wikipedia]
  • 6. Ma come? ...ok, nel software? Programmazione procedurale e strutturata Paradigma di programmazione che prevede lutilizzo chiamate a blocchi di codice detti subroutine o anche sottoprogrammi. Le subroutine possono inoltre essere associate a strutture dati cos狸 da mantenere allineata la struttura del programma con quella dei dati. [tratta da wikipedia] Programmazione ad oggetti La programmazione orientata agli oggetti (Object Oriented Programming, in breve OOP) 竪 uno stile di programmazione che deriva da quello classico procedurale, e pu嘆 essere considerato una sua estensione. Consiste essenzialmente nella creazione di strutture dati gerarchiche e combina i dati insieme alle operazioni che li manipolano [tratta da un sito internet]
  • 7. Ma come? ...ok, nel software?
  • 8. Gli obiettivi che riusciamo a raggiungere Scomposizione del problema in sotto problemi Suddivisione del lavoro in pi湛 sviluppatori Modularizzazione del progetto
  • 9. Gli obiettivi che riusciamo a raggiungere Scomposizione del problema in sotto problemi Suddivisione del lavoro in pi湛 sviluppatori Modularizzazione del progetto Sono gli stessi obiettivi raggiunti dalla programmazione procedurale!
  • 10. Gli obiettivi che riusciamo a raggiungere Scomposizione del problema in sotto problemi Suddivisione del lavoro in pi湛 sviluppatori Modularizzazione del progetto Sono gli stessi obiettivi raggiunti dalla programmazione procedurale! Stiamo facendo programmazione procedurale con una sintassi diversa
  • 11. Gli obiettivi che riusciamo a raggiungere Scomposizione del problema in sotto problemi Suddivisione del lavoro in pi湛 sviluppatori Modularizzazione del progetto
  • 12. Gli obiettivi che riusciamo a raggiungere Scomposizione del problema in sotto problemi Suddivisione del lavoro in pi湛 sviluppatori Modularizzazione del progetto sono comunque ottimi:
  • 13. Gli obiettivi che riusciamo a raggiungere Scomposizione del problema in sotto problemi Suddivisione del lavoro in pi湛 sviluppatori Modularizzazione del progetto sono comunque ottimi: per realizzare un progetto de鍖nito
  • 14. Gli obiettivi che riusciamo a raggiungere Scomposizione del problema in sotto problemi Suddivisione del lavoro in pi湛 sviluppatori Modularizzazione del progetto sono comunque ottimi: per realizzare un progetto de鍖nito per un progetto che resta 鍖sso nel tempo
  • 15. Gli obiettivi che riusciamo a raggiungere Scomposizione del problema in sotto problemi Suddivisione del lavoro in pi湛 sviluppatori Modularizzazione del progetto sono comunque ottimi: per realizzare un progetto de鍖nito per un progetto che resta 鍖sso nel tempo Purtroppo non stiamo costruendo un palazzo
  • 16. Gli obiettivi che riusciamo a raggiungere Scomposizione del problema in sotto problemi Suddivisione del lavoro in pi湛 sviluppatori Modularizzazione del progetto
  • 17. Gli obiettivi che riusciamo a raggiungere Scomposizione del problema in sotto problemi Suddivisione del lavoro in pi湛 sviluppatori Modularizzazione del progetto Le necessit dello sviluppo software includono per嘆:
  • 18. Gli obiettivi che riusciamo a raggiungere Scomposizione del problema in sotto problemi Suddivisione del lavoro in pi湛 sviluppatori Modularizzazione del progetto Le necessit dello sviluppo software includono per嘆: Flessibilit di fronte al cambiamento Riuso reale del codice Mantenere il sistema aperto alla crescita
  • 19. Le necessit dello sviluppo software richiedono Non moduli statici
  • 20. Le necessit dello sviluppo software richiedono Non moduli statici ma entit dinamiche
  • 21. Entit dinamiche Lattenzione 竪 sul comportamento dinamico Il progetto 竪 il risultato della collaborazione di diverse entit
  • 22. Entit dinamiche Permettono di modi鍖care il comportamento del sistema inserendo nuove entit con comportamenti differenti Il sistema 竪 鍖essibile a nuove richieste senza bisogno di modi鍖care quanto realizzato
  • 23. Entit dinamiche Il tuo design 竪 corretto se ogni nuova modi鍖ca al progetto richiede meno codice della modi鍖ca precedente Matteo Vaccari - @xpmatteo
  • 24. Progettare entit dinamiche Il diagramma delle classi? Statico! Il comportamento viene descritto dal diagramma di collaborazione
  • 25. Progettare entit dinamiche Una automobile ... statica Class diagram: 1 1 Volante Centralina 1 3 1 1 Pedale 2 1 1 Ruota 1 Cruscotto 2 1..* RuotaMotrice Luci
  • 26. Progettare entit dinamiche Una automobile ... statica - dinamica Collaboration diagram: 1: Accensione delle frecce FrecciaDx:Luce 1.1 turn_on :Volante Stop:Luce 2.1 turn_on 2: Frenata 1.2 turning_right 2.2 brake Freno:Pedale :Centralina 2.2.1 brake 2.2.1 braking RuotaMDx:RuotaMotrice :Cruscotto
  • 27. Progettare entit dinamiche Una automobile ... statica - dinamica Class diagram: riceve informazioni da comunica dati alle Centralina Pedale Luci Comanda delle ricevono dati dal comunica dati al riceve dati dal RuotaMotrice Cruscotto Volante
  • 28. Progettiamo il comportamento delle entit 1. Devono essere educate tra di loro 2. Devono essere educate verso il programmatore 3. Devono essere predisposte per la collaborazione
  • 29. Progettiamo il comportamento delle entit 1. Devono essere educate tra di loro
  • 30. Educazione verso gli altri oggetti Keep it shy The best code is very shy. Like a four-year old hiding behind a mothers skirt, code shouldnt reveal too much of itself and shouldnt be too nosy into others affairs Andy Hunt & Dave Thomas
  • 31. Educazione verso gli altri oggetti Tell the other guy oppure Tell, Dont Ask o Send messages Non devono preoccuparsi di sapere con chi stanno parlando o come sar svolta la richiesta che hanno invocato. Devono limitarsi a comunicare gentilmente il loro bisogno al vicino.
  • 32. Progettiamo il comportamento delle entit 2. Devono essere educate verso il programmatore
  • 33. Educazione verso i programmatori Ask for things Nel progetto sono presenti: 1. aree di codice logico (business logic) 2. aree di codice di inizializzazione (new keywords)
  • 34. Educazione verso i programmatori Ask for things Nel progetto sono presenti: 1. aree di codice logico (business logic) 2. aree di codice di inizializzazione (new keywords) Se queste due aree sono intersecate abbiamo: 1. dipendenze nascoste al programmatore 2. dif鍖colt nel realizzare test di unit
  • 35. Educazione verso i programmatori Avoid global state Utilizzare uno stato globale mutabile porta a: 1. Dif鍖colt di debugging e test 2. API che mentono al programmatore
  • 36. Educazione verso i programmatori Avoid global state Utilizzare uno stato globale mutabile porta a: 1. Dif鍖colt di debugging e test 2. API che mentono al programmatore Attenzione a: 1. Singleton = AntiPattern 2. Hidden global state (Random, Date, Time) 3. *VM Global State VS Application global state 4. Global state IS TRANSITIVE!
  • 37. Progettiamo il comportamento delle entit 3. Devono essere predisposte per la collaborazione
  • 38. Predisposizione al cambiamento DRY, Dont Repeat Yourself Every piece of knowledge must have a single, unambiguous, and authoritative representation within a system. Andy Hunt & Dave Thomas
  • 39. Predisposizione al cambiamento Anti If Campaign 1. Dif鍖cile da leggere 2. Dif鍖cile da testare 3. Freno alla crescita del progetto La maggior parte degli if pu嘆 essere rimossa tramite Polimor鍖smo
  • 40. Predisposizione al cambiamento Design Pattern Dividendo le responsabilit di comportamento permettono al sistema di evolvere secondo differenti direzioni. Permettono di intervenire su di un particolare aspetto della struttura del sistema in modo indipendente dagli altri aspetti.
  • 41. Predisposizione al cambiamento Composition instead of Inheritance Be careful about runaway subclassing ... ITS AGAIN STATIC!
  • 42. Come realizzare ci嘆 in modo sistematico Refactoring = rimozione delle duplicazioni attraverso lindividuazione degli smell Message chains Uncommunicative name Magic numbers Primitive obsession Inconsistent names Duplicated code Comments Type embedded in name Duplicated 鍖ow Long method Long method Embedded expressions Long class Long parameter list Conditionals
  • 43. Bibliogra鍖a e approfondimenti 1. UML Tutorial: Collaboration Diagrams - Robert C. Martin 2. Keep it DRY, Shy, and Tell the Other Guy - Dave Thomas 3. Clean Code Talks - Misko Hevery 4. Design Patterns - Gang of four Grazie dellattenzione Diego Giorgini tweet me @ogeidix http://www.fruktarbo.com Questo slide sono rilasciate Creative Commons BY 3.0 http://creativecommons.org/licenses/by/3.0/