wtorek, 22 listopada 2011

Programowanie aspektowe – aspekty statyczne

W części pierwszej opisane zostały aspekty dynamiczne, czyli dodatki do istniejących klas i metod. Tym razem opiszę aspekty statyczne. Aspekty te pozwalają dodać nowe metody i pola do istniejących klas.
Aaa:
package kkk;

public class Aaa {

    public static void main(String[] args) {

 Obiekt samochodzik = new Obiekt((float) 99.99);
 System.out.println("cena - " + samochodzik.getCena());

 System.out.println("po podatku - " + samochodzik.dodajPodatek(99));
 System.out.println("po uldze - " + dodajUlge(99));

    }

    public static float dodajUlge(float cena) {
 return cena - cena * ulga / 100;
    }
}
AddMethod:
package kkk;

public aspect AddMethod {
    public static float podatek = 23;
    public static int Aaa.ulga = 15;

    public float Obiekt.dodajPodatek(float cena) {
 return cena + cena * podatek / 100;
    }
}
Obiekt:
package kkk;

public class Obiekt {
    private float cena;

    public Obiekt(float cena) {
 this.setCena(cena);
    }

    public float getCena() {
 return cena;
    }

    public void setCena(float cena) {
 this.cena = cena;
    }
}
Wynik:
cena - 99.99
po podatku - 121.770004
po uldze - 84.15

Jak widać w przykładzie aspekt dodaje jedną metodę do klasy Obiekt i jedno pole do klasy Aaa.
Na tych metodach i polach można operować tak samo jak na tych napisanych wprost.

Brak komentarzy:

Prześlij komentarz