> 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
