UNIVERSIDADE FEDERAL FLUMINENSE CENTRO TECNOLÓGICO INSTITUTO DE COMPUTAÇÃO

Tamanho: px
Começar a partir da página:

Download "UNIVERSIDADE FEDERAL FLUMINENSE CENTRO TECNOLÓGICO INSTITUTO DE COMPUTAÇÃO"

Transcrição

1 UNIVERSIDADE FEDERAL FLUMINENSE CENTRO TECNOLÓGICO INSTITUTO DE COMPUTAÇÃO HELIOMAR KANN DA ROCHA SANTOS PROGRAMAÇÃO ORIENTADA A ASPECTOS NITERÓI 2008

2 2 HELIOMAR KANN DA ROCHA SANTOS PROGRAMAÇÃO ORIENTADA A ASPECTOS Trabalho de Conclusão apresentado ao Curso de Graduação em Ciência da Computação da Universidade Federal Fluminense, como requisito parcial para obtenção do grau de Bacharel em Ciência da Computação. ORIENTADOR: Prof. Ms. Carlos Alberto Ribeiro NITERÓI 2008

3 3 HELIOMAR KANN DA ROCHA SANTOS PROGRAMAÇÃO ORIENTADA A ASPECTOS Trabalho de Conclusão apresentado ao Curso de Graduação em Ciência da Computação da Universidade Federal Fluminense, como requisito parcial para obtenção do grau de Bacharel em Ciência da Computação. BANCA EXAMINADORA Prof. Ms. Carlos Alberto Ribeiro - Orientador Universidade Federal Fuminence Prof. Dr. Esteban Walter Gonzalez Clua Universidade Federal Fuminence Prof. Dr. Luiz Carlos Castro Guedes Universidade Federal Fuminence

4 4 Seja em você a mudança que quer para o mundo Ghandi

5 5 AGRADECIMENTOS A Deus por toda sua criação, À minha família pela compreensão do meu comprometimento com a Universidade, Ao Professor Mestre Carlos Alberto Ribeiro, meu orientador, pela atenção, motivação e dedicação, À Anna Paula Freitas de Carvalho, minha namorada pela extrema paciência e amor, A todos os docentes dessa excelente academia que me construíram profissionalmente, Aos integrantes do APJAVA, apartamento onde moro, À Priscila Freitas de Carvalho e ao Samuel Bandeira Coelho pelo apoio e dicas.

6 6 ABSTRACT This work presents a detailed and exemplified study of the Aspect-Oriented Programming (AOP) paradigm. Aspectj offer us a more comprehensive toolkit and options for the development of systems in a "clear", scalable and maintenable way. It also will be shown applications and gains in choosing the Aspect-Oriented paradigm. Cases such as "Transaction Control", "Query Executer", "Audit and Event Log" and "Design Pattern" will be exemplified by a conventional approach and with an Aspectj approach. In purpose of this work is to summarize the major advantages of this paradigm, as well as difficulties, future works, pros and cons. Key-words: Aspect-Oriented Programming (AOP), cross-cutting concerns, AspectJ, transactional control, Annotation.

7 7 RESUMO O presente trabalho apresenta um estudo detalhado e exemplificado do paradigma da Programação Orientada a Aspectos (POA) que nos possibilitará mais um vasto conjunto de ferramentas e opções para o desenvolvimento de sistemas de forma clara, escalável e manutenível. Também serão mostrados aplicações e ganhos ao adotarmos o paradigma orientado a aspectos. Cases como Controle Transacional, Execução de Buscas, Auditoria e Log de Eventos e Padrões de Projeto serão exemplificados em uma abordagem convencional e uma com Aspectj. Na conclusão serão sintetizadas as grandes vantagens deste paradigma, assim como as dificuldades, trabalhos futuros, prós e contras. Palavras-chave: Programação Orientada a Aspectos (POA), Interesses Transversais ou Ortogonais, AspectJ, Controle Transacional, Anotação.

8 8 SUMÁRIO 1. Introdução Objetivo Motivação Estrutura do documento Estudo Bibliográfico Requisitos Ortogonais ou Transversais (cross-cutting concerns) Sistema Orientado a Aspectos Composição Fases Aspectos Equivalência Pontos de Junção (Join Points) Pontos de Atuação (Pointcuts) Estrutura do ponto de atuação Pointcuts de fluxo de controle Pointcuts genéricos Pointcuts nomeados Adendos (Advices) Tipos de adendos Advice do tipo before Advice do tipo after Advice do tipo around Modelagem na POA Benefícios Aplicação Controle de transação Transação Anotações Proxy Estrutura sem aspectos Estrutura com aspecto Benefícios Controle de interesses ortogonais em um DAO Modelagem padrão com Enhancer e fábrica de DAO Problemas encontrados Modelagem com aspectos Solução com AspectJ Explicação do código Benefícios Aspectos para implementação de padrões de projetos (design patterns) Padrão Singleton...56

9 Singleton com aspectj Singleton com aspectj e anotação Auditoria, Log de Eventos Estudo de caso Sugestão com aspecto Outras aplicações Aspectos para tratamento de exceção Handler Declare soft After Throwing Aspectos para cumprimento de regras arquiteturais Declarando Erros Declarando Avisos (Warnings) Conclusão Referências...70 Apêndice I...73 Apêncide II

10 10 LISTA DE FIGURAS Figura 1: Interesses em comum entre camadas...17 Figura 2: Ortogonalidade dos interesses...17 Figura 3: Interesses espalhados nas classes...18 Figura 4: Componentes, Aspectos, Combinador de Aspectos...20 Figura 5: Decomposição, Implementação, Recomposição...21 Figura 6: Exemplo de aspecto...22 Figura 7: Exemplo de saída de um aspecto...22 Figura 8: Classe MessageCommunicator e Test...22 Figura 9: Aspect MessageCommunicator...23 Figura 10: Classe auxiliar para mostrar equivalência...23 Figura 11: Código equivalente ao aspecto da figura Figura 12: Diferença entre chamada e execução...25 Figura 13: Wildcards...26 Figura 14: Estrutura do ponto de atuação...27 Figura 15: Designadores de pointcuts...27 Figura 16: Pointcuts de fluxo de controle...28 Figura 17: Pointcuts genéricos...28 Figura 18: Exemplo 1 de pointcut genérico...28 Figura 19: Exemplo 2 de pointcut genérico...28 Figura 20: Pointcuts nomeados, equivalência...29 Figura 21: Exemplo de advice...30 Figura 22: Estrutura do advice...31 Figura 23: Exemplo 1 de advice around...32 Figura 24: Exemplo 2 de advice around...32 Figura 25: Diagrama de classes de uma classe e um aspecto...33 Figura 26:

11 11 Figura 27: Modelo de criação de classes de serviço com Proxy via Enhancer...37 Figura 28: Fabrica para específica para Servers...38 Figura 29: Interceptador de classes de serviço...40 Figura 30: Estrutura com aspecto...40 Figura 31: Introdução de variável em uma classe com aspectj...41 Figura 32: Controle Transacional com aspectj...43 Figura 33: Estrutura para controle de DAO com Proxy via Enhancer...46 Figura 34: Fabrica específica para DAOs...47 Figura 35: Interceptador de DAO...49 Figura 36: Estrutura de DAO com aspectj...50 Figura 37: Classe PessoaDAOImpl...51 Figura 38: Interface PessoaDAO...52 Figura 39: Exceção criada para melhorar a legibilidade de métodos interceptados...52 Figura 40: Controle de DAO para buscas em geral...55 Figura 41: Exemplo de implementação Singleton...57 Figura 42: Aspecto que define uma implementação singleton...58 Figura 43: Reusabilidade em aspectj, através de aspectos genéricos...58 Figura 44: Figura 45: Aspecto adaptado para contemplar a (figura 44)...59 Figura 46: Exemplo de utilização da Figura 47: Aspecto para auditoria e log de eventos...64 Figura 48: Exemplo de handler...64 Figura 49: Exemplo de um método lançando um RuntimeException...65 Figura 50: Exemplo da construção declare soft...65 Figura 51: Uso de Thread sem declaração de tratamento de InterruptedException...65 Figura 52: Encapsulamento de exceções...66 Figura 53: Exemplo de declaração de erro de compilação...66

