dr DRShowError{ //mostra mensagem de erro para o usuário aspect ShowError { private interface IActionPerformedError{ public void actionPerformed(); // classes ConversionReportFrame, ConvertDialog, ConvertWorker, CreateComicDialog, CreateComicWorker // FileFieldAdder, GoToPageDialog.CancelAction, BooleanSettingCheckBox, ColorSettingMenuItem, ConversionBean // implements IActionPerformedError; } around(): execution(void IActionPerformedError.actionPerformed()){ try { proceed(); } catch (Throwable erro) { //chama método para mostrar mensagem de erro para o usuário } } private interface IHandleEventError{ public void handleEvent(EventObject e) throws Exception; // classes GoToPageDialog.OkAction, JomicFrame implements IHandleEventError; } around(): execution(void IHandleEventError.handleEvent(EventObject)){ try { proceed(); } catch (Throwable erro) { //chama método para mostrar mensagem de erro para o usuário } } private interface IPropertyChangeError{ public void propertyChange(PropertyChangeEvent e); // classes BooleanSettingCheckBox, BooleanSettingMenuItem, ChangeBlurSettingsDialog, // ColorSettingMenuItem, GoToPageDialog.OptionValueChangedListener, JomicFrame, // ComicView implements IPropertyChangeError } around(): execution(* IPropertyChangeError.propertyChange(..)){ try { proceed(); } catch (Throwable e) { //chama método para mostrar mensagem de erro para o usuário } } abstract class IItemStateChangedError{ propertyName; command; public void itemStateChanged(); //classes BooleanSettingCheckBox, BooleanSettingMenuItem implements IItemStateChangedError; } void around (): execution(* IItemStateChangedError.itemStateChanged(..)){ try { proceed(); } catch (Throwable e) { //chama método para mostrar mensagem de erro para o usuário de acordo com o evento, o erro e os atributos command name e property name } } } } dr DRrefreshPageView { //atualiza controles de navegação quando uma nova página for renderizada class JomicFrame () { performGo*(..) { //renderiza a próxima página } refreshPageState() { //atualiza os controles de navegação da interface de acordo com a página renderizada } } aspect performGoNextOrLastAspect { pointcut refreshPage (): execution(void JomicFrame.performGo*(..)); after(): refreshPage(){ //chama o método refreshPageState da classe } } } dr DRcreateComic { //separando o caso de uso criar comic das outras classes class JomicApplication { actionPerformed (ActionEvent) { //método engatilhado quando algum evento lançado pelo usuário ocorre na interface } } class CreateComicWorker { run () { //criação de uma nova comic } } class CreateComicDialog { } aspect CreateComicAspect { pointcut verificarEventos(): execution(* JomicApplication.actionPerformed(..)) before (): verificarEventos (){ //verifica se evento é relativo à ação de criar uma nova comic. Caso positivo mostra o interface de criação de uma nova comic //se usuário preencheu campos corretamente na interface de criação de comic chama thread para criação de uma nova comic } } }