10
Um Perfil UML para Projeto de Frameworks Transversais José Uetanabara Júnior * , Valter Vieira de Camargo #  *Centro Universitário Eurípides de Marília – UNIVEM  Marília – São Paulo, Caixa Postal 2041 CEP 17.525-901  # Departamento de Computação da Universidade Federal de Lavras (DCC-UFLA) Campus Universitário, Lavras, Minas Gerais CEP 37.200-000 [email protected] [email protected]  AbstractThis paper presents a UML profile to support the modeling of Crosscutting Frameworks, which makes evident their main characteristics. The profile was developed based on an existing profile for aspect-oriented programming, on some idioms for the development of crosscutting frameworks and on a conventional framework profile called UML-F. The profile provides uniformity of the vocabulary used by the developers, eases the understanding of the framework and application architectures and serves as a guide for creating good crosscutting framework designs. The proposed profile was evaluated through its application in a persistence crosscutting framework.  ResumoNeste artigo é apresentado um perfil UML para a modelagem de Frameworks Transversais que evidencia suas características importantes. O perfil foi desenvolvido com base em um perfil existente para programação orientada a aspectos, em alguns idiomas para implementação de frameworks transversais e em um perfil para frameworks convencionais chamado UML-F. Sua utilização propicia uniformidade do vocabulário usado pelos projetistas, facilita a compreensão da arquitetura do framework e da aplicação desenvolvida e serve como guia para a obtenção de bons projetos de FTs. O perfil proposto foi avaliado por meio de sua aplicação em um FT de persistência. 1. Introdução Depois do surgimento da programação orientada a aspectos (POA) (Kiczales et al.,1997), alguns frameworks orientados a aspectos (FOAs) começaram a aparecer na literatura (Pinto et al., 2002; Rashid et al., 2003; Soares et al., 2004; Camargo e Masiero, 2008) e também foi proposto um conjunto de idiomas (idioms) para o projeto e implementação desses frameworks (Hanenberg et al., 2003). Esses idiomas auxiliam na estruturação do código e fornecem soluções genéricas de programação que são úteis no desenvolvimento desse tipo de software. No contexto deste artigo, um Framework Transversal (FT) é um tipo de FOA que encapsula apenas um tipo de interesse transversal, como por exemplo, persistência, segurança ou concorrência (Camargo e Masiero, 2008).  Os FTs são usados como apoio para o desenvolvimento de novas aplicações ou de partes de novas aplicações. De forma geral, o desenvolvimento com apoio de frameworks                                                *  Esta pesquisa é apoiada pela CAPES. #  Esta pesquisa é parcialmente apoiada pelo CNPq: Projeto Latin-AOSD - PROSUL-Proc. no. 490478/2006-9. II Latin American Workshop on Aspect-Oriented Software Development 70

Um Perfil UML para Projeto de Frameworks Transversais · 2. Conceitos Fundamentais Fazendo o uso da UML 2.0, Evermann (2007) desenvolveu um meta-modelo que é um perfil UML específico

Embed Size (px)

Citation preview

Um Perfil UML para Projeto de Frameworks Transversais 

José Uetanabara Júnior*, Valter Vieira de Camargo# 

*Centro Universitário Eurípides de Marília – UNIVEM  Marília – São Paulo, Caixa Postal 2041 CEP 17.525-901 

 #Departamento de Computação da Universidade Federal de Lavras (DCC-UFLA) 

Campus Universitário, Lavras, Minas Gerais CEP 37.200-000 

[email protected][email protected] 

Abstract.  This  paper  presents  a  UML  profile  to  support  the  modeling  of Crosscutting  Frameworks,  which makes  evident  their main  characteristics.  The profile  was  developed  based  on  an  existing  profile  for  aspect-oriented programming,  on  some  idioms  for  the  development  of  crosscutting  frameworks and  on  a  conventional  framework  profile  called  UML-F.  The  profile  provides uniformity of  the vocabulary used by  the developers,  eases  the understanding of the  framework and application architectures and serves as a guide  for creating good  crosscutting  framework  designs.  The  proposed  profile  was  evaluated through its application in a persistence crosscutting framework.  

