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
»Webszerkesztési munkát keresek
»Flash játék
»Oracle DBA-t keresünk Németországba
»Weboldalkészítést vállalok
»Senior PHP fejlesztőket keresünk - Budapest
» több téma
Tudástár
?Küldő oldalnak GET érték átadása
*Nem olvasható weboldal
?Mappából képek törlése és mappából másolás
Típusos tömb TVarRec - Syntax ERROR
*Hardver elérése C-ből Dos mentesen
*Linux Mail Receive Script
?Egyszerű beolvasás file-ból tömbbe (c)
?Java JTable focus probléma
?MSSQL-Progress összelinkelése
?E-mail cím bekérése okosan
Egyszerű kérdés delphiben :)
?Klikkszámláló weblapra
Platformfüggetlen betűtípus
?Push metódus JAVA Array -hez
*Rajz mozgatásának akadása
» több téma
Társalgó
»Webshop fordítva?
»Piackutatás a Google segítségével
»Microsoft: a WPF halott
»Böngészős Stratégiai játék db feladatok
»Eladó prog könyvek
»Mit is tanuljak először Java vs C#?
»SSL socket kliens szerver biztonsagos?
»Rails hoszting szolgáltatót keresek
»Session hamisítás lehetséges?
»Netrádió szerver
» 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 (25 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ó:

hirdetés
RSS források
-Hírek
-Cikkek
-Fórumok
-Állás/munka
Top pontgyűjtők
»Micu2.650
»Interlock800
»Pitta_730
»Frostech0570
»mezofi570
»Riha540
»Itchycoo390
»Varsi310
»Árnyék300
»NevemTeve200
Top wikieditorok
»Sting
»Doi
»FlamingClaw
»Argathron
»Csaboka2
»Vodka
»Joexy
»Ivn
»Kelemzol
»Balucinho
» ugrás a wikire
A nap kifejezései
ȃrtelmezett nyelv
»Szkriptnyelv
»Turbo Pascal
» ugrás a wikire
jobline.hu
»GAZDASÁGI INFORMATIKUS (FLUENT ENGLISH)
»PROGRAM TESZTELŐ (PÉNZÜGYI, KÖNYVVITELI PROGRAMOK)
»INTERNAL CONTROLS & TESTER (GERMAN SPEAKING)
»BUSINESS INFORMATION ANALYST
»BP - Czech Speaking Customer Service Support CSR
» még több állás
Hírek
»Lazultak az AppStore feltételek - több eszközzel lehet fejleszteni iPhone-ra
»Microsoft: a WPF halott
»Új nevet kap a Mozilla webes kódszerkesztője
»Webjáték-fejlesztő versenyt indít a Mozilla
»Megnyitja a Wave forráskódját a Google
» több hír
PC Fórum hírek
»Spamküldő botnet tulajdonosa lett a Microsoft
»Javíthatatlan biztonsági hibát rejt az iPhone és az iPad
»Tíz letartóztatás a keddi torrent-razzián
»Digitális bérgyilkosokkal intézteti el a kalózokat a filmipar
»Mostantól már gépelés közben mutatja a találatokat a Google
»Tíz kritikus biztonsági hibát javít az új Firefox
»A Pirate Bay is áldozatául esett a tegnapi torrent-razziáknak
»Kiszivárgott videón az Internet Explorer 9
Tagi blogok
»PSP
»Első Programozó
»USB
»PHP, mint sablonmotor egyszerűen