Keresés
Hírlevél
 
Kiemelt témák
»Hogy viszonyul ehhez a család?
»Legjobb metodika emberi relációk tárolására
»A programozó hibája, hogy törik a programját?
»Jogosultság kezelés mezőszinten
Állás/munka
»Wordpress szakértőt keresünk
»Kamu álláshirdetők listája
»Front-end fejlesztő / Sitebuilder
»DataStore Developer
»PHP programozó, webfejlesztő munkát keres
» több téma
Tudástár
?Input mezőből visszakapott adat probléma
?HTML-ben a Flash átméretezés torzul
Eredeti mezőnevek lekérdezése
Oldalon keresés 8x írja ki az eredményt
?XML-ből sok szövegmező
TinyMCE és az ékezetek
?Rengeteg hasonló kép betöltése gyorsan (PHP)
Ékezetes kar. nem minden táblában jól
?Shelltreeview gond
Grafikon rajzolás probléma
?Onclick= php függvény
?Egyenes megrajzolása
?Access-ből adott xml fájl kinyerése
Listázás időpont szerint
Exportálás változó könyvtárba
» több téma
Társalgó
»A programozásból jól meg lehet élni?
»MFC tanulás
»Könyvet adok-veszek
»Hogy viszonyul ehhez a család?
»Nintendo wii
»Letölthető az új Rad Studio XE és Delphi XE
»Weblap véleményezés
»Játékmotor elmélet
»Informatikai bulvárlap
»Delphi-ről C++-ra váltá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 (24 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
-Állás/munka
Top pontgyűjtők
»Micu1.030
»Interlock280
»mezofi150
»Pitta_100
»Frostech0100
»szbzs.2100
»Hack100
»Riha60
»Akhiles50
»mrchandra50
Top wikieditorok
»Sting
»Doi
»FlamingClaw
»Argathron
»Csaboka2
»Vodka
»Joexy
»Ivn
»Balucinho
»Kelemzol
» ugrás a wikire
A nap kifejezései
»Algoritmus
»Hogyan kezdjem el
»Perl
» ugrás a wikire
Hírek
»Megérkezett a PostgreSQL 9.0 kiadásra jelölt változata
»Letölthető az új Rad Studio XE és Delphi XE
»Function-X digitális művészeti találkozó és demoscene party
»Webfejlesztőknek szóló közösségi oldalt indított a Microsoft
»Letölthető a hardvergyorsított Chrome 7 első fejlesztői kiadása
» több hír
PC Fórum hírek
»Itt az első kép az AMD nyolcmagos processzoráról
»"Szuperdizájnos" érintő-egeret mutatott be a Microsoft
»Szabadalmaztatta a számítógép kikapcsolását a Microsoft
»Vírusriadót váltott ki a webezőknél a Google
»Ingyen iWiW-ezhetnek mobiljaikról a T-Mobile-osok
»Automatikusan kiválogatja legfontosabb leveleink a Google
»OOo4Kids - ingyenes Office csomag gyerekeknek
»Új, gyorsabb Core i3 és Pentium processzorokat jelentett be az Intel
Tagi blogok
»PSP
»Első Programozó
»USB
»PHP, mint sablonmotor egyszerűen