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() : call(@transacional * 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() : call(@metodorecuperalista * *.*(..)) ; 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() : call(@transacional * 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.

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

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

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

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

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

Implementando uma Classe e Criando Objetos a partir dela

Implementando uma Classe e Criando Objetos a partir dela Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 04 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 2 Prof. Cristóvão Cunha Implementando uma Classe

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

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

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

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

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 1. Conceitos de Orientação a Objetos Introdução O paradigma da POO Classes

Leia mais

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 1 Prof. Cristóvão Cunha Objetivos de aprendizagem

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

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

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

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

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

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 02 Análise e Projeto OO Edirlei Soares de Lima Análise A análise modela o problema e consiste das atividades necessárias para entender

Leia mais

Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate

Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate Uma Abordagem sobre Mapeamento Objeto Relacional com Hibernate Luis Gustavo Zandarim Soares 1, Késsia Rita da Costa Marchi 1 1 Universidade Paranaense (Unipar) Paraná PR Brasil luisgustavo@live.co.uk,

Leia mais

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo. Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto

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

Orientação a Objetos

Orientação a Objetos Orientação a Objetos 1. Sobrecarga (Overloading) Os clientes dos bancos costumam consultar periodicamente informações relativas às suas contas. Geralmente, essas informações são obtidas através de extratos.

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

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

2 Diagrama de Caso de Uso

2 Diagrama de Caso de Uso Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Caso de Uso (Use Case) Autoria:Aristófanes Corrêa

Leia mais

Engenharia de Software III

Engenharia de Software III Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf (flavio.ceci@unisul.br) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,

Leia mais

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo Universidade Federal do Espírito Santo Centro Tecnológico Departamento de Informática Disciplina: INF 02810 Prof.: (monalessa@inf.ufes.br) Conteúdo 1. Introdução 2. Processo de Software 3. Gerência de

Leia mais

Especificação do 3º Trabalho

Especificação do 3º Trabalho Especificação do 3º Trabalho I. Introdução O objetivo deste trabalho é abordar a prática da programação orientada a objetos usando a linguagem Java envolvendo os conceitos de classe, objeto, associação,

Leia mais

5 Framework para coordenação e mediação de Web Services para ambientes de aprendizado à distância

5 Framework para coordenação e mediação de Web Services para ambientes de aprendizado à distância 5 Framework para coordenação e mediação de Web Services para ambientes de aprendizado à distância O capítulo anterior apresentou uma discussão sobre a inclusão dos chamados learning services no processo

Leia mais

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP AULA 4 VISÃO BÁSICA DE CLASSES EM PHP Antes de mais nada, vamos conhecer alguns conceitos, que serão importantes para o entendimento mais efetivos dos assuntos que trataremos durante a leitura desta apostila.

Leia mais

NetBeans. Conhecendo um pouco da IDE

NetBeans. Conhecendo um pouco da IDE NetBeans Conhecendo um pouco da IDE Professor: Edwar Saliba Júnior Sumário Apresentação:...1 Criando Um Novo Projeto de Software:...1 Depurando Um Código-fonte:...4 Entendendo o Código-fonte:...7 Dica

Leia mais

UML Aspectos de projetos em Diagramas de classes

UML Aspectos de projetos em Diagramas de classes UML Aspectos de projetos em Diagramas de classes Após ser definido o contexto da aplicação a ser gerada. Devemos pensar em detalhar o Diagrama de Classes com informações visando uma implementação Orientada

Leia mais

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano Programação Servidor para Sistemas Web 1 Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano Objetivo: Apresentar a teoria por trás dos padrões na construção de aplicações Web. INTRODUÇÃO Nas aulas anteriores

Leia mais

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this. Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.x = x; this.y = y; public String tostring(){ return "(" + x + "," +

Leia mais

Engenharia de Requisitos Estudo de Caso

Engenharia de Requisitos Estudo de Caso Engenharia de Requisitos Estudo de Caso Auxiliadora Freire Fonte: Engenharia de Software 8º Edição / Ian Sommerville 2007 Slide 1 Engenharia de Requisitos Exemplo 1 Reserva de Hotel 1. INTRODUÇÃO Este

Leia mais

CONVENÇÃO DE CÓDIGO JAVA

CONVENÇÃO DE CÓDIGO JAVA CONVENÇÃO DE CÓDIGO JAVA Eligiane Ceron - Abril de 2012 Versão 1.0 Conteúdo Considerações iniciais... 2 Introdução... 2 Extensão de arquivos... 2 Arquivos de código Java... 2 Comentários iniciais... 2

Leia mais

Tópicos em Engenharia de Computação

Tópicos em Engenharia de Computação Tópicos em Engenharia de Computação Introdução / Revisão UML e POO (JAVA) Prof. Ivan Prof. Zagari UML Linguagem Unificada. Não é metodologia, processo ou método. Versão atual 2.0 3 categorias de Diagramas

Leia mais

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS Campus Cachoeiro de Itapemirim Curso Técnico em Informática Disciplina: Análise e Projeto de Sistemas Professor: Rafael Vargas Mesquita Este exercício deve ser manuscrito e entregue na próxima aula; Valor

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

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

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

Padrões de Projeto. Singleton

Padrões de Projeto. Singleton Padrões de Projeto Padrões de Criação Singleton Singleton Assegura que uma classe tenha apenas uma instância e provê um ponto de acesso global a ela 2 Livro Texto: Design Pattern - Elements 1 Motivação

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 Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc. Classes Abstratas Técnico em Informática, M.Sc. Classes Abstratas 2 Classes Abstratas Abstração Devemos considerar as qualidades e comportamentos independentes dos objetos a que pertencem, isolamos seus

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 a Java. Hélder Nunes

Introdução a Java. Hélder Nunes Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais

Leia mais

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Perola André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Prevayler é a implementação em Java do conceito de Prevalência. É um framework que prega uma JVM invulnerável

Leia mais

Projeto de Software Orientado a Objeto

Projeto de Software Orientado a Objeto Projeto de Software Orientado a Objeto Ciclo de Vida de Produto de Software (PLC) Analisando um problema e modelando uma solução Prof. Gilberto B. Oliveira Estágios do Ciclo de Vida de Produto de Software

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

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES Alexandre Egleilton Araújo, Jaime Willian Dias Universidade Paranaense (Unipar) Paranavaí PR Brasil araujo.ale01@gmail.com, jaime@unipar.br Resumo.

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

Planejando o aplicativo

Planejando o aplicativo Um aplicativo do Visual FoxPro geralmente inclui um ou mais bancos de dados, um programa principal que configura o ambiente de sistema do aplicativo, além de uma interface com os usuários composta por

Leia mais

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE Renan Leme Nazário, Ricardo Rufino Universidade Paranaense (Unipar) Paranavaí PR - Brasil renazariorln@gmail.com, ricardo@unipar.br Resumo. Este artigo

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

4 O Workflow e a Máquina de Regras

4 O Workflow e a Máquina de Regras 4 O Workflow e a Máquina de Regras O objetivo do workflow e da máquina de regras é definir um conjunto de passos e regras configuráveis. Ao longo de sua execução, um usuário consegue simplificar o seu

Leia mais

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:

Leia mais

LINGUAGEM DE BANCO DE DADOS

LINGUAGEM DE BANCO DE DADOS LINGUAGEM DE BANCO DE DADOS Gabriela Trevisan Bacharel em Sistemas de Informação Universidade Federal do Rio Grande Pós-Graduanda Formação Pedagógica de Professores (FAQI) Conceito de BD Um banco de dados

Leia mais

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo; um objeto; é definido; Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo; class ClasseBase{ é instanciado; $objetobase = new ClasseBase; Caso queira,

Leia mais

TÉCNICAS DE PROGRAMAÇÃO

TÉCNICAS DE PROGRAMAÇÃO TÉCNICAS DE PROGRAMAÇÃO (Adaptado do texto do prof. Adair Santa Catarina) ALGORITMOS COM QUALIDADE MÁXIMAS DE PROGRAMAÇÃO 1) Algoritmos devem ser feitos para serem lidos por seres humanos: Tenha em mente

Leia mais

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS ATRIBUTOS PRIVADOS Podemos usar o modificador private, para tornar um atributo privado, obtendo um controle centralizado Definimos métodos para implementar todas as lógicas que utilizam ou modificam o

Leia mais

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação SOFT DISCIPLINA: Engenharia de Software AULA NÚMERO: 10 DATA: / / PROFESSOR: Andrey APRESENTAÇÃO O objetivo desta aula é apresentar e discutir os conceitos de coesão e acoplamento. DESENVOLVIMENTO Projetar

Leia mais

Projeto de Arquitetura

Projeto de Arquitetura Introdução Projeto de Arquitetura (Cap 11 - Sommerville) UNIVERSIDADE FEDERAL DE ALAGOAS Curso de Ciência da Computação Engenharia de Software I Prof. Rômulo Nunes de Oliveira Até agora, estudamos: Os

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

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

Programação Orientada a Objetos Herança Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Programação Orientada a Objetos Herança Técnico em Informática. Prof. Marcos André Pisching, M.Sc. Herança Técnico em Informática, M.Sc. Herança 2 Herança Reutilização de código Exemplo Banco: Um banco oferece diversos serviços que podem ser contratados individualmente pelos clientes. Quando um serviço

Leia mais

PROGRAMANDO EM C# ORIENTADO A OBJETOS

PROGRAMANDO EM C# ORIENTADO A OBJETOS PROGRAMANDO EM C# ORIENTADO A OBJETOS AGENDA MÓDULO 2 Domínio e Aplicação Objetos, Atributos e Métodos Classes em C# Criando Objetos em C# Referências em C# Manipulando Atributos Valores Padrão Exercícios

Leia mais

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO. PROJETO FINAL I e II PLANO DE TRABALHO <NOME DO TRABALHO> <Nome do Aluno> <Nome do Orientador>

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO. PROJETO FINAL I e II PLANO DE TRABALHO <NOME DO TRABALHO> <Nome do Aluno> <Nome do Orientador> FACULDADE DE ENGENHARIA DE COMPUTAÇÃO PROJETO FINAL I e II PLANO DE TRABALHO O Trabalho de Conclusão de Curso (TCC) a ser desenvolvido

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

5 Mecanismo de seleção de componentes

5 Mecanismo de seleção de componentes Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações

Leia mais

Persistência de Dados

Persistência de Dados Persistência de s Universidade do Estado de Santa Catarina - Udesc Centro de Ciências Tecnológicas - CCT Departamento de Ciência da Computação Tecnologia de Sistemas de Informação Estrutura de s II - DAD

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

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 10 Persistência de Dados

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 Ambiente de Desenvolvimento Orientação a Objetos É uma técnica de desenvolvimento de softwares que consiste em representar os elementos do mundo

Leia mais

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO

INTRODUÇÃO 12. DOCUMENTAÇÃO INTRODUÇÃO INTRODUÇÃO INTRODUÇÃO 12. DOCUMENTAÇÃO Na plataforma Java SE 7, há cerca de 4000 classes e interfaces disponíveis para utilizarmos em nossas aplicações Podemos visualizar a documentação dessas classes e interfaces

Leia mais

DESENVOLVIMENTO DE SOFTWARE. Introdução ao Visual Studio VB.Net. Programação Estruturada. Prof. Celso Candido ADS / REDES / ENGENHARIA

DESENVOLVIMENTO DE SOFTWARE. Introdução ao Visual Studio VB.Net. Programação Estruturada. Prof. Celso Candido ADS / REDES / ENGENHARIA Introdução ao Visual Studio VB.Net Programação Estruturada 1 Nesse momento inicial não iremos programar em VB.Net, usando o Visual Studio, mas conhecer alguns comandos e variáveis usadas em uma linguagem

Leia mais

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto Conceitos de Linguagens de Roteiro: Apresentação do plano de ensino; Apresentação do plano de

Leia mais

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos Programação Estruturada e Orientada a Objetos Fundamentos Orientação a Objetos 2013 O que veremos hoje? Introdução aos fundamentos de Orientação a Objetos Transparências baseadas no material do Prof. Jailton

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

Referências internas são os artefatos usados para ajudar na elaboração do PT tais como:

Referências internas são os artefatos usados para ajudar na elaboração do PT tais como: Plano de Teste (resumo do documento) I Introdução Identificador do Plano de Teste Esse campo deve especificar um identificador único para reconhecimento do Plano de Teste. Pode ser inclusive um código

Leia mais

Feature-Driven Development

Feature-Driven Development FDD Feature-Driven Development Descrição dos Processos Requisitos Concepção e Planejamento Mais forma que conteúdo Desenvolver um Modelo Abrangente Construir a Lista de Features Planejar por

Leia mais

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd.

Para construção dos modelos físicos, será estudado o modelo Relacional como originalmente proposto por Codd. Apresentação Este curso tem como objetivo, oferecer uma noção geral sobre a construção de sistemas de banco de dados. Para isto, é necessário estudar modelos para a construção de projetos lógicos de bancos

Leia mais

Conceitos de Banco de Dados

Conceitos de Banco de Dados Conceitos de Banco de Dados Autor: Luiz Antonio Junior 1 INTRODUÇÃO Objetivos Introduzir conceitos básicos de Modelo de dados Introduzir conceitos básicos de Banco de dados Capacitar o aluno a construir

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

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS) Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS) Definição Geral: Disciplina de Compiladores Prof. Jorge Bidarra (UNIOESTE) A especificação de requisitos tem como objetivo

Leia mais

Programação Orientada a Objeto

Programação Orientada a Objeto Programação Orientada a Objeto Classes, Atributos, Métodos e Objetos Programação de Computadores II Professor: Edwar Saliba Júnior 1) Java é uma linguagem orientada a objetos. Para que possamos fazer uso

