> Mert? Pascalban is van pointer, ha jól emlékszem, szóval olyan
> rekordokat kell tárolni a veremben, aminek egyik mezője tárolja a
> típust, a másik az értékre mutató pointert. Persze Java-ban sokkal
> egyszerűbb lenne megcsinálni, mert van reflection - viszont nem a
> reflection-nel kell elkezdeni a programozás tanítását.

Igen. Akár C-ben, de hol az adat biztonság fordítási időben? Persze
futás időben lehet hiba üzenetet írni, ha mégis valami gond van, de
attól gond nem múlik el. Ha egy repülőtéri irányító rendszerhez kellene
írnom egy hasonló szerkezetet, akkor biztosan nem választanám ezt a
módszert, hanem valami olyan megoldást keresnék, ami nem lenne egyenes
út a Repülő katasztrófák sorozatba.
Itt nem a példa megoldása volt a lényeg, hanem, hogy még az általánosan
használható nyelvek, mint a Pascal, sem mindenhatóak. Ne is beszéljünk
az olyan nyelvekről, mint a Prolog.

> Mert? Pascalban is lehet rávezető feladatot adni, struktúrális nyelven
> is lehet "objektum-orientáltan" programozni, a
> f(object, data);
>
> és a
> object->f(data);

Nagyon sok a különbség a kettő között. Lehet, hogy nem látod, de sok van.
Az, hogy írás módban nagyon hasonlít, és a végeredmény azonos lesz, nem
jelenti, hogy a működés is megegyezik.
Itt van rá egy példa:
f(object, data)
Eddig jó, de ha mondjuk több Object típus is létezik (pl GUI-ban
több féle widget is van), akkor vagy megírsz egy külön függvényt
mindegyikhez, vagy mutatót adsz át. Na már most, a kód használóját
mi akadályozza meg, hogy Objectként adjon át egy nem Objectet?
Semmi. A fordító se fog szólni. Persze f-ben ellenőrízheted a dolgot, de
szinte biztos, hogy egy hiba üzenet lesz és kész. De még f hívása előtt
se mész semmire azzal, hogy tudod, hogy nem Object. Megoldani nem tudod,
csak jelezni a problémát.
Másik oldal: mi garantálja, hogy f nem vágja tönkre objectet? Honnan tudom,
hogy csak a data mezőhöz nyúlt?
Cpp-ben például ez(f(data)) egy virtuális függvény lesz, ami egyrészt
biztosítja, hogy bármely Object leszármazott saját megvalósítást adjon
f-nek, és persze garantált, hogy object egy Object (vagy leszármazottja).
Ha véletlenül (vagy hanyagságból) benézed mégis a dolgot, akkor a fordító
biztos leáll hibával. Mivel az object saját f-jét hívtad, így nagyon
valószínű, hogy "nem rontja el magát".
Tanúság: jól megirt osztály szerkezet nem csak a végfelhasználótól, hanem
még a karbantartótól, és más kód felhasználóktól is véd (azaz magadtól ;)).

Khraath
_________________________________________________
linux lista      -      [email protected]
http://mlf2.linux.rulez.org/mailman/listinfo/linux

válasz