Metodologías de Desarrollo de Software (Ciclo de Vida)

Post on 07-Jan-2016

43 views 2 download

description

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. Agenda. Introduction - PowerPoint PPT Presentation

Transcript of Metodologías de Desarrollo de Software (Ciclo de Vida)

Metodologías de Desarrollo de Software (Ciclo de Vida)

Juan Carlos Olivares Rojas

MSN: juancarlosolivares@hotmail.comjcolivar@itmorelia.edu.mx

http://antares.itmorelia.edu.mx/~jcolivar/@jcolivares

Social Network: Facebook, LinkedIn. Hi5

Agenda• Introduction

• Aspect-Oriented Programming Fundamentals

• Examples

Software Development Today

Evolución del SWSoftware Evolution

Evolución del SWSoftware Evolution

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>

}

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(); } }

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

Access ControlAccess Control

Sw Development Problems

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

Lenguaje

Compilador o Intérprete

EJECUTABLE

PROGRAMA

Compiling Process in POA

... Lenguaje base

Lenguaje de aspectos 1

Lenguaje de aspectos N

... TEJEDOR (WEAVER)

EJECUTABLE

PROGRAMA DE ASPECTOS N

PROGRAMA DE ASPECTOS 1

PROGRAMA DE COMPONENTES

ProgramProgram

AOP Program Structure

AOP Program Structure

AOP Advantages

POA ConceptsJoinPoint 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

Java Program

AspectJ

Advice

pointcutadvice body

join point

An Aspect Definition

Aspect Control {

JoinPoint securityOperations = call s BookStore.loan & calls BookStore.addPartner& ...

Before securityOperations: {if !=(validControlAcces()) then{ throwsExcepcion(); }

}

AOP and OOP Relation

Class A

Class A1

Attb1

Attb2

Method 1

Clase A2

Attb 3

Method 1

Method 2

OOP: common concerns

AOP: crosscuting concerns

OOP Evolution to AOP

Own behavior Own behavior

Persistence

Trace

……..

Own Behavior Owbn Behavior

Persistence Trace

Class A Class B

Class A Class B

Classes

Aspects

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 Versionpublic class Bank { // other declarations

public double processDebit(long account, double amount) {

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

// another business methods declarations}

Tran

sacc

iona

lidad

Pers

iste

ncia

Traz

abilid

ad

Logging in org.apache.tomcat

• 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

logging is not modularized

Hello World with Aspectspackage 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);}

}

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!"); }

}

Hello World with Aspects

Other Implementations• import

org.aspectj.lang.annotation.Aspect;• @Aspect • public class Aspecto { ... }

• @<advice-specification>("<pointcut-kind>( [<access-specifier>] <return-type> <class-name>.<method-name>({<arg-type>}) )")public void metodo() { ... }

Other Implementations• @Pointcut("<pointcut-kind>( [<access-

specifier>] <return-type> <class-name>.<method-name>({<arg-type>}) )")public void <pointcut-name>() { ... }

• @<advice-specification>("<pointcut-name>()")

• 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 void

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

@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).

42

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

43

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))

PointCut

• JoinPoint Types– Methods– Constructors– Get/Set– Exception Handler

a Line

dispatch

call join points

execution join points

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 *(..))

46

Advice Type• before advice

• after advice

• after returning

• after throwing

• around advice

47

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 + ").");}

Another Example

HistoryUpdating

Display

*

2Point

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

Line

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

Figure

makePoint(..)makeLine(..)

FigureElement

moveBy(int, int)

49

Another Example

HTTPRequest

HTTPResponse

Servlet

getCookies()getRequestURI()(doc)getSession()getRequestedSessionId()...

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

SessionInterceptor

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

SessiongetAttribute(name)setAttribute(name, val)invalidate()...

References• Mejía, P. (2008), Programación Orientada

a Aspectos, CINVESTAV, México.

• 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 Relaciones Académicas, Microsoft Cono Sur

¿Preguntas?