SlideShare a Scribd company logo
1 of 28
Download to read offline
Padova 7 Maggio 2004



    Introduzione alla
programmazione AOP con
         AspectJ
        by Matteo Baccan
       http://www.baccan.it

     www.JavaPortal.it
     www JavaPortal
Introduzione alla programmazione AOP
                       con AspectJ

•   Relatore:       Matteo Baccan        matteo@baccan.it
•   Data:           Padova 07/05/2004 13:30
•   Area:           Programming & development
•   Target:         Tecnici
•   Difficoltà:     Facile

    Nel corso degli anni, nuove correnti di pensiero hanno fatto nascere e sviluppare
    la programmazione strutturata, la programmazione ad oggetti ed ora la
    programmazione ad aspetti (Aspect Oriented Programming). Vediamo di cosa si
    tratta, andando ad utilizzarla tramite AspectJ, un compilatore portabile in grado
    di gestire questi nuovi costrutti




                          www.JavaPortal.it
                          www JavaPortal
Obiettivi

Dopo aver completato questo seminario sarai in grado di:

• Comprendere le basi di AOP

• Conoscere il concetto AOP di AspectJ

• Scrivere i primi programmi AOP

• Sfruttare la programmazione AOP nei tuoi programmi




                    www.JavaPortal.it
                    www JavaPortal
AOP - prima

Sviluppo tradizionale

• Lo sviluppo di applicazioni è faticoso

• La progettazione di un buon framework richiede tempo e
  progettazione

• Riuscire a soddisfare delle richieste orizzontali all'intero progetto
  rischia di stravolgere l'architettura progettata

• Dietro l'angolo c'è sempre la possibilità di avere del codice
  ridondante e copiato fra un componente e l'altro




                     www.JavaPortal.it
                     www JavaPortal
AOP – perché




 AOP permette di astrarre
funzionalità orizzontali alle
 applicazioni, definendole
   all'interno di aspect


       www.JavaPortal.it
       www JavaPortal
AOP - evoluzione

• Programmazione destrutturata/batch
   una sola procedura

• Programmazione procedurale
   a funzioni

• Programmazione ad oggetti
   tramite classi

• Programmazione ad aspetti
   Aspetti (crosscutting concerns) – problematiche comuni a più classi



                     www.JavaPortal.it
                     www JavaPortal
AOP - crosscutting concerns

Come direbbe google: “preoccupazioni trasversali di taglio”...

...o per meglio dire: problematiche trasversali a tutto un framework
                         o ad un'applicazione

Esempi
• Logging
• Exception
• Accesso controllato
• Monitoring
• Profiling




                     www.JavaPortal.it
                     www JavaPortal
AOP - prima




www.JavaPortal.it
www JavaPortal
AOP – la soluzione

• Permette di definire un concetto trasversale

• Evita la modifica delle classi in caso di crosscutting

• Separa i framework dalle modifiche “cross”

• Programmazione simile a un “reverse engineering” autorizzato




                     www.JavaPortal.it
                     www JavaPortal
AOP – dopo




www.JavaPortal.it
www JavaPortal
AspectJ

         Per programmare in AOP serve un compilatore

• AspectJ è uno dei compilatori in grado di utilizzare AOP

• Non è l'unico. Alternative:
   Hyper/J, JbossAOP, JAC, AspectWerkz, Spring etc.




                    www.JavaPortal.it
                    www JavaPortal
AspectJ - crosscutting



Dinamico
• Viene applicato a tutto il framework/programma o ad un
   sottoinsieme di codice e ne modifica l'esecuzione. Il codice
   cambia la modalità di funzionamento

Statico
• Viene applicato a tutto il framework/programma o ad un
   sottoinsieme di codice e ne modifica la struttura. Le classi hanno
   nuovi metodi o variabili d'istanza




                     www.JavaPortal.it
                     www JavaPortal
AspectJ – elementi

Join point:
   un punto di esecuzione del programma: il richiamo di un metodo o
   l'assegnamento di una variabile d'istanza

Pointcut:
   è il costrutto che permette di selezionare i join point dove andrà ad
   agire un advice

Advice:
   è il codice che deve essere eseguito nel join point selezionato dal
   pointcut

Aspect:
   è l'insieme di advice e pointcut

                      www.JavaPortal.it
                      www JavaPortal
AspectJ – join point

