SlideShare uma empresa Scribd logo
1 de 16
An Aspect-Oriented Infrastructure for Design by Contract in Java Sérgio Agostinho    sagostinho@viatecla.pt www.viatecla.com 13Jan08    ViaTecla Software Ou mais uma Tese de Mestrado
Agenda ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],Problema
A programação orientada por aspectos pode ser usada para implementar a verificação de desenho por contrato numa linguagem sem suporte nativo para o mesmo (Java). Tese
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Desenho por Contrato Pré-condições Pós-condições Invariantes
Classe Stack: Invariante: count() >= 0 Método pop(): Pré-condição: count() > 0 Pós-condição: new.count() = old.count() - 1 Método push(): Pós-condição: new.count() = old.count() + 1 Desenho por Contrato
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Programação Orientada a Aspectos
/** * Pointcut que captura as execuções de métodos não privados nem estáticos. */ pointcut  nonStaticMethodExecution(Object object): target (object) &&  execution (!private !static * *.*(..)); /** * Pointcut que captura a execução de métodos dentro de packages J2SE. */ pointcut  systemPackageExecution(): execution (java.* *(..)) ||  execution (javax.* *(..)); /** * Pointcut que captura as chamadas de simpleGet* em packages ViaTecla. */ pointcut  simpleGetInsideViaTeclaCode(Object object): target (object) &&  withincode (com.viatecla.*) &&  call (public String *.simpleGet*(..)); Programação Orientada a Aspectos
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Programação Orientada a Aspectos
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Protótipo
class Stack<T> { boolean invariant() { return count() >= 0; } boolean prePush() { remember(); return true; } void push(T item) { ... } boolean postPush(T item) { Stack old = (Stack) old(); return this.count() == old.count() + 1; } boolean prePop() { remember(); return count() > 0; } T pop() { ... } boolean postPop() { Stack old = (Stack) old(); return this.count() == old.count() - 1; } int count() { ... } } Protótipo
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],O mundo académico vs indústria ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],O mundo académico vs indústria
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Plataforma Java -> .NET
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Mais informações
www.viatecla.pt | (+351) 212 723 500 Obrigado pela vossa atenção!

Mais conteúdo relacionado

Mais procurados

Desmistificando Design Patterns
Desmistificando Design PatternsDesmistificando Design Patterns
Desmistificando Design PatternsMaicon Heck
 
Lógica de programação, algoritmos e big data
Lógica de programação, algoritmos e big dataLógica de programação, algoritmos e big data
Lógica de programação, algoritmos e big dataRodrigofn
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcionalPéricles Miranda
 
Codificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadosCodificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadoshenriqueprossi
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoElaine Cecília Gatto
 
Profissão programador práticas para melhoria contínua fatec pg setembro 2013
Profissão programador práticas para melhoria contínua fatec pg setembro 2013Profissão programador práticas para melhoria contínua fatec pg setembro 2013
Profissão programador práticas para melhoria contínua fatec pg setembro 2013Gabriel Rubens
 
Aprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPAprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPLeonardo Bastos
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmáticaelliando dias
 
Minicurso Objective-C LinguÁgil 2011 (parte1)
Minicurso Objective-C LinguÁgil 2011 (parte1)Minicurso Objective-C LinguÁgil 2011 (parte1)
Minicurso Objective-C LinguÁgil 2011 (parte1)Cleverson Sacramento
 
Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Giovanni Bassi
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Wellington Moreira
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012Jorge Oleques
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativoTony Alexander Hild
 

Mais procurados (20)

Desmistificando Design Patterns
Desmistificando Design PatternsDesmistificando Design Patterns
Desmistificando Design Patterns
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
 
Programação Lógica com Restrições
Programação Lógica com RestriçõesProgramação Lógica com Restrições
Programação Lógica com Restrições
 
Lógica de programação, algoritmos e big data
Lógica de programação, algoritmos e big dataLógica de programação, algoritmos e big data
Lógica de programação, algoritmos e big data
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcional
 
Codificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadosCodificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcados
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de Programação
 
Profissão programador práticas para melhoria contínua fatec pg setembro 2013
Profissão programador práticas para melhoria contínua fatec pg setembro 2013Profissão programador práticas para melhoria contínua fatec pg setembro 2013
Profissão programador práticas para melhoria contínua fatec pg setembro 2013
 
Aprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOPAprendendo a programar - Programação Procedural vs OOP
Aprendendo a programar - Programação Procedural vs OOP
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
 
TDD do seu jeito
TDD do seu jeitoTDD do seu jeito
TDD do seu jeito
 
AulaPython.pdf
AulaPython.pdfAulaPython.pdf
AulaPython.pdf
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Minicurso Objective-C LinguÁgil 2011 (parte1)
Minicurso Objective-C LinguÁgil 2011 (parte1)Minicurso Objective-C LinguÁgil 2011 (parte1)
Minicurso Objective-C LinguÁgil 2011 (parte1)
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
 

Destaque

Cloud Computing & Windows Azure
Cloud Computing & Windows AzureCloud Computing & Windows Azure
Cloud Computing & Windows Azuresagostinho
 
Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2sagostinho
 
Nuevo Office 365
Nuevo Office 365Nuevo Office 365
Nuevo Office 365ITSitio.com
 
