"Klad? Jako ze muzete prerazit metodu existujici tridy misto abyste musel tu tridu rozsirit? Pokud naprosto evidentni poruseni zasady zapouzdreni povazujete za vyssi objektovost, tak prosim"
Možná není "vyšší", ale spíš "širší", totiž úplnější. Každý seriózně použitelný reflexivní systém nějak "zapouzdření" porušuje, a plně objektový programovací systém tedy již z definice nemůže nikdy poskytnout úplné "zapouzdření" všeho, protože jinak by nemohl měnit sám sebe (přidat metodu do systému by musela nějaká "vyšší moc", ale to popírá požadavek, že systém tvoří pouze objekty, co si navzájem předávají zprávy).
K našemu velkému štěstí "zapouzdření" není (na rozdíl od skrývání informace, extrémně pozdní vazby a předávání zpráv) podmínkou pro objektové programování. Máte mozek vymytý příliš velkým množstvím Kávy a Cé plusrovnáse jedna, které ve světě programovacích paradigmat mají vlastní píseček, jenž bych označil výrazem "jazyky s omezenou podporou objektového návrhu", určitě ne výrazem "objektové jazyky". Doporučuji terapii studiem díla Alana Kaye na Večerní škole Smalltalku.
Jistě, můžete kdykoli vzít sekeru a jít sousedovi useknout hlavu, a nikdo Vám v tom nezabrání. Proč tedy nejsou sekery zakázané a mezi lidmi nejsou mříže, aby si neublížili?Protoze sekyra je veskrze prakticky nastroj potrebny a pouzivany k mnoha ruznym cinnostem. Monkeypatching, na druhe strane, je princip, bez ktereho se lze bez problemu obejit.
Tomu říkám hádka:
"Můj jazyk je objektovější než tvůj."
"Ne, můj je více objektový. Můj totiž umí tohle, tohle, tohle a tohle. A ten tvůj neumím tamto a tohleto."
"Ale to takhle vůbec nemůžeš říkat. Na tom tvém je zase špatné, že tohle, tohle a tohle. A to ten můj to dělá mnohem líp."
...
Nezdá se vám to trochu střelené? :)
Nezlobte se na mě, ale tohleto hledání "svatého grálu" jazyků s podporou OOP je úplně stejné jako hledání toho nejlepšího jazyka vůbec. Nikdo není a nikdo nemůže být vítězem. Každý jazyk má svá pro a proti, každý byl vyvinut za jiným účelem, každý si prošel jiným vývojem.
Je dobré upozornit na chyby. Říct, že tohle se mi na tom nelíbí. Každý má svou hlavu, a tudíž co člověk to názor. A tudíž každý může s názorem jiného souhlasit, či nesouhlasit, může jiný názor podpořit, nebo zavrhnout. A jelikož jsme každý jiný, tak si každý jazyk (názor, cokoli...) najde své zastánce i odpůrce. Ale proto je tu těch jazyků (názorů, čehokoli...) tolik, ne? Pokud nejde o exaktní obor, kdo může rozhodnout, co je správné a co špatné? Kdo?
Tyto žabo-myší války o hledání té jedině správné "pravdy", mě vždy pobaví. Jen tak dál hoši :)
P.S. Reagoval jsem na tebe, ale platí to všeobecně pro všechny diskutující.
P.P.S. Tak do mě a nešetřte mě! Já si to zasloužím! :)
Taky jsem nepsal nic o tom, je-li dgxův názor správný či špatný. Podle mě se tady spíše opravdu jedná o válku, který že ten jazyk je opravdu nejobjektovější na světě. Což dokazuješ i ty.
"Všechny jazyky s kompletním objektovým modelem (Smalltalk, Lisp, ...) to umožňují, protože je to k plně objektovému modelu zkrátka a jednoduše potřeba, je to bráno jako kladná vlastnost, nikoliv zápor."
"..., které mají jen omezený objektově orientovaný model (Java, C++, PHP, ...)."
Mimochodem, co že je to ten kompletní (plný) a omezený objektový model? Opravdu by mě zajímalo, jak jsou tyto pojmy podle vás definovány.
A ještě něco, když se tu všichni baví o té zapouzdřenosti. To jsem opravdu žil v blahé nevědomosti, oč vlastně jde? To je opravdu zapouzdřeností míněno, že, jak metodu definuji, již ji nemohu změnit? To opravdu neznamená to, že každý objekt odkrývá jen svůj interface (tím nemyslím to javovské klíčové slovo, ale veřejné metody (funkce, zprávy, čudlíky na černé krabičce, říkejte si tomu, jak chcete) sloužící ke komunikaci s objektem) a nic víc?