Subject: RE: [JavaTech] return type override

From: "Viktor Szathmary" <[email-masked]>
Date: Sun, 9 Dec 2001 14:18:39 -0500

hello,

> > meg mas egyeb erdekes eszrevetelek:
> 
> az az "egyeb mas" nagyon-nagyon keves volt. Ha csak ennyi

valoban :) csak az elso pontnak orultem, hogy nem csak engem zavar :)
szerintem annyira alapveto, kezenfekvo stb. lenne... de ugy nez ki hogy
elobb-utobb ez is becsuszik a javaba, tobb mas hasznos konstrukcioval
egyutt - lasd JSR-14 (avagy GenericJava):
http://jcp.org/jsr/detail/014.jsp

meg a vegen operator overloading meg ertelmes design-by-contract is
lesz... :)

	viktor

---

From: Szitas Krisztian <[email-masked]>
Date: Tue, 11 Dec 2001 15:57:33 +0100

En ugy emlexem, hogy a java nyelvet ugy terveztek meg,
hogy a legbiztonsagosabban lehessen programozni.
pl destruktor hianya, garbage collection, a tobb ostol
valo szarmaztatas mind ez miatt "hianyzik" a nyelvbol

Biztos vagyok benne, hogy a fenti eset is ennek az ideologianak
a szulemenye, en nem kispista nem tudta hogyan kell lekodolni.

Tehat azt kellene megtalalni, hogy milyen hiba fakadna abbol,
hogy letezne a fenti dolog.

En az interfacek iranyaban kutakodnak.

---

From: "Viktor Szathmary" <[email-masked]>
Date: Tue, 11 Dec 2001 10:10:04 -0500

hello :)

ok, egy rovid pelda:

class Blah {
}

class SubBlah extends Blah {
}

interface BlahTarolo {
 Blah getBlah(); 
}

interface SubBlahTarolo extends BlahTarolo {
 SubBlah getBlah();   // <-- jelenleg nem legalis, 
}

> -----Original Message-----
> From: Szitas Krisztian [mailto:[email-masked]]
> Sent: Tuesday, December 11, 2001 9:58 AM
> To: [email-masked]'
> Subject: AW: [JavaTech] return type override
> 
> 
> _______________________________________________
> JavaTech mailing list
> [email-masked]
> http://ebizlab.hit.bme.hu/mailman/listinfo/javatech
>

---

From: "Viktor Szathmary" <[email-masked]>
Date: Tue, 11 Dec 2001 10:18:15 -0500

aaah.. gondjaim vannak az outlook hasznalataval... legkozelebb megiszom
a reggeli kavemat, mert a mozgaskoordinaciom ugy laccik nem a legjobb
igy reggel... :)

szoval... a pelda egyelore nem legalis javaban, de majd ha benne lesz a
GJ (JSR14), lehet ilyesmiket csinalni.. mas nyelvekben is lehet:
tudtommal pl. C++ (jo tudom, sokminden csunyat lehet ott csinalni, de
megis :), meg az eiffel is..

nem latom milyen elmeleti hibat hozna be ez a nyelvbe, de ha van ilyen,
szeretnem tudni.

szerintem csupan egy csomo folosleges castolastol kimelne meg a
programozot (persze, a programozo tudja mit csinal :) meg a VM-t is
(castolas azert nem eppen ingyenes muvelet)...

	viktor

> From: Viktor Szathmary 
> Sent: Tuesday, December 11, 2001 10:10 AM
> To: [email-masked]
> Subject: RE: [JavaTech] return type override
> 
> 
> hello :)
> 
> ok, egy rovid pelda:
> 
> class Blah {
> }
>

---

From: Szitas Krisztian <[email-masked]>
Date: Tue, 11 Dec 2001 16:39:19 +0100

En ertem mit jelent a return type ovveride, csak azt 
nem kapisgalom hirtelen, hogy mikor jo az nekem,
van ertelmes felhasznalasa ennek valamikor?