Method execution execution(MethodSignature)
Method call call(MethodSignature)
Constructor execution execution(ConstructorSignature)
Constructor call call(ConstructorSignature)
Class initialization staticinitialization(TypeSignature)
Field read access get(FieldSignature)
Field write access set(FieldSignature)
Exception handler execution handler(TypeSignature)
Object initialization initialization(ConstructorSignature)
Object pre-initialization preinitialization(ConstructorSignature)
Advice execution adviceexecution()



                    www.JavaPortal.it
                    www JavaPortal
Join point – execution call

• call(...)
    Viene modificato il programma chiamante


• execution(...)
    Viene modificato il metodo



Esempio...




                    www.JavaPortal.it
                    www JavaPortal
Join point - staticinitialization

• staticinitialization( ... )
    permette di intercettare le inizializzazioni statiche delle classi

    static{
      // faccio qualcosa
    }


Esempio...




                      www.JavaPortal.it
                      www JavaPortal
Join point - get/set

• set( ... )
   Intercetta gli assegnamenti ad una variabile

• get( ... )
   Intercetta le letture di una variabile



Esempio...




                      www.JavaPortal.it
                      www JavaPortal
Pointcut - this/target

• this( ... )
   Condizione sull'oggetto corrente

• target( ... )
   Condizione sull'oggetto chiamato



Esempio...




                   www.JavaPortal.it
                   www JavaPortal
Pointcut - args

• args( ... )
    condiziona un pointcut a certi parametri




Esempio...




                    www.JavaPortal.it
                    www JavaPortal
Advice- before/after/around

• before
   Richiamo del codice prima di un pointcut
• after
   Richiamo del codice dopo un pointcut
• around
   Richiamo del codice prima e dopo un pointcut



Esempio...




                   www.JavaPortal.it
                   www JavaPortal
Advice/metodi


Come un metodo
• Segue delle regole di accesso per essere eseguito
• Può generare un'eccezione
• Può fare riferimento all'aspect corrente tramite this

Al contrario dei metodi
• Non ha un nome
• Non può essere chiamato direttamente, è il sistema che lo esegue
• Ha accesso ad alcune variabili valorizzate all'interno di this che
   possono servire a prendere informazioni sui join point catturati:
   thisJoinPoint



                      www.JavaPortal.it
                      www JavaPortal
Advice - after

• returning
  Permette di porre del codice dopo il ritorno di un valore

• throwing
  Permette di porre del codice al verificarsi di un'eccezione



Esempio...




                  www.JavaPortal.it
                  www JavaPortal
Crosscutting statico

• Permette di aggiungere variabili e metodi alla classe

• Permette di modificarne l'ereditarietà




Esempio...




                  www.JavaPortal.it
                  www JavaPortal
Crosscutting compilazione


È possibile condizionare la compilazione con:

• warning
  avvisa l'utente di una certa condizione

• error
  blocca la compilazione

Esempio...




                  www.JavaPortal.it
                  www JavaPortal
Riferimenti

• AspectJ
   http://www.aspectj.org
• Il progetto Eclipse
   http://www.eclipse.org
• Pagina di download di AspectJ
   http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspectj
      -home/downloads.html
• Dove poter scaricare questo materiale
   http://www.baccan.it
   http://www.javaportal.it




                   www.JavaPortal.it
                   www JavaPortal
and now ...




   Q&A


www.JavaPortal.it
www JavaPortal
Ringraziamenti


    GRAZIE



       da

Matteo Baccan


www.JavaPortal.it
www JavaPortal
Ringraziamenti…

• Le aziende grazie alle quali posso essere qui oggi



            http://www.grupposisge.it/




                  www.JavaPortal.it
                  www JavaPortal

More Related Content

Viewers also liked

My Mom On Leadership
My Mom On LeadershipMy Mom On Leadership
My Mom On LeadershipMaja Vujovic
 
IT User Apprenticeship at Happy Computers
IT User Apprenticeship at Happy ComputersIT User Apprenticeship at Happy Computers
IT User Apprenticeship at Happy ComputersPaul McElvaney
 
Ficha de Dados Pessoais 2010 8º ano
Ficha de Dados Pessoais 2010 8º anoFicha de Dados Pessoais 2010 8º ano
Ficha de Dados Pessoais 2010 8º anoNelson Silva
 