Resumo.  Neste  artigo  é  apresentado  um  perfil  UML  para  a  modelagem  de Frameworks  Transversais  que  evidencia  suas  características  importantes.  O perfil  foi  desenvolvido  com  base  em  um  perfil  existente  para  programação orientada  a  aspectos,  em  alguns  idiomas  para  implementação  de  frameworks transversais  e  em  um  perfil  para  frameworks  convencionais  chamado  UML-F. Sua  utilização  propicia  uniformidade  do  vocabulário  usado  pelos  projetistas, facilita a compreensão da arquitetura do framework e da aplicação desenvolvida e serve como guia para a obtenção de bons projetos de FTs. O perfil proposto foi avaliado por meio de sua aplicação em um FT de persistência. 

1. Introdução 

Depois do surgimento da programação orientada a aspectos (POA) (Kiczales et al.,1997), alguns frameworks orientados a aspectos (FOAs) começaram a aparecer na literatura (Pinto et al., 2002; Rashid et al., 2003; Soares et al., 2004; Camargo e Masiero, 2008) e também foi  proposto  um  conjunto  de  idiomas  (idioms)  para  o  projeto  e  implementação  desses frameworks (Hanenberg et al., 2003). Esses idiomas auxiliam na estruturação do código e fornecem soluções genéricas de programação que são úteis no desenvolvimento desse tipo de software. No contexto deste artigo, um Framework Transversal (FT) é um tipo de FOA que  encapsula  apenas  um  tipo  de  interesse  transversal,  como  por  exemplo,  persistência, segurança ou concorrência (Camargo e Masiero, 2008). 

  Os FTs são usados como apoio para o desenvolvimento de novas aplicações ou de partes de novas aplicações. De forma geral, o desenvolvimento com apoio de frameworks 

                                                * Esta pesquisa é apoiada pela CAPES. # Esta pesquisa é parcialmente apoiada pelo CNPq: Projeto Latin-AOSD - PROSUL-Proc. no. 490478/2006-9. 

II Latin American Workshop on Aspect-Oriented Software Development

70

resulta em arquiteturas complexas, pois envolve  conjuntos de unidades que pertencem ao framework  e  à  aplicação.  Também,  há  muitos  detalhes  específicos  que  não  ocorrem  no desenvolvimento tradicional, detalhes que são características essenciais que não podem ser modelados com a UML convencional. No contexto de FTs, o problema se torna ainda mais grave, pois o desenvolvimento de uma aplicação pode ser apoiado por vários FTs,  já que cada  um  envolve  um  único  interesse  transversal.  Os  modelos  de  análise  e  projeto  que representam a arquitetura final da aplicação são complexos e dificultam a compreensão e, consequentemente, os processos de manutenção e evolução (Camargo e Masiero, 2008). 

Além  disso,  o  processo  de  utilização  e  construção  de  um  framework  exige compreensão de sua estrutura e da interação entre suas classes/componentes. Esse processo pode ser facilitado se a documentação do framework fornecer  indícios claros tanto de sua estrutura  quando  do  processo  de  instanciação.  Essa  documentação  geralmente  é  formada por um manual que descreve o processo de instanciação do framework, e por artefatos de análise  e  de  projeto  que  geralmente  são  expressos  em  alguma  linguagem de modelagem, como por exemplo, a UML. Uma notação pode auxiliar tanto o engenheiro do framework quanto o engenheiro de aplicação. Contudo, a UML padrão não apóia a  representação de características  específicas  de  frameworks  (por  exemplos:  os  pontos  de  instanciação  do framework). Uma possível solução é a criação de perfis. Um perfil (profile) é um conjunto de  elementos  notacionais,  como  estereótipos  (stereotypes)  e  etiquetas  valoradas  (tagged values)  que  estendem  o  meta-modelo  da  UML  para  representar  mais  adequadamente características  específicas de um domínio. A UML-F  (UML-Framework), por exemplo, é um  perfil  da  UML  específico  para  a  modelagem  de  Frameworks  Orientados  a  Objetos (FOO) que fornece elementos notacionais que representam características específicas desse tipo de  framework (Fontoura et al., 2002). Contudo, os elementos notacionais da UML-F não  são  suficientes  para  modelar  todas  as  características  de  um  FT,  pois  esse  tipo  de framework possui conceitos adicionais aos FOO. 

