On Tue, 16 Oct 2007, khraath wrote: >> 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?
Az interface-en. A Pascal szintaktikát már rég elfelejtettem, de C-ben valami ilyesmit lehetne csinálni: void push_float(struct stack *s, float f); void push_int(struct stack *s, int i); int pop_float(struct stack *s, float& f); // 0 a visszatérési érték, ha OK int pop_int(struct stack *s, int& i); // -1, ha rossz típus, -2 ha üres verem > Persze > futás időben lehet hiba üzenetet írni, ha mégis valami gond van, de > attól gond nem múlik el. Ha mindenféle típust lehet betenni a verembe, akkor minden nyelven le kell kezelned ezt a hibát. [...] > 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. Pedig az általános nyelv pont attól általános, hogy mindenfélét lehet benne írni :-) Persze nem célszerű mondjuk Fortranban írni adatbázist, de lehet. >> 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. Megírok különböző függvényeket és mutatókat adok át. Nézd meg pl. a GTK-t, grafikus objektum orientált library C-ben. Nem szép, de működik. > Na már most, a kód használóját > mi akadályozza meg, hogy Objectként adjon át egy nem Objectet? Miért Object-et kellene elfogadni? Az említett GTK-ban pl. GtkWidget* típust lehet átadni, vagy GtkButton* típust, vagy amit akarsz. > 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? C-ben is el lehet rejteni az struktúra mezőit. Bye,NAR -- "Beware of bugs in the above code; I have only proved it correct, not tried it." _________________________________________________ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux