Is aop

Page 1

MetodologĂ­as de Desarrollo de Software (Ciclo de Vida) Juan Carlos Olivares Rojas MSN: juancarlosolivares@hotmail.com jcolivar@itmorelia.edu.mx http://antares.itmorelia.edu.mx/~jcolivar/ @jcolivares Social Network: Facebook, LinkedIn. Hi5


• Introduction

Agenda

• Aspect-Oriented Programming Fundamentals • Examples


Software Development Today


Software Evolution Evoluci贸n del SW


Software Evolution Evoluci贸n del SW


Sw Development Problems

• A complex system can visualize like as combined implementation of multiple concerns


Sw Development Problems class Book { ….. <all things about book> <error handling> … } class Partner { ….. <all things about Partner> <error handling> <access controlling> }

class Rent {….. <all things about Rent> <error handling> <access controlling> }


Sw Development Problems class BookStore { private Book [] books ; private Partner [] partners; public BookStore() { ‌ public void load( Partner p, Book b) { if validControlAccess() then{ // code of the method } else{ throwException(); } }

Access Control

public void addPartner(Partner p){ if validContolAccess() then{ // code of the method } else{ throwException(); } } // the rest of the class methods }


Tyranny of the Dominant Decomposition

• •

Descomposition by Form, Color or size We must choose only one principal model


Tyranny of the Dominant Decomposition • Order by Form

Order by Color


Color-Form Hierarchy

• We must elect one principal model. In this case: color and later, form


AOP Definition

• AOP was created by Gregor Kickzales and his Research Team at Palo Alto Research Center in 1996. • “ An Aspect is a modular unit that is spreand in another functional units. The aspects exist in the design stage as in the implementación stage…” • An Aspect is a concept that it’s difficult encapsulate clear and easily.


AOP

• An aspect is the unit which encapsulate a cross-cutting concern. • AOP promoves the separation of concerns through mechanisms which abstract and compose this concepts troughout the system.


Traditional Structure of a Compiler PROGRAMA

Lenguaje

Compilador o IntĂŠrprete

EJECUTABLE


Compiling Process in POA PROGRAMA DE COMPONENTES

Lenguaje base

PROGRAMA DE ASPECTOS 1

Lenguaje de aspectos 1

... ...

TEJEDOR (WEAVER)

EJECUTABLE

PROGRAMA DE ASPECTOS N

Lenguaje de aspectos N


AOP Program Structure

Program


AOP Program Structure


AOP Advantages


POA Concepts

JoinPoint

It’s a well-defined position inside of object-oriented code, for instance, the declaración of a method.

Pointcut

It’s a set of conditions applied to a JoinPoint, when the conditions are true, it will active and execute an Execution Point asigned at this PointCut.

Advice

It’s a Fragment of Code tha it’s executed when is actived PointCut.

Aspect

It’s the combination of JoinPoint, Pointcuts and Advices.


Highlevel View of AspectJ AspectJ

Advice advice body

pointcut

join point

Java Program


An Aspect Definition Aspect Control { JoinPoint securityOperations = call s BookStore.loan & calls BookStore.addPartner& ... Before securityOperations: { if !=(validControlAcces()) then{ throwsExcepcion(); } }


AOP and OOP Relation OOP: common concerns AOP: crosscuting concerns

Class A

Class A1 Attb1

Clase A2 Attb 3

Attb2 Method 1 Method 1

Method 2


OOP Evolution to AOP


AOP vs OOP


POA Advantages

• A code less complicated, more natural and more reduced. • More facilities to think about the concerns, since they are separate and dependencies between them are minimal. • An easier code to debug and to mantein.


AOP Tools • Langauges for Programming Aspects: • AspectJ: A Java Extension. The most popular. • AspectC++, AspectS, CAESAR. • .NET Languages: Weave.NET, Source Weave.


Class Bank Problem public class Bank { // other declarations public double processDebit(long idAccount, double amount) { // openning a transaction try { // retrieve account // business validation // business logic associated with debit // persistencia del nuevo estado // traceo del movimiento para auditoria // cierre exitoso de la transacci贸n (commit) return new amount account; } catch (Exception e) { // trace the audit exception // close abnormal transaction (rollback) // relauch the exception in superior layers } } // other business process declarations }

Transaction Persistence Traceability


Aspectual Descomposition

• Separation of concerns

• Aims to isolate cross cutting concerns • Each one of these concerns will be implemented in a separate unit.


Aspectual Recomposition


AOP Bank Version cio n sa c nc ia

Tr an d

// another business methods declarations }

ilid a

}

Pe rsi s te

// validaciones del negocio // debit business logic return new amount account;

Tr az ab

public double processDebit(long account, double amount) {

ali d

ad

public class Bank { // other declarations


Logging in org.apache.tomcat

logging is not modularized

• where is logging in

– red shows lines of code that handle logging – not in just one place – not even in a small number of places


Hello World with Aspects package mx.edu.itmorelia.aspects; public class HW { private String message;

}

public HW() { this.message = “Hello World"; } public void setMessge(String M){ this.menssage = M; } public String getMessage(){ return this.message; } public void showMessage(){ System.out.println(this.message); }


Hello World with Aspects package mx.edu.itmorelia.aspects; public class HelloWorld { public static void main(String[] args) { HW H; H= new HW(); H.showMenssage(); } }


Hello World with Aspects

package mx.edu.itmorelia.aspects;

public aspect Aspect { pointcut messagesToPrint() : call (void HW.showMessage()); before(): messagesToPrint(){ System.out.println(“Hi everybody!"); } after(): messagesToPrint(){ System.out.println(“Chao everybody!"); }


Other Implementations

• import org.aspectj.lang.annotation.Aspect; • @Aspect • public class Aspecto { ... } • @<advice-specification>("<pointcutkind>( [<access-specifier>] <return-type> <class-name>.<method-name>({<argtype>}) )")public void metodo() { ... }


Other Implementations

• @Pointcut("<pointcut-kind>( [<accessspecifier>] <return-type> <classname>.<method-name>({<argtype>}) )")public void <pointcut-name>() { ... } • @<advice-specification>("<pointcutname>()") • public void metodo() { ... }


Other Implementations

@Before("execution(public void paquete.clase.metodo(String))") public void adviceEjemplo() { System.out.println("Antes del metodo"); }


Other Implementations

@Pointcut("execution(public paquete.clase.metodo(String))") public void pointcutEjemplo() {}

void

@Before("pointcutEjemplo()") public void adviceEjemplo() { System.out.println("Antes del metodo"); }


Alternatives to Aspects • Languages (OO, Componet-Based) • Design Patterns • Reflection


PointCut


PointCut

• When a particular method is executed: – execution(void

Point.setX(int))

• When a method is invocated: call(void Point.setX(int)) • When a error handling is invocated: handler(ArrayOutOfBoundsException) • When the object is actually executed: this(SomeType).


PointCut Examples • When a method belongs to a class: – within(MyClass)

• When the JoinPoint is in the control flow of a call main method we need to use: cflow • The target point refers to any possible JoinPoint

42


Pointcut Designator Wildcards • It’s possible to use wildcards • What do the next instructions do? – – – – – –

execution(* *(..)) call(* set(..)) execution(int *()) call(* setY(long)) call(* Point.setY(int)) call(*.new(int, int))

43


PointCut call join points

a Line dispatch

execution join points

• JoinPoint Types

– Methods – Constructors – Get/Set – Exception Handler


PointCut Examples

• We can applicate the next operations: or (“||”), and (“&&”) and not (“!”).

• Examples: – – – –

target(Point) && call(int *()) call(* *(..)) && (within(Line) || within(Point)) within(*) && execution(*.new(int)) !this(Point) && call(int *(..))


Advice Type

• before advice • after advice

• after returning • after throwing • around advice

46


Parameterized Advice

• We can acces to the context of a JoinPoint as follow: • pointcut

setXY(FigureElement fe, int x, int y): call(void FigureElement.setXY(int, int)) && target(fe) && args(x, y);

• after(FigureElement fe, int x, int y) returning: setXY(fe, x, y) { System.out.println(fe + " moved to (" + x + ", " + y + ")."); } 47


Another Example Display

* FigureElement

Figure makePoint(..) makeLine(..)

Point getX() getY() setX(int) setY(int) moveBy(int, int)

moveBy(int, int)

2

Line getP1() getP2() setP1(Point) setP2(Point) moveBy(int, int)

HistoryUpdating


Another Example HTTPRequest getCookies() getRequestURI()(doc) getSession() getRequestedSessionId() ...

SessionInterceptor requestMap(request) beforeBody(req, resp) ...

Session getAttribute(name) setAttribute(name, val) invalidate() ...

HTTPResponse getRequest() setContentType(contentType) getOutptutStream() setSessionId(id) ... 49

Servlet


References

• Mejía, P. Orientada México.

(2008), Programación a Aspectos, CINVESTAV,

• Quintero, A. (2000), Visión General de la Programación Orientada a Aspectos. Languages and Information System Department. Informatic and Estadistic Faculty, Sevilla University, Spain. • Rodriguez

M.,

POA,

Gerente


多Preguntas?


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.