Neste  trabalho  é  apresentado  um  perfil  UML  para  modelagem  de  FTs.  O  perfil proposto  é  uma  adaptação  do  perfil  de  Evermann  (2007)  e  também  utiliza  conceitos  já definidos  no  perfil UML-F,  proposto  por Fontoura  (2002). Além disso,  dois  dos  idiomas propostos por Hanenberg (2003) são representados na forma de estereótipos e um na forma de tipo enumerado. Foi utilizado um framework de persistência (Camargo e Masiero, 2008) como estudo de caso modelado com a  ferramenta Magic Draw. A aplicação do perfil  no estudo de caso torna mais explícita as partes que interessam ao engenheiro do framework e as  que  interessam  ao  engenheiro  de  aplicação,  pois  há  estereótipos  que  evidenciam características  específicas  para  esses  dois  profissionais.  Essa  separação  facilita  a manutenção e o reúso do framework.  

Este  artigo  está  estruturado  da  seguinte  forma:  na  Seção  2  são  apresentados  os conceitos  fundamentais;  na Seção  3  é  apresentado  um perfil  para  projeto  de  frameworks transversais; na Seção 4 é mostrado o estudo de caso com o framework de persistência; na Seção 5 os trabalhos relacionados e na Seção 6 é feita a conclusão e trabalhos futuros.  

 

 

II Latin American Workshop on Aspect-Oriented Software Development

71

2. Conceitos Fundamentais 

Fazendo  o  uso  da  UML  2.0,  Evermann  (2007)  desenvolveu  um  meta-modelo  que  é  um perfil  UML  específico  para  AspectJ.  O  autor  escolheu  essa  linguagem  pelo  fato  da maturidade que ela possui para implementação de aspectos.  

Por questões de espaço, na Figura 1 é mostrado tanto o perfil original de Evermann, quanto as adaptações realizadas. Ao invés de especializar as meta-classes da UML por meio da criação de novas meta-classes, Evermann (2007) estendeu as meta-classes existentes da UML  por  meio  da  criação  de  estereótipos.  Essa  extensão  é  visualizada  por  meio  dos colchetes ([]). Por exemplo, o estereótipo Aspect possui Class entre colchetes, indicando que  esse  estereótipo,  estende  a  meta-classe  Class.  Assim,  cada  classe  que  aparece  na Figura  1,  é  um  estereótipo  que  pode  ser  utilizado  em  nível  de  modelo.  Atributos  dos estereótipos se tornam etiquetas quando o perfil é aplicado em nível de modelo.   

Figura 1. Meta-modelo adaptado de Evermann (2007). 

  Esse perfil foi utilizado como base para a criação do perfil proposto pelo fato de ser o  perfil  que  reúne  as  principais  características  de  um  sistema  orientado  a  aspectos implementado em AspectJ. Além disso, esse perfil é uma extensão light-weight da UML. 

A  UML-F  (Fontoura  et  al.,  2002)  contém  elementos  notacionais  que  descrevem certas  características  básicas  em  FOOs.  Na  UML-F,  tanto  os  estereótipos  quanto  as etiquetas valoradas da UML foram agrupados em um único elemento chamado de “etiqueta 

II Latin American Workshop on Aspect-Oriented Software Development

72

UML-F”. A representação dessa etiqueta é a mesma de um estereótipo da UML, contudo ele também pode possuir um valor, assim como as etiquetas valoradas. Essas etiquetas são divididas em três categorias. Na Tabela 1 são mostradas algumas das etiquetas propostas.  

Tabela 1. Etiquetas da UML-F 

Etiqueta  Descrição Categoria de Etiquetas de Modelagem de Framework 

<<application>>  O elemento pertence à aplicação e não ao framework <<framework>>  O elemento pertence ao framework e não à aplicação. <<utility>>  O elemento pertence a uma classe de biblioteca. <<fixed>>  O elemento é fixo, isto é, nenhuma alteração pode ser feita nele. <<adapt-static>>  O elemento deve ser modificado durante o projeto; durante a execução ele é fixo.  <<adapt-dyn>>  O elemento pode ser modificado em tempo de execução. 

Categoria de Etiquetas para Princípios Essenciais de Construção de FOO <<template>>  O método é um método gabarito ou a classe possui um método gabarito. <<hook>>  A existência desta etiqueta denota que o método é um método gancho 

Categoria de Etiquetas para Padrões utilizados em Frameworks <<PatternName-ClassName>>  Onde: “PatternName” deve ser substituído pelo nome do padrão que está sendo utilizado e 