Learning Pool: Work life balance 1 the secrets to building confidence resili...
Learning Pool: Work life balance 1  the secrets to building confidence resili...Learning Pool: Work life balance 1  the secrets to building confidence resili...
Learning Pool: Work life balance 1 the secrets to building confidence resili...Paul McElvaney
 
A History Of Salento Colombia
A History Of Salento ColombiaA History Of Salento Colombia
A History Of Salento ColombiaSergio Pino
 
Getting your professional message across
Getting your professional message acrossGetting your professional message across
Getting your professional message acrossRhonda Bracey
 
Time Saving Techniques Using Author-It
Time Saving Techniques Using Author-ItTime Saving Techniques Using Author-It
Time Saving Techniques Using Author-ItRhonda Bracey
 
If there is no fly v2
If there is no fly v2If there is no fly v2
If there is no fly v2Z3roXIII
 
9thGradeBuildingPresentation
9thGradeBuildingPresentation9thGradeBuildingPresentation
9thGradeBuildingPresentationKent ISD
 
Bolji svet - Uvodni webinar
Bolji svet  - Uvodni webinarBolji svet  - Uvodni webinar
Bolji svet - Uvodni webinarMaja Vujovic
 
Catawba County, North Carolina Social Networking -- Ed Rivers
Catawba County, North Carolina Social Networking -- Ed RiversCatawba County, North Carolina Social Networking -- Ed Rivers
Catawba County, North Carolina Social Networking -- Ed RiversSteve Lipton
 
Presentatie Uvt 24september
Presentatie Uvt 24septemberPresentatie Uvt 24september
Presentatie Uvt 24septemberSjef Kerkhofs
 

Viewers also liked (18)

My Mom On Leadership
My Mom On LeadershipMy Mom On Leadership
My Mom On Leadership
 
IT User Apprenticeship at Happy Computers
IT User Apprenticeship at Happy ComputersIT User Apprenticeship at Happy Computers
IT User Apprenticeship at Happy Computers
 
Ficha de Dados Pessoais 2010 8º ano
Ficha de Dados Pessoais 2010 8º anoFicha de Dados Pessoais 2010 8º ano
Ficha de Dados Pessoais 2010 8º ano
 
Learning Pool: Work life balance 1 the secrets to building confidence resili...
Learning Pool: Work life balance 1  the secrets to building confidence resili...Learning Pool: Work life balance 1  the secrets to building confidence resili...
Learning Pool: Work life balance 1 the secrets to building confidence resili...
 
Visual Art
Visual ArtVisual Art
Visual Art
 
Sns比較
Sns比較Sns比較
Sns比較
 
Guia de blogger
Guia de bloggerGuia de blogger
Guia de blogger
 
A History Of Salento Colombia
A History Of Salento ColombiaA History Of Salento Colombia
A History Of Salento Colombia
 
Microcamp Milano
Microcamp MilanoMicrocamp Milano
Microcamp Milano
 
Getting your professional message across
Getting your professional message acrossGetting your professional message across
Getting your professional message across
 
Time Saving Techniques Using Author-It
Time Saving Techniques Using Author-ItTime Saving Techniques Using Author-It
Time Saving Techniques Using Author-It
 
If there is no fly v2
If there is no fly v2If there is no fly v2
If there is no fly v2
 
9thGradeBuildingPresentation
9thGradeBuildingPresentation9thGradeBuildingPresentation
9thGradeBuildingPresentation
 
280 slides
280 slides280 slides
280 slides
 
Bolji svet - Uvodni webinar
Bolji svet  - Uvodni webinarBolji svet  - Uvodni webinar
Bolji svet - Uvodni webinar
 
Catawba County, North Carolina Social Networking -- Ed Rivers
Catawba County, North Carolina Social Networking -- Ed RiversCatawba County, North Carolina Social Networking -- Ed Rivers
Catawba County, North Carolina Social Networking -- Ed Rivers
 
Docingeamb1 Doc
Docingeamb1 DocDocingeamb1 Doc
Docingeamb1 Doc
 
Presentatie Uvt 24september
Presentatie Uvt 24septemberPresentatie Uvt 24september
Presentatie Uvt 24september
 

Similar to Webbit 2004: Aspectj

Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webRoberto Messora
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented ProgrammingAndrea Bozzoni
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceGiuseppe Toto
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Giuseppe Vizzari
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScriptSinergia Totale
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide SitoDavide Sito
 
javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - TigerMatteo Baccan
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)Giorgio Di Nardo
 
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacyProgettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacyGiacomo Russo
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
Link. java server faces [santi caltabiano]
  Link. java server faces [santi caltabiano]  Link. java server faces [santi caltabiano]
Link. java server faces [santi caltabiano]santi caltabiano
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked DataSynapta
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked DataDavide Allavena
 
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Giacomo Russo
 

Similar to Webbit 2004: Aspectj (20)

Eclipse and Java
Eclipse and JavaEclipse and Java
Eclipse and Java
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
 
Many Designs Elements
Many Designs ElementsMany Designs Elements
Many Designs Elements
 
Progetto SOD Davide Sito
Progetto SOD Davide SitoProgetto SOD Davide Sito
Progetto SOD Davide Sito
 
javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - Tiger
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)
 
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacyProgettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 
Link. java server faces [santi caltabiano]
  Link. java server faces [santi caltabiano]  Link. java server faces [santi caltabiano]
Link. java server faces [santi caltabiano]
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked Data
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked Data
 
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 

More from Matteo Baccan

Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan
 
Matteo baccan raspberry pi - linox 2015 - corso parte 3
Matteo baccan   raspberry pi - linox 2015 - corso parte 3Matteo baccan   raspberry pi - linox 2015 - corso parte 3
Matteo baccan raspberry pi - linox 2015 - corso parte 3Matteo Baccan
 
Matteo baccan raspberry pi - linox 2015 - corso parte 2
Matteo baccan   raspberry pi - linox 2015 - corso parte 2Matteo baccan   raspberry pi - linox 2015 - corso parte 2
Matteo baccan raspberry pi - linox 2015 - corso parte 2Matteo Baccan
 
Matteo baccan raspberry pi - linox 2015 - corso parte 1
Matteo baccan   raspberry pi - linox 2015 - corso parte 1Matteo baccan   raspberry pi - linox 2015 - corso parte 1
Matteo baccan raspberry pi - linox 2015 - corso parte 1Matteo Baccan
 
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Matteo Baccan
 
Matteo baccan raspberry pi - linox 2014
Matteo baccan   raspberry pi - linox 2014Matteo baccan   raspberry pi - linox 2014
Matteo baccan raspberry pi - linox 2014Matteo Baccan
 
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterCodemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterMatteo Baccan
 
Phpday 2009 php e java
Phpday 2009 php e javaPhpday 2009 php e java
Phpday 2009 php e javaMatteo Baccan
 
Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e javaMatteo Baccan
 
Confsl 2010 Facebook Framework
Confsl 2010 Facebook FrameworkConfsl 2010 Facebook Framework
Confsl 2010 Facebook FrameworkMatteo Baccan
 
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Matteo Baccan
 
Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3 Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3 Matteo Baccan
 
Codemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search ServerCodemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search ServerMatteo Baccan
 
Codemotion twitter programming
Codemotion twitter programmingCodemotion twitter programming
Codemotion twitter programmingMatteo Baccan
 
Webtech 2010: twitter programming
Webtech 2010: twitter programmingWebtech 2010: twitter programming
Webtech 2010: twitter programmingMatteo Baccan
 
Webtech 2010: facebook framework
Webtech 2010: facebook frameworkWebtech 2010: facebook framework
Webtech 2010: facebook frameworkMatteo Baccan
 
JIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingJIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingMatteo Baccan
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5Matteo Baccan
 
Javaday 2007: skype4java
Javaday 2007: skype4javaJavaday 2007: skype4java
Javaday 2007: skype4javaMatteo Baccan
 

More from Matteo Baccan (20)

Gmail e google app
Gmail e google appGmail e google app
Gmail e google app
 
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
 
Matteo baccan raspberry pi - linox 2015 - corso parte 3
Matteo baccan   raspberry pi - linox 2015 - corso parte 3Matteo baccan   raspberry pi - linox 2015 - corso parte 3
Matteo baccan raspberry pi - linox 2015 - corso parte 3
 
Matteo baccan raspberry pi - linox 2015 - corso parte 2
Matteo baccan   raspberry pi - linox 2015 - corso parte 2Matteo baccan   raspberry pi - linox 2015 - corso parte 2
Matteo baccan raspberry pi - linox 2015 - corso parte 2
 
