oop... object whaaat?

43
OOP... Object Whaaat? A story of engineers, bricks and gears by Diego Giorgini - @ogeidix

Upload: diego-giorgini

Post on 28-May-2015

1.907 views

Category:

Technology


0 download

DESCRIPTION

La programmazione orientata agli oggetti non è quella che vi hanno insegnato a scuola! Vedremo assieme qual'è il significato di questo paradigma di programmazione, spesso frainteso, e i nuovi obiettivi che ci permette di raggiungere nello sviluppo software.

TRANSCRIPT

Page 1: OOP... Object Whaaat?

OOP... Object Whaaat?

A story of engineers, bricks and gears

by Diego Giorgini - @ogeidix

Page 2: OOP... Object Whaaat?

Quello che ci hanno insegnato a scuola non è tutto quello che serve per vincere la sfida...

Page 3: OOP... Object Whaaat?

La nostra sfida è costruire progetti complessi

Page 4: OOP... Object Whaaat?

Ma come?

Page 5: OOP... Object Whaaat?

Ma come? ...ok, nel software?

Programmazione procedurale e strutturataParadigma di programmazione che prevede l’utilizzo 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]

Page 6: OOP... Object Whaaat?

Ma come? ...ok, nel software?

Programmazione procedurale e strutturataParadigma di programmazione che prevede l’utilizzo 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 oggettiLa 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]

Page 7: OOP... Object Whaaat?

Ma come? ...ok, nel software?

Page 8: OOP... Object Whaaat?

Gli obiettivi che riusciamo a raggiungere

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

Page 9: OOP... Object Whaaat?

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!

Page 10: OOP... Object Whaaat?

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

Page 11: OOP... Object Whaaat?

Gli obiettivi che riusciamo a raggiungere

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

Page 12: OOP... Object Whaaat?

Gli obiettivi che riusciamo a raggiungere

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

sono comunque ottimi:

Page 13: OOP... Object Whaaat?

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 definito

Page 14: OOP... Object Whaaat?

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 definito per un progetto che resta fisso nel tempo

Page 15: OOP... Object Whaaat?

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

sono comunque ottimi: per realizzare un progetto definito per un progetto che resta fisso nel tempo

Page 16: OOP... Object Whaaat?

Gli obiettivi che riusciamo a raggiungere

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

Page 17: OOP... Object Whaaat?

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ò:

Page 18: OOP... Object Whaaat?

Gli obiettivi che riusciamo a raggiungere

Flessibilità di fronte al cambiamento Riuso reale del codice Mantenere il sistema aperto alla crescita

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

Le necessità dello sviluppo software includono però:

Page 19: OOP... Object Whaaat?

Le necessità dello sviluppo software richiedono

Non moduli statici

Page 20: OOP... Object Whaaat?

Le necessità dello sviluppo software richiedono

Non moduli statici

ma entità dinamiche

Page 21: OOP... Object Whaaat?

Entità dinamiche

L’attenzione è sul comportamento dinamico

Il progetto è il risultato della collaborazione di diverse entità

Page 22: OOP... Object Whaaat?

Entità dinamiche

Permettono di modificare il comportamento del sistema inserendo nuove entità con comportamenti differenti

Il sistema è flessibile a nuoverichieste senza bisogno di modificare quanto realizzato

Page 23: OOP... Object Whaaat?

Entità dinamiche

“Il tuo design è corretto se ogni nuova modifica al progetto richiede meno codicedella modifica precedente”

Matteo Vaccari - @xpmatteo

Page 24: OOP... Object Whaaat?

Progettare entità dinamiche

Il diagramma delle classi? Statico!

Il comportamento viene descritto dal diagramma di collaborazione

Page 25: OOP... Object Whaaat?

Progettare entità dinamiche

Una automobile ... statica

Centralina

Ruota

RuotaMotrice

Volante

Pedale

Cruscotto

Luci

Class diagram:

1 1

1

1

1 12

2

1..*

1

3

1

Page 26: OOP... Object Whaaat?