ClassName pelo nome da classe que determina o papel do padrão.  

A categoria “Etiquetas de Modelagem de Framework” possui etiquetas que auxiliam a  documentação  do  framework,  principalmente  para  o  projetista/desenvolvedor  de aplicações. Essas etiquetas permitem identificar as classes do framework e as da aplicação, métodos  fixos  e  adaptáveis  etc.  A  categoria  “Etiquetas  para  Princípios  Essenciais  de Construção de FOO” possui etiquetas que representam dois papéis impostos pela utilização do padrão de projeto método gabarito (template method): os métodos gabarito e os métodos gancho (hook method). Essas etiquetas facilitam a identificação dos pontos de instanciação do  framework  e  são  utilizadas  pelo  perfil  proposto  pelos  autores. A  categoria  “Etiquetas para Padrões Utilizados  em  Frameworks”  agrupa  etiquetas  que  denotam o  papel  de  cada classe nos padrões de projeto utilizados no framework (exemplos: estratégia e composição). 

Hanenberg  (2003)  propôs  um conjunto  de oito  idiomas  para  a  linguagem AspectJ com  o  objetivo  de  estruturar  o  código  para  alcançar  bons  níveis  de  reúso  e  abstração. Embora  os  idiomas  também  possam  ser  utilizados  para  desenvolvimento  de  software convencional,  sua maior utilidade é para o desenvolvimento de frameworks, pois visam a abstrair  os  detalhes  da  aplicação  para  deixar  o  código  genérico  e  independente. Os  oitos idiomas propostos por Hanenberg são: Recipiente de Introdução (Container Introduction), Interface  Marcadora  (Marker  Interface),  Conjunto  de  Junção  Composto  (Composite Pointcut),  Conjunto  de  Junção Abstrato  (Abstract  Pointcut),  Adendo Gabarito  (Template Advice), Método de Conjunto de Junção (Pointcut Method), Adendo Encadeado (Abstract Chain) e Adendo Fábrica (Factory Advice). Desses oitos idiomas propostos, três deles são utilizados nesse trabalho: recipiente de introdução,  interface marcadora e adendo gabarito. O  idioma  recipiente  de  introdução  permite  que  atributos  e  métodos  sejam  inseridos  nas classes de aplicação em  tempo de composição. O  idioma  interface marcadora consiste na existência de um tipo base para todos os objetos da aplicação para que o conjunto de junção apenas  referencie  esse  tipo  base.  O  idioma  adendo  gabarito  fornece  diferentes comportamentos  para  um  adendo.  O  idioma  conjunto  de  junção  composto,  não  foi adicionado por já haver um estereótipo para ele no perfil de Evermann. 

 

II Latin American Workshop on Aspect-Oriented Software Development

73

3. Um Perfil para Projeto de Frameworks Transversais 

Nesta seção é apresentado o perfil para FTs proposto pelos autores. Na Figura 1 é mostrado o meta-modelo proposto que é resultado da adaptação do perfil de Evermann. Os retângulos que  possuem  uma  bolinha  preenchida  representam  a  parte  do  meta-modelo  que  foi adicionada  pelos  autores  desse  trabalho  (os  estereótipos).  Já  o  retângulo  que  possui  um quadrado preenchido representa a parte que foi modificada (tipos enumerados).  

No total, foram criados treze estereótipos e adicionados cinco tipos enumerados ao tipo  enumerado  AdviceExecutionType.  Dos  treze  estereótipos  criados,  oito  são mostrados na Tabela 2 e os outros cinco são mostrados na Tabela 3.  

Tabela 2. Estereótipos Descritivos para o Projeto de FOAs 

Estereótipos para Projeto Físico Estereótipo  Classes Base  Meta-modelo  Aplicado a 

<<aspect-App>>  Aspect  Evermann  Aspectos <<aspect-F>>  Aspect  Evermann  Aspectos <<class-App>>  Class  UML  Classes <<class-F>>  Class  UML  Classes <<interface-F>>  Interface  UML  Interfaces <<interface-App>>  Interface  UML  Interfaces <<pointCutHook>>  StructuralFeature  UML  Conjuntos de Junção <<hook>>  Operation  UML  Métodos, conjuntos de junção e declarações entre tipos. 