class Processor {

 void process( SubBlahTarolo cucc ) {
    SubBlah jaj = cucc.getBlah();
 }

 void process( BlahTarolo cucc ) {
    Blah jaj = cucc.getBlah();
      itt a VM kitalalja hogy most Blah getBlah()-ot hivja meg,
      vagy inkabb a SubBlah getBlah()-ot? 
      a vissateresi ertek alapjan biztoasan megteheti,
      de mi van, ha en reflekciozok, es azt mondom, hogy

    Object jujujj = cucc.getBlah();
      itt automaikusan a legnagyobbat venne?
      hogy a kovetkezo castomnal ne szarjon be a rendszer?

    SubBlah castolt = (SubBlah)jujujj;
      
 }
}

na most a SubBlahTarolo-t hogyan kellene akkor implementalni?

class Cuccos implements SubBlahTarolo {
 Blah getBlah(); 
 SubBlah getBlah();
}

vagy eleg lenne igy?
de akkor minden olyan osztalyt is meghivhatok a SubBlach hierchiajaban?
Hogyan akadalyozom meg, hogy egy kozbenso osztalyt elerjen a hivo? valami
hinttel?
esetleg mondjuk egy Except kulcsszot eleirok a methodnak (a la final vagy
ilyenek?)

class Cuccos implements SubBlahTarolo {
 SubBlah getBlah();
}

De akkor mit csinalok olyan esetben, amikor nekem csak Blah kellene?

Letrehozom csak azert a SubBlahot (esetleg 100x annyi eroforrast
felhasznalva)
hogy legyen egy Blahom?

---

From: "Viktor Szathmary" <[email-masked]>
Date: Tue, 11 Dec 2001 14:51:44 -0500

hi,

> van ertelmes felhasznalasa ennek valamikor?

peldaul: clone() eseteben mindenkepp ertelmes lenne.
vagy mittomen vmi frameworkot epitenel, ahol az alaposztalyban
definialsz egy
PrimaryKey getPK() -t.. (PrimaryKey legyen abstract) es a subclassokhoz
tartozna egy sajat AkarmiPrimaryKey osztaly...

vagy pl. vegyuk az iteratorokat.
abstract class Gyoker {
 Iterator iterator();
}
class Akarmi extends Gyoker {
 ValamiIterator iterator();
}

class ValamiIterator implements Iterator {
  Valami next();  // Object next() helyett
}

igy csinalhatnal castolas nelkul ilyet:
Valami v = akarmi.iterator().next();

> class Cuccos implements SubBlahTarolo {

namost.. en ugy kepzelem, hogy csak specifikusabba lehessen tenni a
visszateresi tipust. az utobbi amit irtal legyen illegalis: ugyanazt a
metodust definialtad ketszer. aki a SubBlahTarolot implementalja, mar
csak SubBlah getBlah()-t, vagy annal specifikusabbat csinalhat.

az meg hogy mikor mit vesz, forditasi idoben eldontheto. egy szimpla
implementacio elkepzelheto barmilyen VM modositas nelkul is: fuggoen
attol hogy a hivott objektum tipusa mi (a forditaskor tudhato tipusa!),
annak megfelelo visszateresi erteket hasznalna.. szerintem ez teljesen
intuitiv a programozonak is, a forditonak sem bonyolult..

azaz ezek legalisak SubBlahTarolo t=... eseten:
SubBlah sb = t.getBlah();
Blah b = t.getBlah();
Object o = t.getBlah();
SubBlah sb1 = (SubBlah)b;
SubBlah sb2 = (SubBlah)o;

viszont ha mar elveszited a tipusinformaciot (pl igy: BlahTarolo t2 = t)
mar csak ezt teheted:

Blah b = t2.getBlah();
SubBlah sb = (SubBlah)t2.getBlah();  		// castolni kell
SubBlah sb2 = ((SubBlahTarolo)t2).getBlah();	// de igy is lehet,
ugyanazt kapod

> Letrehozom csak azert a SubBlahot (esetleg 100x annyi eroforrast

nem. egyszeruen csak nem szukitened le a visszateresi tipust ilyen
esetekben, ha nem tudod biztosan hogy mindig SubBlah-t kell visszaadnia,
hanem lehet vmi mas, Blah-bol orokitett dolgot...

remelem igy vilagosabb, mire gondolok :)

jo castolast,
	viktor :)

