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

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

DEV010 Programação Orientada a Aspectos em.NET Tiago Dias Software Architect, BRISA Tiago Dias Software Architect, BRISA.

Apresentações semelhantes


Apresentação em tema: "DEV010 Programação Orientada a Aspectos em.NET Tiago Dias Software Architect, BRISA Tiago Dias Software Architect, BRISA."— Transcrição da apresentação:

1

2 DEV010 Programação Orientada a Aspectos em.NET Tiago Dias Software Architect, BRISA Tiago Dias Software Architect, BRISA

3 Patrocinadores

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? 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çãoEncapsulamento 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 Cross-cutting concerns AOP – Exemplo Requisitos funcionais: AlimentaçãoDescansoProcriar Ser fêmea ou macho Requisitos não funcionais LoggingSegurançaAudit Tigre Animal Mamífero Foca OOP Código emaranhado Código espalhado

9 AOP – Exemplo (2) Factorização em aspectos: AlimentaçãoDescansoProcriar Ser fêmea ou macho LoggingSegurançaAudit Tigre Animal Mamífero Foca OOP

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

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

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

15 Tipificação das ferramentas AOP Modelo de compilação e execução.NET: Ad-hoc compiler: É a abordagem do AspectJ (Java) NKalorehttp://aspectsharpcomp.sourceforge.net/ Alteração do Mono C# Compiler CódigoFonte CompiladorCompilador Compilação Aspectos MSILAspectualizado CódigoFonte MSIL CódigoNativo CompiladorCompilador Compilador JIT Compilação Execução

16 Ferramentas AOP (2) Ad-hoc Virtual Machine Agora viabilizada através do MS Phoenix Poderá ser a melhor de todas as abordagens: DinâmicaPerformantTransparente Implementação mais próxima (funciona apenas em modo Debug): MSIL CódigoNativoAspectualizado Compilador JIT Execução 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 a

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 CódigoFonte WeaverWeaver Compilação Aspectos Código fonte Aspectualizado

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 WeaverWeaver Aspectos MSILAspectualizado

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

21 Ferramentas AOP (7) IL Instrumentation Utiliza o RAIL para processar MSIL DotNetAOP spx?id=1b78f7c1-895f-49a7-8fa6-1565db16d41b NAop / AOP.NET Gripper-LOOM.NET potsdam.de/research/loom/gripper_loom.htm

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

23 AspectDNG Adicionar logging a todos os métodos de uma aplicação

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: FactoryProviderStrategy 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 // 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(); } Enterprise Library: Caching Factory Pattern Código operacional Código não operacional

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

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); } Fabrica um juicer Obtém um container (config)

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 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.NETWicca Microsoft Phoenix (3)

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: Tigre Animal Mamífero Foca OOPAlimentaçãoAlimentação DescansoDescanso ProcriarProcriar Ser fêmea ou macho LoggingLogging SegurançaSegurança AuditAudit OntologiaOntologia

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 MDSoC c/ Partial Types

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

42 Hyper/Net (Beyond Partial Types)

43 Sumário AOP 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 (Wiki) A minha página pessoal Artigo Hyper/Net

45 Pergunte aos Especialistas Obtenha Respostas às Suas Questões Depois da apresentação: Área de Desenvolvimento

46 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

47 © 2007 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.


Carregar ppt "DEV010 Programação Orientada a Aspectos em.NET Tiago Dias Software Architect, BRISA Tiago Dias Software Architect, BRISA."

Apresentações semelhantes


Anúncios Google