Progettare entità dinamiche

:Centralina

RuotaMDx:RuotaMotrice

:Volante

Freno:Pedale

:Cruscotto

FrecciaDx:Luce

Stop:Luce

Una automobile ... statica - dinamica

Collaboration diagram:1: Accensione delle frecce

1.1 turn_on

1.2 turning_right2: Frenata2.1 turn_on

2.2 brake

2.2.1 brake

2.2.1 braking

Page 27: OOP... Object Whaaat?

comunica dati allericeveinformazioni da

Progettare entità dinamiche

Centralina

RuotaMotrice Volante

Pedale

Cruscotto

Luci

Una automobile ... statica - dinamica

Class diagram:

Comanda delle

comunica dati al riceve dati dal

ricevono dati dal

Page 28: OOP... Object Whaaat?

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

Page 29: OOP... Object Whaaat?

Progettiamo il comportamento delle entità

1. Devono essere educate tra di loro

Page 30: OOP... Object Whaaat?

Educazione verso gli altri oggetti

Keep it shy

“The best code is very shy.Like a four-year old hiding behind a mother’s skirt, code shouldn’t reveal too much of itself and shouldn’t be too nosy into others affairs”

Andy Hunt & Dave Thomas

Page 31: OOP... Object Whaaat?

Educazione verso gli altri oggetti

Tell the other guyoppure “Tell, Don’t 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.

Page 32: OOP... Object Whaaat?

Progettiamo il comportamento delle entità

2. Devono essere educate verso il programmatore

Page 33: OOP... Object Whaaat?

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

Page 34: OOP... Object Whaaat?

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

Se queste due aree sono intersecate abbiamo:1. dipendenze nascoste al programmatore2. difficoltà nel realizzare test di unità

Page 35: OOP... Object Whaaat?

Avoid global state

Utilizzare uno stato globale mutabile porta a:1. Difficoltà di debugging e test2. API che mentono al programmatore

Educazione verso i programmatori

Page 36: OOP... Object Whaaat?

Avoid global state

Utilizzare uno stato globale mutabile porta a:1. Difficoltà di debugging e test2. API che mentono al programmatore

Educazione verso i programmatori

Attenzione a:1. Singleton = AntiPattern2. Hidden global state (Random, Date, Time)

3. *VM Global State VS Application global state4. Global state IS TRANSITIVE!

Page 37: OOP... Object Whaaat?

Progettiamo il comportamento delle entità

3. Devono essere predisposte per la collaborazione

Page 38: OOP... Object Whaaat?

Predisposizione al cambiamento

DRY, Don’t Repeat Yourself

Every piece of knowledge must have a single, unambiguous, and authoritative representation within a system.

Andy Hunt & Dave Thomas

Page 39: OOP... Object Whaaat?

Anti If Campaign

1. Difficile da leggere2. Difficile da testare3. Freno alla crescita del progetto

La maggior parte degli if può essere rimossa tramite Polimorfismo

Predisposizione al cambiamento

Page 40: OOP... Object Whaaat?

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

Page 41: OOP... Object Whaaat?

Predisposizione al cambiamento

Composition instead of Inheritance

Be careful about runaway subclassing

... IT’S AGAIN STATIC!

Page 42: OOP... Object Whaaat?

Come realizzare ciò in modo sistematico

Refactoring = rimozione delle duplicazioniattraverso l’individuazione degli smell

Message chainsPrimitive obsession

CommentsLong method

Long class

Uncommunicative nameInconsistent names

Type embedded in nameLong method

Long parameter list

Magic numbersDuplicated codeDuplicated flow

Embedded expressionsConditionals

Page 43: OOP... Object Whaaat?

Bibliografia e approfondimenti

1. UML Tutorial: Collaboration Diagrams - Robert C. Martin2. Keep it DRY, Shy, and Tell the Other Guy - Dave Thomas3. Clean Code Talks - Misko Hevery4. Design Patterns - Gang of four

Grazie dell’attenzione

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/