DEV010 Programação Orientada a Aspectos em.NET Tiago Dias [email protected] Software Architect,...

47

Transcript of DEV010 Programação Orientada a Aspectos em.NET Tiago Dias [email protected] Software Architect,...

Page 1: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.
Page 2: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

DEV010DEV010

Programação Orientada a Programação Orientada a Aspectos em .NET Aspectos em .NET

Tiago DiasTiago [email protected]@ptsoft.netSoftware ArchitectSoftware Architect, BRISA, BRISA

Tiago DiasTiago [email protected]@ptsoft.netSoftware ArchitectSoftware Architect, BRISA, BRISA

Page 3: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

PatrocinadoresPatrocinadores

Page 4: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

AgendaAgenda

I - Introdução à Programação Orientada a I - Introdução à Programação Orientada a Aspectos (AOP)Aspectos (AOP)

II - Ferramentas AOP para .NETII - Ferramentas AOP para .NET

III - AOP multi-dimensional: MDSoCIII - AOP multi-dimensional: MDSoC

Page 5: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

O software está a ficar O software está a ficar confundido…confundido…

Page 6: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Porquê a confusão?Porquê a confusão?

““Bolas, nós faríamos melhor...”Bolas, nós faríamos melhor...”Sim, mas se o Sim, mas se o software software não misturasse tantos não misturasse tantos requisitosrequisitos

SoftwareSoftware com com muitos requisitosmuitos requisitosUse casesUse cases simples simples deixam de ter os deixam de ter os resultados esperadosresultados esperados

Novas funcionalidadesNovas funcionalidades que deviam ser que deviam ser transparentes transparentes afectam funcionalidades afectam funcionalidades existentesexistentes

As As funcionalidadesfuncionalidades, os , os assuntosassuntos, , não estão não estão a ser separadosa ser separados no código!! no código!!

Page 7: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Separation of Concerns (SoC)Separation of Concerns (SoC)

ConcernsConcerns – – assuntosassuntos, correspondem a:, correspondem a:Requisitos – Funcionais Requisitos – Funcionais e e Não Funcionais (NFR)Não Funcionais (NFR)

É o objectivo de:É o objectivo de:Programação orientada aos objectos (Programação orientada aos objectos (OOPOOP))

ModularizaçãoModularização

EncapsulamentoEncapsulamento

Arquitectura orientadas aos Serviços (Arquitectura orientadas aos Serviços (SOASOA))

Vários Vários design patternsdesign patterns

Mas não são suficientes...Mas não são suficientes...

A A programação orientada a aspectosprogramação orientada a aspectos ( (AOPAOP) ) vair pegar onde estas abordagens ficaramvair pegar onde estas abordagens ficaram

Page 8: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Cross-cutting concerns

AOP – ExemploAOP – Exemplo

Requisitos funcionais:Requisitos funcionais:AlimentaçãoAlimentação

DescansoDescanso

ProcriarProcriar

Ser fêmea ou machoSer fêmea ou macho

Requisitos não funcionaisRequisitos não funcionaisLoggingLogging

SegurançaSegurança

AuditAudit

TigreTigre

AnimalAnimal

MamíferoMamífero

FocaFoca

OOP

Código emaranhado

Código espalhado

Page 9: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

AOP – Exemplo (2)AOP – Exemplo (2)

Factorização em aspectos:Factorização em aspectos:

AlimentaçãoAlimentação

DescansoDescanso

ProcriarProcriar

Ser fêmea ou machoSer fêmea ou macho

LoggingLogging

SegurançaSegurança

AuditAudit

TigreTigre

AnimalAnimal

MamíferoMamífero

FocaFoca

OOP

Page 10: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Anatomia de um aspectoAnatomia de um aspecto

TigreTigre

PointcutsPointcutsAdviceAdvice

Joint-pointsJoint-points

public class Tigre : Mamifero{ public void Rosnar() { base.EmiteSom("Roaarrr"); }

public void Estender() { foreach(ParteDoCorpo pc

in this.partesDoCorpo) pc.Estender(); }}

Joint-pointsJoint-points

LoggingLogging

ProciarProciarpublic 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("...");...

}}

PointcutsPointcutsAdviceAdvice

AdviceAdvice

PointcutPointcut

Page 11: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Como são aplicados os Como são aplicados os aspectos?aspectos?

WeavingWeaving::

