Keresés
Hírlevél
 
Kiemelt témák
»Hogyan védjem meg a portálomat?
»Ki legyen a nagytestvér?
»Google wave
»Assembly :: röviden
Állás/munka
»Junior .NET fejlesztő
»Java fejlesztőt keresünk Android fejlesztésre
»Android és iPhone fejlesztőket keresünk
»Grafikust keresünk távmunkában
»Raktárprogram
» több téma
Tudástár
?Ajaxos file betöltése utána alert
?JProgressBar használata
$_SESSION hiba
?Címkefelhő készítés
*JavaScript Selectable probléma
*WCF TCP Streamed transfer mode lehet duplex?
?Képernyő felbontás lekérdezése
Inputok szövegeit függőlegesen középre
?A kép nem találja futtatáskor
C#, Textbox, OnPaint metódus probléma
Delphi + DBGrid + Edit
Main(string[] args) lekérdezés, hogyan?
?Mysql select 3 táblából
?PHP sql insert into hiba
?Else ág hibája
» több téma
Társalgó
»Melyik programozási nyelv ér a legtöbbet?
»ExpressCard vélemények
»Java, vagy C# desktopra (Linux és Windows)?
»Ötödik Microsoft-vizsgájára készült egy 9 éves kisfiú
»Ajánljatok valami tárhelyszolgáltatót pls :)
»Flash 3D Mivel?
»Fut-e a Visual C#...
»Clipper kontra XP
»Melyik a legjobb Java oktató cég
»Weblap véleményezé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ó
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ó:

Állásajánlat
Tehetséges C#, .NET fejlesztőket keres vezető videotechnikai cég
RSS források
-Hírek
-Cikkek
-Fórumok
Top pontgyűjtők
»Micu1.450
»Árnyék910
»djjjozsi630
»vinie360
»klorand350
»pelz300
»Riha270
»@sanya200
»mrviceguy180
»Frostech0120
Hírek
»Ötödik Microsoft-vizsgájára készült egy 9 éves kisfiú
»Letölthető a Ruby on Rails 3.0 első bétája
»Letölthető a Moonlight 3.0 előzetes kiadása
»Kidobták a Linux kernelből a Google-t
»Feltörhetők az Oracle adatbázisszerverek
» több hír
PC Fórum hírek
»Született informatikusokat keresnek
»Élőbeszédet is tudnak majd fordítani a Google jövőbeni telefonjai
»A felhasználói tartalom 95%-a használhatatlan vagy veszélyes
»Új internet-protokollra vált a YouTube
»Szerencsétlen számú Windows-javítás érkezik jövő kedden
»Milliárdokért adott el Linuxot a Microsoft
»Jogosítványhoz kötné az internetezést a Microsoft
»Szövetségre lép az USA nemzetbiztonsági hivatalalával a Google
Tagi blogok
»Én és linux
»Coming out
»2010/1
»Webfejlesztő cég indítása