( saxus | 2013. 02. 06., sze – 02:03 )

Alapvetően egy modellezési szemlélet amely a megoldandó feladat adatait és az azokon végzett folyamatokat absztrakt módon és opcionálisan lazán csatolva, az egyes részegységeket egyszerűen cserélhetően, tesztelhetően, rétegekre és részekre bonthatóan ad megoldást. Mindezt úgy, hogy az adott részfeladat megvalósítását képes elrejteni előled.*

Példák:

A téged érintő világot objektumokkal modellezed le. Például vegyünk egy webshopot: vannak benne Termékkategória, Termék, Termékkép, Terméktulajdonság, Vevő, Kosár, Kosárelem, stb. objektumod. Ezeket szépen lemodellezed, az objektumoknál szépen felvésed a viselkedését is hozzácsatolva az objektumhoz. Pl. a Kosár.KosárbaTesz(Termék) metódusod módosít a kosár tartalmán. Ez eddig ugye trivi.

Viszont amibe már nagyon sokan nem gondolnak bele, hogy objektumokkal nem csak "tárgyakat" lehet modellezni, hanem folyamatokat vagy magát az alkalmazást is. Példa: van egy termékkategóriád amely tartalmaz magában Termék objektumokat. Te ezt meg akarod jeleníteni de a felhasználó kiválaszthatja, hogy név vagy ár szerint akarja rendezni. Ilyenkor készítesz egy egy RendezveListázó absztrakt osztályt, majd ebből származtatsz egy név és egy ár szerint rendező objektumot majd ezzel rendezteted. (Egyébként nagyjából ez a strategy pattern lényege).

Na de te ki akarod szervezni az egészet egy külső modulba ami teljesen cserélhető. Ekkor már bejön az az (egyébként nagyon elhanyagolt alapelv, hogy) felületre fejlesztés. Te csak annyit tudsz, hogy van egy IRendezveListázó interface-d, amelyről annyit tudsz, hogy van egy Rendez(Termékkategória) metódusa. Arról, hogy mi és hogyan van mögötte implementálva, arról fogalmad sem lehet, az számodra egy fekete doboz. Ami mögötte van az cserélhető, jöhet bárhonnan, míg megvalósítja azt a "felületet".

Vagy például mondhatnám a melóhelyi projektem: az úgy néz ki, hogy minden modul egy külön dll. (.NET-es a cucc), amelyben vannak modulok, amelyek implementálhatnak ilyen-olyan interfacet. Természetesen ezek a modulok hívogatják egymást. Meg lehetne csinálni azt is, hogy minden modul hordozza magával a saját singletonját/globális változóját/static változóját/egyéb kedvenc megoldását de meg lehet csinálni azt is, hogy van egy Application objektum, amelytől le lehet kérni adott interface-t megvalósító modulokat. Aztán, hogy azon belül hogyan van megvalósítva egy modul (vagy egyáltalán melyik .dll-t tölti be) az már csak és kizárólag a config fájltól függ.

* Egyébként szerintem sokaknak ez a problémája, hogy nem képesek absztrakt fogalmakkal dolgozni. pl. ott egy sima mezei echo "bizbasz", ami megjelenít egy szöveget a képernyőn/weblapon/bármin. Valójában ez akár sok-tízezer CPU utasítás lehet, azonban számukra egy egyszerű, elemi művelet. Viszont úgy látom, hogy sokakat zavar, hogy ha nem látják pontosan a szemük előtt a megvalósítást. Pl. 6 példányban CTRL+C,V-zett listázó, mert nem tudott az elvont "Valamit Listázó" fogalmával megbarátkozni, csak azzal, hogy ez a kód itt egy olyan listázó, ami X-et kilistáz.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™