Anti pattern se lo conosci lo eviti

35
L'Anti-Pattern: se lo conosci lo eviti Giorgio Vinci Senior Consultant [email protected] Simone Federici Java Architect [email protected] Jug Roma 9° Meeting 25 Gennaio 2006 Eventi precedenti 18 novembre 2006 Novara 30 Settembre 2006 Verona 26 Giugno JC 2006 Milano

Transcript of Anti pattern se lo conosci lo eviti

Page 1: Anti pattern se lo conosci lo eviti

L'Anti-Pattern:se lo conosci lo eviti

Giorgio VinciSenior [email protected]

Simone FedericiJava Architect

[email protected]

Jug Roma 9° Meeting25 Gennaio 2006

Eventi precedenti18 novembre 2006 Novara30 Settembre 2006 Verona26 Giugno JC 2006 Milano

Page 2: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 2

AGENDA

●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti

Page 3: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 3

Spaghetti Code

Page 4: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 4

Antipatterns Map

Page 5: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 5

L'antipattern:L'antipattern si può definire "pattern" in quanto è una soluzione progettuale generale a un problema ricorrente ed è costituito da un nome, un problema ed una soluzione.

La differenza tra un normale pattern (o "Pattern Migliorativo") ed un Anti-Pattern è che il primo è caratterizzato da una soluzione fondamentalmente buona/positiva, mentre il secondo è caratterizzato da una falsa soluzione o da una soluzione fondamentalmente negativa.

Verranno illustrati i principali Anti-Pattern, con le relative soluzioni alternative, all'interno del: Project management, Design, Object-oriented programming e Developing.

Seguendo questa presentazione sarà possibile evitare la maggior parte degli Anti-Pattern ed utilizzare invece un approccio sano alla progettazione e sviluppo del software. Laddove non fosse possibile "risolvere" l'Anti-Pattern, sarà fondamentale essere in grado di evidenziarlo e monitorarlo come criticità di progetto.

Page 6: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 6

OBIETTIVI

Sottolineare l'importanza di una buona conoscenza dei pattern e degli antipatterns, al fine di aver un approccio

sano alla progettazione e allo sviluppo del software

Lo speech è rivolto a:Project Manager, Analisti, Architetti, Programmatori

perché la valenza dell'antipattern è trasversale al ruolo.

Page 7: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 7

AGENDA

●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti

Page 8: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 8

GRASPGeneral Responsibility Assignment Software

Pattern (or Principles)●Information Expert●Low Coupling●High Cohesion●Creator●Controller●Polymorphism●Pure Fabrication●Indirection●Don't Talk to Strangers: (Law of Demeter)

Page 9: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 9

GRASPInformation Expert

Low Coupling e High Cohesion

Dobbiamo distribuire le responsabilità a gli oggetti del nostro dominio.

Information Expert ci dice di assegnare le responsabilità all'oggetto più esperto, che possiede le informazioni.

Il basso accoppiamento ci dice di legare i componenti tra loro il MINIMO indispensabile.

L'alta coesione ci dice che ogni Oggetto deve delle responsabilità “COESE” tra loro, che abbiano un motivo in comune per appartenere ad esso.

Page 10: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 10

GRASPCreator, Controller

Polymorphism

Quale è il principio generale per l'assegnazione della responsabilità di creazione degli oggetti?

Come far comunicare l'UI con la BL?A chi assegnare tale responsabilità?

La logica condizionale if-then-else spesso rende difficile l'estensione dell'applicazione. Come

fare?

Page 11: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 11

GRASPIndirection, Pure Fabrication,

Don't Talk to Stranger

Non vogliamo accoppiare direttamente due oggetti, posso delegare le responsabilità ad un oggetto tra loro?

Non riesco a non violare Low Coupling e High Coesion con gli oggetti appartenenti al dominio del problema,

come fare?

Come evitare che oggetti disegnati secondo la Low Coupling diventino accoppiati nell'implementazione?

Page 12: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 12

AGENDA

●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti

Page 13: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 13

SCACCHIERA

Un caso reale... o quasi.

Immaginiamo di dover realizzare il gioco degli scacchi.

Page 14: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 14

Gas FactoryMettiamo in piedi un sistema di intelligenza

artificiale.

Creiamo un pannello di controllo per una gestione parametrica dell'intera

applicazione.

E aggiungiamo la possibilità di giocare in rete...

Tutte cose bellissime ma che non ci erano state chieste!!!

Page 15: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 15

Reinventing the wheel

Mi invento un mio metodo perL'auto apprendimento del programma a

giocare a scacchiIgnorando l'esistenza di Reti Neurali,

Apprendimento Bayesiano ecc...

Page 16: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 16

Abstract Inversion

