Anti pattern se lo conosci lo eviti
-
Upload
simone-federici -
Category
Engineering
-
view
133 -
download
3
Transcript of Anti pattern se lo conosci lo eviti
L'Anti-Pattern:se lo conosci lo eviti
Giorgio VinciSenior [email protected]
Simone FedericiJava Architect
Jug Roma 9° Meeting25 Gennaio 2006
Eventi precedenti18 novembre 2006 Novara30 Settembre 2006 Verona26 Giugno JC 2006 Milano
www.javaportal.it [email protected] & [email protected] 2
AGENDA
●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti
www.javaportal.it [email protected] & [email protected] 3
Spaghetti Code
www.javaportal.it [email protected] & [email protected] 4
Antipatterns Map
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.
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.
www.javaportal.it [email protected] & [email protected] 7
AGENDA
●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti
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)
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.
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?
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?
www.javaportal.it [email protected] & [email protected] 12
AGENDA
●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti
www.javaportal.it [email protected] & [email protected] 13
SCACCHIERA
Un caso reale... o quasi.
Immaginiamo di dover realizzare il gioco degli scacchi.
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!!!
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...
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()
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.
www.javaportal.it [email protected] & [email protected] 18
Re-Coupling
Abbiamo introdotto una dipendenza non
necessaria
Assegnando correttamente le
responsabilità evitiamo un eccessivo
accoppiamento
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
...
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
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...
www.javaportal.it [email protected] & [email protected] 22
AGENDA
●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti
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
www.javaportal.it [email protected] & [email protected] 24
AGENDA
●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti
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
www.javaportal.it [email protected] & [email protected] 26
Structural Analysis
TangleButterfly
BreakableHub
Implementation Dependency
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()
www.javaportal.it [email protected] & [email protected] 28
CheckStyleJalopy
J2EE TaskCorrettezza degli EJB
Task Code conventionTask customizzabili
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)
www.javaportal.it [email protected] & [email protected] 30
TOOLS
Structural AnalysisJdependfindbugs
checkstylejalopy/jacobe
MavenAnt
Plugin per gli IDE
www.javaportal.it [email protected] & [email protected] 31
AGENDA
●Introduzione●GRASP●Anti Pattern di Progetto●I Mostri●Come fare per difendersi●Ringraziamenti
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
www.javaportal.it [email protected] & [email protected] 33
Le tappe JavaDay 2007!
?http://www.javaday.it
http://roma.javaday.it
www.javaportal.it [email protected] & [email protected] 34
Ringraziamenti
www.javaportal.itwww.javaday.itwww.jugroma.itroma.javaday.it
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/