Quando e como é feito é o principal Quando e como é feito é o principal diferenciadordiferenciador entre as ferramentas AOP entre as ferramentas AOP

TigreTigreTigreTigre

Código OOCódigo OO + Aspectos+ Aspectos => Código em execução=> Código em execução

Page 12: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

AOP - Finalidades/CenáriosAOP - Finalidades/Cenários

Separation of Concerns (Separation of Concerns (SoCSoC))

Alterações dinâmicasAlterações dinâmicas sem parar sem parar softwaresoftware de produçãode produção

Permitir Permitir testartestar componentes onde é díficil componentes onde é díficil utilizar utilizar MocksMocks

......

Page 13: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

II - Ferramentas AOP para .NETII - Ferramentas AOP para .NET

Mapa Mundo AOPMapa Mundo AOP

TipificaçãoTipificação das ferramentas das ferramentas

DEMO: AspectDNGDEMO: AspectDNG

As soluções AOP e a As soluções AOP e a MicrosoftMicrosoft

Page 14: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

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

PEAKPythiusPHPaspect

AspectL

AspectCocoa

Loom.NET

Weave.NET Meta.NET

Rapier.NETAspect#

Aspect.NET

AspectDNG

SetPoint CLAWPostSharp

Eos

Compose*

EncaseAOP-Engine

SourceWeave.NETAopDotNetAddin

Phx.Morph

OtherOther

Java

C++.NET

ProductsProducts

Itálico = patrocínio Microsoft (mas não são produtos)Itálico = patrocínio Microsoft (mas não são produtos)

AOP.NET

Wool

AspectCOOL

JAC

Nanning

JAsCo.NET

SiteVision

Axon

Arachne

Jiazzi

Poly

TinyC2 Wicca

Mapa AOPMapa AOP

Slide adaptado de apresentação sobre o Slide adaptado de apresentação sobre o WiccaWicca

Hyper/Net

Page 15: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Tipificação das ferramentas Tipificação das ferramentas AOPAOP

Modelo de compilação e execução .NET:Modelo de compilação e execução .NET:

Ad-hoc compiler:Ad-hoc compiler:

É a abordagem do É a abordagem do AspectJAspectJ (Java) (Java)

NKaloreNKalorehttp://aspectsharpcomp.sourceforge.net/http://aspectsharpcomp.sourceforge.net/

Alteração do Alteração do Mono C# CompilerMono C# Compiler

CódigoCódigoFonteFonte CompiladorCompiladorCompiladorCompilador

CompilaçãoCompilação

AspectosAspectos

MSILMSILAspectualizadoAspectualizado

CódigoCódigoFonteFonte MSILMSIL CódigoCódigo

NativoNativoCompiladorCompiladorCompiladorCompilador Compilador JITCompilador JITCompilador JITCompilador JIT

CompilaçãoCompilação ExecuçãoExecução

Page 16: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Ferramentas AOP (2)Ferramentas AOP (2)Ad-hoc Virtual MachineAd-hoc Virtual Machine

Agora viabilizada através do Agora viabilizada através do MS PhoenixMS Phoenix

Poderá ser a melhor de todas as abordagens:Poderá ser a melhor de todas as abordagens:DinâmicaDinâmica

PerformantPerformant

TransparenteTransparente

Implementação mais próxima (funciona Implementação mais próxima (funciona apenas em modo Debug):apenas em modo Debug):

MSILMSILCódigoCódigoNativoNativo

AspectualizadoAspectualizadoCompilador JITCompilador JITCompilador JITCompilador JITExecuçãoExecução

AspectosAspectos

Page 17: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Ferramentas AOP (3)Ferramentas AOP (3)Ad-hoc Virtual MachineAd-hoc Virtual Machine

Utiliza o Microsoft PhoenixUtiliza o Microsoft Phoenix

E tem como objectivoE tem como objectivotestar AOPtestar AOP num projecto num projectode grande escala: MS Phoenixde grande escala: MS Phoenix

Actua no compilador JIT por intermédio do:Actua no compilador JIT por intermédio do:Microsoft Debugger Edit&Continue (.NET 2.0)Microsoft Debugger Edit&Continue (.NET 2.0)

Também permite outras abordagens (ex. Também permite outras abordagens (ex. IL IL InstrumentationInstrumentation))

Suporta Suporta weavingweaving baseado em baseado em atributosatributos