Un interfaccia troppo povera rischia di nascondere alcune funzionalità.

Scacchiera

+trasformazione()+arrocco()

Pezzo<<interface>>

+muovi()+mangia()+...()

Pedone

+trasformazione()ReginaTorre

CavalloAlfiere

Re

+arrocco()

Page 17: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 17

Interface bloat"In medio stat virtus"

Un interfaccia troppo ricca comporta che la maggior parte degli oggetti non saranno in grado di implementare molte delle funzionalità.

Oltre a violare il principio di alta coesione.

Page 18: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 18

Re-Coupling

Abbiamo introdotto una dipendenza non

necessaria

Assegnando correttamente le

responsabilità evitiamo un eccessivo

accoppiamento

Page 19: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 19

Magic Pushbutton

All'interno dei metodi Drag&Drop della nostra interfaccia grafica andiamo a

“cablare” la logica di business.Il metodo del listener conterrà:- verifica validità della mossa

- movimento del pezzo- eventuale rimozione di pezzo avversario

...

Page 20: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 20

Poltergeist

Ad ogni invocazione

della UI generiamo un

opportuno controller che si occupa di interfacciarsi

con i business object

Page 21: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 21

God Object

Secondo il principio dell'Information Expertpotremmo arrivare a disegnare una classeche si occupa di tutto...

Page 22: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 22

AGENDA

●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti

Page 23: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 23

I MOSTRI

Spaghetti codeCut and Paste programming

Golden HammerInput Kludge

Coding by exceptionBlind faithHard code

Busy waiting or spinning

Page 24: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 24

AGENDA

●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti

Page 25: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 25

LA MIGLIOR DIFESA è L'ATTACCO

(Trovalo prima che lui trovi te)

Object Oriented ProgrammingPrincipi/Pattern GRASP

Design Pattern GOFAntipatterns

Code ConventionJava BluePrints

Conoscere i tools

Page 26: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 26

Structural Analysis

TangleButterfly

BreakableHub

Implementation Dependency

Page 27: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 27

FindBugsImpossibili CastClonableEmpty Fileinstanceof sempre falselogica Sempre falsecompareToException DroppateDate (parametri esempio mesi 0-11)Iteretor bad use hasNext() next()HARDCODED_ABSOLUTE_FILENAMENo SerializableOVERWRITTEN_INCREMENTSystem.exit(...) (DM_EXIT)equals() used to compare array and nonarrayequals() comparing different interfaceExplicit invocation of finalizer()Initialization circularityapparent infinite recursive loopStore of non serializable object into HttpSessionNull pointer dereference in methodRead of unwritten fieldConfusing method names Method may fail to close database resourceMethod may fail to close stream Redundant comparison of non-null value to nullInvalid syntax for regular expressionSQL_BAD_PREPARED_STATEMENT_ACCESSPossible double check of fieldA thread was created using the default empty run methodInconsistent synchronization Mismatched notify()

Page 28: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 28

CheckStyleJalopy

J2EE TaskCorrettezza degli EJB

Task Code conventionTask customizzabili

Page 29: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 29

Controlli automaticiNei processi di build automatici

è possibile aggiungere i plugin di findbugs e checkstyle

Maven2ANT

E' possibile anche lanciare jalopy(prima di un rilascio)

Page 30: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 30

TOOLS

Structural AnalysisJdependfindbugs

checkstylejalopy/jacobe

MavenAnt

Plugin per gli IDE

Page 31: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 31

AGENDA

●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti

Page 32: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 32

Le tappe JavaDay 2006!

Torino 7 LuglioVerona 30 SettembrePisa 14 OttobreNovara 18 NovembrePalermo 24 NovembreCagliari 25 NovembreRoma 02 Dicembre

http://www.javaday.it

http://roma.javaday.it

Page 33: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 33

Le tappe JavaDay 2007!

?http://www.javaday.it

http://roma.javaday.it

Page 34: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 34

Ringraziamenti

www.javaportal.itwww.javaday.itwww.jugroma.itroma.javaday.it

Page 35: Anti pattern se lo conosci lo eviti

www.javaportal.it [email protected] & [email protected] 35

Referenceswww.javaportal.it

www.antipatterns.comwww.ugolandini.net

http://c2.com/cgi/wiki?AntiPatternsCataloghttp://en.wikipedia.org/wiki/Antipattern

http://java.sun.com/reference/blueprints/http://java.sun.com/docs/codeconv/

http://findbugs.sourceforge.net/http://checkstyle.sourceforge.net/

http://jalopy.sourceforge.net/http://www.tiobe.com/jacobe.htm

http://freshmeat.net/projects/structuralanalysisforjava/http://www.clarkware.com/software/JDepend.html

http://ant.apache.org/http://maven.apache.org/