¿Cómo vender Office365?
¿Cómo vender Office365?¿Cómo vender Office365?
¿Cómo vender Office365?ITSitio.com
 
Azure a través de modalidad Open
Azure a través de modalidad OpenAzure a través de modalidad Open
Azure a través de modalidad OpenITSitio.com
 

Destaque (8)

Cloud Computing & Windows Azure
Cloud Computing & Windows AzureCloud Computing & Windows Azure
Cloud Computing & Windows Azure
 
Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2Boas Práticas em Aplicações Silverlight 2
Boas Práticas em Aplicações Silverlight 2
 
Nuevo Office 365
Nuevo Office 365Nuevo Office 365
Nuevo Office 365
 
¿Cómo vender Office365?
¿Cómo vender Office365?¿Cómo vender Office365?
¿Cómo vender Office365?
 
Azure
Azure Azure
Azure
 
Azure a través de modalidad Open
Azure a través de modalidad OpenAzure a través de modalidad Open
Azure a través de modalidad Open
 
Log4net
Log4netLog4net
Log4net
 
A Proven Record
A Proven RecordA Proven Record
A Proven Record
 

Semelhante a Aspect-Oriented Infrastructure for Design by Contract in Java

Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonOsvaldo Santana Neto
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a AspectosRicardo Terra
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoMarcius Brandão
 
TecTreinos - Ementas 2011
TecTreinos - Ementas 2011TecTreinos - Ementas 2011
TecTreinos - Ementas 2011Qintess
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareFábio Nogueira de Lucena
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka? pichiliani
 
TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?tdc-globalcode
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4CDS
 
Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptJean Carlo Emer
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Javaelliando dias
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Renato Groff
 
Webinar: Oportunidades e requisitos no projeto de hardware para IoT
Webinar: Oportunidades e requisitos no projeto de hardware para IoTWebinar: Oportunidades e requisitos no projeto de hardware para IoT
Webinar: Oportunidades e requisitos no projeto de hardware para IoTEmbarcados
 
Introdução a AOP + SpringAOP
Introdução a AOP + SpringAOPIntrodução a AOP + SpringAOP
Introdução a AOP + SpringAOPelliando dias
 

Semelhante a Aspect-Oriented Infrastructure for Design by Contract in Java (20)

Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o Python
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
 
TecTreinos - Ementas 2011
TecTreinos - Ementas 2011TecTreinos - Ementas 2011
TecTreinos - Ementas 2011
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de software
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka?
 
TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4
 
Minicurso Java
Minicurso JavaMinicurso Java
Minicurso Java
 
Aula1 Apresentacao TEES
Aula1 Apresentacao TEESAula1 Apresentacao TEES
Aula1 Apresentacao TEES
 
Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScript
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Java
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Mocking Test - Outubro/2015
Mocking Test - Outubro/2015
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Mocking Test
Mocking TestMocking Test
Mocking Test
 
Webinar: Oportunidades e requisitos no projeto de hardware para IoT
Webinar: Oportunidades e requisitos no projeto de hardware para IoTWebinar: Oportunidades e requisitos no projeto de hardware para IoT
Webinar: Oportunidades e requisitos no projeto de hardware para IoT
 
Introdução a AOP + SpringAOP
Introdução a AOP + SpringAOPIntrodução a AOP + SpringAOP
Introdução a AOP + SpringAOP
 

Aspect-Oriented Infrastructure for Design by Contract in Java

  • 1. An Aspect-Oriented Infrastructure for Design by Contract in Java Sérgio Agostinho  sagostinho@viatecla.pt www.viatecla.com 13Jan08  ViaTecla Software Ou mais uma Tese de Mestrado
  • 2.
  • 3.
  • 4. A programação orientada por aspectos pode ser usada para implementar a verificação de desenho por contrato numa linguagem sem suporte nativo para o mesmo (Java). Tese
  • 5.
  • 6. Classe Stack: Invariante: count() >= 0 Método pop(): Pré-condição: count() > 0 Pós-condição: new.count() = old.count() - 1 Método push(): Pós-condição: new.count() = old.count() + 1 Desenho por Contrato
  • 7.
  • 8. /** * Pointcut que captura as execuções de métodos não privados nem estáticos. */ pointcut nonStaticMethodExecution(Object object): target (object) && execution (!private !static * *.*(..)); /** * Pointcut que captura a execução de métodos dentro de packages J2SE. */ pointcut systemPackageExecution(): execution (java.* *(..)) || execution (javax.* *(..)); /** * Pointcut que captura as chamadas de simpleGet* em packages ViaTecla. */ pointcut simpleGetInsideViaTeclaCode(Object object): target (object) && withincode (com.viatecla.*) && call (public String *.simpleGet*(..)); Programação Orientada a Aspectos
  • 9.
  • 10.
  • 11. class Stack<T> { boolean invariant() { return count() >= 0; } boolean prePush() { remember(); return true; } void push(T item) { ... } boolean postPush(T item) { Stack old = (Stack) old(); return this.count() == old.count() + 1; } boolean prePop() { remember(); return count() > 0; } T pop() { ... } boolean postPop() { Stack old = (Stack) old(); return this.count() == old.count() - 1; } int count() { ... } } Protótipo
  • 12.
  • 13.
  • 14.
  • 15.
  • 16. www.viatecla.pt | (+351) 212 723 500 Obrigado pela vossa atenção!