Keresés
Hírlevél
 
Kiemelt témák
»Hogyan védjem meg a portálomat?
»Google wave
»Assembly :: röviden
Állás/munka
»Profi PHP szakit sörért felbérelnék :)
»C kódhiba
»IPhone App elkészítése
»GWT -ben tapasztalt webfejlesztőt keresek
»Profi sitebuildert keresünk projekt alapon
» több téma
Tudástár
?Szinpadon elhelyezett Symbol kezelése AS3-ban
?Önvédelmi mód
*Oldal title tagjába változó írása
*Utolsó 10 keresett kifejezés kiírása
*Rajzolás egy ablak fölé
Php sql update hiba input text-el
?Modrewrite ne legyen kötelező a parameter
?1 program többszöri elinditása automatikusan
?Sql ba user mentés majd rá 10 napra töröl
Perl könyvtárvizsgálat
VB 2005 + MySQL
*Webcam mozgás és szín érzékelés
C# Különbözű típusu osztályos származtatása
*Aktív beviteli mező és label hátterének kiemelése
?Input mezők megjelenítése
» több téma
Társalgó
»2f iskoláról vélemények
»Melyik főiskola vagy egyetem?
»Linux és a C#, .NET
»PHP fejlesztés felsőfokon eladó !
»Reklám kamu klikkelés kivédése
»Mik a legalapvetőbb tervezési minták C#-ban?
»Adatvédelmi nyilvántartás
»Hogyan védjem meg a portálomat?
»Trial megvalositasa
»Eclipse 3.5.2 és Visual Editor 1.4
» 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ó
Megtörtént már, hogy alkalmazásodat új tulajdonságokkal kellett kiegészitened néhány nap alatt? Találkoztál már az osztályok rugalmatlanságával? Mi is az az AOP? Nos, ezen problémák megoldása.

Egy-egy 'Hello World'-nél összetettebb alkalmazás tervezése során a fejlesztőnek egyszerre több feladatot kell egyidejűleg megoldania: kritikus műveleteket végez tranzakciókon belül, hitelesíti a felhasználót és logolja az eseményeket. A feladat végrehajtója így - általánosan egy objektum - nem csak azzal foglalkozik, ami valójában a feladata.

Minden objektum (illetve osztálya) amire ez igaz, veszít a rugalmasságából, újrafelhasználhatóságából, könnyed fejleszthetőségéből, ráadásul, ugyanazon kód felmérhetetlenül sokszor előfordul osztályokon át szétszóródva.

Az intuitív megközelítés talán jobban rávilágít a problémára. Tekintsük ehhez az alábbi osztályt:

class FontosOsztály {

    private Logger myLog = new Logger();
    private int FontosAdat;
...
    public fontosMetodus(...) {

myLog.add("[A fontos metodus elindul]");
... //Teszünk sok fontosat
myLog.add("[A fontos metodus lefutott]");
   
    }

}    

Első ránézésre nincs vele semmi baj. Pedig van.

A megoldás nagy hátránya az, hogy osztályunk nem csak azzal foglalkozik, ami rá tartozna: a naplózásnak semmi köze az osztály feladatához. Ennek megoldására hagyományosan két út létezik:

  • A Logger osztály - amikor már nincs rá szükség, például az add() metódus hívásakor - nem csinál semmit.
  • Az érintett kódrészleteket eltávolítjuk, szükség esetén a visszatesszük.

Aki már bíbelődött ilyesmivel, azonnal rávághatja az ellenérveket: az első eset használhatatlan, ha bizonyos helyeken szükség van a naplózásra és bizonyos helyeken nincs, a második pedig két fájlnál többől álló rendszer esetén már problémássá válhat: az ember lusta, a programozó a nap bizonyos részében ember...Továbbá: ne felejtsük el, ez egy igen egyszerű, lazán összegabalyodott példa volt, try - catch - (finaly) szerkezetet bele sem tettünk!

A tervezési minták - mint például a Decorator - bizonyos mértékig megoldást adnak erre a problémára (így a felsorolásban akár harmadikként is szerepelhetne), de - legjobb esetben is - fájlok túlburjánzásához vezethetnek, amibe a programozó és tervező egyaránt belefulladhat.

A refactoring is járható út lehetne, de túl sokat kell hozzá gépelni és gondolkodni az alkalmazás evolúciójának már korai szakaszában is. Lássuk be, ezt ha egy mód van rá, el kéne kerülni.

Röviden fogalmazva: az objektumorientált programozás nagy előnye, hogy egységbe zárva az adatot és a rajtuk végzendő mőveleteket megóvja azokat a felügyeletlen változásoktól - viszont megfosztja az objektumot attól, hogy a környezetétől függően viselkedjék. Továbbá az OO paradigma kiváló a feladatok modularizációjára, ellenben azok elkülönített implementálására nem. Ezekre nyújt - többek között - megoldást az AOP.

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.940
»Árnyék940
»vinie540
»Frostech0530
»djjjozsi470
»pelz420
»Riha420
»klorand370
»stl340
»Sztatty270
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
»Lopta a Firefox Jetpack terveit a Mozilla ?
»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
Tagi blogok
»USB
»PHP, mint sablonmotor egyszerűen
»Én és linux
»Coming out