Академический Документы
Профессиональный Документы
Культура Документы
DiogoVinciusWinck(diogo.winck@gmail.com)
VicenteGoetten(goetten@gmail.com)
1.Introduo
AOrientaoaObjetosestconsolidada.Entretanto,nemtodasaspromessasque
este paradigma se propunha a cumprir foram atendidas. Algumas solues foram
propostasnatentativadecumprirestaspromessaspendentes,entreelasaOrientao
aAspectos.
AArientaoaAspectos(OA)umparadigmaqueestendeaOrientaoaObjetos(e
outros,comooparadigmaestruturado)introduzindonovasabstraes.Estesnovos
elementossodestinadosasuprirdeficinciasnacapacidadederepresentaode
algumassituaes.
Esteartigofoicriadobaseadonocaptulo3eoutrosfragmentosdolivro:AspectJ
ProgramaoOrientadaaAspectoscomJava,escritopornselanadonoincio
de julho pela Editora Novatec. O nosso objetivo com este artigo sobrevoar os
assuntosligadoscomaAOecomoAspectJ.
Sobreolivro:
http://www.novateceditora.com.br/livros/poa/
http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&ProdTypeId=1&Pro
dId=1572973&ST=SE
2.InteresseseAspectos
Ocdigoespalhadopodeserclassificadoem:
1. Blocoduplicado.
2. Blococomplementar.
http://www.javafree.org/AvozJavanoBrasilPg.1
Aimplementaodevriosinteressessistmicosefuncionaisemummesmomdulo
comaorientaoaobjetoresultanocdigochamadodeemaranhado(TangledCode).
Ocdigoespalhadoeemaranhadodificultadamanutenoeareutilizaodecdigo.
3.OrientaoaAspectos
4.Oqueaprogramaoorientadaaaspectos?
http://www.javafree.org/AvozJavanoBrasilPg.2
APOAestendeoutrastcnicas,comoaPOOouprogramaoestruturada,propondo
noapenasumadecomposiofuncional,mastambmsistmicadoproblema.Isso
permitequeaimplementaodeumsistemasejaseparadaemrequisitosfuncionaise
nofuncionais, disponibilizando a abstrao de aspectos para a decomposio de
interesses sistmicos, alm dos recursos j oferecidos pelas linguagens de
componentes,comoJava,porexemplo.
5.Resolvendovelhosproblemas
OprincipalobjetivodaPOAconsisteemsepararocdigoreferenteaonegciodo
sistemadosinteressestransversais,deumaformabemdefinidaecentralizada.Como
jvistoanteriormente,interessessoascaractersticasrelevantesdeumaaplicao.
Um interesse pode ser dividido em uma srie de aspectos que representam os
requisitos da aplicao. Os aspectos que podem ser agrupados no domnio da
aplicaocompemosinteressesfuncionais,referenciadostambmcomolgicade
negcio.
Figura1SeparaodeinteressescomPOA.
http://www.javafree.org/AvozJavanoBrasilPg.3
reaplicveis.APOApossibilitaumnvelmaiordeabstraonodesenvolvimentode
software. Esse nvel maior de abstrao e, conseqentemente, a separao bem
definida de cada um dos componentes, consistem no princpio fundamental da
engenhariadesoftware,poisestesestaroemumlocalbemdefinidonosistema.Na
Figura1,cadanuvemrepresentauminteressesistmicoimplementadonosistema,
comoauditoria(log),tratamentodeexcees,persistncia,distribuio,dentreoutros.
Porestarembemseparadoseemlocaisbemdefinidos,oscomponentespodemser
melhorreutilizadoseasuamanutenoelegibilidadetornasemaisagradvel.
Aodisponibilizarmecanismosparadecomposionoapenasdoselementosedas
relaespertinentesaosproblemas,mastambmparasepararinteressessistmicos,
aPOAprometesimplificaraengenhariadesoftware.Porexemplo,umaclassepara
implementaodocontroledeprodutos,conformeaFigura2 atendeapenas aum
interesse,noinfringindonenhumconceitodaorientaoaobjetos.
Figura2ClasseProduto.
Posteriormente,surgeanecessidadedeimplementaodocontroledeauditoria(log).
SemutilizarPOA,ointeresseseriaimplementadonaprpriaclasseProduto,como
podeserobservadonaFigura3.Casofossenecessrioimplementarocontrolede
excees,essetambmseriafeitojuntamentenaclasse,comopodeserobservadona
Figura4.Aconseqnciadissoumacrscimogradativodacomplexidadenocdigo.
http://www.javafree.org/AvozJavanoBrasilPg.4
Figura3ImplementaodocontroledeauditoriacomOO.
Figura4ControledeexceodaclasseProduto.
Naprogramaoorientadaaaspectos,porsuavez,osinteressessoprogramados
em mdulos separados (classes e aspectos, por exemplo). Aps a programao,
ocorreacombinaoentreasclasseseosaspectos,conformeindicadopelaFigura5.
Issolevasimplificaodoproblema,poisoprogramadorpodefocarcadainteresse
deformaindependente.
http://www.javafree.org/AvozJavanoBrasilPg.5
Figura5CombinaoentreaclasseProdutoeosdemaisinteresses.
6.Composiodeumsistemaorientadoaaspectos
EduardoPiveta(2001)afirmaqueumsistemaqueutilizaaprogramaoorientadaa
aspectoscompostopelosseguintescomponentes:
Linguagemdecomponentes:Alinguagemdecomponentesdevepermitirao
programadorescreverprogramasqueimplementemasfuncionalidadesbsicas
dosistema,aomesmotempoemquenoprevemnadaarespeitodoque
deveserimplementadonalinguagemdeaspectos.Exemplodelinguagemde
componentes:Java,C++,C#,PHPetc.
Combinadordeaspectos:Atarefadocombinadordeaspectos(aspectweaver)
combinar os programas escritos em linguagem de componentes com os
escritos em linguagem de aspectos. No livro, abordamos a linguagem Java
comolinguagemdecomponenteseoAspectJcomolinguagemdeAspectos.
Programasescritosemlinguagemdecomponentes:Oscomponentespodem
ser considerados as unidades funcionais do sistema. Num sistema para
controlebancrio,podesedefinircomocomponentesosclientes,ascontas,os
funcionrios,dentreoutros.Nocontextodaprogramaoorientadaaaspectos,
os componentes so abstraes providas pela linguagem, que permite a
implementaodafuncionalidadedosistema.
http://www.javafree.org/AvozJavanoBrasilPg.6
AcomposiodeumprogramaorientadoaaspectosexemplificadanaFigura6,que
mostra os programas escritos em linguagem de componentes, a linguagem de
aspectos,osprogramasescritosemlinguagemdeaspectoseocombinadoraspectual.
Como sada obtmse, ento, o cdigo combinado entre programas escritos em
linguagemdecomponenteseprogramasescritosemlinguagemdeaspectos.
Figura6Composiodeumsistemaorientadoaaspectos.
6.1Combinaoaspectual
Acombinaoaspectualoprocessoresponsvelporcombinaroselementosescritos
emlinguagemdecomponentescomoselementosescritosemlinguagemdeaspectos.
um processo que antecede a compilao, gerando um cdigo intermedirio na
linguagemdecomponentescapazdeproduziraoperaodesejada,oudepermitira
suarealizaoduranteaexecuodoprograma.
ACombinaoaspectualpodeser:
Esttica:Umsistemaorientadoaaspectosutilizandocombinaoestticapode
trazeragilidadeaomesmo,jquenohnecessidadedequeosaspectos
existam em tempo de compilao e execuo. O uso de uma combinao
esttica previne que um nvel adicional de abstrao cause um impacto
negativonaperformancedosistema.
Dinmica:Paraqueacombinaopossaserdinmicaindispensvelqueos
aspectos existam tanto em tempo de compilao quanto em tempo de
http://www.javafree.org/AvozJavanoBrasilPg.7
execuo.Utilizandoumainterfacereflexiva,ocombinadordeaspectostema
possibilidadedeadicionar,adaptareremoveraspectosemtempodeexecuo.
Ocombinadorutilizaosaspectoseoscomponentesparacriarumnovocdigo.Em
umambientededesenvolvimentoorientadoaaspectoshipotticos,capazdecombinar
osaspectossclassesdemodosimilaraumprogramador,oscdigosgeradosnofim
doprocessodedesenvolvimentodeumsistema,antesdeseremcompilados,seriam
semelhantes,tantoorientadoaobjetosquantoaaspectos.
7.Conceitosfundamentaisdaorientaoaaspectos
Aorientaoaaspectospossuiquatroconceitosfundamentais,queseroabordados
nossubtpicosaseguir.
7.1Pontosdejuno(joinpoints)
Ospontosdejunosolocaisbemdefinidosdaexecuodeumprograma,como,
porexemplo,umachamadaaummtodoouaocorrnciadeumaexceo,dentre
muitosoutros.
Apartirdospontosdejuno,socriadasasregrasquedaroorigemaospontosde
atuao.Todosospontosdejunopossuemumcontextoassociado.Porexemplo,a
chamadaparaummtodopossuiumobjetochamador,oobjetoalvoeosargumentos
domtododisponvelcomocontexto.
7.2Pontosdeatuao(pointcuts)
Ospontosdeatuaotmcomoobjetivocriarregrasgenricasparadefiniroseventos
queseroconsideradospontosdejuno,semprecisardefinilosindividualmente(o
que tornaria a POA quase sem sentido). Outra funo dos pontos de atuao
apresentar dados do contexto de execuo de cada ponto de juno, que sero
utilizadospelarotinadisparadapelaocorrnciadopontodejunomapeadonoponto
deatuao.
7.3Adendo(advice)
Adendossopedaosdaimplementaodeumaspectoexecutadosempontosbem
definidosdoprogramaprincipal(pontosdejuno).
http://www.javafree.org/AvozJavanoBrasilPg.8
Osadendossocompostosdeduaspartes:aprimeiradelasopontodeatuao,
quedefineasregrasdecapturadospontosdejuno;asegundaocdigoqueser
executadoquandoocorreropontodejunodefinidopelaprimeiraparte.Oadendo
um mecanismo bastante similar a um mtodo (quando comparamos com a
programao orientada a objetos), cuja funo declarar o cdigo que deve ser
executadoacadapontodejunoemumpontodeatuao.
7.4Aspectos
Aspropriedadesdeumsistemaqueenvolvemdiversoscomponentesfuncionaisno
podemserexpressasutilizandoanotaoeaslinguagensatuaisdeumamaneirabem
localizada. Propriedades, tais como sincronizao, interao entre componentes,
distribuioepersistncia,soexpressasemfragmentosdecdigoespalhadospor
diversoscomponentesdosistema.
Umaspectoomecanismodisponibilizadopelaprogramaoorientadaaaspectos
para agrupar fragmentos de cdigo referente aos componentes nofuncionais em
umaunidadenosistema.Paradesenvolvimentodeumsistemadeagenda,poderiam
serrelacionadososseguintesinteressesaseremimplementados:
Gerenciadordecontatos
Gerenciadordecompromissos
Persistnciadosdados
Controledeacesso
Auditoria(log),dentreoutros
Doexemplocitado,osinteressesparacontroledeacesso,auditoriadeoperaese
persistncia de dados so necessrios, mas no inerentes ao negcio. Caso um
desses interesses fosse implementado com a utilizao somente das tcnicas da
orientaoaobjeto,ocorreriaocdigoemaranhadoeespalhado,conformeaFigura7,
ondeasbarrasverticaisrepresentamasclassesdosistemaeostraos,aocorrncia
docdigoparaimplementaodointeresse.
Naprogramaoorientadaaaspectos,essesinteresses noinerentesaonegcio,
denominadosinteressessistmicos,soagrupadosemaspectos,evitandoocdigo
espalhadoeemaranhado.Dessaforma,oaspectonopodeexistirisoladamentepara
implementao dos interesses do sistema (tanto funcionais quanto sistmicos). Os
objetoscontinuamexistindoenelessoimplementadososinteressesfuncionais.J
nosaspectossotratadososinteressessistmicos.Podemosdefinir,ento,queopar
aspectoobjetoaunidadeprincipalemumprogramaorientadoaaspectos,assim
comooobjetoseriaoprincipalemumprogramaorientadoaobjetos.
http://www.javafree.org/AvozJavanoBrasilPg.9
Figura7Ocorrnciadecdigoemaranhado.
8.Ondeeporqueaplicaraorientaoaaspectos
APOAcontribuinaimplementaodosinteressessistmicos,que,mesmonosendo
inerentesaonegcio,so,namaioriadoscasos,indispensveisparaosucessoda
aplicao.Pormeiodousodaorientaoaaspectos,essesinteressespodemser
agrupadosemunidadesmodulares,tornandoamanutenomaissimplesefacilitando
oresoporreduzirainterdependnciaentreosinteresses.Umarevisodalistados
interessessistmicos,sobaperspectivadaPOA,ficariadaseguinteforma:
Tratamentodeexcees:PormeiodousodaPOApossvelcentralizaras
polticasparatratamentodeexceesemunidadeselementares,oquefacilita
tanto a manuteno e legibilidade das classes quanto abordagem para o
tratamentodeexcees.
http://www.javafree.org/AvozJavanoBrasilPg.10
Persistncia:Pormeiodousodeaspectospossvelcentralizareabstraira
implementaodesseinteressedacamadadenegcio,facilitando,assim,a
manutenoeaobtenodemelhoriasnasabordagensaplicadas.
Figura8Acrescentadodistribuiopormeiodeaspectos.
6.AspectJOrientaoaAspectoscomJava
OAspectJumaextensoparaalinguagemdeprogramaoJava.Porisso,houvee
ainda h uma preocupao pela compatibilidade de quatro itens extremamente
importanteseessenciais:
CompatibilidadedeplataformatodoprogramaAspectJpodeserexecutado
emumamquinavirtualjava(JVM);
http://www.javafree.org/AvozJavanoBrasilPg.11
ExisteumadivisodoAspectJemduas partes: alinguagemdeespecificaoea
linguagem de implementao. A parte da linguagem de especificao define a
linguagem na qual o cdigo escrito; com AspectJ, os interesses funcionais so
implementados em Java, e para implementao da combinao de interesses
sistmicossoutilizadasasextensesdisponibilizadaspeloprprioAspectJ.Aparte
da linguagem de implementao fornece ferramentas para compilao, debug e
integraocomambientesintegradosdedesenvolvimento.
OAspectJimplementadoistiposdeinteressessistmicos,osestticosedinmicos.
Sonestesinteressesqueocorremacombinaoaspectual.Acombinaoaspectual
podeatravessardiversosmdulosdeumsistemaparaqueointeresseemquesto
possaserdevidamenteimplementado.
7.Concluso
Nolivrosoapresentadosdiversosexemplosprticosdautilizaodaprogramao
orientadaaaspectos,como:
Auditoria;
Registroerastreamentodeoperaes;
Persistnciadedados;
Tratamentodeexcees;
Polticasdedesenvolvimento;
Autenticao,identificaoeautorizaodeusurios;
Etc.
8.Bibliografia
http://www.javafree.org/AvozJavanoBrasilPg.12
GOETTENJunior,WINCKDiogo,2006.AspectJProgramaoOrientadaaAspectoscomJava.SoPaulo
SP:NovatecEditora,2006.
ASPECTJTeam.Disponvelem:<http://www.eclipse.org/aspectj>.
BLLERT,Kai.OnWeavingAspects.IntheProceedingsoftheAspectOrientedProgrammingWorkshopat
ECOOP'99,1999.
CHAVEZ,Christina.GARCIA,Alessandro.LUCENA,Carlos.DesenvolvimentoOrientadoaAspectos.Anais
do XVII Simpsio Brasileiro de Engenharia de Software, Manaus Amazonas. Universidade Federal do
Amazonas.2003.
CHAVEZ,Christina.LUCENA,Carlos.ATheoryofAspectsforAspectOrientedSoftwareDevelopment.Anais
do XVII Simpsio Brasileiro de Engenharia de Software. Manaus Amazonas. Universidade Federal do
Amazonas.2003.
GOETTENJunior,WINCKDiogoeMACHADOCaio,2004.ProgramaoOrientadaaAspectosAbordando
JavaeaspectJ.WorkcompSulSBC.
KICZALES,G.; LAMPING, J.; MENDHEKAR, A.; MAEDA, C. et al. Aspectoriented programming. Para
apresentaoem:ECOOP'97,LNCS1241.Springer,1997.
PIVETA,Eduardo.Ummodelodesuporteaprogramaoorientadaaaspectos.UFSC.Dissertaosubmetida
comopartedosrequisitosparaaobtenodograudeMestreemCinciadaComputao,2001.
Sobreosautores
http://www.javafree.org/AvozJavanoBrasilPg.13