Os  estereótipos  aspect-App  e  aspect-F  foram  criados  para  representar  se  o aspecto pertence à aplicação ou ao  framework,  respectivamente. A parte que  interessa ao engenheiro da aplicação são as classes e os aspectos que são criados durante o processo de reutilização do framework. A parte que interessa ao engenheiro de framework consiste em classes  e  aspectos  que  pertencem  à  estrutura  interna  do  framework  e  que  sofrem manutenção  no  sentido  de  evoluir  o  framework,  como  por  exemplo,  a  adição  de variabilidades.  Esses  dois  estereótipos  evitam  que  haja  confusão  na  identificação  dos aspectos  por  parte  desses  engenheiros.  Eles  herdam  as  características  da  classe  base Aspect  do  meta-modelo  de  Evermann  (2007).  O  mesmo  vale  para  os  estereótipos interface-App,  interface-F,  porém,  eles  herdam  da  meta-classe  Interface  da UML. Por fim os estereótipos class-app e class-F são semelhantes aos apresentados, porém, eles são aplicados a classes e estendem da meta-classe Class da UML. 

O  estereótipo  pointCutHook  foi  criado  para  indicar  que  o  conjunto  de  junção estereotipado  deve  ser  redefinido  se  a  variabilidade  referente  a  ele  for  necessária  na aplicação. Este estereótipo herda da meta classe StructuralFeature já que o estereótipo PointCut do meta-modelo de Evermann (2007) herda dessa meta-classe da UML.  

O  último  estereótipo  hook  foi  herdado  da  UML-F  e  denota  que  o  método  é  um método gancho; um método que deve ser concretizado pelo engenheiro de aplicação. 

Os estereótipos mostrados na Tabela 2 não informam detalhes de implementação e organização  de  código,  já  os  tipos  enumerados  e  estereótipos  mostrados  na  Tabela  3 representam  a  utilização  dos  idiomas  template  advice,  marker  interface  e  container introduction  propostos  por  Hanenberg  (2003).  Eles  podem  auxiliar  um  desenvolvedor  a estruturar o  código  para  alcançar  bons  níveis  de  reúso. Além dos  benefícios  oriundos  da 

II Latin American Workshop on Aspect-Oriented Software Development

74

utilização de padrões de projeto e dos idiomas, outro grande benefício é a uniformidade de vocabulário para comunicação entre desenvolvedores.  

Tabela 3. Tipos Enumerados para a Representação de Idiomas 

Tipos Enumerados para a Representação de Idiomas Idioma  Tipo Enumerado 

before-template after-template around-template 

after-returning-template 

Adendo Gabarito 

after-throwing-template Idioma  Estereótipos 

Interface Marcadora  <<markerInterface>> e <<aspectSpecification>> Recipiente de Introdução  <<container>>, <<containerConnector>> e <<containerLoader>> 

Os  tipos  enumerados  before-template,  after-template,  around-

template,  after-returning-template  e  after-throwing-template, representam  a  maneira  que  o  método-gabarito  será  afetado. O  tipo  enumerado before-template  representa  que  o  método  gabarito  será  afetado  no  contexto  “antes”.  O  tipo enumerado after-template representa que o método gabarito será afetado no contexto “depois”.  O  tipo  enumerado  around-template  representa  que  o  método  gabarito  será afetado  no  contexto  “durante”.  O  tipo  enumerado  after-returnig-template representa que o método gabarito será afetado no contexto “após o retorno”. Por fim o tipo enumerado after-throwing-template  representa que o método gabarito  será afetado no  contexto  “após  o  lançamento”.  O  estereótipo  markerInterface  especifica características  transversais  dependentes  de  uma  interface,  que  são  conectadas  a  aplicação mais  tarde.  As  características  transversais  são  especificadas  pelo  estereótipo aspectSpecification.  O  estereótipo  container  encapsula  um  número  de características  extrínsecas  que  são  introduzidas  mais  tarde  em  uma  classe  alvo.  O estereótipo containerLoader especifica essas características extrínsecas e o estereótipo containerConnector faz a ligação entre container e a classe alvo.  

4. Estudo de caso 

