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 !

Search the boards