Este documento descreve conceitos de programação orientada a aspectos usando AspectJ, incluindo tipos de advice como before, after, around e throwing/returning, a variável ThisJoinPoint, criação de aspectos e declarações de tipo interno.
Aulas de estrutura de dados por Ayrton YagamiAyrton Yagami
Aprenda mais sobre estruturas de dados:
1 - Recursão
2 - Lista ligada, lista duplamente ligada, lista circular
3 - Conceito de Arvore
4 - Arvore Binária e AVL
Slide utilizado no curso preparatório para a certificação OCAJP7. Nessa aula aprendemos sobre os tipos primitivos e tipos de referência e como eles se comportam na stack e na heap. http://www.sitedoph.com.br/preparatorio-para-a-certificacao-java-ocajp-7-aula-2/
Aulas de estrutura de dados por Ayrton YagamiAyrton Yagami
Aprenda mais sobre estruturas de dados:
1 - Recursão
2 - Lista ligada, lista duplamente ligada, lista circular
3 - Conceito de Arvore
4 - Arvore Binária e AVL
Slide utilizado no curso preparatório para a certificação OCAJP7. Nessa aula aprendemos sobre os tipos primitivos e tipos de referência e como eles se comportam na stack e na heap. http://www.sitedoph.com.br/preparatorio-para-a-certificacao-java-ocajp-7-aula-2/
Presentación realizada en el track de infraestructuras del congreso MeetandTalk, de interesados en el sistema Wonderware, celebrado en Zaragoza en Mayo de 2015
Presentación realizada en el track de infraestructuras del congreso MeetandTalk, de interesados en el sistema Wonderware, celebrado en Zaragoza en Mayo de 2015
Minicurso de Django - Desenvolvimento ágil web com Django e PythonGuilherme Garcia
Minicurso de Django 1.10 com a criação de um projeto completo em Django e conteúdos sobre:
Introdução a Python, Autenticação de usuários Django, Relacionamentos de classes do Django. Templates, etc.
Palestra sobre meta-programação em python ministrada no TDC 2012 e na SEMCOMP 2012. Corrigido o verbo "estender" que estava antes "extender" e colocado realce de sintaxe.
Encryption Deep Dive: Randomness, Entropy, RNG, PRNG, AES, AES Operational Modes, Data Rotations, Java Encryption APIs, Tradeoffs, challenges, Envelope Encryption, KMS, and much more on all things encryption.
Design is Not Subjective! Software design and Lean UX, Ux, Design Thinking are not that different after all. UML was in the right direction the problem was where we applied. In this video, I will explain why Design is not subjective. Video https://www.youtube.com/watch?v=ijGR6Tbhr54
10. ThisJoinPointThisJoinPoint
• Variável de referência especial
• Utilizável no contexto do advice
• org.aspectj.lang.JoinPoint
• Informações do contexto AOP
• Acesso a argumentos e objetos
11. ThisJoinPointThisJoinPoint
Método Descrição
getArgs() Retorna os argumentos do método
getSignature() Retorna a assinatura do método
getSourceLocation() Fonte e linha do código Java
getClass() Retorna a classe de implementação do JoinPoint
getKind() Tipo de join point. Ex.: method-call
getTarget() Retorna o objeto(Java) em execução
getStaticPart() É um helper do join point que contém as informações
que podem ser acessadas de forma estática.
getThis() Semelhante ao target, porém sempre irá retornar o
objeto que estiver relacionado ao this() de expressão
pointcut.
12. AspectsAspects
• Semelhante a classe Java
• Forma de solução Crosscuting Concern
• Pointcuts, Advices
• Suporta herança (Abstrato)
• Variáveis e métodos Java
• Aspectos alinhados (estatico)
• Não são instanciados diretamente
13. AspectsAspects
• Pode ter construtor
• Sem argumentos
• Sem levantar Exceptions checadas
• Singletons
• Recuperar instância
• org.aspectj.lang.Aspects
• aspectOf(Class c)
15. Inner-type DeclarationsInner-type Declarations
declare parents: br.com.B extends br.com.A;
declare parents: br.com.B implements br.com.A;
private List<Porta> Casa.portas = new ArrayList<Porta>();
public void Casa.pintar(Cor c){
System.out.println("Pintando a casa de cor:" + c);
}
public Casa.new(String rua) {
super();
System.out.println(rua);
}
16. Você aprendeu a...Você aprendeu a...
Utilizar os tipos de Advices do AspectJ
Recursos de ThisJoinPoint
Criar aspectos
Utilizar inner-type declarations
17. ExercíciosExercícios
1) Faça um Aspecto e utilizando o advice do tipo before() log em um arquivo texto todas as
chamadas de métodos da classe Sistema. Essa classe deve ter 5 metodos: ligar(), parar(),
desligar(), acelerar(), e explodir(), crie a classe e forneça qualquer implementação, após isto chame
algumas vezes estes métodos.
2) Aproveite o exercicio 1 e mude o advice before para o advice after e faça o método
desligar(String motivo) e log isso também.
3) Faça um advice around que não execute o método ligar se o dia de hoje for par e além disso
levante uma exception do tipo RuntimeExecption(“Hoje o sistema está desligado!”).
4) Crie a interface Contador com o método int contar(int i) e int showTotalCount(). Faça via
inner-type declaration que a classe sistema tenha um contador com todas as chamadas aos
métodos acelerar() e parar(). Mostre o resultado em uma classe main, use cast ou reflection.