Na  Figura  2  é  apresentado  um  estudo  de  caso  com  a  aplicação  do  perfil  proposto.  Um framework  de  persistência  (Camargo  e  Masiero,  2008)  é  usado  juntamente  com  uma aplicação  de  oficina  eletrônica. É  possível  observar  que  a  Figura  2  está  dividida  em  três partes:  a  parte  que  compete  ao  engenheiro  do  framework,  a  parte  que  compete  ao engenheiro da aplicação e a parte da aplicação base. A parte do engenheiro do framework é a parte onde se  localiza o  framework de persistência, que é a parte onde esse engenheiro pode  realizar a manutenção do  framework. A parte do engenheiro de aplicação possui os aspectos concretizados que afetarão a aplicação base. Essa divisão auxilia no trabalho dos engenheiros de framework e de aplicação deixando explícita apenas a parte do framework que  lhes  interessa. É ressaltado que na Figura 2, essas partes estão separadas por meio da linha tracejada para facilitar o entendimento da aplicação do perfil. Na prática, em sistemas de maior porte  isso não ocorre: as classes e aspectos estarão misturados e os estereótipos identificam se determinada classe ou aspecto é de interesse do engenheiro do framework ou do engenheiro de aplicação, melhorando a legibilidade. 

II Latin American Workshop on Aspect-Oriented Software Development

75

Figura 2 – Estudo de caso. 

A parte do engenheiro do framework, onde se encontra o framework de persistência, utiliza  os  estereótipos  aspect-F,  class-F, interface-F.  Esses  estereótipos  indicam respectivamente  que  o  aspecto,  a  classe  e  a  interface  são  de  interesse  do  engenheiro  de framework.  Já  a  parte  do  engenheiro  de  aplicação  é  a  parte  onde  ocorre  o  reúso  e  a instanciação do framework. A instanciação é o processo de reúso do framework feita pelo engenheiro de aplicação. Os estereótipos aspect-App e class-App indicam um aspecto e uma classe respectivamente que são de interesse do engenheiro de aplicação. A facilidade que  esses  estereótipos  proporcionam  na  identificação  das  classes/aspectos,  facilita  o trabalho desses engenheiros na realização de suas tarefas. 

Note-se  que  o  aspecto  DirtyObjectController  faz  uso  do  estereótipo <<CrossCuttingFeature>>. Esse estereótipo representa que alguns métodos e atributos 

II Latin American Workshop on Aspect-Oriented Software Development

76

estão  sendo  adicionados  em  uma  classe  ou  aspecto.  A  expressão <<StaticCrossCuttingFeature>>  -Dirty  :  boolean  {onType  = 

PersistentRoot}  representa  a  adição  de  um  atributo  denominado  Dirty  do  tipo boolean  na  interface  PersistentRoot.  Já  a  expressão <<StaticCrossCuttingFeature>>  +isDirty  (  )  {onType  = 

PersistentRoot} representa a adição de um método denominado isDirty na interface PersistentRoot.  O  mesmo  raciocínio  é  válido  para  a  expressão <<StaticCrossCuttingFeature>>+setDirty( ){onType = PersistentRoot}. 

Os aspectos abstratos PersistentEntities e ConnectionCompositon  fazem uso  do  estereótipo  <<PointCutHook>>.  A  expressão  <<PointCutHook>> 

OpenConnection() representa que o conjunto de junção gancho OpenConnection() é abstrato e deve ser concretizado pelo engenheiro de aplicação em um aspecto concreto. O aspecto abstrato PersistentEntities é utilizado pelo engenheiro de aplicação (quando concretizado)  para  definir  os  métodos  persistentes.  Já  o  aspecto  abstrato ConnectionCompositon  é  utilizado  para  definir  os  adendos  com  os  respectivos conjuntos de junção que atuarão sobre os métodos persistentes (quando  for concretizado). O  aspecto  abstrato  PersistentEntities  possui  também  o  estereótipo <<containerLoader>> pois esse aspecto possui métodos que são adicionados à interface PersistentRoot.  Assim  a  interface  PersistentRoot  recebe  o  estereótipo <<container>>  já  que  essa  interface  encapsula  esses  métodos.  O  aspecto  concreto MyPersistentEntities  possui  o  estereótipo  <<containerConnector>>  por referenciar onde os métodos de PersistentEntities serão encapsulados. 

