A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

23/03/ :15 AM 1 ©2005 Microsoft Corporation. All rights reserved.

Apresentações semelhantes


Apresentação em tema: "23/03/ :15 AM 1 ©2005 Microsoft Corporation. All rights reserved."— Transcrição da apresentação:

1 23/03/ :15 AM 1 ©2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

2 DEV010 Programação Orientada a Aspectos em .NET
Tiago Dias Software Architect, BRISA 2 ©2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

3 23/03/ :15 AM Patrocinadores 3 ©2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

4 Agenda I - Introdução à Programação Orientada a Aspectos (AOP)
II - Ferramentas AOP para .NET III - AOP multi-dimensional: MDSoC

5 O software está a ficar confundido…

6 Porquê a confusão? Software com muitos requisitos
“Bolas, nós faríamos melhor...” Sim, mas se o software não misturasse tantos requisitos Software com muitos requisitos Use cases simples deixam de ter os resultados esperados Novas funcionalidades que deviam ser transparentes afectam funcionalidades existentes As funcionalidades, os assuntos, não estão a ser separados no código!!

7 Separation of Concerns (SoC)
Concerns – assuntos, correspondem a: Requisitos – Funcionais e Não Funcionais (NFR) É o objectivo de: Programação orientada aos objectos (OOP) Modularização Encapsulamento Arquitectura orientadas aos Serviços (SOA) Vários design patterns Mas não são suficientes... A programação orientada a aspectos (AOP) vair pegar onde estas abordagens ficaram

8 AOP – Exemplo Requisitos funcionais: Requisitos não funcionais
Código emaranhado Código espalhado Requisitos funcionais: Alimentação Descanso Procriar Ser fêmea ou macho Requisitos não funcionais Logging Segurança Audit Animal Mamífero Tigre Foca OOP Cross-cutting concerns

9 AOP – Exemplo (2) Factorização em aspectos: Alimentação Descanso
Procriar Ser fêmea ou macho Logging Segurança Audit Animal Mamífero Tigre Foca OOP

10 Anatomia de um aspecto Advice Pointcuts Joint-points Advice Pointcuts
Logging Advice Pointcuts public class Logging { [AroundBody("Tigre::*()]")] public static object Log(MethodJoinPoint jp) Debug.WriteLine("..."); object result = jp.Proceed(); return result; } Prociar Tigre Joint-points Advice Pointcuts public class Tigre : Mamifero { public void Rosnar() base.EmiteSom("Roaarrr"); } public void Estender() foreach(ParteDoCorpo pc in this.partesDoCorpo) pc.Estender(); public class Procriar { [Insert("Tigre")] public void Cortejar(Tigre femea) if(this.Femea || !femea.Femea) throw Exception("..."); ... } Pointcut Advice Joint-points Exemplo utilizando o

11 Como são aplicados os aspectos?
Weaving: Quando e como é feito é o principal diferenciador entre as ferramentas AOP Código OO + Aspectos => Código em execução Tigre Tigre

12 AOP - Finalidades/Cenários
Separation of Concerns (SoC) Alterações dinâmicas sem parar software de produção Permitir testar componentes onde é díficil utilizar Mocks ...

13 II - Ferramentas AOP para .NET
Mapa Mundo AOP Tipificação das ferramentas DEMO: AspectDNG As soluções AOP e a Microsoft

14 IBM WebSphere HyperProbes
Mapa AOP IBM WebSphere HyperProbes AspectJ™ BEA JRockit JVM PROSE Axon JAsCo Nanning JBoss (J2EE) JMangler DynAOP Eclipse Products EAOP Steamloom Jakarta Hivemind SiteVision JAML CeaserJ Spring (J2EE) Jiazzi Java JAC Arachne .NET Phx.Morph TinyC2 AspectC Wicca Rapier.NET C++ AspectC++ Aspect# Loom.NET AspectDNG FeatureC++ Weave.NET XWeaver Other Wool Meta.NET JAsCo.NET Eos Aspects Aspect.NET AspectS PostSharp SetPoint Hyper/J CLAW Poly Apostle AOPHP Compose* Hyper/Net PHPaspect AspectCOOL SourceWeave.NET AopDotNetAddin DemeterJ Pythius PEAK AOP.NET Encase AspectScheme Composition Filters AspectL AOP-Engine AspectCocoa Concern Manipulation Environment AspectR Itálico = patrocínio Microsoft (mas não são produtos) Slide adaptado de apresentação sobre o Wicca

15 Tipificação das ferramentas AOP
Modelo de compilação e execução .NET: Ad-hoc compiler: É a abordagem do AspectJ (Java) NKalore Alteração do Mono C# Compiler Compilação Execução Código Fonte Código Nativo Compilador MSIL Compilador JIT Compilação Código Fonte Compilador MSIL Aspectualizado Aspectos

16 Ferramentas AOP (2) Ad-hoc Virtual Machine
Agora viabilizada através do MS Phoenix Poderá ser a melhor de todas as abordagens: Dinâmica Performant Transparente Implementação mais próxima (funciona apenas em modo Debug): Execução Código Nativo Aspectualizado MSIL Compilador JIT Aspectos