12 Figura 54: Exemplo de declaração de warnings

13 13 LISTA DE ABREVIATURAS E SIGLAS JEE: Java Enterprise Edition JSF: Java Server Faces API: Application Programming Interface POA: Programação Orientada a Aspectos JPA: Java Persistence API DAO: Data Access Object POO: Programação Orientada a Objetos URL: Uniform Resource Locator. SGBD: Sistema de Gerenciamento de Banco de Dados JPAQL: SQL para JPA SQL: Structured Query Language XHTML: extensible Hypertext Markup Language IDE: Integrated Development Environment AJDE: AspectJ Development Environment IA: Inteligência Artificial

14 14 1. INTRODUÇÃO 1.1 Objetivo O trabalho objetiva realizar um estudo amplo da Programação Orientada a Aspectos (POA), utilizando especificamente AspectJ, uma extensão em Java para o desenvolvimento de tal paradigma. O estudo bibliográfico será composto de todos os conceitos fundamentais de POA com aplicações e vantagens. Também serão analisadas implementações em Java padrão e com AspectJ. Os casos estudados são muito comuns em grandes sistemas de banco de dados que utilizam padrões de projetos como AppService e DAO. Serão apresentados: Controle de transação para AppService Execução de buscas para DAO Padrões de projetos com Aspectj Controle de auditoria e log de eventos. Todos esses casos são de grande utilização no mercado atual e podem ser aprimorados. 1.2 Motivação A Programação Orientada a Objetos (POO) tem o propósito de modularizar e encapsular responsabilidades (métodos e atributos) afins dentro de um escopo bem definido (classes), em que as particularidades são os atributos que cada instância desse escopo (objetos) terão. Dessa forma podemos com relativa facilidade desenvolver, com códigos reutilizáveis, sistemas manuteníveis e escaláveis. Ao longo do tempo essa estrutura mostrou-se frágil em alguns aspectos. De acordo com [2] cerca de 80% da vida útil de um software é manutenção. É na manutenção que muitos requisitos ortogonais ou transversais (cross-cutting concerns) são tratados, o que na maioria das vezes são requisitos não funcionais. Com o passar do tempo, no desenvolvimento de software, foram observados vários casos em que não é possível a reutilização de código, ou seja, fazia-se necessária a duplicação

15 15 de código, tornando o sistema mais complexo, de difícil manutenção e possivelmente comprometendo seu tempo de vida. A Programação Orientada a Aspectos (POA) foi idealizada por pesquisadores da Xerox Parc [1] para tratar de forma elegante os cross-cutting concerns, encapsulando e isolando esses interesses em arquivos separados do código principal. A POA não veio para substituir a POO e sim complementar de forma organizada. POA é uma evolução da POO, ela não faz sentido sem POO. Utilizando o paradigma aspectual em muitos casos não há necessidade de substituição completa de sistemas já existentes e sim pequenos ajustes que farão com que o sistema tenha uma vida útil prolongada. Essa esperança torna o uso de aspectos muito atrativo para o mercado de trabalho atual. 1.3 Estrutura do documento Os três capítulos seguintes desta monografia estão estruturados da seguinte forma: O capítulo 2 terá uma abordagem com todos os conceitos fundamentais para o entendimento do paradigma orientado a aspectos com AspectJ, estruturação, particularidades da linguagem, semelhanças, equivalência de códigos, vantagens e aplicações. O capítulo 3 conterá as implementações de alguns estudos de caso em Java padrão e com AspectJ. O capítulo 4 apresenta os problemas encontrados, as conclusões obtidas e o que sugerimos como trabalhos futuros.

16 16 2. ESTUDO BIBLIOGRÁFICO Nesse capítulo são abordados os conceitos fundamentais para o entendimento da Programação Orientada a Aspecto. AspectJ foi escolhido por ser uma extensão de uma linguagem conhecia (java) e por ser bem aceita tanto na comunidade POA quanto nas demais comunidades de desenvolvimento de software. 2.1 Requisitos Ortogonais ou Transversais (cross-cutting concerns) O termo separação de interesses foi cunhado por Edsger Dijkstra em 1974 para denotar o princípio que guia a divisão em partes: todo sistema de software lida com diferentes interesses, sejam eles dados, operações, ou outros requisitos do sistema. O ideal seria que a parte do programa dedicada a satisfazer a um determinado interesse estivesse concentrada em uma única localidade física, separada de outros interesses, para que o interesse possa ser estudado e compreendido com facilidade [14]. Nos sistemas atuais ocorrem, com muita freqüência, casos em que interesses nem sempre podem ser tratados de forma separada em POO, como no caso clássico de implementação em camadas de interesses (Negócio, Persistência, figura 1), observa-se que a auditoria é um interesse que transpassa essa separação lógica, tendo que ser conhecida pelas diferentes camadas. A figura 1 mostra interesses (Negócio, Persistência, Logging) que métodos de classes de camadas diferentes possuem em comum, porém são de difícil modularização. Esses interesses são de extrema importância, mas não são de inteira responsabilidade das classes ou objetos alvos onde terrão que ser implementados caso uma abordagem convencional de POO seja utilizada.

17 17 Figura 1: Interesses em comum entre camadas Um dos motivos para se chamar requisito ortogonal é evidenciado na figura 2 que mostra uma formação de um gráfico 3D como sendo a melhor representação visual para esse tipo de interesse, esses interesses são projetados de forma ortogonal. Interesses Figura 2: Ortogonalidade dos interesses Em POO mesmo se esforçando para obtermos um software nos padrões, ou seja, pouca redundância, alta coesão, fraco acoplamento, fácil manutenção, reusável e escalável, vão ocorrer ocasiões em que será necessária a criação desses interesses não modularizáveis que ficarão espalhados entre as classes. Um bom exemplo ocorre em registros de auditoria e eventos de um software. Em POO convencional precisaremos espalhar por entre métodos de

18 18 classes o código que fará o registro de quem está usando determinado método com determinados parâmetros em uma determinada hora. Esse tipo de abordagem é comum em sistemas de alta segurança, sistemas de telefonia, call-center, aplicações web, distribuídas, etc. Exemplo, na figura 3 os quadrados internos às classes poderão representar o serviço de logging do sistema. Não esquecendo que sistemas possuem centenas de classes com várias dezenas de métodos cada classe. Figura 3: Interesses espalhados nas classes Nessas condições uma série de fatores desfavoráveis pode facilmente ser analisada: Fraca coesão: Classes terão que tratar de interesses diversos que não são de inteira responsabilidade semântica da mesma, terão que conhecer interesses que não estão diretamente relacionados aos que implementam. Forte acoplamento As classes passam a ter uma maior dependência externa. Dificuldade de manutenção: Haverá vários trechos de código em comum espalhados. Uma mudança a ser implementada, em um desses trechos, pode ser desastrosa, além disso, vários trechos de códigos diferentes podem estar fazendo a mesma coisa. A grande quantidade de classes também é um fator dificultante. Comprometimento da escalabilidade: Na medida em que o software cresce torna-se sacrificante a implementação de códigos que sejam compatíveis com a realidade de módulos antigos, sendo assim é necessário um grande desprendimento de força de trabalho com refatoração a cada necessidade de crescimento do software.

