Facebook
From Diana, 9 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 530
  1. Polecenia grupa 12.15:
  2. 1. Aspekt który blokuje wywołania metod statycznych
  3. z wszystkich klas wewnątrz pakietu model, albo wewnątrz podpakietu. Poprzez wyrzucenie wyjątku RuntimeExeption
  4.          
  5. 2. Dodać do klas których nazwa kończy się słowem model, dodać funkcjonalność:
  6. czy obiekt został zmodyfikowany(dwie metody)
  7.     setChanged(boolean)
  8.     boolean isChanged()
  9. zmieniony jak wykonala sie jakakolwiek metoda która zaczyna się od set
  10.  
  11. public aspect TrudnyAspect {
  12.         declare parents: *.*model implements ChangeTracked;
  13.  
  14.         private boolean ChangeTracked.changed = false;
  15.         public boolean ChangeTracked.isChanged() {
  16.                 return changed;
  17.         }
  18.  
  19.         public void ChangeTracked.setChanged(boolean changed) {
  20.                 this.changed = changed;
  21.         }
  22.  
  23.         before(ChangeTracked changeTracked)
  24.          : execution(* ChangeTracked+.set*(..))
  25.          && !execution(* ChangeTracked.*(..))
  26.          && this(changeTracked) {
  27.                 changeTracked.setChanged(true);
  28.         }
  29. }
  30.  
  31. interface ChangeTracked {
  32. }
  33.        
  34.        
  35. Polecenia grupa 14.15:
  36. 1) we wszystkich klasach z pakietu service przechwycic wywolania metod,
  37. które zwracają obiekt typu java.util.List. Jeśli metoda zwraca null,
  38. to aspekt powinien zastąpić zwracaną wartość Collections.EmptyList.
  39. 2) Do wszystkich klas z pakeitu service dodać z użyciem aspektu poniższe składowe:
  40. - getLastCallTime - zwraca obiekt typu date - powinno zwrocic czas ostatnio wywolanej metody
  41. - getLastReturnTime - czas powrotu z ostatnio wywolanej metody
  42.  
  43.  
  44.  
  45. Polecenia 17.40
  46. 1) przechwytywać wszystkie metody pakietu pack1 i jego podpakietów,
  47. które mają jeden parametr double. Sprawdzić, czy przekazany argument jest dodatni,
  48. jeśli ujemny, to wyrzucić wyj IllegalArgumentException
  49. 2) do wszystkich klas pakietu pack1 dodać możliwość
  50. włączania bądź wyłączania logiki 1 aspektu poprzez dodanie dwóch metod:
  51. - enableCheck - włącza logikę 1 aspektu
  52. - disableCheck -wyłącza logikę 1 aspektu
  53. Kontrolowanie osobno dla każdego obiektu
  54. Domyślnie logika wyłączona
  55.  
  56. package pak1;
  57.  
  58. public aspect Aspekt {
  59.        
  60.         declare parents : pak1..* implements EnableDisable;
  61.        
  62.         pointcut getReturningDouble(EnableDisable enableDisable, double liczba) : execution(* pak1..*.*(double)) && args(liczba) && this(enableDisable);
  63.        
  64.         private boolean EnableDisable.enableCheck = false;
  65.        
  66.         public void EnableDisable.enableCheck() {
  67.                 this.enableCheck = true;
  68.         }
  69.        
  70.         public void EnableDisable.disableCheck() {
  71.                 this.enableCheck = false;
  72.         }
  73.        
  74.         before(EnableDisable enableDisable, double liczba) : getReturningDouble(enableDisable, liczba) {
  75.                 if(liczba < 0 && enableDisable.enableCheck) {
  76.                         throw new IllegalArgumentException("Nie moze byc ujemna!");
  77.                 }
  78.         }
  79. }
  80.  
  81. interface EnableDisable {
  82.        
  83. }
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.