17 Ferramentas AOP (3) Ad-hoc Virtual Machine
Utiliza o Microsoft Phoenix E tem como objectivo testar AOP num projecto de grande escala: MS Phoenix Actua no compilador JIT por intermédio do: Microsoft Debugger Edit&Continue (.NET 2.0) Também permite outras abordagens (ex. IL Instrumentation) Suporta weaving baseado em atributos

18 Ferramentas AOP (4) Source-to-source
O weaving ocorre na Pré-compilação A única abordagem em que é possível ver o código weaved Paradigma AOP alargado: Multi-dimensional Separation of Concers - MDSoC Utiliza o NRefactory, um parser de C# e VB.Net do SharpDevelop 2.0 Compilação Código Fonte Weaver Código fonte Aspectualizado Aspectos

19 Ferramentas AOP (5) IL Instrumentation
Suportam qualquer linguagem compilável em MSIL Permitem a aspectualização de software sem o código fonte MSIL Aspectualizado MSIL Weaver Aspectos

20 Ferramentas AOP (6) IL Instrumentation
DEMO Compose* Os pointcuts podem usar XPath Paradigma AOP: Filtros de composição LAOS – Lightweight A. O. System Pointcuts semânticos Suporte parcial da MS Research Aspect.NET Suporte parcial da MS Research Integração no Visual Studio

21 Ferramentas AOP (7) IL Instrumentation
Utiliza o RAIL para processar MSIL DotNetAOP Gripper-LOOM.NET NAop / AOP.NET

22 Ferramentas AOP (8) Factory Based Proxying
Necessário utilizar proxies (não transparente) Tipicamente limitadas a uma só linguagem Compilação Código fonte Aspectualizado Compilador aspectsharp NAspect Frameworks Rapier-LOOM.NET Os objectos são estendidos com funcionalidades necessárias para a testabilidade através de proxies.

23 Adicionar logging a todos os métodos de uma aplicação
23/03/ :15 AM AspectDNG DEMO Adicionar logging a todos os métodos de uma aplicação 23 ©2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

24 As soluções AOP e a Microsoft
Enterprise Library e AOP A EntLib Uma solução AOP sobre a EntLib MS Research Phoenix O que é o Phoenix? Soluções AOP suportadas sobre o Phoenix

25 Enterprise Library Framework de requisitos não funcionais (NFR framework) Cada tipo de requisito não funcional existe sob a forma de um Application Block: Configuração, Segurança, Tratamento de Excepções, Caching, Acesso a Dados e Validação Utiliza intensivamente design patterns: Factory Provider Strategy Façade

26 Enterprise Library: Application Blocks = Aspectos?
Será possível considerar os Application Blocks como aspectos pré-criados preparados para weaving? NÃO Oferecem a sua funcionalidade através de Factories e outros Design Patterns que não são tão transparentes como os Aspectos É sempre necessário alterar o funcionamento do código onde se aplicam Contudo Têm objectivos comuns aos da AOP (tal como os design patterns)

27 Enterprise Library: Caching
// Get the CacheManager CacheManager myCacheManager = CacheFactory.GetCacheManager(); // Save the settings to the Cache myCacheManager.Add("SiteSettings", mySettings); // Retrieve settings from the cache SiteSettings cachedSettings = (SiteSettings)myCacheManager.GetData("SiteSettings"); if (cachedSettings != null) { Console.WriteLine("Name = {0}", cachedSettings.Name); Console.WriteLine("Url = {0}", cachedSettings.Url); Console.WriteLine(" Address = {0}", cachedSettings. Address); Console.ReadLine(); } Código não operacional Factory Pattern Código operacional

28 Enterprise Library: Validation
public class Customer { [NotNullValidator] [StringLengthValidator(1, 100)] public string Name get { return name; } set { name = value; } } public string get { return ; } set { = value; } public string ValidateCustomer() ValidationResults results = Validation.Validate(this); string message = string.Empty; if (!results.IsValid) ... Attribute based Façade Pattern

29 Enterprise Library: Exception Handling
try { int i = 5; int j = 0; int z = i / j; } catch(Exception ex) bool rethrow = ExceptionPolicy.HandleException(ex, "Business Layer Policy"); if (rethrow) throw; Similar to Aspect Advice declaration

30 Uma solução AOP sobre a EntLib
Solução de Olaf Conijn proposta no seu blog: Baseada num CTP da EntLib 2.0 Não é compatível com a versão final da framework .NET 2.0 (erros runtime) Utiliza estratégia de Factory Based-Proxying