O  aspecto XOORelationalMapping  é  uma  interface  de  entrecorte  (Crosscutting Interface)  (Griswold  et  al.,  2006)  .  Esse  aspecto  possui  só  os  conjuntos  de  junção  e  o aspecto  OORelationalMapping  possui  só  os  adendos.  Assim,  o  aspecto OORelationalMapping  é  estereotipado  com  <<aspectSpecification>>  por especificar as características do entrecorte. Isso estereotipa a  interface PersistentRoot com <<markerInterface>> por especificar as características de entrecorte dependentes de uma interface. O relacionamento de dependência entre os aspectos indica que os adendos dependem dos conjuntos de junção declarados no aspecto XOORelationalMapping. 

A  classe  abstrata  ConnectionManager  define  a  maneira  pelo  qual  será  feita  a conexão pelo banco de dados. O engenheiro de aplicação poderá definir o banco de dados apropriado quando ele concretizar a classe abstrata OdbcConnection. 

O aspecto MyPersistentEntities que está na parte do engenheiro de aplicação, possui  a  etiqueta declaredImplements.  Ela  permite  a  declaração  de  interface  do  tipo “realize”.  Dessa  forma  declaredImplements  = myImplementation  mostra  que  as classe employee, event, baseSalary e function “realizes” PersistentRoot. Isso é notado pelos relacionamentos de cada uma das classes com a interface PersistentRoot. 

Os aspectos ConnectionComposition e MyConnectionComposition utilizam dois  estereótipos:  <<Advice>>  e  <<ExecutionPointCut>>  respectivamente.  A expressão  <<ExecutionPointCut>>-openConnection  {operation  = 

II Latin American Workshop on Aspect-Oriented Software Development

77

registerEvent} representa que um conjunto de junção denominado openConnection foi criado e que o método que ele afeta é o registerEvent. O estereótipo <<Advice>> é utilizado  para  denotar  adendos,  assim  a  expressão <<Advice>> +open(){poinCut = openConnection, adviceExecution = BeforeAdvice} representa que o conjunto de junção openConnection será afetado no contexto “antes”. É assim que os estereótipos atuam nos métodos da aplicação. Não são utilizados relacionamentos de entrecorte. 

É  interessante  perceber  que  a  utilização  dos  idiomas  facilitam  a  compreensão  e  a análise  do modelo.  Por  exemplo,  quando o  projetista  percebe  a  existência  do  estereótipo <<container>>  em  alguma  interface,  automaticamente  deve  existir  no  modelo  um aspecto  que  introduz  propriedades  nessa  interface  e  que  deve  possuir  o  estereótipo <<containerLoader>>. Da mesma forma, quando alguma interface possui o estereótipo <<markerInterface>> automaticamente procura-se por um aspecto que  faz o papel de <<aspectSpecification>>.  Isso  auxilia  bastante  na  compreensão  dos  modelos  e também do funcionamento do framework. 

5. Trabalhos Relacionados 

Embora  vários  tenham  sido  os  pesquisadores  que  propuseram  linguagem  de  modelagem para  POA  (Aldawud  et  al.,  2003;  Barra  et  al.,  2004;  Evermann  et  al.,  2007;  Groher  e Baumgarth,  2004),  apenas  um  deles  propôs  uma  técnica  específica  para  FOA.  Rausch (2004)  propôs  modelos  nos  níveis  de  requisitos  e  projeto  para  frameworks  orientados  a aspectos.  Também  foi  desenvolvida  uma  técnica  para  “colar”  os  modelos.  Esta  técnica utiliza das setas bidirecionais e “notas” que contém uma OCL. Cada hot spot (ex. pontos de junção, introductions) é especificado dentro das notas. Por meio da OCL os elementos do pacote da aplicação são ligados com os hot spots do framework. 

  O  trabalho  de  Rausch  (2004)  possui  algumas  deficiências,  algumas  delas reconhecidas  pelos  próprios  autores:  a  ausência  de  um  meta-modelo  impossibilita  o desenvolvimento de uma ferramenta. Uma ferramenta para auxiliar a junção dos modelos é necessária  e  ela  deve  ser  consistente  com  a  junção  do  código  da  POA;  um  perfil  UML completo para POA precisa ser desenvolvido, para que a partir dele possa ser proposto um perfil para  frameworks orientados a aspectos; uma  linguagem de  ligação mais apropriada deve ser desenvolvida para evitar trechos complexos de OCL. 

6. Conclusão 

