2013 ZTP 07

background image

1

7

7

Jerzy R. Jaworowski,

Jerzy R. Jaworowski,

dr in

dr in

ż

ż

.

.

Instytut Teleinformatyki PK

Instytut Teleinformatyki PK

Zaawansowane techniki

Zaawansowane techniki

programowania

programowania

2013 / 2014

2013 / 2014

7

7

Aspect

Aspect

-

-

Oriented Programming

Oriented Programming

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

3

3

7

7

Paradygmaty programowania

Paradygmaty programowania

Procedural programming

Procedural programming

Functional programming

Functional programming

Logic programming

Logic programming

Object

Object

-

-

oriented programming (OOP)

oriented programming (OOP)

Zbi

Zbi

ó

ó

r obiekt

r obiekt

ó

ó

w, z kt

w, z kt

ó

ó

rych ka

rych ka

ż

ż

dy posiada sw

dy posiada sw

ó

ó

j

j

w

w

ł

ł

asny zakres odpowiedzialno

asny zakres odpowiedzialno

ś

ś

ci

ci

Smalltalk, Java, C++

Smalltalk, Java, C++

Aspect

Aspect

-

-

oriented programming (AOP)

oriented programming (AOP)

Wykonanie pewnego kodu ilekro

Wykonanie pewnego kodu ilekro

ć

ć

program

program

wykazuje okre

wykazuje okre

ś

ś

lone zachowanie

lone zachowanie

AspectJ

AspectJ

(

(

rozszerzenie j

rozszerzenie j

ę

ę

zyka Java

zyka Java

)

)

Nie zast

Nie zast

ę

ę

puje programowania obiektowego,

puje programowania obiektowego,

raczej go uzupe

raczej go uzupe

ł

ł

nia

nia

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

4

4

7

7

Sformu

Sformu

ł

ł

owanie problemu

owanie problemu

Pewne zadania (operacje) nie mog

Pewne zadania (operacje) nie mog

ą

ą

zosta

zosta

ć

ć

zamkni

zamkni

ę

ę

te w postaci obiektu,

te w postaci obiektu,

lecz pozostaj

lecz pozostaj

ą

ą

rozrzucone w kodzie

rozrzucone w kodzie

Przyk

Przyk

ł

ł

ady

ady

:

:

logowanie

logowanie

(

(

zapisywanie

zapisywanie

ś

ś

ladu wykonania

ladu wykonania

programu

programu

np

np

. do pliku)

. do pliku)

profilowanie

profilowanie

(

(

okre

okre

ś

ś

lanie ilo

lanie ilo

ś

ś

ci czasu, kt

ci czasu, kt

ó

ó

r

r

ą

ą

program wykorzystuje na wykonywanie

program wykorzystuje na wykonywanie

fragment

fragment

ó

ó

w kodu

w kodu

)

)

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

5

5

7

7

Sformu

Sformu

ł

ł

owanie problemu

owanie problemu

ś

ś

ledzenie

ledzenie

(

(

okre

okre

ś

ś

lanie kt

lanie kt

ó

ó

re metody kiedy

re metody kiedy

s

s

ą

ą

wo

wo

ł

ł

ane

ane

)

)

ś

ś

ledzenie sesji

ledzenie sesji

,

,

monitorowanie momentu

monitorowanie momentu

wyga

wyga

ś

ś

ni

ni

ę

ę

cia sesji

cia sesji

pewne zagadnienia monitorowania

pewne zagadnienia monitorowania

bezpiecze

bezpiecze

ń

ń

stwa

stwa

Efektem jest kod

Efektem jest kod

tkany

tkany

zasadniczy

zasadniczy

kod obiekt

kod obiekt

ó

ó

w przeplatany jest

w przeplatany jest

w

w

poprzek

poprzek

wielu klas i metod

wielu klas i metod

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

6

6

7

7

Przyk

Przyk

ł

ł

ad

ad