Leia mais

LINGUAGEM ORIENTADA A OBJETOS

LINGUAGEM ORIENTADA A OBJETOS LINGUAGEM ORIENTADA A OBJETOS TI MÓDULO II O ECLIPSE O eclipse é uma IDE Open Source (código fonte aberto) que serve para o desenvolvimento em muitas linguagens: PHP Java Python HTML C/C++ A IDE Eclipse

Leia mais

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve - 981648-9

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve - 981648-9 Laboratório de Computação VI JAVA IDL Fabricio Aparecido Breve - 981648-9 O que é Java IDL? Java IDL é uma tecnologia para objetos distribuídos, ou seja, objetos em diferentes plataformas interagindo através

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

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

Um Processo para Desenvolvimento de Aplicações Web Baseado em Serviços. Autores: Fábio Zaupa, Itana Gimenes, Don Cowan, Paulo Alencar e Carlos Lucena

Um Processo para Desenvolvimento de Aplicações Web Baseado em Serviços. Autores: Fábio Zaupa, Itana Gimenes, Don Cowan, Paulo Alencar e Carlos Lucena Um Processo para Desenvolvimento de Aplicações Web Baseado em Serviços Autores: Fábio Zaupa, Itana Gimenes, Don Cowan, Paulo Alencar e Carlos Lucena Tópicos Motivação e Objetivos LP e SOA Processo ADESE

