Programowanie aspektowe - cwiczenia 2008/2009
Z JASR Wiki
<<< Powrót do Tworzenie aplikacji wielowarstowych 2008/2009
Spis treści |
Trochę teorii
...
- Przejrzyj tutorial o Development aspects
- Przejrzyj tutorial o Production aspects
- Przejrzyj ściągę ze składni
- Semantykę znajdziesz tutaj
- A tu jest książka z dobrze wyjaśnionymi przykładami.
Ćwiczenia
Ćwiczenie 1
Przygotuj aspect przyspieszający wyliczanie liczb Fibonacciego przez podany poniżej naiwny algorytm.
public class Fib {
static long 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 RunFib {
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;
while (!finish) {
int liczba = readN();
System.out.printf("Fib(%d)=%d\n", liczba, Fib.compute(liczba));
}
}
}
Wskazówka
Rozwiązanie
Ćwiczenie 2
Przerób swoje poprzednie rozwiązanie tak, aby advice był wykonywany jedynie dla nierekrurencyjnych wywołań.
Wskazówka A
Rozwiązanie A
Wskazówka B
Rozwiązanie B
Ćwiczenie 3
Przygotuj aspekt wypisujący informację o wszystkich joinpointach zachodzących w kodzie podanej niżej 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();
}
}
Wskazówka
Rozwiązanie
Ćwiczenie 4
Jaka jest różnica między call() i execution()? Przygotuj przykład pokazujący tą różnicę.
Wskazówka 1
Wskazówka 2
Rozwiązanie
Ćwiczenie 5
Przygotuj aspekt wypisujący coś przy pomocy System.out.println(), gdy dochodzi do wywołania System.out.println().
Wskazówka
Rozwiązanie
Ćwiczenie 6
Przygotuj aspekt zliczający nowo tworzone obiekty klasy A.
Wskazówka
Rozwiązanie
Ćwiczenie 7
Wymyśl, rozwiąż i prześlij do prowadzącego nowe ćwiczenie pasujące do tych zajęć.