class Fraction {

class Fraction {

int numerator;

int numerator;

int denominator;

int denominator;

...

...

public Fraction multiply(Fraction that) {

public Fraction multiply(Fraction that) {

traceEnter("multiply

traceEnter("multiply

",

",

GGGG

GGGG

..

..

);

);

Fraction result = new Fraction(

Fraction result = new Fraction(

this.numerator * that.numerator,

this.numerator * that.numerator,

this.denominator * that.denominator);

this.denominator * that.denominator);

result

result

=

=

result.reduceToLowestTerms

result.reduceToLowestTerms

();

();

traceExit("multiply

traceExit("multiply

", result);

", result);

return

return

result

result

;

;

}

}

...

...

}

}

background image

2

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

7

7

7

7

Konsekwencje

Konsekwencje

G

G

Redundantny kod

Redundantny kod

Te same fragmenty kodu w r

Te same fragmenty kodu w r

ó

ó

ż

ż

nych

nych

miejscach

miejscach

Utrudniaj

Utrudniaj

ą

ą

cy analizowanie logiki

cy analizowanie logiki

Brak jednoznacznej struktury

Brak jednoznacznej struktury

Pl

Pl

ą

ą

tanina zapis

tanina zapis

ó

ó

w zaciera obraz

w zaciera obraz

Trudny do zmian (utrzymania)

Trudny do zmian (utrzymania)

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

8

8

7

7

Konsekwencje

Konsekwencje

G

G

Jak znale

Jak znale

źć

źć

ca

ca

ł

ł

y wprowadzony kod

y wprowadzony kod

...

...

...

...

mie

mie

ć

ć

pewno

pewno

ść

ść

ż

ż

e zosta

e zosta

ł

ł

zmieniony w

zmieniony w

spos

spos

ó

ó

b sp

b sp

ó

ó

jny

jny

...

...

mie

mie

ć

ć

pewno

pewno

ść

ść

,

,

ż

ż

e nie zniekszta

e nie zniekszta

ł

ł

cili

cili

ś

ś

my

my

funkcjonalno

funkcjonalno

ś

ś

ci

ci

przez przypadek

przez przypadek

Nieefektywny w sytuacji, gdy staje si

Nieefektywny w sytuacji, gdy staje si

ę

ę

zb

zb

ę

ę

dny

dny

Sk

Sk

ą

ą

d

d

mie

mie

ć

ć

pewno

pewno

ść

ść

ż

ż

e zosta

e zosta

ł

ł

usuni

usuni

ę

ę

ty w

ty w

ca

ca

ł

ł

o

o

ś

ś

ci

ci

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

9

9

7

7

AspectJ

AspectJ

TM

TM

AspectJ

AspectJ

jest

jest

stosumkowo

stosumkowo

prostym

prostym

(niewielkim) rozszerzeniem j

(niewielkim) rozszerzeniem j

ę

ę

zyka Java

zyka Java

AspectJ

AspectJ

modularyzuje

modularyzuje

powtarzaj

powtarzaj

ą

ą

ce si

ce si

ę

ę

elementy

elementy

tzn. kod dla pewnego zagadnienia (

tzn. kod dla pewnego zagadnienia (

aspect

aspect

)

)

w programie

w programie

(

(

takiego jak

takiego jak

np

np

.

.

ś

ś

ledzenie

ledzenie

)

)

jest zebrany razem w jednym miejscu

jest zebrany razem w jednym miejscu

Kompilator

Kompilator

AspectJ

AspectJ

jest rozwi

jest rozwi

ą

ą

zaniem

zaniem

typu

typu

open

open

source

source

wolnym od op

wolnym od op

ł

ł

at

at

licencyjnych

licencyjnych

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

10

10

7

7

AspectJ

AspectJ

TM

TM

AspectJ

AspectJ

pracuje z takimi platformami

pracuje z takimi platformami

jak

jak

JBuilder

JBuilder

,

,

Fort

Fort

é

é

, Eclipse,

, Eclipse,

G

G

(by

(by

ć

ć

mo

mo

ż

ż

e z innymi r

e z innymi r

ó

ó

wnie

wnie

ż

ż

)

)

Niez

Niez

ł

ł

y opis koncepcji i rozwi

y opis koncepcji i rozwi

ą

ą

zania

zania

:

:

http://

http://

www.eclipse.org/aspectj

www.eclipse.org/aspectj

/

/

Fragmenty wykorzystano w tej prezentacji

Fragmenty wykorzystano w tej prezentacji

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

11

11

7

7

Terminolog

Terminolog

ia

ia

join point

join point

jest dobrze okre

jest dobrze okre

ś

ś

lonym

lonym

(zdefiniowanym) punktem przeci

(zdefiniowanym) punktem przeci

ę

ę

cia w

cia w

programie

programie

pointcut

pointcut

jest grup

jest grup

ą

ą

punkt

punkt

ó

ó

w przeci

w przeci

ę

ę

cia

cia

a

a

dvice

dvice

(wskaz

(wskaz

ó

ó

wka) jest fragmentem

wka) jest fragmentem

kodu wykonywanym w pewnej grupie

kodu wykonywanym w pewnej grupie

punkt

punkt

ó

ó

w przeci

w przeci

ę

ę

cia

cia

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

12

12

7

7

Terminolog

Terminolog

ia

ia

Introduction

Introduction

modyfikuje obiekty klas

modyfikuje obiekty klas

oraz relacje mi

oraz relacje mi

ę

ę

dzy nimi

dzy nimi

As

As

pect

pect

jest fragmentem kodu

jest fragmentem kodu

realizuj

realizuj

ą

ą

cym operacje

cym operacje

zwi

zwi

ą

ą

zane z

zane z

kodem tkanym

kodem tkanym

Definiowane w odniesieniu do

Definiowane w odniesieniu do

pointcuts

pointcuts

,

,

advice

advice

,

,

oraz

oraz

introduction

introduction

Aspekt jest fragmentem kodu kt

Aspekt jest fragmentem kodu kt

ó

ó

ry z

ry z

definicji jest wsp

definicji jest wsp

ó

ó

ł

ł

u

u

ż

ż

ytkowany

ytkowany

background image

3

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

13

13

7

7

Przyk

Przyk

ł

ł

ad

ad

aspect

aspect

PointBoundsChecking

PointBoundsChecking

{

{

pointcut

pointcut

checkX(int

checkX(int

x)

x)

:

:

(

(

call(void

call(void

FigureElement.setXY(int

FigureElement.setXY(int

,

,

int

int

)) &&

)) &&

args(x

args(x

, *)) ||

, *)) ||

(

(

call(void

call(void

Point.setX(int

Point.setX(int

)) &&

)) &&

args(x

args(x

));

));

pointcut

pointcut

checkY(int

checkY(int

y)

y)

:

:

(

(

call(void

call(void

FigureElement.setXY(int

FigureElement.setXY(int

,

,

int

int

)) &&

)) &&

args

args

(*, y)) ||

(*, y)) ||

(

(

call(void

call(void

Point.setY(int

Point.setY(int

)) &&

)) &&

args(y

args(y

));

));

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

14

14

7

7

Przyk

Przyk

ł

ł

ad

ad

cd

cd

.

.

before

before

(int x):

checkX(x

checkX(x

)

)

{

if ( x < MIN_X || x > MAX_X )
throw new IllegalArgumentException
("x is out of bounds.");

}

before

before

(int y):

checkY(y

checkY(y

)

)

{

if ( y < MIN_Y || y > MAX_Y )
throw new IllegalArgumentException
("y is out of bounds.");

}

} //aspect

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

15

15

7

7

Przyk

Przyk

ł

ł

ad

ad

pointcut

pointcut

o nazwie

o nazwie

move

move

kt

kt

ó

ó

ry wylicza

ry wylicza

przer

przer

ó

ó

ż

ż

ne wywo

ne wywo

ł

ł

ania metod pewnego

ania metod pewnego

modelu

modelu

:

:

pointcut

pointcut

move():

move():

call(void

call(void

FigureElement.setXY(int,int

FigureElement.setXY(int,int

))

))

||

||

call(void

call(void

Point.setX(int

Point.setX(int

)) ||

)) ||

call(void

call(void

Point.setY(int

Point.setY(int

)) ||

)) ||

call(void Line.setP1(Point)) ||

call(void Line.setP1(Point)) ||

call(void Line.setP2(Point));

call(void Line.setP2(Point));

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

16

16

7

7

Przyk

Przyk

ł

ł

ad

ad

Advice

Advice

(

(

kod

kod

)

)

kt

kt

ó

ó

ry wykonywany jest

ry wykonywany jest

ka

ka

ż

ż

dorazowo przed

dorazowo przed

pointcut

pointcut

move

move

:

:

before

before

()

()

: move()

: move()

{

{

System.out.println("About to move");

System.out.println("About to move");

}

}

Advice

Advice

kod kt

kod kt

ó

ó

ry wykonywany jest

ry wykonywany jest

ka

ka

ż

ż

dorazowo po wykonaniu

dorazowo po wykonaniu

pointcut

pointcut

move

move

:

:

after

after

()

()

: move()

: move()

{

{

System.out.println("Just successfully

System.out.println("Just successfully

moved");

moved");

}

}

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

17

17

7

7

Join points

Join points

join point

join point

jest dobrze okre

jest dobrze okre

ś

ś

lonym punktem w

lonym punktem w

strukturze programu, w kt

strukturze programu, w kt

ó

ó

rym

rym

Chcieliby

Chcieliby

ś

ś

my wykona

my wykona

ć

ć

pewien fragment

pewien fragment

kodu

kodu

(

(

advice

advice

)

)

ilekro

ilekro

ć

ć

ten punkt programu

ten punkt programu

zostanie osi

zostanie osi

ą

ą

gni

gni

ę

ę

ty

ty

Nie chcemy za

Nie chcemy za

ś

ś

mieca

mieca

ć

ć

kodu oryginalnego

kodu oryginalnego

obiektu widocznie modyfikuj

obiektu widocznie modyfikuj

ą

ą

c jego tre

c jego tre

ść

ść

jak

jak

ą

ą

kolwiek konstrukcj

kolwiek konstrukcj

ą

ą

m

m

ó

ó

wi

wi

ą

ą

c

c

ą

ą

wprost

wprost

:

:

to

to

jest

jest

join point

join point

AspectJ

AspectJ

dostarcza sk

dostarcza sk

ł

ł

adni umo

adni umo

ż

ż

liwiaj

liwiaj

ą

ą

cej

cej

wskazanie (oznaczenie) tych punkt

wskazanie (oznaczenie) tych punkt

ó

ó

w (

w (

join

join

points

points

)

)

z zewn

z zewn

ą

ą

trz

trz

aktualnego kodu

aktualnego kodu

obiektu

obiektu

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

18

18

7

7

Join points

Join points

Czyli

Czyli

join point

join point

jest wyr

jest wyr

ó

ó

ż

ż

nionym

nionym

punktem w strukturze programu w

punktem w strukturze programu w

kt

kt

ó

ó

rym

rym

co

co

ś

ś

si

si

ę

ę

zdarzy

zdarzy

(z punktu

(z punktu

widzenia przep

widzenia przep

ł

ł

ywu sterowania !)

ywu sterowania !)

A wi

A wi

ę

ę

c

c

np

np

.

.

Pewna metoda zostanie wywo

Pewna metoda zostanie wywo

ł

ł

ana

ana

Wyst

Wyst

ą

ą

pi okre

pi okre

ś

ś

lony warunek (

lony warunek (

exception

exception

)

)

Okre

Okre

ś

ś

lona zmienna zostanie

lona zmienna zostanie

wykorzystana (u

wykorzystana (u

ż

ż

yta)

yta)

background image

4

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

19

19

7

7

Pointcuts

Pointcuts

Definicja

Definicja

p

p

ointcut

ointcut

sk

sk

ł

ł

ada si

ada si

ę

ę

z dw

z dw

ó

ó

ch

ch

element

element

ó

ó

w : z lewej i prawej strony

w : z lewej i prawej strony

rozdzielonych znakiem dwukropka (:)

rozdzielonych znakiem dwukropka (:)

Lewa strona definiuje nazw

Lewa strona definiuje nazw

ę

ę

oraz

oraz

ewentualnie list

ewentualnie list

ę

ę

parametr

parametr

ó

ó

w

w

(

(

np

np

.

.

dane dost

dane dost

ę

ę

pne gdy zdarzenie

pne gdy zdarzenie

nast

nast

ą

ą

pi)

pi)

Prawa strona stanowi opis

Prawa strona stanowi opis

pointcut

pointcut

a wi

a wi

ę

ę

c wykaz

c wykaz

join

join

points

points

kt

kt

ó

ó

re

re

stanowi

stanowi

ą

ą

grup

grup

ę

ę

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

20

20

7

7

Pointcuts

Pointcuts

Przyk

Przyk

ł

ł

ad

ad

pointcut:

pointcut:

pointcut

pointcut

setter()

setter()

: call(void

: call(void

setX(int

setX(int

))

))

;

;

Nazw

Nazw

ą

ą

grupy (

grupy (

pointcut

pointcut

) jest

) jest

setter

setter

pointcut

pointcut

nie posiada parametr

nie posiada parametr

ó

ó

w

w

p

p

ointcut

ointcut

okre

okre

ś

ś

lony jest jako

lony jest jako

call(void

call(void

setX(int

setX(int

))

))

pointcut

pointcut

odnosi si

odnosi si

ę

ę

do momentu w

do momentu w

kt

kt

ó

ó

rym wywo

rym wywo

ł

ł

ana b

ana b

ę

ę

dzie metoda

dzie metoda

void

void

setX(int

setX(int

)

)

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

21

21

7

7

P

P

ointcut

ointcut

-

-

desygnatory

desygnatory

Kiedy pewna metoda jest

Kiedy pewna metoda jest

wykonywana

wykonywana

:

:

execution(void

execution(void

Point.setX(int

Point.setX(int

))

))

Kiedy pewna metoda jest

Kiedy pewna metoda jest

wywo

wywo

ł

ł

ywana

ywana

:

:

call(void

call(void

Point.setX(int

Point.setX(int

))

))

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

22

22

7

7

P

P

ointcut

ointcut

-

-

desygnatory

desygnatory

Kiedy nast

Kiedy nast

ę

ę

puje wykonanie kodu

puje wykonanie kodu

obs

obs

ł

ł

ugi warunku

ugi warunku

:

:

handler(ArrayOutOfBoundsException

handler(ArrayOutOfBoundsException

)

)

Je

Je

ż

ż

eli aktualnie przetwarzanym

eli aktualnie przetwarzanym

obiektem jest obiekt okre

obiektem jest obiekt okre

ś

ś

lonego typu

lonego typu

(

(

tzn.

tzn.

np

np

.

.

this

this

jest typu

jest typu

SomeTyp

SomeTyp

)

)

:

:

this(SomeType

this(SomeType

)

)

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

23

23

7

7

P

P

ointcut

ointcut

-

-

desygnatory

desygnatory

Kiedy obiekt docelowy jest typu

Kiedy obiekt docelowy jest typu

SomeType

SomeType

target(SomeType

target(SomeType

)

)

Kiedy wykony kod

Kiedy wykony kod

nale

nale

ż

ż

y

y

do klasy

do klasy

MyClass

MyClass

within(MyClass

within(MyClass

)

)

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

24

24

7

7

Desygnatory

Desygnatory

-

-

wildcards

wildcards

U

U

ż

ż

ywane s

ywane s

ą

ą

konstrukcje

konstrukcje

:

:

execution(* *(..))

execution(* *(..))

Wskazuje na wykonanie dowolnej

Wskazuje na wykonanie dowolnej

metody zwracaj

metody zwracaj

ą

ą

cej rezultat dowolnego

cej rezultat dowolnego

typu i niezale

typu i niezale

ż

ż

nie od listy parametr

nie od listy parametr

ó

ó

w

w

call(* set(..))

call(* set(..))

Dowolna metoda o nazwie

Dowolna metoda o nazwie

set

set

niezale

niezale

ż

ż

nie od typu wyniku oraz

nie od typu wyniku oraz

parametr

parametr

ó

ó

w

w

W przypadku przeci

W przypadku przeci

ąż

ąż

enia metody

enia metody

set

set

dotyczy wszelkich wywo

dotyczy wszelkich wywo

ł

ł

a

a

ń

ń

background image

5

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

25

25

7

7

Desygnatory

Desygnatory

-

-

wildcards

wildcards

Mo

Mo

ż

ż

na skorzysta

na skorzysta

ć

ć

z typ

z typ

ó

ó

w,

w,

np

np

.

.

execution(int *())

execution(int *())

Dowolna metoda bez parametr

Dowolna metoda bez parametr

ó

ó

w

w

zwracaj

zwracaj

ą

ą

ca

ca

int

int

call(*

call(*

setY(long

setY(long

))

))

Dowolne wywo

Dowolne wywo

ł

ł

anie

anie

metody

metody

setY

setY

z

z

parametrem typu

parametrem typu

long

long

niezale

niezale

ż

ż

nie

nie

od typu wyniku oraz

od typu wyniku oraz

deklarowanego typu parametru

deklarowanego typu parametru

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

26

26

7

7

Desygnatory

Desygnatory

-

-

wildcards

wildcards

Mo

Mo

ż

ż

na skorzysta

na skorzysta

ć

ć

z typ

z typ

ó

ó

w,

w,

np

np

.

.

call(*

call(*

Point.setY(int

Point.setY(int

))

))

Wywo

Wywo

ł

ł

anie metody

anie metody

setY

setY

na obiekcie

na obiekcie

Point

Point

z argumentem typu

z argumentem typu

int

int

,

,

niezale

niezale

ż

ż

nie od typu zwracanego wyniku

nie od typu zwracanego wyniku

call(*.new(int, int))

call(*.new(int, int))

Wskazuje na wywo

Wskazuje na wywo

ł

ł

anie konstruktora

anie konstruktora

dowolnej klasy

dowolnej klasy

,

,

o ile u

o ile u

ż

ż

ywa on dok

ywa on dok

ł

ł

adnie

adnie

dw

dw

ó

ó

ch

ch

arument

arument

ó

ó

w

w

typu

typu

int

int

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

27

27

7

7

D

D

esignator

esignator

composition

composition

Kompozycja konstruowana jest z u

Kompozycja konstruowana jest z u

ż

ż

yciem

yciem

operator

operator

ó

ó

w logicznych

w logicznych

or

or

(

(

||

||

),

),

and

and

(

(

&&

&&

)

)

oraz

oraz

not

not

(

(

!

!

)

)

Przyk

Przyk

ł

ł

ady

ady

:

:

target(Point

target(Point

) && call(int *())

) && call(int *())

Wskazuje na ka

Wskazuje na ka

ż

ż

de odwo

de odwo

ł

ł

anie do metody nie

anie do metody nie

posiadaj

posiadaj

ą

ą

cej parametr

cej parametr

ó

ó

w oraz zwracaj

w oraz zwracaj

ą

ą

cej wynik typu

cej wynik typu

int

int

wykonywanej na instancji obiektu

wykonywanej na instancji obiektu

Point

Point

,

,

niezale

niezale

ż

ż

nie

nie

od jej nazwy

od jej nazwy

call(* *(..)) && (within(Line) || within(Point))

call(* *(..)) && (within(Line) || within(Point))

Wskazuje na ka

Wskazuje na ka

ż

ż

de wywo

de wywo

ł

ł

anie dowolnej metody o ile to

anie dowolnej metody o ile to

wywo

wywo

ł

ł

anie nast

anie nast

ę

ę

puje w kodzie deklaracji obiektu

puje w kodzie deklaracji obiektu

Point

Point

lub

lub

Line

Line

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

28

28

7

7

D

D

esignator

esignator

composition

composition

Examples:

Examples:

within(*) && execution(*.new(int))

within(*) && execution(*.new(int))

Wskazuje na wykonanie dowolnego

Wskazuje na wykonanie dowolnego

konstruktora posiadaj

konstruktora posiadaj

ą

ą

cego dok

cego dok

ł

ł

adnie

adnie

jeden argument typu

jeden argument typu

int

int

,

,

niezale

niezale

ż

ż

nie od

nie od

tego, sk

tego, sk

ą

ą

d to wo

d to wo

ł

ł

anie nast

anie nast

ę

ę

puje

puje

!this(Point) && call(int *(..))

!this(Point) && call(int *(..))

Wskazuje na wywo

Wskazuje na wywo

ł

ł

anie dowolnej

anie dowolnej

metody zwracaj

metody zwracaj

ą

ą

cej wynik typu

cej wynik typu

int

int

o ile

o ile

tylko wykonuj

tylko wykonuj

ą

ą

cym wywo

cym wywo

ł

ł

anie obiektem

anie obiektem

jest dowolny inny ni

jest dowolny inny ni

ż

ż

Point

Point

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

29

29

7

7

Desygnatory

Desygnatory

i modyfikatory

i modyfikatory

call(public * *(..))

call(public * *(..))

Dowolne wywo

Dowolne wywo

ł

ł

anie metody

anie metody

public

public

execution(!static

execution(!static

* *(..))

* *(..))

Dowolne wykonanie metody innej ni

Dowolne wykonanie metody innej ni

ż

ż

statyczna

statyczna

execution(public !static * *(..))

execution(public !static * *(..))

Dowolne wykonanie metody publicznej o

Dowolne wykonanie metody publicznej o

ile nie jest ona statyczna

ile nie jest ona statyczna

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

30

30

7

7

Advice

Advice

-

-

rodzaje

rodzaje

AspectJ

AspectJ

umo

umo

ż

ż

liwia wiele rodzaj

liwia wiele rodzaj

ó

ó

w

w

definiowania wskaz

definiowania wskaz

ó

ó

wek

wek

:

:

Before advice

Before advice

wykonywanie wskaz

wykonywanie wskaz

ó

ó

wki

wki

nast

nast

ę

ę

puje po osi

puje po osi

ą

ą

gni

gni

ę

ę

ciu okre

ciu okre

ś

ś

lonego

lonego

punktu (

punktu (

join

join

point) przed rozpocz

point) przed rozpocz

ę

ę

ciem

ciem

jego wykonywania

jego wykonywania

After advice

After advice

wykonywanie wskaz

wykonywanie wskaz

ó

ó

wki

wki

nast

nast

ę

ę

puje po osi

puje po osi

ą

ą

gni

gni

ę

ę

ciu okre

ciu okre

ś

ś

lonego

lonego

punktu (

punktu (

join

join

point) po zako

point) po zako

ń

ń

czeniu jego

czeniu jego

wykonywania

wykonywania

background image

6

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

31

31

7

7

Advice

Advice

-

-

rodzaje

rodzaje

after returning

after returning

advice

advice

wykonywane

wykonywane

po normalnym zako

po normalnym zako

ń

ń

czeniu

czeniu

after throwing

after throwing

advice

advice

wykonywane

wykonywane

jest je

jest je

ż

ż

eli metoda

eli metoda

rzuci

rzuci

wyj

wyj

ą

ą

tkiem

tkiem

after

after

advice

advice

wykonywane jest w

wykonywane jest w

ka

ka

ż

ż

dym przypadku, niezale

dym przypadku, niezale

ż

ż

nie od

nie od

tego czy metoda zako

tego czy metoda zako

ń

ń

czy si

czy si

ę

ę

normalnie, czy te

normalnie, czy te

ż

ż

rzuci

rzuci

wyj

wyj

ą

ą

tkiem

tkiem

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

32

32

7

7

Parametry

Parametry

Mo

Mo

ż

ż

na uzyska

na uzyska

ć

ć

dost

dost

ę

ę

p do kontekstu

p do kontekstu

join point:

join point:

pointcut

pointcut

setXY(FigureElement

setXY(FigureElement

fe

fe

, int x, int y):

, int x, int y):

call(void

call(void

FigureElement.setXY(int

FigureElement.setXY(int

, int))

, int))

&&

&&

target(fe

target(fe

)

)

&&

&&

args(x

args(x

, y);

, y);

after(FigureElement

after(FigureElement

fe

fe

, int x, int y) returning:

, int x, int y) returning:

setXY(fe

setXY(fe

, x, y) {

, x, y) {

System.out.println(fe

System.out.println(fe

+

+

" moved to (" + x + ", " + y

" moved to (" + x + ", " + y

+ ")"

+ ")"

);

);

}

}

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

33

33

7

7

Introduction

Introduction

introduction

introduction

jest elementem aspektu,

jest elementem aspektu,

ale definiuje lub modyfikuje elementy

ale definiuje lub modyfikuje elementy

innego typu

innego typu

(class).

(class).

Przy pomocy

Przy pomocy

introduction

introduction

mo

mo

ż

ż

emy m.in.

emy m.in.

Doda

Doda

ć

ć

metod

metod

ę

ę

do istniej

do istniej

ą

ą

cej klasy

cej klasy

Doda

Doda

ć

ć

atrybut do istniej

atrybut do istniej

ą

ą

cej klasy

cej klasy

Rozszerzy

Rozszerzy

ć

ć

istniej

istniej

ą

ą

c

c

ą

ą

klas

klas

ę

ę

z u

z u

ż

ż

yciem

yciem

innej

innej

Zaimplementowa

Zaimplementowa

ć

ć

interfejs w istniej

interfejs w istniej

ą

ą

cej

cej

klasie

klasie

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

34

34

7

7

Przyk

Przyk

ł

ł

ad

ad

aspect

aspect

PointWatching

PointWatching

{

{

private Vector Point.watchers = new Vector();

private Vector Point.watchers = new Vector();

public static void

public static void

addWatcher(Point

addWatcher(Point

p, Screen s) {

p, Screen s) {

p.Watchers.add(s);

p.Watchers.add(s);

}

}

public static void

public static void

removeWatcher(Point

removeWatcher(Point

p, Screen s)

p, Screen s)

{

{

p.Watchers.remove(s);

p.Watchers.remove(s);

}

}

static void

static void

updateWatcher(Point

updateWatcher(Point

p, Screen s) {

p, Screen s) {

s.display(p);

s.display(p);

}

}

// continued on next slide

// continued on next slide

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

35

35

7

7

Przyk

Przyk

ł

ł

ad

ad

// continued from previous slide

// continued from previous slide

pointcut

pointcut

changes(Point p): target(p) &&

changes(Point p): target(p) &&

call(void

call(void

Point.set*(int));

Point.set*(int));

after(Point p): changes(p) {

after(Point p): changes(p) {

Iterator

Iterator

iter

iter

=

=

p.Watchers.iterator

p.Watchers.iterator

();

();

while (

while (

iter.hasNext

iter.hasNext

() ) {

() ) {

updateWatcher(p

updateWatcher(p

, (

, (

Screen)iter.next

Screen)iter.next

());

());

}

}

}

}

}

}

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

36

36

7

7

Podsumowanie

Podsumowanie

Aspect

Aspect

-

-

oriented programming (AOP)

oriented programming (AOP)

jest

jest

nowym sposobem spojrzenia na

nowym sposobem spojrzenia na

programowanie

programowanie

AOP

AOP

jest swego rodzaju metod

jest swego rodzaju metod

ą

ą

analagiczn

analagiczn

ą

ą

do obs

do obs

ł

ł

ugi zdarze

ugi zdarze

ń

ń

(kod

(kod

na zewn

na zewn

ą

ą

trz

trz

)

)

AspectJ

AspectJ

nie jest sam w sobie j

nie jest sam w sobie j

ę

ę

zykiem

zykiem

programowania ale rozszerzeniem Javy

programowania ale rozszerzeniem Javy

AspectJ

AspectJ

nie wprowadza nowych element

nie wprowadza nowych element

ó

ó

w

w

poszerzaj

poszerzaj

ą

ą

cych zakres stosowania Javy, lecz

cych zakres stosowania Javy, lecz

mechanizmy umo

mechanizmy umo

ż

ż

liwiaj

liwiaj

ą

ą

ce inne (nowe)

ce inne (nowe)

podej

podej

ś

ś

cie do modularyzacji kodu

cie do modularyzacji kodu

background image

7

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

37

37

7

7

Chwila na refleksj

Chwila na refleksj

ę

ę

...

...

Czy dowiedzia

Czy dowiedzia

ł

ł

e

e

ś

ś

si

si

ę

ę

czego

czego

ś

ś

nowego ?

nowego ?

Czy dowiedzia

Czy dowiedzia

ł

ł

e

e

ś

ś

si

si

ę

ę

czego

czego

ś

ś

Twym zdaniem

Twym zdaniem

wa

wa

ż

ż

nego ?

nego ?

Czy dostrzegasz zwi

Czy dostrzegasz zwi

ą

ą

zek i przydatno

zek i przydatno

ść

ść

przekazanych tre

przekazanych tre

ś

ś

ci w zawodzie, kt

ci w zawodzie, kt

ó

ó

ry sobie

ry sobie

wybra

wybra

ł

ł

e

e

ś

ś

?

?

Masz ewentualne uwagi b

Masz ewentualne uwagi b

ą

ą

d

d

ź

ź

sugestie,

sugestie,

podziel si

podziel si

ę

ę

nimi ...

nimi ...

jrj@pk.edu.pl

jrj@pk.edu.pl

2014

2014

-

-

02

02

-

-

06

06

©

©

2014, Jerzy R. Jaworowski

2014, Jerzy R. Jaworowski

38

38

7

7

Dzi

Dzi

ę

ę

kuj

kuj

ę

ę

za uwag

za uwag

ę

ę


Wyszukiwarka

Podobne podstrony:
2013 10 07
2013 06 07 10 04id 28349 Nieznany (2)
2013 03 07, wykład
2013 03 07
HARMONOGRAM NZ semestr letni 2013 2014 07 01 2014
2013 ZTP 08
2013 06 07 Sprawdzian05a daneid 28276
2013 02 07 teren ciw 02 siwz
2013 ZTP 05
2013 ZTP 04
Higiena mleka, Wykład (3) 07-11-2013, Wykład (3) 07-11-2013
algorytm obliczen podnosnika srubowego 2013 04 07
Zarządzanie Innowacjami - slajdy 1, 2013-04-07
algorytm obliczen podnosnika srubowego 2013 04 07
2013 ZTP 06
587 Rachunek kosztow (fpic2012 UG's conflicted copy 2013 01 07)
HARMONOGRAM NZ semestr letni 2013 2014 07 01 2014
2013 ZTP 00

więcej podobnych podstron