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

válasz