Matteo baccan raspberry pi - linox 2015 - corso parte 1
Matteo baccan   raspberry pi - linox 2015 - corso parte 1Matteo baccan   raspberry pi - linox 2015 - corso parte 1
Matteo baccan raspberry pi - linox 2015 - corso parte 1
 
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
 
Matteo baccan raspberry pi - linox 2014
Matteo baccan   raspberry pi - linox 2014Matteo baccan   raspberry pi - linox 2014
Matteo baccan raspberry pi - linox 2014
 
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterCodemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
 
Phpday 2009 php e java
Phpday 2009 php e javaPhpday 2009 php e java
Phpday 2009 php e java
 
Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e java
 
Confsl 2010 Facebook Framework
Confsl 2010 Facebook FrameworkConfsl 2010 Facebook Framework
Confsl 2010 Facebook Framework
 
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
 
Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3 Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3
 
Codemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search ServerCodemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search Server
 
Codemotion twitter programming
Codemotion twitter programmingCodemotion twitter programming
Codemotion twitter programming
 
Webtech 2010: twitter programming
Webtech 2010: twitter programmingWebtech 2010: twitter programming
Webtech 2010: twitter programming
 
Webtech 2010: facebook framework
Webtech 2010: facebook frameworkWebtech 2010: facebook framework
Webtech 2010: facebook framework
 
JIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingJIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java Programming
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Javaday 2007: skype4java
Javaday 2007: skype4javaJavaday 2007: skype4java
Javaday 2007: skype4java
 