Leia mais

Noções de. Microsoft SQL Server. Microsoft SQL Server

Noções de. Microsoft SQL Server. Microsoft SQL Server Noções de 1 Considerações Iniciais Basicamente existem dois tipos de usuários do SQL Server: Implementadores Administradores 2 1 Implementadores Utilizam o SQL Server para criar e alterar base de dados

Leia mais

Aspectos técnicos do desenvolvimento baseado em componentes

Aspectos técnicos do desenvolvimento baseado em componentes Aspectos técnicos do desenvolvimento baseado em componentes Um novo processo de desenvolvimento O uso de componentes traz mudanças no processo de desenvolvimento Além de desenvolver um produto, queremos

Leia mais

Influenciam nossa percepção; ajudam-nos a organizar e a coordenar a Classes estimulam projeto centrado em dados:

Influenciam nossa percepção; ajudam-nos a organizar e a coordenar a Classes estimulam projeto centrado em dados: O Paradigma Orientado a Objetos Paradigma e Programação Orientada a Objetos Prof. João Carlos Pinheiro jcpinheiro@ifma.edu.br 1 Não é um paradigma no sentido estrito: é uma subclassificacão do imperativo

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

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

Guia do Demoiselle Audit Demoiselle Audit Paulo Gladson Ximenes Pinheiro Clóvis Lemes Ferreira Júnior

Guia do Demoiselle Audit Demoiselle Audit Paulo Gladson Ximenes Pinheiro Clóvis Lemes Ferreira Júnior Guia do Demoiselle Audit Demoiselle Audit Paulo Gladson Ximenes Pinheiro Clóvis Lemes Ferreira Júnior Demoiselle Audit... v 1. Auditor... 1 1.1. Auditor de Persistência... 1 1.2. Auditor de Visão... 1

Leia mais