Keresés
Hírlevél
 
Kiemelt témák
»Hogyan védjem meg a portálomat?
»Google wave
»Assembly :: röviden
Állás/munka
»Másodállást keresek, C# és C++
»IPhone App elkészítése
»PHP Fejlesztőt keresünk Miskolcon!
»Profi sitebuildert keresünk projekt alapon
»PHP állás azonnali belépéssel Budaörsön
» több téma
Tudástár
?Ovál menüre
?Delphi SOAP + IBQuery komponens hiba
*Több nyelvű flash mozi XML-ből ciklussal
?Több oldalvezérlő menü egy oldalon
*Flash vissza a fooldalra
?Free pascal unicode stringek
?PHP mappanév
?C++ argv tartalmanak elemzese
Több adat kiírása.
ZQuey-en tárolt adattáblanevek
MySQL beágyazott query ( MAX(SUM())
*Ajax ellenőrzés, eredményfüggő megjelenítés
?Nem jön létre kapcsolat a server-el
?Jquery pictures
Weblap megjelenítése Java Panelben
» több téma
Társalgó
»Melyik főiskola vagy egyetem?
»Weblap véleményezés
»Lelkesítő topic
»Clipper kontra XP
»Programozás Nokia 3720c-2-re
»HTML szerkesztő
»"Márió" jellegű játék írása pascal nyelven
»Windows Mobile programozás egyszerű programmal
»Javascript forrás visszaalakítása
»Ártalmas szoftver, támadó webhely kijavítás
» több téma
Cikkek
»Bevezetés a genetikus algoritmusokba
»Bevezetés az adatkezelésbe
»Bevezetés a CSS alapjaiba
»GroupWise-kiegészítők készítése Python-ban
»Aspektus-orientált programozás
» több cikk
ASP  |  C#  |  C++  |  CSS  |  Delphi  |  Flash  |  HTML  |  Java  |  JavaScript  |  Pascal  |  Perl  |  PHP  |  Python  |  Visual Basic  |  Visual C++  |    »    

Cikkek

»

Egyéb

»

Programozás-elmélet

»

Aspektus-orientált programozás

szerző: boj, idő: 2005.03.10., értékelés: 4.5 (23 szavazat)
  Betűméret növelése Betűméret csökkentése Kapcsolódó fórum Felvétel kedvencekhez Küldés emailben Nyomtatható verzió
AOP

Mi tömören az aspektus orientált programozás? Legáltalánosabban megfogalmazva egy magasabb szintű absztrakciót vezet be az OO-hoz képest. Másképp fogalmazva: megadja nekünk az alkalmazáslogikát keresztbe-kasul vagdosó síkok (mint például a felhasználó-azonosítás) kiemelésének lehetőségét.

Miért hívják aspektus-orientált programozásnak? Azért, mert a feladatokat bizonyos aspektusok szerint értelmezzük: egy átutalás a naplózás vagy a tranzakció-kezelés szempontjából - hogy csak kettőt említsek a klasszikusok közül.

Ramnivas Laddad, akinek AOP-t és az AspectJ-t elemző és ismertető munkái mérföldkőnek tekinthetőek, a következő két ábrán mutatta be a 'klasszikus' tervezés problémáját és az aspektus orientált programozás által rá adott választ.

Az 1. ábrán a különböző feladatok, megszorítások, elvárások (például logolás, perzisztancia, biztonság) keveredése látható a rendszer moduljaiban.


1. ábra

A 2. ábra - az úgynevezett 'Prizma analógia' - azt szemlélteti, hogyan bomlik fel a követelményrendszer - mint egy fénynyaláb a spektrum szineire - különállóan megvalósitandó feladatokra.


2. ábra

A dolog szépsége az, hogy miután az elvárásokat külön-külön megvalósitottuk - anélkül, hogy bizonyos osztályok kódjat szétszórtuk volna a többiben -, a compiler (itt: weaver) a megfelelő utasítások alapján összeszövi őket egy szerves egésszé. A kérdés már csak az: mi az a rugalmas, barátságos és stabil módszer, ami ezt biztosítja?

Tekintsük újra a logolás példáját, de most az osztály megvalósításakor kizárólag a fontos feladatot valósítsuk meg.

public class FontosOsztaly {
     
      public static void fontosMetodus() {
            System.out.println(" ->A fontos dolog");
      }
}

Látható: az osztály csak és kizárólag a rá háruló munkát végzi el. A kérdés már csak az, vajon mi módon vesszük rá, hogy előtte és utána naplózza a történteket?

A megoldás egy apsect (aspektus) létrehozása. Egyelőre minden magyarázat nélkül tekintsük - az amúgy igen beszédes - kódot:

public aspect logAspect {

    pointcut greeting():
        execution(* FontosOsztaly.fontos*(..));

    before() : greeting() {
        System.out.println("[A fontos metodus elindul]");
    }

    after() : greeting() {
        System.out.println("[A fontos metodus lefutott]");
    }
   
}

Futás után a kimeneten az alábbi eredményt kapjuk:

A nyelvi elemek értelmezését egyelőre kinek-kinek a ráérzésére bízom - a következő részben részletesen el is magyarázom -, a lényeg talán e nélkül is látható:

  • Külön kerül az alkalmazáslogika szempontjából lényeges és lényegtelen (Legalábbis ritka, hogy egy programot csak azért készítenénk, hogy naplózgathassunk.)
  • Bármikor hozzáadható új aspektus. Ne legyünk fantáziátlanok: ez nem csak egy új logger lehet, hanem akár az alkalmazás szempontjából fontos aspektus is, például authentikáció. Az érintett metódusok névvel vagy mintaillesztéssel is megadhatóak. (FontosOsztály.*)
  • Bármikor összeköthetjük az aspektusokat és az osztályokat, így a tervezés folyamatában nagyobb szabadságot élvezünk.
  • A tiszta funkcionalitású osztályok sokkal könnyebben fejleszthetőek (nem lesz például véletlenül kikommentezett vagy bentfelejtett logolás vagy tranzakciókezelés), mozgathatóak és rakhatóak össze újra.

A fenti kritériumok némelyike ismerős lehet: a szoftvertervezés világában ezek egyben a komponensalapú programozás követelményei is. Azt pedig, hogy az aspektusorientált programozás kapcsolatban áll a másodrendű logikával, már csak halkan jegyzem meg...

Küldés emailben Küldés emailben Nyomtatható verzió Nyomtatható verzió
Belépés
E-mail cím:
Jelszó:

RSS források
-Hírek
-Cikkek
-Fórumok
Top pontgyűjtők
»Micu1.770
»Árnyék810
»vinie530
»Frostech0400
»Riha400
»pelz350
»djjjozsi310
»stl290
»NevemTeve230
»klorand220
Hírek
»Cassandra-ra tér át a MySQL-ről a Digg is
»Letölthető a Mozilla Jetpack SDK első kiadása
»Saját alkalmazásboltot nyitott a Google
»Súlyos sebezhetőség minden Apache kiszolgálóban
»Natív 3D-s támogatás a legújabb Android fejlesztőkészletben
» több hír
PC Fórum hírek
»Minden weboldalra beköltözne a Facebook
»Nem boldogul az legújabb merevlemezekkel az XP és a Linux
»Átírják a Firefox licencszerződését
»Több tízezer nebuló a Microsuliban
»Sebezhető az Internet Explorer és az Opera is
»Még márciusban megjelenik az Intel nyolcmagos szerverlapkája
»Hamis Core i7 processzorokat árultak a neten
»Korábban jön a Windows 7 Service Pack 1
Tagi blogok
»USB
»PHP, mint sablonmotor egyszerűen
»Én és linux
»Coming out