(QUESTÃO 1 - VALOR 1,0 PONTO)

Propaganda
1
EXERCÍCIOS
(EXERCÍCIO 1)
Conceituar requisitos transversais na programação orientada a objetos.
(EXERCÍCIO 2)
Diga se as afirmações abaixo são verdadeiras ou falsas, justificando as falsas:
1. O comando within interrompe todos os joinpoints de um método.
2. Para se interromper um método construtor de uma classe, utiliza-se a
cláusula nome_da_classe.new.
3. Os pointcuts anônimos possuem visibilidade apenas dentro do advice que os
declarou.
4. A interrupção de um método especificado por um pointcut de execução
ocorre após o retorno do método.
(EXERCÍCIO 3)
O caractere curinga + serve para:
[A] Capturar qualquer método de uma determinada classe.
[B] Especificar um pointcut que também interrompa as superclasses.
[C] Especificar um pointcut que também interrompa as subclasses.
[D] Capturar um método com qualquer parâmetro
[E] Substituir as substrings no nome de uma classe ou método.
(EXERCÍCIO 4)
Diga se as afirmações abaixo são verdadeiras ou falsas, justificando as falsas:
1. O entrelaçamento na orientação a objetos somente ocorre se o programador
não fizer o código 100% OO.
2. Os requisitos transversais são aqueles relacionados com a regra do negócio.
3. Os advices são pontos dentro do programa OO que serão interrompidos por
um aspecto.
4. Os aspectos favorecem a manutenção, pois neles ficam contidos os códigos
de acesso a funções básicas do sistema que em outra circunstância ficariam
espalhados por várias classes do sistema.
(EXERCÍCIO 5)
Explique o que é weaver.
2
(EXERCÍCIO 6)
Mostre um exemplo de declaração de um pointcut o qual iria interromper qualquer
método de uma classe chamada Produto retornando sempre inteiro e com
qualquer argumento.
(EXERCÍCIO 7)
Qual a diferença entre pointcut e joinpoint?
(EXERCÍCIO 8)
As cláusulas before e after são utilizadas pelos:
[A] pointcuts
[B] joinpoints
[C] weavers
[D] aspects
[E] advices
(EXERCÍCIO 9)
Escreva um pequeno aspecto com o pointcut da questão 10 e com a função main
na qual a assinatura do método capturado deva ser impressa na tela.
(EXERCÍCIO 10)
Explique o que é obliviousness?
(EXERCÍCIO 11)
Escreva um exemplo de pointcut composto.
(EXERCÍCIO 12)
Escreva um exemplo de aspecto que possa capturar o conteúdo de um atributo
saldo de um objeto de uma classe chamada Contas. Ao capturar tal atributo,
imprima-o na tela.
(EXERCÍCIO 13)
Qual a finalidade da cláusula this?
3
(EXERCÍCIO 14)
Diga se as afirmações abaixo são verdadeiras ou falsas, justificando as falsas:
1. O comando args permite capturar um objeto de uma classe.
2. Um aspecto pode executar um método que ele mesmo interrompe, levando o
programa a um loop infinito.
3. Os pointcuts de condição podem ser aplicados a qualquer método.
4. O after returning não está presente na documentação oficial do AspectJ.
(EXERCÍCIO 15)
Dê exemplo de um pointcut de condição.
(EXERCÍCIO 16)
Reescreva o aspecto da questão 12 com uma função externa ao advice.
(EXERCÍCIO 17)
Como funciona o advice do tipo around?
(EXERCÍCIO 18)
O advice before returning corresponde a:
[A] after returning
[B] before execution
[C] around returning
[D] after execution
[E] around
(EXERCÍCIO 19)
Os advices nos aspetos são semelhantes a qual elemento das classes?
[A] atributos
[B] métodos
[C] função main()
[D] parâmetro de métodos
[E] subclasses
4
(EXERCÍCIO 20)
Quais elementos da UML são usados para estendê-la?
(EXERCÍCIO 21)
Na aspectUML, para que serviria o valor com tag {aspecto ativo}?
(EXERCÍCIO 22)
Comente dois valores com tag utilizados na aspectUML no relacionamento
aspecto-classe associação?
(EXERCÍCIO 23)
Faça um diagrama da aspectUML no qual um aspecto controla uma classe Conta
por intermédio de um pointcut transmite_saldo.
(EXERCÍCIO 24)
Faça um diagrama de classes detalhando as partes de um aspecto da
aspectUML correspondente ao trecho de código a seguir:
public class Base {
private int x;
public Base(int x){this.x = x;}
public int soma(int y){return this.x+y; }
public int getX() {return x;}
public void setX(int x) {this.x = x;}
}
public aspect TesteAfterReturning {
pointcut p1() : call( * Base.soma(..) );
after(Base obj) returning(int retorno): p1() && target (obj){
System.out.println("[Advice After] Valor do Atributo da Base:
"+obj.getX());
System.out.println("[Advice After] Valor que o método está
retornando: "+retorno);
}
public static void main(String[] args) {
Base b = new Base(10);
b.setX(b.soma(5));
System.out.println("\n[Principal] Valor do Atributo da Base:
"+b.getX());
}
}
Download