Tegyük fel, hogy van egy világunk, ahol többféle élőlény él: vannak növények és állatok, ezen belül pedig húsevők és növényevők. Konkrétan legyen némi zabunk, káposztánk, egy-egy zebránk, kecskénk és tigrisünk. Ezek az élőlények a szokásos módon táplálkoznak: a növényeket megeszik a növényevők, őket pedig a húsevők. Utóbbi esetet az áldozatok sikoltozása kíséri, illetve minden növényevő csak egyszer fogyasztható el.
Rendelkezésünkre állnak tehát az alábbi osztályok. Az öröklések egy fát határoznak meg természetes módon:
Létrehozzuk az objektumokat, mint a világ élőlényeit
Felvesszük a zebra és a kecske ételei közé a növényeket. Az adott aspektusban - mint sikoltozás - ennek nincsen eredménye, hiszen a növények nem sikoltoznak.
Felvesszük a zebrát és a kecskét a tigris étrendjébe.
Ők azonnal sikoltoznak, mert az aspektus meghatározta, hogy amennyiben egy húsevő objektum addMitEszik() metódusának paramétere Növényevő tipusú, akkor az az objektum - a paraméter - sikoltozzon.
A legérdekesebb a negyedik pont, tekintsük át ezt részletesen:
Első lépésként definiáljuk a pointcutot, mint join pointok halmazát. A pointcut neve husevoEszik, a két paraméter a műveletben szereplő két objektum (amin meghívjuk a metódust, és amit paraméterként kap). Ez áll a kettősponttól balra. A jobbra eső részben megadjuk, hogy a célobjektum egy Húsevő, a paraméter Vegetáriánus típusú, és a hívás tetszőleges paraméterekkel rendelkező. Minden hívás, amire ez illeszkedik, az alábbi advice kezeli:
after (Husevo fogyaszto, Vegetarianus etel): husevoEszik(fogyaszto, etel) { pechEffekt.sikoltozas(etel); }
Az after advice - a listára való felkerülés utáni "tanács" - a kapott két paraméterrel (hogy azonosítható legyen) fent látható. A húsevő eszik, és az étlapra került állat objektumával a Sikoly osztály példányának sikoltozas() metódusa meghívásra kerül.
Az állatobjektumok és a viselkedés elkülönültek maradtak, nem keverednek a kódok, hanem egy, az osztályokat "fentről" szemlélő módszer - az aspektus - segítségével határoztuk meg a kapcsolatukat.
A példa forráskódjai - kommenttel ellátva - innen tölthetők le.