---

From: Szitas Krisztian <[email-masked]>
Date: Thu, 13 Dec 2001 17:25:00 +0100

>peldaul: clone() eseteben mindenkepp ertelmes lenne.

igen ott tenyleg

>tartozna egy sajat AkarmiPrimaryKey osztaly...

ott szerintem pont nem, a framework legyen altalanos valami,
o ne tudja azt, hogy mit dolgoz fel pontosan, eleg ha a "szerzodesek"
a rendelkezesere vannak bocsatva, tf. hogy az egy Pk, de tobbet neki 
nem kell tudnia rola.

>vagy pl. vegyuk az iteratorokat.

igen, itt tenyleg hasznalhato lenne, de szerintem nem a kevesebb kodolas
helyett, hanem a cast miatti idovesztesegbol kifolyolag,
de en amitol felek, hogy ezt ugy oldanak meg, mint a cpp templetet,
akkor az eszmeletlen helypocsekolas lenne.
ha meg csak annyi tortenne, hogy nem ellenorzi csak a tipust,
akkor oda a java egyik alapelve, miszerint ne hagyjuk, hogy a programozo
veletlenul hibazzon, ha meg mar megteszi, akkor azonnal deruljon ki

---

From: "Viktor Szathmary" <[email-masked]>
Date: Thu, 13 Dec 2001 11:35:18 -0500

hello :)

> o ne tudja azt, hogy mit dolgoz fel pontosan, eleg ha a "szerzodesek"

a frameworknek valoban csak PrimaryKey-kent hasznalna, de viszont a
fworkre epulo applikacioban kenyelmes lehet ha nem kell castolni az
altalanos PK-rol a specifikus PK-re.. azaz: CustomerPK pk =
customer.getPK();

> helyett, hanem a cast miatti idovesztesegbol kifolyolag,

szerintem mindketto :)

sajnos ugy tunik nekem, bar nem neztem meg alaposan, hogy a generic java
tulkeppen egy automatikus castolast rak be... de legalabb nem tevedhet a
programozo :)

mindenesetre ugy nez ki, hogy ez a return-type ugyet vhogy megoldjak...
ugyhogy beszeljunk masrol :) pl egy rendes assertion-rendszer jo dolog
lenne.. amit most beleraktak az eleg gyenge szerintem: alig tobb mint
amit if-ekkel elerhetsz. a fantazia abban lenne, ha a pre- es
post-conditionoket orokolnek a subclassok... bar vannak ilyen jelleg
3rdparty cuccok, amik pl. javadocbol dolgoznak (pl @pre x!=null)... de
jo lenne ezt beepiteni a rendes apiba is...

	viktor

---

From: Szitas Krisztian <[email-masked]>
Date: Thu, 13 Dec 2001 18:13:33 +0100

>altalanos PK-rol a specifikus PK-re.. azaz: CustomerPK pk =

hat nem tudom, nekem meg nem volt ilyen gondom,
event notifier patternban gondolkoztam, igy nem volt
ra szuksegem. lehet hogy mas tervezest kovetve nagyon is
jol jon, de akkor ott a kerdes, hogy miben van a hiba ;-)

>tulkeppen egy automatikus castolast rak be... de legalabb nem tevedhet a

azaz csicsazas az egesz? semmi speed novekedes? komoly?
lassan microsoftosodunk ;-), nem baj ha szar, csak csillogjon,
mert a hulyegyerek a homokozoban is el tudjon vele jatszani, hehehe