Az absztrakciós szint

-Absztrakció! - mondta Pistike.
-Egészségedre! - válaszolták a többiek.

Mi is ez a fura szó? Az absztrakció jelentése elvonatkoztatás, azaz egy összetett dologból néhány, számunkra fontos dolog kiemelése, és a többi nem fontos dolog figyelmen kívül hagyása.

Lássunk egy példát!

Ez egy absztrakt dekoráció

Erről mi jut az eszedbe? Nekem ez úgy tűnik, hogy:

Annak ellenére, hogy:

Tehát egyszerűen egy csomó olyan dolgot, ami nem fontos azt elrejti a kép. Ez tök jó, hiszen csak a lényeggel kell foglalkozunk!

Gondold el, milyen nehéz lenne filmet nézni, ha a szereplők ruhájának textilgyártási technológiáival is foglalkozna az agyunk, nem csak azzal, hogy mikor győz a főszereplő!

Az absztrakciókat mindennap automatikusan csinálja az agyunk, máskülönben baromira elfáradna a rengeteg sok részletes információtól. Az absztrakciók segítenek az agyunknak, hogy csak a lényeggel foglalkozzon.

Ahány cél, annyi absztrakció

Ez a kép dekorációs, tehát itt a virág alakja a fontos. Ha éppen biológia könyvbe készítenénk a növények tápanyagellátásáról szóló képet, akkor ez a kép nem lenne jó, mert ott a rostok a fontosak.

Mi az az absztrakciós szint?

Absztakciós szint: olyan absztrakció, ami elég részletes a céljainkra, de nem túl részletes feleslegesen.

Ha valami "magasabb" absztrakciós szint, az jobban elvonatkoztat, és kevesebb részletet tartalmaz. Ha valami "alacsonyabb" absztrakciós szint, az kevésbé vonatkoztat el, és sokkal több részletet tartalmaz. Lássunk egy példát, csináljunk vajas-sajtos szendvicset!

(Igazából itt fogalmunk sincs, hogy mit kell csinálni)

(Elég jól tudjuk, mit kell csinálni)

(Fúú ez nagyon sok részlet! Elveszünk a részletekben!)

Eddig túl alacsony absztrakciós szinten programoztunk!

Jajj, szégyen bevallani, de igen! Mert:

Na de akkor amit eddig csináltunk, az felesleges volt? Nem volt felesleges! Hiszen a számítógép csak a részletesen leprogramozott dolgot érti meg, utasításokat, változókat, szájbarágós, alacsony absztrakciós szintű dolgot. Hogy mennyire, arra itt egy remek videó - ami tényleg egy számítógép igazi legbelső nyelvén, gépi kódban (pontosabban assembly-ben) készült, és egy nyerőgép játékautomata programja.

Érdemes végignézni, és elképedni, hogy milyen követhetetetlen szemét lesz ebből az alacsony absztraciós szintből!

Akkor mi legyen?

A trükk az, hogy ugyan részletesen leprogramozunk dolgokat, de ezeket becsomagoljuk egy "dobozba", és innentől nem foglalkozunk a részletekkel, hanem csak a "doboz" funkcióit használjuk.

Például, ha be akarjuk kapcsolni a monitort, akkor nem ezzel foglalkoznuk:

Igen, a monitorban bele alacsony absztrakciós szint sok részlettel

hanem megnyomjuk az egyetlen gombot ezen:

De kívülről nézve, magas absztrakciós szinten könnyű kezelni

Az előző oldal alapján jogos a következtetésed: az objektumok pont ilyen kis dobozkák lesznek, amiket egyszer megcsinálunk, és onnantól nem kell foglalkozni azzal, hogy mi van bennük.

Sőt, a Java nyelvhez több ezer ilyen kész objektum jár, mindenféle dolgokra, a vonalrajzolástól a hanglejátszásig.

A jó absztrakciós szint könnyűvé tesz mindent

A megfelelő absztrakciós szinten megírt program olvasható, azaz ha ránézel, akkor egyből látod a programozó szándékát. Az olvashatatlan, bonyolultnak tűnő programokat azok készítik, akik nem értenek a programozáshoz - és utána egyre jobban belebonyolódnak.

Emlékszel, a DM-es részben is pedzegettük ezt a dolgot. A C-ben külön file-okba rakott függvényekkel rejtettük el a részleteket.

A Java-ban a külön file-okba rakott dolgok objektumok - és nem csak függvényeket tartalmazhatnak, hanem remekül elrejtik a részleteket: változókat, belső függvényeket. Az objektum egy tökéletes doboz, ami elrejti mindazt, ami nem tartozik az elképzelt jó absztrakciós szintre, de valahol csak lennie kell, mert valakinek csak meg kell értetni a számítógéppel, hogy mit is kell csinálni.

Az objektumok legnagyobb előnye az újrahasznosíthatóság: azaz miután becsomagoltunk valami ronda kódot egy objektumba, utána ezzel többet nem kell foglalkozunk és kerülgetnünk, csak használni szépen.

Absztrakciós szint

Arra kell törekedni a programozáskor, hogy a haszontalan részleteket elrejtsük, és a lényeggel foglalkozzunk.