Académique Documents
Professionnel Documents
Culture Documents
! "
%
%$ Queremos atualizar Display
sempre que elementos forem
% movimentados
Display
Figure FigureElement
*
makePoint(..) moveBy(int, int)
makeLine(..)
getX() getP1()
getY() getP2() operações
setX(int) setP1(Point) que movem
setY(int) setP2(Point) elementos
moveBy(int, int) moveBy(int, int)
%$
& ' ( ) * +
% ,
- + + & ' $(
% . /0 , 1
. 20 1
. 30 1
4 . 50 1
4 . 60 1
& /
. 01
!
4 #
'7 0 1.
8 9
0 1.
'7 @
'7 =:,
+
Ô figuraça, parece que a % * >:.
Programação Orientada a Objetos A * BC
correspondeu a essa expectativa
do Tim Rentsch… DE ,5;=6F
Sim!
A POO está em todas,
na academia, na indústria,
here, there, everywhere…
G 2301
II* /
JJ 1 * C
*
G H 01
G H4 01
* 4
C K$
( K 5(
K/
( K 6(
'7
'7
L
'7
TAD!
II* /
JJ
H %
G H 01
G H4 01
'7
%
& &
M 0 1
%
II* /
JJ
G 2301
1 *
G N01
G 2301
G H 01
G N01
G H4 01
4
K$
( K 5(
K/
( K 6(
'7
, ) ,C
4 #
* )
*
C
4 #
* ) *
0 1 / 5;;=K6::62 $
- -
* *
4 #
* ) *
0 1 / 5;;=K6::62 $
- *
- *
4 #
* ) *
)' *
)' * E
E* +
E *
*
%$
E 0E1
!"#
!"# $$ %%
##!
! "&
"& !
!&&'' %(%(
))
*
*"# "# $$ %%
#
#!! "&
"& *
* &&'' %(%(
))
))
#
# $
$ ((
+
+ "#"# $$ %%
!
!"&
"& ++ "&'
"&' '&%&%(
'&%&%(
,
, ((
*
*"&
"& + + "%&%(
"%&%(
))
))
E
'
0 1
*P +
0 1
*P +
K !
E
'
E L
* -
- K*
& * #
+ !
* +
& *
& +
* .
E
+
*
*
* )
E os benefícios
da orientação a
objetos ?…
4 #
'
…e algumas propostas
tentam solucionar estes
problemas sem perder
de vista os benefícios da
OO
4 #
Design Patterns,
por exemplo…
E
T
T
0
)
1
E
T
E
'
'
)
7
T
E
)
T
-
. /
E
)
!
8
0 1
*
8 9
O
'
*
O
*
T * E
*
+
% ) + * E
@ B ???
0E1 &
U
UU
*
K K+ V
A # O
+
C
C Como eu
traduzo isso?
*
K K+ V
%. 7
H , * ,5;>?
* ' N
N
DW ) F
0 Y ' 1
%$
+
K*
'
A
E 0A 1
04 1
# C
K C
*
& +
)(
' Z KK
) ,
Z
Z '
0 , & , .1 '
* .
O
'
)
* & ,
.
%
'
07 1
N
7
N
@' B )
7
N
"
7
'
N
7
N
[
N
*
\ *
'
K'
\ *
[ + * / , * N
(
/ ' / ' *
/
.
'
[ ' / , * N
(
N *
N /
*
* N ]
* / H N H )
' *.
K' /
[ K' / ,
* * /
,
* N (
T/
)
) K
' $ / *
.
/ , ,
/*
*
O
)
%$
E
aspect
aspect Rastreamento
Rastreamento {{
pointcut
pointcut traced()
traced() :: call(public
call(public ** Pessoa.*(..));
Pessoa.*(..));
before()
before() :: traced()
traced() {{
System.err.println("entry:
System.err.println("entry: "" ++ thisJoinPoint);
thisJoinPoint);
}}
after()
after() :: traced()
traced() {{
System.err.println("exit:
System.err.println("exit: "" ++ thisJoinPoint);
thisJoinPoint);
}}
}}
class
class Pessoa
Pessoa {{
private
private String
String nome;
nome;
public
public void
void setNome(String
setNome(String nome)
nome) {{
this.nome
this.nome == nome;
nome;
}}
...
...
}}
%$
E
Rastreamento
...
R 01
^ 01 '
^01
E
'7
O '
' , '7 , ,
% , ,
M + * ...
E+ ' D F
'7 ' ' H
'7 & L
&
O
T
*
\ *
'
K'
'
7
#
N
7
E+ '
"
' (R /
' K ' )
+ "
_, ' (
(
(`
` . . ` N ` $ . ` 7
K `
4 "
_
"
_ &
"
_& $ " _
"
_& -
4 "
%
K 5.:.?0 1,
5.5
%
* ' H
) 7
a 7
.
a 7
. ,C
4 "
5. "
$
6.
* 7
b.
* + *
7
c. # K/ 0 , 1
' # + *
+
<.
"
7 & ' * *$
$ .
a Line
dispatch
method call
a Point
a method execution
returning or throwing
" "
7 & ' +
7
" 7 L
7 ' K * +
$
%$
& , $ & ,
) '7 , $ ,
$ # , ..
%$
%
Display
Figure FigureElement
*
makePoint(..) moveBy(int, int)
makeLine(..)
% $
Point Line
2
'
getX() getP1() "
getY() getP2()
setX(int) setP1(Point)
setY(int) setP2(Point)
moveBy(int, int) moveBy(int, int)
& * ' 7
+ (
@ B 7 ,
, $ 7
0 . 20 11
*
dd 0 1,
e
e0 1 U
0 1
0 . 20 1 e
e
0 . 30 1
*
01(
0 % . /
0 , 11 e
e
0 . 20 11 ee
0 . 30 11 ee
0 4 . 50 11 ee
0 4 . 60 11
% * &
+ * 0* 1.
'
* ' & ,
L , .1
$O
'
* '
&
N
0 . Hf0..11
* - + $ 7
A
' *
$ +
& O $ &
*
$ $ &
0 1
$ + 7 S
$O ' $ 0 1
7 .
*
' * 01( 01 g
T/ . . 0Q * ' .Q1S
h
* 01 ( 01 g
T/ . . 0@ * .B hS
h
01 ( . 0 % 1g
T/ . . 0Q ' XX Q G ' 1S
*0 ' 1g 01Sh
T/ . . 0Q Q1S
h
$
' ) $
$ 7 .
$
*
230 % *, $ , / 1(
0 *. 230$ ,/11S
* 0 % *, $ , / 1( *
230*,$,/
1g
T/ . . 0* G
Q 0Q G $G Q,Q G /G Q1.Q1S
h
# K/
(
' 0 ' , & , .1
# K/ 0@ B 1
& )
"
(
' 0 ' & 1
+
#
#
# K/ 0 1
%$
%
Display
Figure FigureElement
*
makePoint(..) moveBy(int, int)
makeLine(..)
Point Line
2
getX() getP1()
getY() getP2()
setX(int) setP1(Point)
setY(int) setP2(Point)
moveBy(int, int) moveBy(int, int)
%$
%
class Line implements FigureElement{
private Point p1, p2;
Point getP1() { return p1; }
Point getP2() { return p2; }
void setP1(Point p1) { this.p1 = p1; }
void setP2(Point p2) { this.p2 = p2; }
void moveBy(int dx, int dy) { ... }
}
Display
Figure FigureElement
*
makePoint(..) moveBy(int, int)
makeLine(..)
getX() getP1()
getY() getP2() operações
setX(int) setP1(Point) que movem
setY(int) setP2(Point) elementos
moveBy(int, int) moveBy(int, int)
%$
/
Display
Figure FigureElement
*
makePoint(..) moveBy(int, int)
makeLine(..) ( /
Point Line
2
getX() getP1()
getY() getP2()
setX(int) setP1(Point)
setY(int) setP2(Point) DisplayUpdating
moveBy(int, int) moveBy(int, int)
%$
" (DisplayUpdating)
void setX(int x) {
) /
}
this.x = x;
& (
void setY(int y) {
}
this.y = y; * #
}
i