Webbit 2004: Aspectj

  • 1. Padova 7 Maggio 2004 Introduzione alla programmazione AOP con AspectJ by Matteo Baccan http://www.baccan.it www.JavaPortal.it www JavaPortal
  • 2. Introduzione alla programmazione AOP con AspectJ • Relatore: Matteo Baccan matteo@baccan.it • Data: Padova 07/05/2004 13:30 • Area: Programming & development • Target: Tecnici • Difficoltà: Facile Nel corso degli anni, nuove correnti di pensiero hanno fatto nascere e sviluppare la programmazione strutturata, la programmazione ad oggetti ed ora la programmazione ad aspetti (Aspect Oriented Programming). Vediamo di cosa si tratta, andando ad utilizzarla tramite AspectJ, un compilatore portabile in grado di gestire questi nuovi costrutti www.JavaPortal.it www JavaPortal
  • 3. Obiettivi Dopo aver completato questo seminario sarai in grado di: • Comprendere le basi di AOP • Conoscere il concetto AOP di AspectJ • Scrivere i primi programmi AOP • Sfruttare la programmazione AOP nei tuoi programmi www.JavaPortal.it www JavaPortal
  • 4. AOP - prima Sviluppo tradizionale • Lo sviluppo di applicazioni è faticoso • La progettazione di un buon framework richiede tempo e progettazione • Riuscire a soddisfare delle richieste orizzontali all'intero progetto rischia di stravolgere l'architettura progettata • Dietro l'angolo c'è sempre la possibilità di avere del codice ridondante e copiato fra un componente e l'altro www.JavaPortal.it www JavaPortal
  • 5. AOP – perché AOP permette di astrarre funzionalità orizzontali alle applicazioni, definendole all'interno di aspect www.JavaPortal.it www JavaPortal
  • 6. AOP - evoluzione • Programmazione destrutturata/batch una sola procedura • Programmazione procedurale a funzioni • Programmazione ad oggetti tramite classi • Programmazione ad aspetti Aspetti (crosscutting concerns) – problematiche comuni a più classi www.JavaPortal.it www JavaPortal
  • 7. AOP - crosscutting concerns Come direbbe google: “preoccupazioni trasversali di taglio”... ...o per meglio dire: problematiche trasversali a tutto un framework o ad un'applicazione Esempi • Logging • Exception • Accesso controllato • Monitoring • Profiling www.JavaPortal.it www JavaPortal
  • 9. AOP – la soluzione • Permette di definire un concetto trasversale • Evita la modifica delle classi in caso di crosscutting • Separa i framework dalle modifiche “cross” • Programmazione simile a un “reverse engineering” autorizzato www.JavaPortal.it www JavaPortal
  • 11. AspectJ Per programmare in AOP serve un compilatore • AspectJ è uno dei compilatori in grado di utilizzare AOP • Non è l'unico. Alternative: Hyper/J, JbossAOP, JAC, AspectWerkz, Spring etc. www.JavaPortal.it www JavaPortal
  • 12. AspectJ - crosscutting Dinamico • Viene applicato a tutto il framework/programma o ad un sottoinsieme di codice e ne modifica l'esecuzione. Il codice cambia la modalità di funzionamento Statico • Viene applicato a tutto il framework/programma o ad un sottoinsieme di codice e ne modifica la struttura. Le classi hanno nuovi metodi o variabili d'istanza www.JavaPortal.it www JavaPortal
  • 13. AspectJ – elementi Join point: un punto di esecuzione del programma: il richiamo di un metodo o l'assegnamento di una variabile d'istanza Pointcut: è il costrutto che permette di selezionare i join point dove andrà ad agire un advice Advice: è il codice che deve essere eseguito nel join point selezionato dal pointcut Aspect: è l'insieme di advice e pointcut www.JavaPortal.it www JavaPortal
  • 14. AspectJ – join point Method execution execution(MethodSignature) Method call call(MethodSignature) Constructor execution execution(ConstructorSignature) Constructor call call(ConstructorSignature) Class initialization staticinitialization(TypeSignature) Field read access get(FieldSignature) Field write access set(FieldSignature) Exception handler execution handler(TypeSignature) Object initialization initialization(ConstructorSignature) Object pre-initialization preinitialization(ConstructorSignature) Advice execution adviceexecution() www.JavaPortal.it www JavaPortal
  • 15. Join point – execution call • call(...) Viene modificato il programma chiamante • execution(...) Viene modificato il metodo Esempio... www.JavaPortal.it www JavaPortal
  • 16. Join point - staticinitialization • staticinitialization( ... ) permette di intercettare le inizializzazioni statiche delle classi static{ // faccio qualcosa } Esempio... www.JavaPortal.it www JavaPortal
  • 17. Join point - get/set • set( ... ) Intercetta gli assegnamenti ad una variabile • get( ... ) Intercetta le letture di una variabile Esempio... www.JavaPortal.it www JavaPortal
  • 18. Pointcut - this/target • this( ... ) Condizione sull'oggetto corrente • target( ... ) Condizione sull'oggetto chiamato Esempio... www.JavaPortal.it www JavaPortal
  • 19. Pointcut - args • args( ... ) condiziona un pointcut a certi parametri Esempio... www.JavaPortal.it www JavaPortal
  • 20. Advice- before/after/around • before Richiamo del codice prima di un pointcut • after Richiamo del codice dopo un pointcut • around Richiamo del codice prima e dopo un pointcut Esempio... www.JavaPortal.it www JavaPortal
  • 21. Advice/metodi Come un metodo • Segue delle regole di accesso per essere eseguito • Può generare un'eccezione • Può fare riferimento all'aspect corrente tramite this Al contrario dei metodi • Non ha un nome • Non può essere chiamato direttamente, è il sistema che lo esegue • Ha accesso ad alcune variabili valorizzate all'interno di this che possono servire a prendere informazioni sui join point catturati: thisJoinPoint www.JavaPortal.it www JavaPortal
  • 22. Advice - after • returning Permette di porre del codice dopo il ritorno di un valore • throwing Permette di porre del codice al verificarsi di un'eccezione Esempio... www.JavaPortal.it www JavaPortal
  • 23. Crosscutting statico • Permette di aggiungere variabili e metodi alla classe • Permette di modificarne l'ereditarietà Esempio... www.JavaPortal.it www JavaPortal
  • 24. Crosscutting compilazione È possibile condizionare la compilazione con: • warning avvisa l'utente di una certa condizione • error blocca la compilazione Esempio... www.JavaPortal.it www JavaPortal
  • 25. Riferimenti • AspectJ http://www.aspectj.org • Il progetto Eclipse http://www.eclipse.org • Pagina di download di AspectJ http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspectj -home/downloads.html • Dove poter scaricare questo materiale http://www.baccan.it http://www.javaportal.it www.JavaPortal.it www JavaPortal
  • 26. and now ... Q&A www.JavaPortal.it www JavaPortal
  • 27. Ringraziamenti GRAZIE da Matteo Baccan www.JavaPortal.it www JavaPortal
  • 28. Ringraziamenti… • Le aziende grazie alle quali posso essere qui oggi http://www.grupposisge.it/ www.JavaPortal.it www JavaPortal