Laboratorium nr 2


Materiały

  1. semantyka AspectJ
  2. ściąga ze składni

Ćwiczenia (podpowiedzi w komentarzach strony)

  1. Przygotuj aspect przyspieszający wyliczanie liczb Fibonacciego przez podany poniżej naiwny algorytm.
    public class Fib {
    	static int compute(int n) {
    		if (n == 0) return 0;
    		else if (n == 1) return 1;
    		else return compute(n-1)+compute(n-2); 
    	}
    }
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class Test {
    	static BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
    	
    	static public int readN() {
    		int liczba;
    		while (true) {
    			System.out.println("Podaj liczbę całkowitą: ");
    			try {
    				liczba = new Integer(r.readLine());
    				return liczba;
    			} catch (IOException e) {
    				System.out.println("Błąd we/wy!");
    			} catch (NumberFormatException e) {
    				System.out.println("Nie rozpoznano formatu liczby!");
    			}
    		}
    	}
    
    	public static void main(String[] args) {
    		boolean finish = false;
    		
    		int guess;
    		while (!finish) {
    			int liczba = readN();
    			System.out.printf("Fib(%d)=%d\n", liczba, Fib.compute(liczba));
    		}
    	}
    }
    
  2. Jaka jest różnica między call() i execution()?
  3. Przerób swoje poprzednie rozwiązanie tak, aby advice był wokywany jedynie dla nierekrurencyjnych wywołań.
  4. Przygotuj aspekt wypisujący informacje o wszystkich joint-pointach zachodzących w kodzie klasy Test, gdy jest ona wykonywana.
    public class Test {
    	int x;
    	
    	void f() {
    	    System.out.println("f();");
    	    System.out.println("f();");
    	    x = 1;
    	}
    	
    	public static void main(String[] args) {
    		Test t = new Test();
    		t.f();
    	}
    }
    
  5. Przygotuj aspekt wypisujący coś przy pomocy System.out.println(), gdy dochodzi do wywołania System.out.println().
  6. Przygotuj przykład pokazujący, że cflow(P) && cflow(Q) to nie to samo co cflow(P && Q).