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 !