pripada mi ze autor se v ramci celeho serialu snazi navazet do ostatnich jazyku s poukazovanim na jejich nedostatky aniz by ukazal poradne jak to zvlada smalltalk - viz ta posledni narazka na dynamicke stranky. osobne me by to velice zajimalo po zkusenostech s cistym cgi, perlem, php, jsp, asp.net - kazdy z techto jazyku (technologii) ma neco do sebe, ale zda se mi nekorektni napsat jen, ze si tam vyssi silne typove jazyky ani neskrknou. ano tyto jazyky maji svoje nevyhody (treba silnou typovost), ale i taky vyhody (treba silnou typovost) :-)) a tak by slo psat do aleluja. zalezi hodne na uhlu pohledu a pouziti.
Ta poznámka o neškrtnutí si se týkala samozřejmě pouze přístupu, kdy se lze na bázi prototypování a dynamické dědičnosti úplně obejít bez nutnosti vytvářet pro každou stránku vlastní třídu a přitom se držet stále čistě objektového přístupu. To je skutečně už mimo síly staticky typovaných jazyků a při pokusu něco takového v nich vytvořit byste se pravděpodobně utopili v záplavě maker a navíc byste se stejně statické typové kontroly museli vzdát.
teda nejsem expert na smalltalk, ale pripada me, ze skutecnost, ze objektu jde zaslat zprava a on pokud na ni zna odpoved tak reaguje, jinak ji ignoruje, me to pripada jako vlastnost slabe typovanych jazyku. na druhou stranu zase nekdo muze tvrdit, ze smalltalk je prunik mezi silne a slabe typovanyma jazykama :-))
Neni pravda, ze by objekt zpravu, ktere nerozumi ignoroval (tedy pokud to neni jeho cilem). Pokud zpravu nedokaze zpracovat, posle misto ni zpravu #doesNotUnderstand, ktera byva zdedena z Object a standardne generuje MessageNotUnderstoodError.
O typu se ve Smalltalku mluvi dost tezko, pokud typem rozumime nejakou domenu hodnot a operaci s nimi. V nejakem kontextu nam staci, aby objekt rozumel prave jedne zprave a nezalezi na tom jake je tridy a co dalsiho umi.
Z predchoziho prispevku bych si dovolil podotknout, ze objektu lze zmenit tridu prakticky bez jeho vedomi (#changeClassTo:), ackoliv se technicky da pouzit jen malokdy. A nenapada me situace, kdy by to bylo potreba.
Ve Squeaku se tato metoda jmenuje primitiveChangeClassTo: a její použití má řadu omezení. Tento způsob považuji za poměrně nestandardní. Navíc i tuto zprávu posíláte konvertovanému objektu, takže na to, že se ho někdo snaží překonvertovat, může dle libosti reagovat. Ve Squeaku je služeb této metody využito jen jednou a to v případě, že se Inspector snaží vytvořit sám sebe pod jinou třídou vhodnější pro nahlížení nad daným objektem.
Samozrejme uznavam, ze jde o metodu krajne nestandardni, nicmene neskodi o ni vedet. Nevim, jak je to udelane ve Squeaku, ale v teto souvislosti by bylo vhodnejsi mluvit o zprave #adoptInstance:, ktera se posila tride, aby se stala tridou nejakeho objektu. Samozrejme ma celou radu omezeni a lze ji pouzit jen ve velmi malo pripadech.
O jejim pouziti se nechci prit, pouziva se vicemene pri refaktoringu a pro podporu systemovych nastroju, rozhodne nejde o beznou soucast aplikaci.