http://www1.cs.columbia.edu/~eaddy/http://www1.cs.columbia.edu/~eaddy/wiccawicca

Page 18: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Ferramentas AOP (4)Ferramentas AOP (4)Source-to-sourceSource-to-source

O O weavingweaving ocorre na ocorre na Pré-compilaçãoPré-compilação

A única abordagem em que é possível ver o A única abordagem em que é possível ver o código código weavedweaved

Paradigma AOP alargado: Multi-dimensional Paradigma AOP alargado: Multi-dimensional Separation of Concers - Separation of Concers - MDSoCMDSoC

Utiliza o NRefactory, um parser de C# e Utiliza o NRefactory, um parser de C# e VB.Net do SharpDevelop 2.0VB.Net do SharpDevelop 2.0

CódigoCódigoFonteFonte WeaverWeaverWeaverWeaver

CompilaçãoCompilação

AspectosAspectos

Código fonteCódigo fonteAspectualizadoAspectualizado

Page 19: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Ferramentas AOP (5)Ferramentas AOP (5)IL InstrumentationIL Instrumentation

Suportam Suportam qualquer linguagemqualquer linguagem compilável compilável em MSILem MSIL

Permitem a aspectualização de Permitem a aspectualização de softwaresoftware sem sem o código fonteo código fonte

MSILMSIL WeaverWeaverWeaverWeaver

AspectosAspectos

MSILMSILAspectualizadoAspectualizado

Page 20: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Ferramentas AOP (Ferramentas AOP (66))IL InstrumentationIL Instrumentation

Compose*Compose*http://composestar.sourceforge.nethttp://composestar.sourceforge.net

Paradigma AOP:Paradigma AOP:Filtros de composiçãoFiltros de composição

http://setpoint.codehaus.org/http://setpoint.codehaus.org/

Pointcuts semânticosPointcuts semânticos

Suporte parcial da MS ResearchSuporte parcial da MS Research

http://aspectdng.sourceforge.nethttp://aspectdng.sourceforge.net

Os Os pointcutspointcuts podem usar podem usar XPathXPath

http://www.postsharp.org/http://www.postsharp.org/

LAOS – Lightweight A. O. SystemLAOS – Lightweight A. O. System

Aspect.NETAspect.NEThttp://www.academicresourcecenter.net/http://www.academicresourcecenter.net/curriculum/pfv.aspx?ID=6595curriculum/pfv.aspx?ID=6595

Suporte parcial da MS ResearchSuporte parcial da MS Research

Integração no Integração no Visual StudioVisual Studio

DEMO

Page 21: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Ferramentas AOP (Ferramentas AOP (77))IL InstrumentationIL Instrumentation

http://dotspect.tigris.org/http://dotspect.tigris.org/

Utiliza o RAIL para processar MSILUtiliza o RAIL para processar MSILhttp://www.dsg.cs.tcd.ie/dynamic/?category_id=-26http://www.dsg.cs.tcd.ie/dynamic/?category_id=-26

DotNetAOPDotNetAOPhttp://www.gotdotnet.com/workspaces/http://www.gotdotnet.com/workspaces/

workspace.aspx?id=1b78f7c1-895f-49a7-8fa6-workspace.aspx?id=1b78f7c1-895f-49a7-8fa6-1565db16d41b1565db16d41b

NAop / AOP.NETNAop / AOP.NEThttp://sourceforge.net/projects/aopnet/http://sourceforge.net/projects/aopnet/

Gripper-LOOM.NETGripper-LOOM.NEThttp://www.dcl.hpi.uni-potsdam.de/research/loom/http://www.dcl.hpi.uni-potsdam.de/research/loom/

gripper_loom.htmgripper_loom.htm

Page 22: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Ferramentas AOP (Ferramentas AOP (88))Factory Based ProxyingFactory Based Proxying

Necessário utilizar Necessário utilizar proxiesproxies (não transparente)(não transparente)

Tipicamente limitadas a Tipicamente limitadas a uma só linguagemuma só linguagem

CompiladorCompiladorCompiladorCompiladorCompilaçãoCompilação

Código fonteCódigo fonteAspectualizadoAspectualizado

http://www.castleproject.org/http://www.castleproject.org/aspectsharpaspectsharp

http://www.springframework.nethttp://www.springframework.net http://s2container.net.seasar.org/http://s2container.net.seasar.org/en/index.htmlen/index.html