Os elementos notacionais criados  nesse  trabalho  visam auxiliar  tanto o desenvolvedor do framework quanto o desenvolvedor da aplicação  evidenciando características  importantes do  desenvolvimento  e  da  utilização  de  frameworks.  Ressalta-se  que  é  perfeitamente possível  que  FTs  possam  ser  desenvolvidos  e  utilizados  sem  que  esses  elementos  sejam utilizados.  Entretanto,  sua  utilização  traz  benefícios  de manutenibilidade,  reusabilidade  e produtividade para os profissionais envolvidos no processo. 

  A  arquitetura  final  de  uma  aplicação  que  foi  desenvolvida  com o  apoio  de  vários FTs é complexa. A existência de estereótipos que ajudem identificar as partes  importantes dessa complexa arquitetura é importante para a utilização da aplicação. 

II Latin American Workshop on Aspect-Oriented Software Development

78

O perfil para FTs apresentado necessita ser aprimorado. Um estudo de caso maior, que utilize todos os estereótipos e  idiomas para FOAs, avaliando de  forma mais precisa a semântica  do  perfil  será  realizado  em  trabalhos  futuros. Os  conflitos  que  podem  ocorrer entre  os  estereótipos  criados  também  serão  analisados  em  trabalhos  futuros.  Uma comparação  entre  a  manutenibilidade  de  um  framework  modelado  com  de  maneira convencional e com o perfil proposto também será feito em trabalhos futuros.  

Referências Bibliográficas 

Aldawud,  O.,  Elrad,  T.,  Bader.  A.  UML  Profile  for  Aspect-Oriented  Software Development. In: Proceedings of Workshop of Aspect Oriented Modeling with UML of Aspect Oriented Software Development Conference (AOSD), 2003. 

Barra, E., Génova, G. and Llorens, J. 2004. An approach to aspect modeling with UML 2.0. In Proc. 5th Int. Workshop on Aspect-Oriented Modeling, October 2004. 

Camargo,  V.V.;  Masiero,  P.C.  A  Pattern  to  Design  Crosscutting  Frameworks.  In: Proceedings  of  the  23rd  Annual  ACM  Symposium  on  Applied  Computing  (ACM-SAC'08), Fortaleza, Brasil, 2008. 

Evermann,  Joerge.  2007.  A  Meta-Level  Specification  and  Profile  for  AspectJ  in  UML. Victoria University Wellington, Wellington, New Zealand. AOSD 2007. 

Fontoura,  M.,  Pree,  W.,  Rumpe,  B.  The  UML  Profile  for  Framework  Architectures. Addison Wesley, 2002. 

Griswold, W.G., Shonle, M., Sullivan, K., Song, Y., Cai, Y., Rajan, H. Modular Software Design with Crosscutting Interfaces, IEEE Software, pp 51-60, 2006. 

Groher, Iris, Baumgarth, Thomas. 2004. Aspect-Orientation from Design to Code. Munich, Alemanha. 2004. 

Hanenberg, S., Unland, R., Schmidmeier, A. AspectJ Idioms for Aspect-Oriented Software Construction.  In:  Proceedings  of  8th  European  Conference  on  Pattern  Languages  of Programs (EuroPLoP),  Irsee, Germany, 25th–29th June, 2003. 

Kiczales, G., Lamping,  J., Mendhekar, A., Maeda, C., Lopes, C., Loingtier,  J.,  Irving,  J. Aspect Oriented Programming. In: Proceedings of ECOOP. pp. 220-242, 1997. 

Pinto, M., Fuentes, L., Fayad, M.E, Troya, J.M. Separation of Coordination in a Dynamic 

Aspect  Oriented  Framework.  In:  Proceeding  of  the  1st  International  Conference  on Aspect-Oriented Software Development, April 2002. 

Rashid, A., Chitchyan, R.  Persistence  as  an Aspect.  In:  Proceedings  of  2nd  International Conference on Aspect Oriented Software Development – AOSD. Boston – USA, 2003. 

Rausch, A., Rumpe, B., Hoogendoorn, L. Aspect-Oriented Framework Modeling. In: The 4th AOSD Modeling With UML Workshop. 2004. 

Soares, S., Laureano, E., Borba, P. Implementing Distribution and Persistence Aspects with AspectJ. In: Proc. the 17th ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA), pp 174-190, November, 2002. 

 

II Latin American Workshop on Aspect-Oriented Software Development

79