Posted By: pivson (Pijte pivo, je zdrave !) on 'CZprogram'
Title: Re: Java vs. C++
Date: Tue Feb 26 09:42:20 2002
> > tridu,
> > ktera ma abstraktni funkce, tudiz ji nelze instancovat. Pak uz
> vicenasobnou
> > dedicnosti z techto abstraktnich trid dosahnes tehoz, co v Jave
> implementaci
> > jednotlivych interface na funkcni classe.
>
> Ale to ja prece vim. ;-) Ptal jsem se proto, ze nechapu duvod zavadeni
> neceho
> takovyho (interface). Nevidim totiz principialni rozdil mezi pouzitim
> vicenasobne dedicnosti a nekolika rozhrani.
Jak jsem psal, rozdil je jenom v tom technickym zpracovani. Pokud v c++ chces
mit vice predku, pak jejich interface (tabulka ptr na fce) vypada
[TAB1][TAB2]class_memebry
TAB1 ukazuje na statickou pamet, plnou pointeru, tab2 tez (akorat na jinou :o)
(nektery kompilery maj tabulky na konci - to je jedno, meni se reference,
nekde kompiler musi zbytecne pocitat offset, jinde ho usetri)
To je vicenasobna dedicnost. Problem zde spociva v tom, ze 'this' pro
interface2 je o 4 bajty jinde nez 'this' pro interface1.
Zatimco iface1::metoda reference prvni member jako [this+8] tak
iface2::metoda referencuje ten samej memebr jako [this+4]. To znacne
zeslozituje inmplementaci, protoze pri volani ruznych metod dochazi ke
konverzi thisu, kterej je pak jinej v kazdy metode.
Vyhoda: jednoznacne rychlost a moznosti
Nevyhoda: slozitejsi implementace (kompiler musi koukat na to JAKOU metodu
vola a pripadne delat konverzi this a obracene), nemoznost identifikovani
objektu pomoci interfacu/pointeru na nej (jeden a ten samej objekt muze bejt
jakoby '2' - protoze thisy budou rozdilny]. Nicmene, jde to lehce obejit :)
JAVA je jednoduchej jazyk. A z toho to cely prameni. Stejne jako delphi
(object packal), aby umoznili vicenasobenj polymorfizmus, tak musi fakt, ze
nemaji vice predku (jako c++), nejak obejit. Proto java musi delat to co dela.
Podobne to delaj i Delphi. Jak jinak bys zajistil 'vice' predku, prtooze vice
interfaces znamena ve svy podstatne vicenasobny dedeni, nic vic.
Uplne nejjednodussi vec je udelat si wraper, nezavislej objekt, kterej se
vytvori zaroven s 'velkym' a ten akorat spravne vola (tentokrat uz staticky)
metody obektu, ktery maj preprezentovat danej iface (bridge, proxy, da se tomu
rict hodne zpusobama).
Pivson I a posledni, z bozi vule pivar
A co budou delat cesi ???
Deme na pivo !