NAspecthttp://www.puzzleframework.comhttp://www.puzzleframework.com FrameworksFrameworks

Rapier-LOOM.NETRapier-LOOM.NEThttp://www.typemock.comhttp://www.typemock.com

Os objectos são estendidos com funcionalidades Os objectos são estendidos com funcionalidades necessárias para a testabilidade através de necessárias para a testabilidade através de proxiesproxies..

http://www.dcl.hpi.uni-potsdam.de/research/http://www.dcl.hpi.uni-potsdam.de/research/loom/rapier_loom.htmloom/rapier_loom.htm

Page 23: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

AspectDNGAspectDNG

Adicionar Adicionar logginglogging a todos os métodos a todos os métodos de uma aplicaçãode uma aplicação

Page 24: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

As soluções AOP e a As soluções AOP e a MicrosoftMicrosoft

Enterprise LibraryEnterprise Library e AOP e AOPA EntLibA EntLib

Uma Uma solução AOPsolução AOP sobre a EntLib sobre a EntLib

MS Research MS Research PhoenixPhoenixO que é o Phoenix?O que é o Phoenix?

Soluções AOP Soluções AOP suportadassuportadas sobre o sobre o PhoenixPhoenix

Page 25: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Enterprise LibraryEnterprise Library

FrameworkFramework de de requisitos não funcionaisrequisitos não funcionais (NFR framework)(NFR framework)

Cada tipo de requisito não funcional existe sob Cada tipo de requisito não funcional existe sob a forma de um a forma de um Application BlockApplication Block::

Configuração, Segurança, Tratamento de Configuração, Segurança, Tratamento de Excepções, Excepções, CachingCaching, Acesso a Dados e Validação, Acesso a Dados e Validação

Utiliza intensivamente Utiliza intensivamente design patternsdesign patterns::FactoryFactory

ProviderProvider

StrategyStrategy

FaçadeFaçade

Page 26: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Enterprise Library: Enterprise Library: Application BlocksApplication Blocks = Aspectos? = Aspectos?

Será possível considerar os Será possível considerar os Application Application BlocksBlocks como como aspectos pré-criadosaspectos pré-criados preparados para preparados para weavingweaving??

NÃONÃOOferecem a sua funcionalidade através de Oferecem a sua funcionalidade através de FactoriesFactories e e outros outros Design Patterns Design Patterns que que não sãonão são tão tão transparentestransparentes como os Aspectoscomo os Aspectos

É sempre necessário É sempre necessário alteraralterar o funcionamento do o funcionamento do código código onde se aplicamonde se aplicam

ContudoContudoTêm Têm objectivos comunsobjectivos comuns aos da aos da AOPAOP (tal como os (tal como os design patternsdesign patterns))

Page 27: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

// Get the CacheManagerCacheManager myCacheManager = CacheFactory.GetCacheManager();

// Save the settings to the CachemyCacheManager.Add("SiteSettings", mySettings);

// Retrieve settings from the cacheSiteSettings cachedSettings =

(SiteSettings)myCacheManager.GetData("SiteSettings");

if (cachedSettings != null){ Console.WriteLine("Name = {0}", cachedSettings.Name); Console.WriteLine("Url = {0}", cachedSettings.Url); Console.WriteLine("Email Address = {0}", cachedSettings.EmailAddress); Console.ReadLine();}

Enterprise Library: Enterprise Library: CachingCaching

Factory Pattern

Código operacional

Código não operacional

Page 28: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Enterprise Library: Enterprise Library: ValidationValidationpublic class Customer{ [NotNullValidator] [StringLengthValidator(1, 100)] public string Name { get { return name; } set { name = value; } }

[NotNullValidator] public string Email { get { return email; } set { email = value; } }

public string ValidateCustomer() { ValidationResults results = Validation.Validate(this); string message = string.Empty;

if (!results.IsValid) ... } }

Façade Pattern

Attribute based

