Gyakorlati alapok III.
A getter-setter függvények
Bevezetés
A Tisztelt Olvasó egyre jobban megbizonyosodhat arról, hogy az
objektumorientált programozás alapja az egymástól elkülönült (tegyük hozzá:
szándékosan jól elkülönített) objektumok funkcionális összekapcsolása egy
magasabb szintű programozási cél érdekében.
Az objektum alapja pedig maga az
osztály,
amely már önmagában is működőképes, a külvilágtól elzárt, valamilyen
funkcionalitás szerint logikusan megtervezett kódegység. Az osztály dedikált
működéséhez szükséges adatokat és metódusokat tartalmaz, nagyobbrészt azon
célból, hogy ezeket szabadon, ám ellenőrzött körülmények között
felhasználhassuk. Bármely funkciójú osztálynak lehetnek olyan belső metódusai,
amelyek működése nem tartozik a külvilágra, sőt egyenesen veszélyes volna
elérésüket megengedni. Vegyünk például egy komplex adóprogramot, amelyik
különálló osztályokban:
-
kommunikál a felhasználóval,
-
elvégzi a számításokat,
-
adatbázis-lekérdezéseket, sőt módosításokat hajt végre.
Gondoljunk bele, mi történne, ha például az adatbázis-módosításokat jogosulatlan felhasználónál
is engedélyeznénk! Ám ez fordítva is igaz: nincs értelme kommunikációs
felületnek, ha senkinek sincs jogosultsága használni.
A védelem első vonala a
hozzáférés-módosítók
okos, megfontolt használata. A második arcvonalban is léteznek további
trükkök, amelyek egyébiránt jó ideje az objektumorientált programozás szerves
(továbblépve: kötelező) részét képezik.
Az osztály adatai legtöbbször az osztály belső magánügye, bemeneti adatokként
értelmezve egyfajta számítási kiindulópontok.
Az állítás megértéséhez állítsunk egy érdekes párhuzamot az osztály és az
ember között. Az embernek is számtalan metódusa van, amit leginkább a
tevékenység szóra lehetne most átkonvertálni.
Az ember néhány tevékenysége publikus, ám nem oly meglepő módon léteznek privátok is. Egyúttal az ember sok adattal is rendelkezik, a legtöbbjük azonban személyes és senki sem adja ki őket szívesen a nyilvánosság számára. Ez talán mostanában kezd megváltozni a Facebook és más közösségi oldalak térhódításával, ettől függetlenül mégsem üldögélünk a buszon nyakunkban egy nagyított névjegykártyával. Adataink tehát alapjában véve privátok és védjük őket.
Az osztályban sincs másképpen: legtöbb adata privát hozzáférést kap. Ekkor
azonban felmerül a jogos kérdés, hogy miként fogja elérni azokat egy külső osztály?
Természetesen különbséget kell tennünk az elérési szintekben: nem mindegy,
hogy az adatokat csak kinyerjük és felhasználjuk vagy módosítjuk is. Itt
érkeztünk el a lényeghez:
Az adatokat egy jól megtervezett osztályban csakis metódusokon keresztül érhetjük el!
Mit érünk ezzel? Az adat saját privát hozzáférése miatt érintetlen marad,
ám a metódusokon keresztül mégis elérhetővé válik, sőt ezt a hozzáférést a
metódusokon keresztül sokféle módon szabályozni is tudjuk.
Erről a rugalmas hozzáférésről gondoskodnak az immár kötelezően
használandó getter-setter függvények. Konkrét használatukat a
következő fejezetben ismertetjük.