19 19 Aumento de redundância: É fácil ver que códigos estarão redundantes não só entre classes como entre métodos de uma mesma classe, pois em POO não há formas simples de se tratar interesses entrecortantes sem redundância. Diminuição de reutilização de código: Como dito no item acima, o código será duplicado e não reutilizado. 2.2 Sistema Orientado a Aspectos Composição Um sistema orientado a aspectos é composto pelos seguintes componentes principais: Linguagem de componentes: A linguagem de componentes é a utilizada para implementar as funções normais do sistema. Exemplos desse tipo de linguagem, JAVA, C, C++, RUBY, PYTHON, DELPHI etc.. Linguagem de aspectos: A linguagem de aspectos deve oferecer as vantagens básicas que uma linguagem de programação disponibiliza. AspectJ é uma linguagem de aspecto que por ser uma extensão de JAVA possui boa parte de suas características. É nessa linguagem que os interesses ortogonais de um sistema são implementados. Combinador de aspectos: O combinador de aspectos (weaver) é responsável pela junção do código implementado em uma linguagem de aspectos com um código implementado por uma linguagem de componentes, resultando no código executável final. Programas escritos em linguagem de componentes: Componentes são as partes funcionais de um sistema, partes responsáveis por tratar de algum interesse específico. As entidades do sistema representadas por classes são exemplos. Classes como Pessoa, Funcionário e Filme podem ser consideradas componentes em um sistema de controle de uma locadora. A figura 4 apresenta o Weaver combinando os componentes com os aspectos para formar o programa operacional.

20 20 Figura 4: Componentes, Aspectos, Combinador de Aspectos Fases A Programação Orientada Aspectos envolve três fases distintas: Decomposição: os vários interesses do sistema são identificados e classificados como comuns ou transversais. Implementação: os interesses são implementados separadamente em classes (para os interesses comuns) e aspectos (para os interesses transversais). São estabelecidas regras de corte, cada regra de corte define onde deve ocorrer a interferência de algum interesse transversal. Recomposição: É nessa fase que ocorre a costura de código (weaving). Os interesses gerados em uma linguagem orientada por aspectos são entrelaçados com o código do programa principal para formar o código completo operacional. Em POA ocorre apenas a costura estática que é realizada no passo de compilação ou carregamento, modificando o código executável do programa base. Existem outros sistemas que permitem a costura dinâmica, nesse caso, em tempo de execução, é alterado o comportamento do código carregado pela JVM sem que haja alteração do código executável original. Não entraremos em detalhes sobre costura dinâmica, pois foge do foco dessa monografia. A figura 5 mostra um exemplo das fases para uma classe A. A primeira parte da figura mostra as fases de decomposição e implementação, a terceira mostra a recomposição, nesse caso, a classe A resultante da combinação feita pelo Weaver.