31 AOP com a EntLib: Exemplo
Criar um espremedor de sumo (juicer) Espremer 10 unidades O espremedor e o fruto a espremer são definidos em configuração static void Main(string[] args { string containerName = "MyContainer"; IServiceContainer container = ContainerFactory.CreateServiceContainer(containerName); IJuicer juicer = (IJuicer)container.GetServiceInstance(typeof(IJuicer)); juicer.Juice(10); Console.WriteLine(juicer.CollectedJuice); } Obtém um container (config) Fabrica um juicer

32 AOP com a EntLib: Exemplo (2)

33 AOP com a EntLib: Exemplo (3)
public class GenericMethodTracerAdvice: IAdvice { public object Invoke(IMethodInvocation invocation) string traceMessage = string.Format( "type: {0} method: {1}; parameters: {2}", invocation.MethodCall.MethodBase.DeclaringType.Name, invocation.MethodCall.MethodName, invocation.MethodCall.MethodSignature); Debug.WriteLine(string.Format("BEFORE[{0}]", traceMessage)); object result = invocation.ProceedInvocation(); Debug.WriteLine(string.Format("AFTER[{0}]", traceMessage)); return result; } Invoca o método original. Pode ser omitido, criando um Advice do tipo Instead of

34 Microsoft Phoenix O Microsoft Phoenix será o backend de uma futura geração de compiladores e ferramentas de linguagens da Microsoft Em desenvolvimento (Microsoft Research) 1.8M linhas de código – 318K à mão Permite a manipulação de programas ao nível de uma representação intermédia (IR), ex. IL Oferece APIs para criação de plug-ins e ferramentas para diversas fases da compilação e runtime - extensão e criação: De compiladores e compiladores JIT De ferramentas que manipulam a AST (ex. Intellisense) ou a IL

35 Microsoft Phoenix (2) Viabiliza conjunto alargado de soluções AOP
Ad-hoc compiler Plug-ins para o compilador que utilizam a AST para aplicar advice ou criar joint points dinâmicos (hooks) IL instrumentation Semelhante ao anterior mas através de uma ferramenta de pós-processamento (carrega DLLs) Ad-hoc VM Através da extensão do Compilador JIT O compilador JIT passa a aplicar advice dinamicamente Os pointcuts são avaliados em runtime É possível alterar pointcuts e advice A fase de weaving deixa de ser necessária

36 Microsoft Phoenix (3) O Phoenix está já a ser utilizado (num release RDK): Aspect Mining – detecção de código clonado Mais info: Para a manipulação do código intermédio (MSIL): Aspect.NET SetPoint AOP Meta.NET Wicca

37 III - AOP multi-dimensional MDSoC
MDSoC – Multi-dimensional separation of concerns DEMO – MDSoC com Partial Types DEMO – Hyper/Net

38 MDSoC – Multi-Dimensional Separation of Concerns
Transformação num hiper-espaço: Audit Alimentação Animal Segurança Mamífero Logging Descanso Ontologia Tigre Foca Procriar Ser fêmea ou macho OOP

39 MDSoC – Multi-dimensional separation of concerns (2)
Desenvolvida desde 1999 por Peri Tarr e Harold Ossher Implementação Java: Hyper/J Pós-compilador - funciona de modo análogo à abordagem IL Instrumentation em .NET Algumas ferramentas de aspectos .NET têm liberdade sintáctica para suportar MDSoC (ex. AspectDNG) Nós pensamos em MDSoC : “The thoughts perfectly slot themselves into the rows, columns, layers, hyper-rows, hyper-columns, and hyper-layers of a vast matrix.” Steven Pinker

40 DEMO MDSoC c/ Partial Types 23/03/2017 12:15 AM 40
©2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

41 Ferramentas MDSoC Hyper/J – Java Hyper VB.Net Hyper C# ??
Limitado a trabalhar com uma só classe numa GUI específica 

42 (Beyond Partial Types)
23/03/ :15 AM Hyper/Net DEMO (Beyond Partial Types) 42 ©2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

43 Sumário AOP MDSoC Tem várias vantagens práticas
Existem implementações aceitáveis para testes e projectos não críticos (esses existem?) É uma área em maturação MDSoC Todos devíamos usar através dos partial types do .NET Existe poucas ferramentas para ir além dos partial types É uma área cujo potencial completo está muito pouco explorado

44 Recursos AOP e MDSoC Aspect Oriented Software Development
23/03/ :15 AM Recursos AOP e MDSoC Aspect Oriented Software Development (Wiki) A minha página pessoal Artigo Hyper/Net 44 ©2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

45 Pergunte aos Especialistas Obtenha Respostas às Suas Questões
23/03/ :15 AM Pergunte aos Especialistas Obtenha Respostas às Suas Questões Depois da apresentação: Área de Desenvolvimento 45 ©2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

46 Questionário de Avaliação Passatempo!
23/03/ :15 AM Questionário de Avaliação Passatempo! Complete o questionário de avaliação e devolva-o no balcão da recepção. Habilite-se a ganhar uma Xbox 360 por dia! DEV010 Programação Orientada a Aspectos em .NET 46 ©2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

47 © 2007 Microsoft Corporation. All rights reserved.
23/03/ :15 AM © 2007 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary. 47 ©2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.


Carregar ppt "23/03/ :15 AM 1 ©2005 Microsoft Corporation. All rights reserved."

Apresentações semelhantes


Anúncios Google