Page 29: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Enterprise Library: Enterprise Library: Exception Exception HandlingHandlingtry{ 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

Page 30: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Uma solução AOP sobre a Uma solução AOP sobre a EntLibEntLib

Solução de Solução de Olaf ConijnOlaf Conijn proposta no seu proposta no seu blogblog::http://bloggingabout.net/blogs/olaf/http://bloggingabout.net/blogs/olaf/

Baseada num CTP da Baseada num CTP da EntLib 2.0EntLib 2.0

Não é compatível com a versão final da Não é compatível com a versão final da framework .NET 2.0 (erros framework .NET 2.0 (erros runtimeruntime))

Utiliza estratégia de Utiliza estratégia de Factory Based-ProxyingFactory Based-Proxying

Page 31: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

AOP com a EntLib: AOP com a EntLib: ExemploExemplo

Criar um espremedor de sumo (Criar um espremedor de sumo (juicerjuicer))

EspremerEspremer 10 unidades 10 unidades

O espremedor e o fruto a espremer são O espremedor e o fruto a espremer são definidos em definidos em configuraçãoconfiguraçã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)

Page 32: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

AOP com a EntLib: AOP com a EntLib: Exemplo (2)Exemplo (2)

Page 33: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

AOP com a EntLib:AOP com a EntLib: Exemplo (3) 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

Page 34: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Microsoft PhoenixMicrosoft Phoenix

O O Microsoft PhoenixMicrosoft Phoenix será o será o backend backend de uma de uma futura geração de futura geração de compiladorescompiladores e ferramentas e ferramentas de linguagens da de linguagens da MicrosoftMicrosoftEm Em desenvolvimentodesenvolvimento ( (Microsoft ResearchMicrosoft Research))1.8M linhas de código – 318K à mão1.8M linhas de código – 318K à mãoPermite a manipulação de programas ao nível Permite a manipulação de programas ao nível de uma de uma representação intermédiarepresentação intermédia (IR), ex. IL (IR), ex. IL Oferece Oferece APIsAPIs para criação de plug-ins e para criação de plug-ins e ferramentas para diversas fases da ferramentas para diversas fases da compilaçãocompilação e e runtimeruntime - e - extensão e criação: xtensão e criação:

De De compiladores compiladores ee compiladores JIT compiladores JITDe ferramentas que manipulam a De ferramentas que manipulam a ASTAST (ex. (ex. IntellisenseIntellisense) ou a ) ou a ILIL

Page 35: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Microsoft Phoenix (2)Microsoft Phoenix (2)

Viabiliza conjunto alargado de Viabiliza conjunto alargado de soluções AOPsoluções AOPAd-hoc compilerAd-hoc compiler

Plug-insPlug-ins para o compilador que utilizam a para o compilador que utilizam a ASTAST para para aplicar aplicar adviceadvice ou criar ou criar joint pointsjoint points dinâmicos ( dinâmicos (hookshooks))

IL instrumentationIL instrumentationSemelhante ao anterior mas através de uma ferramenta Semelhante ao anterior mas através de uma ferramenta de de pós-processamentopós-processamento (carrega DLLs) (carrega DLLs)

Ad-hoc VMAd-hoc VMAtravés da extensão do Através da extensão do Compilador JITCompilador JIT

O compilador JIT passa a aplicar O compilador JIT passa a aplicar advice advice dinamicamentedinamicamente

Os Os pointcutspointcuts são avaliados em são avaliados em runtimeruntime

É possível É possível alterar pointcutsalterar pointcuts e e adviceadvice

A fase de A fase de weaving weaving deixa de ser necessáriadeixa de ser necessária

Page 36: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

O Phoenix está já a ser utilizado (num O Phoenix está já a ser utilizado (num release RDK):release RDK):

Aspect MiningAspect Mining – detecção de código clonado – detecção de código clonado

Mais info: Mais info: http://www.cis.uab.edu/tairasr/phoenix/http://www.cis.uab.edu/tairasr/phoenix/

Para a manipulação do código intermédio Para a manipulação do código intermédio (MSIL):(MSIL):

Aspect.NETAspect.NET

SetPoint AOPSetPoint AOP

Meta.NETMeta.NET

WiccaWicca

Microsoft Phoenix (3)Microsoft Phoenix (3)

Page 37: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

III - AOP multi-dimensional III - AOP multi-dimensional MDSoCMDSoC

MDSoC – MDSoC – Multi-dimensional separation of Multi-dimensional separation of concernsconcerns

DEMO – MDSoC DEMO – MDSoC com com Partial TypesPartial Types

DEMO – DEMO – Hyper/NetHyper/Net

Page 38: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

MDSoC – Multi-Dimensional MDSoC – Multi-Dimensional Separation of ConcernsSeparation of Concerns