21 21 Figura 5: Decomposição, Implementação, Recomposição 2.3 Aspectos Assim como uma classe é definida pela palavra "class" em JAVA o aspecto é definido como aspect para AspectJ. O aspecto é a abstração que AspectJ criou para implementar os interesses ortogonais, separando-os do código principal e possibilitando uma boa modularização. Basicamente um aspecto possui pointcuts e advices. Os pointcuts são definidos por um conjunto de join points e os advices representam a implementação dos interesses ortogonais. Os advices utilizam-se de pointcuts para definir onde o interesse será aplicado. Nas próximas seções veremos com mais detalhes pointcuts, join points e advices. A figura 6 mostra um aspecto completo que apresenta, de forma simplificada, o controle de transação de uma aplicação. public aspect ControleTransacao{ pointcut transacao() : * service..*.*(..)); before() : transacao(){ JPAUtil.beginTransaction(); after() : transacao() { JPAUtil.commitTransaction(); JPAUtil.closeEntityManager();

22 22 after() throwing : transacao() { JPAUtil.rollbackTransaction(); Figura 6: Exemplo de aspecto 2.4 Equivalência O aspecto da figura 9 é aplicado na classe MessageCommunicator (figura 8). A execução do método main contida na classe Test (figura 8) com esse aspecto, gera a seguinte saída: OI! Quer Aprender AspectJ? OI! João está gostando? Figura 7: Exemplo de saída de um aspecto As figuras 10 e 11 mostram um código equivalente à solução com aspecto. public class MessageCommunicator{ public static void deliver(string msg){ System.out.println(msg); public static void deliver(string person, String msg){ System.out.println(person + ", " + msg); public class Test{ public static void main(string[] args) { MessageCommunicator.deliver("Quer aprender AspectJ?"); MessageCommunicator.deliver("João", "está gostando?"); Figura 8: Classe MessageCommunicator e Test public aspect MessageCommunicator{

23 23 pointcut delivermessage() : call (* MessageCommunicator.deliver(..)); before () : delivermessage(){ System.out.print( OI! ); Figura 9: Aspect MessageCommunicator public class MannerAspect { public static MannerAspect aspectinstance; static { aspectinstance = new MannerAspect(); public static final void before0$ajc(){ System.out.print( OI! "); Figura 10: Classe auxiliar para mostrar equivalência class MessageCommunicator{ public static void deliver(string msg){ MannerAspect.aspectInstance.before0$ajc(); System.out.println(msg); public static void deliver(string person, String msg){ MannerAspect.aspectInstance.before0$ajc(); System.out.println(person + ", " + msg); class Test{ public static void main(string[] args) { MessageCommunicator.deliver("Quer aprender AspectJ?"); MessageCommunicator.deliver("João", "está gostando?");

24 24 Figura 11: Código equivalente ao aspecto da figura Pontos de Junção (Join Points) Pontos de junção nada mais são do que pontos bem definido na execução de um código. O conceito clássico para join points é citado por [9], que descreve como pontos de execução de um programa de componentes onde os aspectos serão aplicados. O AspectJ pode detectar e operar sobre os seguintes tipos de join points: Chamada de Métodos Execução de Métodos Chamada de Construtores Execução de Inicialização Execução de Construtores Execução de Inicialização Estática Pré-Inicialização de Objetos Inicialização de Objetos Referência a Campos Execução e Tratamento de Exceções A diferença entre os join points execução e chamada pode ser resumida como: Para um ponto de junção do tipo chamada, um aspecto será aplicado na classe ou lugar onde ocorreu a chamada. Já na execução, um aspecto será aplicado interno ao método interceptado propriamente dito. O exemplo abaixo deixa claro essa sutil diferença. //Classe Principal Public class Principal{ public static void main(string[] args) {

25 25 PessoaService pessoaservice = new PessoaService(); String login = "joao"; //*1 pessoaservice.getpessoabylogin(login); //*2 //Classe PessoaService Public class PessoaService { private PessoaDAO pessoadao = new PessoaDAOImpl(); public Pessoa getpessoabylogin (String login) { //**1 return pessoadao.getbylogin(login); //**2 Figura 12: Diferença entre chamada e execução Um aspecto será aplicado em *1 ou *2 caso for utilizado um join point do tipo de chamada, ou seja, será injetado um aspecto antes, depois ou envolta do ponto delimitado entre *1 e *2. Analogamente em um join point do tipo execução teremos um interesse injetado em **1 e **2. Motivos para existir a join point de chamada e execução: Como em linguagens orientadas a objetos existe polimorfismo, é possível chamarmos um método de uma classe e executarmos um método de uma de suas subclasses. Assim, é útil fazer a distinção em se tratando de aspectos, pois AspectJ oferece meios para recuperarmos o objeto no qual se encontra o método interceptado ou onde o join point foi marcado. Com polimorfismo esse objeto muda em tempo de execução. Além disso, como a chamada e execução podem estar em arquivos

26 fisicamente diferentes, pode-se gerar pontos de corte compostos onde a diferença entre chamada e execução torna-se mais importante [14] Pontos de Atuação (Pointcuts) Um pointcut tem como objetivo criar regras, genéricas ou específicas, se necessário. Ele é formado a partir da combinação de um ou mais join points, através de operadores lógicos (ou), &&(e),!(não). Com um pointcut podemos obter várias informações de um ponto de junção específico. Por exemplo, ao definimos que um ponto de ação será a chamada um método X, podemos obter os parâmetros passados para esse método, onde fisicamente o método está implementado (classe de origem), quem o chamou, exceções, tipo de retorno entre outras informações. Assim como membros de uma classe, pointcuts podem ser declarados como públicos, privados ou finais (final), mas não podem ser sobrecarregados. Dentro de um aspecto abstrato eles também podem ser declarados abstratos. Podemos ter pointcuts nomeados ou anônimos, a vantagem de se ter um pointcut nomeado é que suas regras podem ser usadas em outras partes do código aspecto. Para declaração de pointcuts o AspectJ oferece caracteres coringas (wildcards), tornando desnecessária a declaração explicita de alguns pontos de junção. A figura 13 mostra esses caracteres. Caractere Descrição * Qualquer seqüência de caracteres não contendo pontos.. Qualquer seqüência de caracteres, inclusive contendo pontos + Qualquer subclasse da classe em questão Figura 13: Wildcards Estrutura do ponto de atuação <pointcut> ::= <tipo de acesso> <nome do pointcut> ({lista de parâmetros) : { designador [ && ] Sendo: <tipo de acesso> ::= public private <nome do pointcut> ::= { <identificador> <parâmetros> ::= { <identificador> <tipo>

27 27 <designador> ::= [!]Call execution target args cflow cflowbelow within if <identificador> ::= letter {letter digit <tipo> ::= tipos válidos do Java Figura 14: Estrutura do ponto de atuação Para definir pointcuts utilizamos construtores de AspectJ chamados designadores de pointcut (pointcut designators), como os apresentados na figura 15. Em que Padrão Tipo é uma construção que pode definir um conjunto de tipos podendo utilizar wildcards. Designador Significado call(assinatura) Chamada de método ou construtor execution(assinatura) Execução de método ou construtor get(assinatura) Leitura de dado de Classe set(assinatura) Escrita de dado de Classe this(padrão Tipo) Compreende todos os pontos de junção de um objeto ou classe definida em Padrão Tipo ou de qualquer subclasse da mesma. A diferença para within é basicamente que within é calculado em tempo de compilação e this em tempo de execução, e within não inclui subclasses. args(padrão Tipo) Define o tipo de argumento descrito por Padrão Tipo handler (Padrão Tipo) Tratamento de exceção, Padrão Tipo define o tipo de exceção within(padrão Tipo) Todos os join points que ocorrem dentro da classe descrita por Padrão Tipo withincode(assinatura) Todos os join points que ocorrem dentro dos métodos contidos na declaração de Assinatura Figura 15: Designadores de pointcuts Pointcuts de fluxo de controle Para fluxo de controle existem dois tipos de pointcuts específicos. Um fluxo de controle consiste de todos os comandos que são executados entre a entrada em um método e a saída deste, inclusive considerando os comandos em métodos chamados pelo primeiro. Caractere cflow(pointcut) cflowbelow(pointcut) Descrição Todos os pontos de junção que ocorrem durante o pointcut especificado, incluindo a própria chamada. Todos os pontos de junção que ocorrem durante o pointcut especificado, não incluindo a própria execução.

28 28 Figura 16: Pointcuts de fluxo de controle A lista completa de wildcards e pointcut designators pode ser encontrada no guia de programação de AspectJ [10] Pointcuts genéricos Utilizando wildcards podemos criar designadores genéricos, dessa forma delimitamos uma maior quantidade de pontos junção a serem interceptados. Designador call (* set*(..)) execution(public * Pessoa.*(..)) call(*.new(int, int)) call(* dao..*(..)) call(pessoadao+.new(..)) set(* Pessoa.*) Figura 17: Pointcuts genéricos Significado Chamada a qualquer método que inicie com set e possua quaisquer parâmetros Execução de qualquer método público da classe Pessoa Chamada a qualquer construtor que possua somente dois inteiros como parâmetros Chamada a qualquer método dentro do diretório e subdiretórios de dao Todos os construtores da classe de PessoaDAO e suas subclasses. Se PessoaDAO for uma interface, somente os construtores de quem a implementa. Qualquer alteração de um atributo da classe Pessoa A figura 18 mostra um exemplo de pointcut completo. Nesse exemplo podemos claramente observar as vantagens dos wildcards, nesse caso temos um pointcut nomeado ( buscalista ) que atuará na chamada ( call ) de qualquer Método (* *.*) com quaisquer argumentos ( (..) ) que esteja anotado com a interface MetodoRecuperaLista. Pointcut buscalista() : * *.*(..)) ; Figura 18: Exemplo 1 de pointcut genérico Na figura 19 temos um pointcut nomeado ( transacao ) que atuará na chamada de qualquer método que esteja localizado em qualquer classe dentro do diretório (package) ou subdiretório de service. Pointcut transacao() : * service..*.*(..)); Figura 19: Exemplo 2 de pointcut genérico

29 Pointcuts nomeados Pointcuts podem ser nomeados ou não, com pointcuts nomeados aumentamos a clareza e o reaproveitamento de regras de corte, podemos sem restrições fazer a seguinte estrutura: pointcut pointcut1() : call(* service.identificacao.*(..)) call(* service.aluno.*(..)); pointcut pointcuta() : call(* service.identificacao.*(..)) ; poitcut pointcutb() : call(* service.aluno.*(..)); pointcut pointcut2() : pointcuta() pointcutb(); Figura 20: Pointcuts nomeados, equivalência A figura 20 mostra a equivalência entre pointcut2() e pointcut1(). Esse tipo de associação é interessante quando utilizamos um pointcut ou parte dele em lugares diferentes do código em AspectJ. 2.7 Adendos (Advices) Enfim chegamos ao advice. Ele é o elemento mais importante da POA, similar a um método de uma classe, o adendo é para aspecto. Possui parâmetros e um conjunto de instruções a ser executado. Diferente de um método comum o advice utiliza-se de pointcuts para que ocorra sua execução nos locais designados pelos join points desses pointcuts. Nos adendos são definidos os interesses ortogonais propriamente ditos. Uma forma fácil de montar um raciocínio para se chegar a um adendo completo é baseada em três pequenos passos: o primeiro passo é descrever os pontos de atuação em que são definidas as regras de captura dos pontos de junção; segundo é escolher o tipo de adendo para o qual se deseja que ocorra no fluxo de execução (antes, durante, depois); em terceiro é implementar o interesse (fazer o código) que será inserido conforme o segundo passo no local especificado pelo primeiro passo. Vejamos um conjunto de advice completos para uma simples implementação de controle de transação.

Programação Orientada a Aspectos

Programação Orientada a Aspectos Programação Orientada a Aspectos Uma Breve Introdução Universidade Estadual do Oeste do Paraná Centro de Ciências Exatas e Tecnológicas Colegiado de Informática Prof. Luiz Antonio Roteiro Introdução Evolução

Leia mais

Aspect-Oriented Programming AOP. Comentários Sérgio Crespo

Aspect-Oriented Programming AOP. Comentários Sérgio Crespo Aspect-Oriented Programming AOP Comentários Sérgio Crespo Separation of Concerns O princípio de Separation of Concerns já é utilizado por engenheiros de software para o gerenciar a complexidade de sistemas

Leia mais

2 Desenvolvimento de Software Orientado a Aspectos

2 Desenvolvimento de Software Orientado a Aspectos 2 Desenvolvimento de Software Orientado a Aspectos Separação de concerns é um princípio bem estabelecido da engenharia de software que diz que, para se dominar a complexidade do desenvolvimento de software,

Leia mais

POO e suas Limitações Introdução POA AspectJ: Conceitos Básicos Exemplo: Tracing Padrões de Projeto e POA

POO e suas Limitações Introdução POA AspectJ: Conceitos Básicos Exemplo: Tracing Padrões de Projeto e POA Lincoln S. Rocha (lincoln@great.ufc.br) POO e suas Limitações Introdução POA AspectJ: Conceitos Básicos Exemplo: Tracing Padrões de Projeto e POA Background Artigo do Kiczales 2 3 1 Objetivo da Programação?

Leia mais

Aspectos para Leigos. Programação Orientada a. Aprenda a dar os primeiros passos no paradigma orientado a aspectos usando o AspectJ com anotações.

Aspectos para Leigos. Programação Orientada a. Aprenda a dar os primeiros passos no paradigma orientado a aspectos usando o AspectJ com anotações. Eduardo Guerra (guerra@mundoj.com.br / Twitter @emguerra) é desenvolvedor de frameworks, pesquisador em design de software, editor-chefe da revista MundoJ e professor do ITA, onde concluiu sua graduação,

Leia mais

Paradigmas de Linguagens de Programação

Paradigmas de Linguagens de Programação Paradigmas de Linguagens de Programação Faculdade Nova Roma Cursos de Ciências da Computação (6 Período) Prof Adriano Avelar - Site: wwwadrianoavelarcom Email: edsonavelar@yahoocombr PROGRAMAÇÃO ORIENTADA

Leia mais

Identificação de Interesses Transversais: Uma Visão Geral

Identificação de Interesses Transversais: Uma Visão Geral Identificação de Interesses Transversais: Uma Visão Geral Paulo Afonso Parreira Júnior paulojunior@jatai.ufg.br 24 de Maio de 2013 Agenda Breve Histórico sobre Desenvolvimento de Software Separação de

Leia mais

Programação Orientada a Aspectos Aplicada. Charles Wellington de Oliveira Fortes chalkmaster@gmail.com

Programação Orientada a Aspectos Aplicada. Charles Wellington de Oliveira Fortes chalkmaster@gmail.com Programação Orientada a Aspectos Aplicada. Charles Wellington de Oliveira Fortes chalkmaster@gmail.com Resumo: Demonstrar de forma clara e prática como a Programação Orientada a Aspectos pode ajudar a

Leia mais

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel As 52 Palavras Reservadas O que são palavras reservadas São palavras que já existem na linguagem Java, e tem sua função já definida. NÃO podem

Leia mais

Guia de Fatores de Qualidade de OO e Java

Guia de Fatores de Qualidade de OO e Java Qualiti Software Processes Guia de Fatores de Qualidade de OO e Java Versã o 1.0 Este documento só pode ser utilizado para fins educacionais, no Centro de Informática da Universidade Federal de Pernambuco.

Leia mais

Framework utilizando reflexão e aspectos para persistência de objetos em java

Framework utilizando reflexão e aspectos para persistência de objetos em java Framework utilizando reflexão e aspectos para persistência de objetos em java Antonio Carlos Rolloff (UNIPAR) acrolloff@gmail.com Arthur Cattaneo Zavadski (UNIPAR) arthur@datacoper.com.br Maria Aparecida

Leia mais

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Especialização em desenvolvimento para web com interfaces ricas Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Objetivos Conceito de exceções Tratar exceções pelo uso de try, catch e

Leia mais

Desenvolvendo AOP com Spring.NET Aprenda a desenvolver aspectos para encapsular implementações de arquitetura das implementações de negócio

Desenvolvendo AOP com Spring.NET Aprenda a desenvolver aspectos para encapsular implementações de arquitetura das implementações de negócio [Web Boas Práticas Design Patterns Orientação a Objetos AOP Spring.NET] Desenvolvendo AOP com Spring.NET Aprenda a desenvolver aspectos para encapsular implementações de arquitetura das implementações

Leia mais

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java.

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java. Exceções em Java Miguel Jonathan DCC/IM/UFRJ (rev. abril de 2011) Resumo dos conceitos e regras gerais do uso de exceções em Java O uso de exceções permite separar a detecção da ocorrência de uma situação

Leia mais

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br

Java. Marcio de Carvalho Victorino www.dominandoti.eng.br Java Marcio de Carvalho Victorino www.dominandoti.eng.br 3. Considere as instruções Java abaixo: int cont1 = 3; int cont2 = 2; int cont3 = 1; cont1 += cont3++; cont1 -= --cont2; cont3 = cont2++; Após a

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 5. Tratamento de Exceções Introdução e conceitos Capturando exceção usando

Leia mais

Programação Orientada a Objetos em java. Polimorfismo

Programação Orientada a Objetos em java. Polimorfismo Programação Orientada a Objetos em java Polimorfismo Polimorfismo Uma característica muito importante em sistemas orientados a objetos Termo proveniente do grego, e significa muitas formas Em POO, significa

Leia mais

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP 1) Introdução Programação Orientada a Objetos é um paradigma de programação bastante antigo. Entretanto somente nos últimos anos foi aceito realmente

Leia mais

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição Lista de Contas Lista de Contas: Assinatura null Quais são os métodos necessários? class ListaDeContas { void inserir (Conta c) { void retirar (Conta c) { Conta procurar (String num) { Listas de Contas:

Leia mais

Lidando de Forma Eficiente com Validações Locais de Objetos

Lidando de Forma Eficiente com Validações Locais de Objetos Lidando de Forma Eficiente com Validações Locais de Objetos Aprenda a construir um mini-framework para validar objetos locais sem afetar a complexidade do código. Autor Paulo César M. N. A. Coutinho (pcmnac@gmail.com):

Leia mais

EMENTA DO CURSO. Tópicos:

EMENTA DO CURSO. Tópicos: EMENTA DO CURSO O Curso Preparatório para a Certificação Oracle Certified Professional, Java SE 6 Programmer (Java Básico) será dividido em 2 módulos e deverá ter os seguintes objetivos e conter os seguintes

Leia mais

OUTROS PARADIGMAS: PROGRAMAÇÃO

OUTROS PARADIGMAS: PROGRAMAÇÃO OUTROS PARADIGMAS: PROGRAMAÇÃO CONCORRENTE, MODELO DE DADOS RELACIONAL (SQL), REDES DE PETRI, ORIENTAÇÃO A ASPECTOS Luenne Nailam e Uendson Teles PROGRAMAÇÃO CONCORRENTE PROGRAMA O que é um Programa? O

Leia mais

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes http://www.profbrunogomes.com.br/

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes http://www.profbrunogomes.com.br/ Aula 09 Introdução à Java Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes http://www.profbrunogomes.com.br/ Agenda da Aula Java: Sintaxe; Tipos de Dados; Variáveis; Impressão de Dados.

Leia mais

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this. Aula 2 Objetivos Encapsulamento na linguagem Java; Utilizando a referência this. Encapsulamento, data hiding é um conceito bastante importante em orientação a objetos. É utilizado para restringir o acesso

Leia mais

Programação Java. com Ênfase em Orientação a Objetos. Douglas Rocha Mendes. Novatec

Programação Java. com Ênfase em Orientação a Objetos. Douglas Rocha Mendes. Novatec Programação Java com Ênfase em Orientação a Objetos Douglas Rocha Mendes Novatec Sumário Agradecimentos... 13 Sobre o autor... 14 Prefácio... 15 Capítulo 1 Introdução à linguagem Java... 16 1.1 Histórico

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Programação Orientada a Aspectos com

Programação Orientada a Aspectos com Programação Orientada a Aspectos com AspectJ Autor: O curso segue a estrutura do livro AspectJ in Action, de Ramnivas Laddad, que foi a bibliografia recomendada. AULA TÓPICO Módulo 1 - Revisão de orientação

Leia mais

AspectJ em 20 minutos

AspectJ em 20 minutos AspectJ em 20 minutos Diogo Vinícius Winck (diogo.winck@gmail.com) Vicente Goetten (goetten@gmail.com) 1. Introdução A Orientação a Objetos está consolidada. Entretanto, nem todas as promessas que este

Leia mais

Prototype, um Design Patterns de Criação

Prototype, um Design Patterns de Criação Prototype, um Design Patterns de Criação José Anízio Pantoja Maia Este artigo tem como finalidade compreender o funcionamento do padrão de projeto prototype, serão abordados os participantes que compõe

Leia mais

Curso Java Starter. www.t2ti.com 1

Curso Java Starter. www.t2ti.com 1 1 Apresentação O Curso Java Starter foi projetado com o objetivo de ajudar àquelas pessoas que têm uma base de lógica de programação e desejam entrar no mercado de trabalho sabendo Java, A estrutura do

Leia mais

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Curso Adonai QUESTÕES Disciplina Linguagem JAVA 1) Qual será o valor da string c, caso o programa rode com a seguinte linha de comando? > java Teste um dois tres public class Teste { public static void main(string[] args) { String a = args[0]; String

Leia mais

Aula 5. Carlos Eduardo de Carvalho Dantas (carloseduardocarvalhodantas@gmail.com)

Aula 5. Carlos Eduardo de Carvalho Dantas (carloseduardocarvalhodantas@gmail.com) Persistência com JDBC e JPA Aula 5 Carlos Eduardo de Carvalho Dantas (carloseduardocarvalhodantas@gmail.com) Quem é sábio procura aprender, mas os tolos estão satisfeitos com a sua própria ignorância..

Leia mais

Java 2 Standard Edition Como criar classes e objetos

Java 2 Standard Edition Como criar classes e objetos Java 2 Standard Edition Como criar classes e objetos Helder da Rocha www.argonavis.com.br 1 Assuntos abordados Este módulo explora detalhes da construção de classes e objetos Construtores Implicações da

Leia mais

Escola Superior de Gestão e Tecnologia. Tratamento de Exceções

Escola Superior de Gestão e Tecnologia. Tratamento de Exceções Escola Superior de Gestão e Tecnologia Tratamento de Exceções Objetivos Compreender como o tratamento de exceção e de erro funciona. Como u4lizar try, throw e catch para detectar, indicar e tratar exceções,

Leia mais

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC .business @BusinessController TurmaBC TurmaBC TurmaBC

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC .business @BusinessController TurmaBC TurmaBC TurmaBC Módulo 5 No módulo anterior adaptamos nosso projeto para persistir as informações no banco de dados utilizando as facilidades da extensão demoiselle-jpa. Experimentamos o controle transacional do Framework

Leia mais

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes Modelagem e Implementação de Aquário de Peixes- por Jorge Fernandes - Página 1 Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes Jorge Fernandes Natal, Agosto de

Leia mais

Reuso com Herança a e Composiçã

Reuso com Herança a e Composiçã Java 2 Standard Edition Reuso com Herança a e Composiçã ção Helder da Rocha www.argonavis.com.br 1 Como aumentar as chances de reuso Separar as partes que podem mudar das partes que não mudam. Exemplo:

Leia mais

Erros, exceçõ. ções e asserçõ

Erros, exceçõ. ções e asserçõ Java 2 Standard Edition Erros, exceçõ ções e asserçõ ções Helder da Rocha www.argonavis.com.br 1 Controle de erros com Exceções Exceções são Erros de tempo de execução Objetos criados a partir de classes

Leia mais

PHP Profissional. Alexandre Altair de Melo Mauricio G. F. Nascimento

PHP Profissional. Alexandre Altair de Melo Mauricio G. F. Nascimento PHP Profissional APRENDA A DESENVOLVER SISTEMAS PROFISSIONAIS ORIENTADOS A OBJETOS COM PADRÕES DE PROJETO Alexandre Altair de Melo Mauricio G. F. Nascimento Novatec Sumário Agradecimentos...13 Sobre os

Leia mais

Sobre o Professor Dr. Sylvio Barbon Junior

Sobre o Professor Dr. Sylvio Barbon Junior 5COP088 Laboratório de Programação Aula 1 Java Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr barbon@uel.br 1 Sobre o Professor Dr. Sylvio Barbon Junior Formação: Ciência e Engenharia da Computação (2005

Leia mais

UML Unified Modeling Language

UML Unified Modeling Language UML Unified Modeling Language Linguagem de Modelagem Unificada A linguagem UML UML (Unified Modeling Language) Linguagem de Modelagem Unificada É uma linguagem para especificação, É uma linguagem para

Leia mais

Prof. Marcelo Heitor Teixeira marceloheitor.com. Java Exceções e Finalizações

Prof. Marcelo Heitor Teixeira marceloheitor.com. Java Exceções e Finalizações Prof. Marcelo Heitor Teixeira marceloheitor.com Java Exceções e Finalizações # Exceções em Java # Hierarquia de Classes # Lançando, Declarando e Capturando # Classes de Exceções Personalizadas # Entendendo

Leia mais

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery Agenda Regras paravariáveis Identificadores Válidos Convenção de Nomenclatura Palavras-chaves em Java Tipos de Variáveis em

Leia mais

Módulo 07 Características Avançadas de Classes

Módulo 07 Características Avançadas de Classes Módulo 07 Características Avançadas de Classes Última Atualização: 15/06/2010 1 Objetivos Descrever variáveis, métodos e iniciadores static Descrever a semântica do modificador final em classes, métodos

Leia mais

Classes de Entidades Persistentes JDB

Classes de Entidades Persistentes JDB Classes de Entidades Persistentes JDB Brasil, Natal-RN, 07 de setembro de 2011 Welbson Siqueira Costa www.jdbframework.com Nota de Retificação: em 11/12/2011 a Listagem 3 desse tutorial sofreu uma pequena

Leia mais

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS João Gabriel Ganem Barbosa Sumário Motivação História Linha do Tempo Divisão Conceitos Paradigmas Geração Tipos de Dados Operadores Estruturada vs

Leia mais

Padrão Arquitetura em Camadas

Padrão Arquitetura em Camadas Padrão Arquitetura em Camadas Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Definição Estimula a organização

Leia mais

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding Introdução à Programação Interface, Polimorfismo e Dynamic Binding Interface Programador Java PLENO Possuir sólida experiência em programação Desenvolvimento na linguagem JAVA Webservice, Struts ou JSF(desejável)

Leia mais

FBV - Linguagem de Programação II. Um pouco sobre Java

FBV - Linguagem de Programação II. Um pouco sobre Java FBV - Linguagem de Programação II Um pouco sobre Java História 1992: um grupo de engenheiros da Sun Microsystems desenvolve uma linguagem para pequenos dispositivos, batizada de Oak Desenvolvida com base

Leia mais

ARQUITETURA SISGRAD. Manual de Utilização. Versão: 2.0. Criação: 05 de julho de 2007 Autor: André Penteado

ARQUITETURA SISGRAD. Manual de Utilização. Versão: 2.0. Criação: 05 de julho de 2007 Autor: André Penteado ARQUITETURA SISGRAD Manual de Utilização Versão: 2.0 Criação: 05 de julho de 2007 Autor: André Penteado Última Revisão: 09 de outubro de 2009 Autor: Alessandro Moraes Controle Acadêmico - Arquitetura SISGRAD

Leia mais

JPA: Persistência padronizada em Java

JPA: Persistência padronizada em Java JPA: Persistência padronizada em Java FLÁVIO HENRIQUE CURTE Bacharel em Engenharia de Computação flaviocurte.java@gmail.com Programação Orientada a Objetos X Banco de Dados Relacionais = Paradigmas diferentes

Leia mais

Capítulo 13. Encapsulamento. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Capítulo 13. Encapsulamento. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra Capítulo 13 Encapsulamento Objetivos do Capítulo Indicar a importância do mecanismo de encapsulamento no contexto do desenvolvimento de software utilizando a programação orientada a objetos. Apresentar

Leia mais

Criando documentação com javadoc

Criando documentação com javadoc H Criando documentação com javadoc H.1 Introdução Neste apêndice, fornecemos uma introdução a javadoc ferramenta utilizada para criar arquivos HTML que documentam o código Java. Essa ferramenta é usada

Leia mais

AOP - Livro de Receitas

AOP - Livro de Receitas AOP - Livro de Receitas Michel de Montalvão Guedes Abstract Este tutorial visa demonstrar como a AOP (Orientação a Aspectos) pode auxiliar-nos a resolver problemas de complexidade médio-elevada de forma

Leia mais

A Linguagem Java. Alberto Costa Neto DComp - UFS

A Linguagem Java. Alberto Costa Neto DComp - UFS A Linguagem Java Alberto Costa Neto DComp - UFS 1 Roteiro Comentários Variáveis Tipos Primitivos de Dados Casting Comandos de Entrada e Saída Operadores Constantes 2 Comentários /** Classe para impressão

Leia mais

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc. Sintaxe Geral Tipos de Dados Comentários Comentários: De linha: // comentário 1 // comentário 2 De bloco: /* linha 1 linha 2 linha n */ De documentação: /** linha1 * linha2 */ Programa Exemplo: ExemploComentario.java

Leia mais

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos. import java.util.scanner; class Data... class Compromisso... public class Agenda private Compromisso[] compromissos; private Compromisso[] realoquecompromissos (Compromisso[] vetor, int tamanhodesejado)

Leia mais

Prof. Esp. Adriano Carvalho

Prof. Esp. Adriano Carvalho Prof. Esp. Adriano Carvalho Um arquivo contendo uma sequência de comandos em uma linguagem de programação especifica Esses comandosrespeitam regras de como serem escritos e quais são as palavras que podem

Leia mais

Java Como Programar, 8/E

Java Como Programar, 8/E Capítulo 2 Introdução aos aplicativos Java Java Como Programar, 8/E (C) 2010 Pearson Education, Inc. Todos os 2.1 Introdução Programação de aplicativo Java. Utilize as ferramentas do JDK para compilar

Leia mais

(UFF) JDBC (I) TEPIS II

(UFF) JDBC (I) TEPIS II Aula 20: JDBC (I) Diego Passos Universidade Federal Fluminense Técnicas de Projeto e Implementação de Sistemas II Diego Passos (UFF) JDBC (I) TEPIS II 1 / 33 JDBC: Introdução Especificação que provê acesso

Leia mais

Módulo 06 Desenho de Classes

Módulo 06 Desenho de Classes Módulo 06 Desenho de Classes Última Atualização: 13/06/2010 1 Objetivos Definir os conceitos de herança, polimorfismo, sobrecarga (overloading), sobreescrita(overriding) e invocação virtual de métodos.

Leia mais

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB) Uma Introdução à Arquitetura Francisco C. R. Reverbel 1 Copyright 1998-2006 Francisco Reverbel O Object Request Broker (ORB) Via de comunicação entre objetos (object bus), na arquitetura do OMG Definido

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Introdução ao Paradigma OO

Leia mais

JavaScript 2.0X 1.0 3.0X 1.1 4.0 4.05 1.2 4.06 4.61 1.3 5.0 1.4 6.0 1.5

JavaScript 2.0X 1.0 3.0X 1.1 4.0 4.05 1.2 4.06 4.61 1.3 5.0 1.4 6.0 1.5 JavaScript Diego R. Frank, Leonardo Seibt FIT Faculdades de Informática de Taquara Fundação Educacional Encosta Inferior do Nordeste Av. Oscar Martins Rangel, 4500 Taquara RS Brasil difrank@terra.com.br,

Leia mais

Programação Orientada a Aspectos

Programação Orientada a Aspectos Programação Orientada a Aspectos Bibliotecas Dinâmicas Motivação class MyClass { public MyClass() {......... public void method1 () public... void method1 () {...... public int method2() {... public...

Leia mais

MedEl: Uma solução de E-Learning utilizando tecnologia Microsoft ASP.NET

MedEl: Uma solução de E-Learning utilizando tecnologia Microsoft ASP.NET MedEl: Uma solução de E-Learning utilizando tecnologia Microsoft ASP.NET Átila Correia Cunha 1, 2, Glaucon Henrique Mauricio Maia 1, 2, Waner Ferreira Tavares 1, 2, Jorge Bergson¹, Rui Gomes Patrício 3

Leia mais

UNIVERSIDADE FEDERAL DO PARANÁ

UNIVERSIDADE FEDERAL DO PARANÁ CURSO: Ciência da Computação DATA: / / 2013 PERÍODO: 4 o. PROFESSOR: Andrey DISCIPLINA: Técnicas Alternativas de Programação AULA: 02 APRESENTAÇÃO: Apresentação; conceitos básicos da linguagem java; estrutura

Leia mais

Curso Java Starter. www.t2ti.com 1

Curso Java Starter. www.t2ti.com 1 1 2 Apresentação O Curso Java Starter foi projetado com o objetivo de ajudar àquelas pessoas que têm uma base de lógica de programação e desejam entrar no mercado de trabalho sabendo Java, A estrutura

Leia mais

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA:

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA: INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA: PROGRAMAÇÃO ORIENTADA A OBJETOS PROFESSOR: REINALDO GOMES ASSUNTO: REVISÃO DA INTRODUÇÃO A ORIENTAÇÃO

Leia mais

DEFINIÇÃO DE MÉTODOS

DEFINIÇÃO DE MÉTODOS Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 2 DEFINIÇÃO DE MÉTODOS Todo o processamento que um programa Java faz está definido dentro dos

Leia mais

3 Classes e instanciação de objectos (em Java)

3 Classes e instanciação de objectos (em Java) 3 Classes e instanciação de objectos (em Java) Suponhamos que queremos criar uma classe que especifique a estrutura e o comportamento de objectos do tipo Contador. As instâncias da classe Contador devem

Leia mais

Desenvolvendo Aplicações Web com NetBeans

Desenvolvendo Aplicações Web com NetBeans Desenvolvendo Aplicações Web com NetBeans Aula 3 Cap. 4 Trabalhando com Banco de Dados Prof.: Marcelo Ferreira Ortega Introdução O trabalho com banco de dados utilizando o NetBeans se desenvolveu ao longo

Leia mais

ELAINE DA SILVA MONTEIRO. Implementação de um Aplicativo Utilizando AODM, Java e AspectJ

ELAINE DA SILVA MONTEIRO. Implementação de um Aplicativo Utilizando AODM, Java e AspectJ ELAINE DA SILVA MONTEIRO Implementação de um Aplicativo Utilizando AODM, Java e AspectJ Palmas TO 2004 ii ELAINE DA SILVA MONTEIRO Implementação de um Aplicativo Utilizando AODM, Java e AspectJ Monografia

Leia mais

OOP - Java. Artur Duque Rossi Mestrado em Modelagem Computacional Universidade Federal de Juiz de Fora

OOP - Java. Artur Duque Rossi Mestrado em Modelagem Computacional Universidade Federal de Juiz de Fora OOP - Java Artur Duque Rossi Mestrado em Modelagem Computacional Universidade Federal de Juiz de Fora 1 Sumário Java Aviso! História do Java Programação Orientada à Objetos Os quatro pilares da OOP Abstração

Leia mais

PROJETO PEDAGÓGICO DE CURSOS

PROJETO PEDAGÓGICO DE CURSOS 1 de 6 PROJETO PEDAGÓGICO DE CURSOS BURITREINAMENTOS MANAUS-AM MARÇO / 2015 2 de 6 PACOTES DE TREINAMENTOS BURITECH A Buritech desenvolveu um grupo de pacotes de treinamentos, aqui chamados de BuriPacks,

Leia mais

Programação Na Web. Linguagem Java Parte II. break com o nome do bloco. Sintaxe. Nome do bloco. Termina o bloco. António Gonçalves ...

Programação Na Web. Linguagem Java Parte II. break com o nome do bloco. Sintaxe. Nome do bloco. Termina o bloco. António Gonçalves ... Programação Na Web Linguagem Java Parte II Sintaxe António Gonçalves break com o nome do bloco Nome do bloco Termina o bloco class class Matrix Matrix { private private int[][] int[][] mat; mat; public

Leia mais

Exercícios de Revisão Java Básico

Exercícios de Revisão Java Básico Exercícios de Revisão Java Básico (i) Programação básica (estruturada) 1) Faça um programa para calcular o valor das seguintes expressões: S 1 = 1 1 3 2 5 3 7 99... 4 50 S 2 = 21 50 22 49 23 48...250 1

Leia mais

15-09-2009. Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

15-09-2009. Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido PARTE III: Java e OO - detalhes Membros de classe e instâncias Pacotes Visibilidade Classes aninhadas Membros de classe e de instância De classe Static Método não necessita de objeto para ser chamado.

Leia mais

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp Java Básico Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp Classes Abstratas construção de uma classe abstrata construção de classes derivadas Classes e Herança Uma classe define

Leia mais

CURSO DESENVOLVEDOR JAVA WEB E FLEX Setembro de 2010 à Janeiro de 2011

CURSO DESENVOLVEDOR JAVA WEB E FLEX Setembro de 2010 à Janeiro de 2011 CURSO DESENVOLVEDOR JAVA WEB E FLEX Setembro de 2010 à Janeiro de 2011 O curso foi especialmente planejado para os profissionais que desejam trabalhar com desenvolvimento de sistemas seguindo o paradigma

Leia mais

ruirossi@ruirossi.pro.br

ruirossi@ruirossi.pro.br Persistência Com JPA & Hibernate Rui Rossi dos Santos ruirossi@ruirossi.pro.br Mediador: Rui Rossi dos Santos Slide 1 Mapeamento Objeto-Relacional Contexto: Linguagem de programação orientada a objetos

Leia mais

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais Curso de Java Orientação a objetos e a Linguagem JAVA Roteiro A linguagem Java e a máquina virtual Objetos e Classes Encapsulamento, Herança e Polimorfismo Primeiro Exemplo A Linguagem JAVA Principais

Leia mais

Orientação a Objetos em Java. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Orientação a Objetos em Java. Leonardo Gresta Paulino Murta leomurta@ic.uff.br Orientação a Objetos em Java Leonardo Gresta Paulino Murta leomurta@ic.uff.br Agenda Introdução; Orientação a Objetos; Orientação a Objetos em Java; Leonardo Murta Orientação a Objetos em Java 2 Agosto/2007

Leia mais

Aplicabilidade: visão geral

Aplicabilidade: visão geral CURSO BÁSICO SAXES 2 Aplicabilidade: visão geral BI Comércio Indústria nf-e Serviços Software house Enterprise Business Bus Banco financeiro Instituição Sindicato ERP html Casos 3 6 Customização: importação

Leia mais

3. PARADIGMA ORIENTADO A OBJETOS

3. PARADIGMA ORIENTADO A OBJETOS Paradigmas de Linguagens I 1 3. PARADIGMA ORIENTADO A OBJETOS Este paradigma é o que mais reflete os problemas atuais. Linguagens orientada a objetos (OO) são projetadas para implementar diretamente a

Leia mais

Separaçã. ção Multi-Dimensional de Interesses

Separaçã. ção Multi-Dimensional de Interesses OD 2002 Uma nova abordagem para modelagem de requisitos Separaçã ção Multi-Dimensional de Interesses Helder da Rocha (helder@acm.org) argonavis.com.br Objetivos 1. Discutir as limitações existentes no

Leia mais

Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser

Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser A1Criando um módulo de negócio Capítulo 27 Aplicação dividida em módulos - Introdução Como já foi muito bem detalhado no Capítulo IV, o jcompany Developer Suite pode ser compreendido como uma solução de

Leia mais

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código } Este documento tem o objetivo de demonstrar os comandos e sintaxes básicas da linguagem Java. 1. Alguns passos para criar programas em Java As primeiras coisas que devem ser abordadas para começar a desenvolver

Leia mais

Subtipos e Subclasses

Subtipos e Subclasses Subtipos e Subclasses Aula 15 do curso 6.170 15 de outubro de 2001 Sumário 1Subtipos 32 2 Exemplo: Bicicletas 33 3 Exemplo: Quadrado e retângulo 37 4 Princípio de substituição 38 5 Subclasses e subtipos

Leia mais

Hibernate. Mapeamento O/R Marcio Aguiar Ribeiro aguiar.marcio@gmail.com

Hibernate. Mapeamento O/R Marcio Aguiar Ribeiro aguiar.marcio@gmail.com Hibernate Mapeamento O/R Marcio Aguiar Ribeiro aguiar.marcio@gmail.com Hibernate O que é? Ferramenta para mapeamento O/R em Java Uma das mais difundidas Transparência Independência quanto ao tipo de base

Leia mais

Programação Orientada a Objetos em Java. Herança

Programação Orientada a Objetos em Java. Herança Universidade Federal do Amazonas Departamento de Ciência da Computação IEC481 Projeto de Programas Programação Orientada a Objetos em Java Herança Professor: César Melo Slides baseados em materiais preparados

Leia mais

CURSO DESENVOLVEDOR JAVA Edição 2009

CURSO DESENVOLVEDOR JAVA Edição 2009 CURSO DESENVOLVEDOR JAVA Edição 2009 O curso foi especialmente planejado para os profissionais que desejam trabalhar com desenvolvimento de sistemas seguindo o paradigma Orientado a Objetos e com o uso

Leia mais

1.6. Tratamento de Exceções

1.6. Tratamento de Exceções Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER

Leia mais

Desmistificando o Hibernate Envers em 10 passos

Desmistificando o Hibernate Envers em 10 passos _envers Desmistificando o Hibernate Envers em 10 passos Auditoria de dados? Registro de Log? Trilha de auditoria? Descubra como é fácil, através do Hibernate Envers, rastrear o histórico de mudanças e

Leia mais

Introdução ao C# . Visão geral do.net Framework

Introdução ao C# . Visão geral do.net Framework Introdução ao C# Microsoft.NET (comumente conhecido por.net Framework - em inglês: dotnet) é uma iniciativa da empresa Microsoft, que visa uma plataforma única para desenvolvimento e execução de sistemas

Leia mais

SUMÁRIO CAPÍTULO 1 INTRODUÇÃO AO JAVA... 1

SUMÁRIO CAPÍTULO 1 INTRODUÇÃO AO JAVA... 1 SUMÁRIO CAPÍTULO 1 INTRODUÇÃO AO JAVA... 1 A Origem... 2 O Caminho Para a Aprendizagem... 4 Java Como Plataforma... 6 Finalidade... 9 Características... 11 Perspectivas... 13 Exercícios... 14 CAPÍTULO

Leia mais

Programação Orientada a Objetos em Java

Programação Orientada a Objetos em Java Programação Orientada a Objetos em Java Rone Ilídio da Silva Universidade Federal de São João del-rei Campus Alto Paraopeba 1:14 1 Objetivo Apresentar os principais conceitos de Programção Orientada a

Leia mais

Programação com Objectos. Processamento de Dados I. 5. Excepções

Programação com Objectos. Processamento de Dados I. 5. Excepções Programação com Objectos Processamento de Dados I 5. Excepções 1 O que é uma excepção? Tratamento de excepções: Try e Catch Lançamento de excepções: Throw e Throws Classes de excepção Programação com Objectos

Leia mais

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33 PPROG Paradigmas da Programação Linguagem JAVA Interfaces (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33 PPROG Motivação para usar Interfaces Definição de Interface

Leia mais