KingCo když to přepíšu takto?
MyString a="AABBAEDAE"; //MyString - moje verze řetězce
int uniqsize=MySet(a).Size(); //MySet - moje verze množiny.
Kde bereš jistotu, že Smalltalk přetypováním ve skutečnosti neprovede převod objektu řetězec na objekt množina, které pak pošle zprávu o získání velikosti
Ano máš pravdu v tom, že Smalltalk umožňuje zasílání zpráv i neznámým objektům. Umožňuje prostě zaslat zprávu komukoliv, aniž bych musel definovat nějaké společné rozhraní jako je to u C++ nebo u Javy. V C++ vlastně institut neznámého objektu neexistuje, minimálně o něm musím vědět, že umí nějaké rozhraní, přes které bych se s ním domluvil. Opět ale jsem neviděl nikde v OOP (v UML) nic o tom, že by to měl OOP jazyk umět, v UML se neříka nic o tom, co se například stane, když pošlu zprávu objektu, který ji neumí zpracovat. Zrovna tak se nikde neříka, zda rozhraní objektu musí být v místě použití známo. V C++ a v Javě musí. Ve Smalltalku nemusí.
Abych flame uzavřel. Dokonce si myslím že Smalltalk je jazyk, ktery podle mne vznikl proto, aby implementoval všechny finesy, které OOP nabízí. Nebudu se tedy hádat, co je z pohledu OOP lepší, jestli C++, nebo Smalltalk, protože Smalltalk to vyhraje. Programátor za to ale většinou docela draze zaplatí (většinou výkonem - Smalltalk zrovna žádné dělo není). Co se C++ týče, pokud bych hodnotil úroveň implementace OOP, řekl bych že v C++ je na velmi dobré úrovni (rozhodně to není paskvil, jak tady někdo říkal). Spoustu dalších současných jazyků implementuje OOP podobně, umí něco navíc (V Jave lze přepsat kteroukoliv metodu), něco zase neumí (V Jave například chybí vícenásobná dědičnost, což je dost zásadní vada dle mého názoru).
Závěr: C++ je objektový jazyk |