Transformação num Transformação num hiper-espaçohiper-espaço::

TigreTigre

AnimalAnimal

MamíferoMamífero

FocaFoca

OOP

AlimentaçãoAlimentaçãoAlimentaçãoAlimentação

DescansoDescansoDescansoDescanso

ProcriarProcriarProcriarProcriar Ser fêmea ou machoSer fêmea ou machoSer fêmea ou machoSer fêmea ou macho

LoggingLoggingLoggingLogging

SegurançaSegurançaSegurançaSegurança

AuditAuditAuditAudit

OntologiaOntologiaOntologiaOntologia

Page 39: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

MDSoC – Multi-dimensional MDSoC – Multi-dimensional separation of concerns (2)separation of concerns (2)

Desenvolvida desde 1999 por Desenvolvida desde 1999 por Peri Tarr Peri Tarr e e Harold Harold OssherOssher

Implementação Implementação Java: Java: Hyper/JHyper/JPós-compiladorPós-compilador - funciona de modo análogo à - funciona de modo análogo à abordagem abordagem IL Instrumentation IL Instrumentation em .NETem .NET

Algumas ferramentas de aspectos .NET têm Algumas ferramentas de aspectos .NET têm liberdade sintáctica para suportar MDSoC (ex. liberdade sintáctica para suportar MDSoC (ex. AspectDNGAspectDNG))

Nós pensamos em MDSoC Nós pensamos em MDSoC ::

““The thoughts perfectly slot themselves into the The thoughts perfectly slot themselves into the rows, columns, layers, hyper-rows, hyper-columns, rows, columns, layers, hyper-rows, hyper-columns, and hyper-layers of a vast matrix.” and hyper-layers of a vast matrix.” Steven PinkerSteven Pinker

Page 40: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

MDSoC c/ Partial TypesMDSoC c/ Partial Types

Page 41: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Ferramentas MDSoCFerramentas MDSoC

Hyper/J – JavaHyper/J – Java

Hyper VB.NetHyper VB.Net????

Hyper C#Hyper C#Limitado a trabalhar com uma só classe numa Limitado a trabalhar com uma só classe numa GUI específica GUI específica

Page 42: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Hyper/NetHyper/Net

(Beyond Partial Types)(Beyond Partial Types)

Page 43: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

SumárioSumário

AOPAOPTem várias Tem várias vantagensvantagens práticas práticas

Existem implementações aceitáveis para Existem implementações aceitáveis para testestestes e e projectos não críticosprojectos não críticos (esses existem?) (esses existem?)

É uma área em É uma área em maturaçãomaturação

MDSoCMDSoCTodos devíamos usar através dos Todos devíamos usar através dos partial typespartial types do .NETdo .NET

Existe Existe poucas ferramentas poucas ferramentas para ir além dos partial para ir além dos partial typestypes

É uma área cujo É uma área cujo potencialpotencial completo está muito completo está muito pouco exploradopouco explorado

Page 44: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Recursos AOP e MDSoCRecursos AOP e MDSoC

Aspect Oriented Software Aspect Oriented Software DevelopmentDevelopment

http://AOSD.net (Wiki)http://AOSD.net (Wiki)

A minha página pessoalA minha página pessoalArtigo Artigo Hyper/NetHyper/Net

http://ptsoft.net/tdd/http://ptsoft.net/tdd/

[email protected]@ptsoft.net

Page 45: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Pergunte aos EspecialistasPergunte aos EspecialistasObtenha Respostas às Suas QuestõesObtenha Respostas às Suas Questões

Depois da apresentação:Depois da apresentação:Área de Área de DesenvolvimentoDesenvolvimento

Page 46: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

Questionário de AvaliaçãoQuestionário de Avaliação Passatempo!Passatempo!

Complete o questionário de Complete o questionário de avaliação e devolva-o no balcão avaliação e devolva-o no balcão da recepção.da recepção.

Habilite-se a ganhar uma Xbox Habilite-se a ganhar uma Xbox 360 por dia!360 por dia!

DEV010DEV010

Programação Orientada a Aspectos Programação Orientada a Aspectos em .NETem .NET

Page 47: DEV010 Programação Orientada a Aspectos em.NET Tiago Dias tdias@ptsoft.net Software Architect, BRISA Tiago Dias tdias@ptsoft.net Software Architect, BRISA.

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