ou stranu můžu mít jazyk, který perfektně izoluje data od okolí a pevně spojuje metody s těmi daty, ale když bych náhodou zavolal špatnou metodu, tak neexistuje síla, jak takovou špatnou zprávu zachytit za běhu a vyrovnat se s ní nějak kreativně, než že mi už při kompilaci vyskočí error, konstruktor bude volán až po fyzickém vyrobení objektu a nebude moci vrátit jinou instanci nebo třeba úplně jiný objekt, atd. Takový jazyk by byl jen zkripleně objektový, třebaže dokonale zapouzdřuje.
Proč bych, do pytle, ale měl chtít, aby si objekt něco kreativně domýšlel? Jakože třeba (zjednodušeně) namísto operátoru + zmáčknu jedničku, objektu dojde, že je to na klávesnici někde poblíž a tudíž jsem chtěl asi říct objektu, že se má sečíst s nějakým objektem, který jsem mu poslal coby parametr zprávy? Tohle mi celé přijde na hlavu, pan Alan Kay navrhnul Smalltalk podle mě z nouze tak, jak je, protože tenkrát neviděl možnost, jak udělat jazyk s typovým systémem, který by mu přišel OK. A další a další apologeti "čistých objektů" se rozplývají nad tím, jak je super, když si objekt může nějak poradit se zprávou, kterou nemá explicitně definovanou.
Sorry, nic osobního, ale fakt Ti tohle nepřijde uhozené?
Pak je ale otázkou, co Ti z OOP zbyde, když dáš pryč věci, které Ti připadají uhozené. Chápal bych názor, že OOP je uhozené - když už. Ale OOP bez těch "uhozených" věcí mi připadá jen jako dost perverzní fetiš. To je pak něco naprosto k ničemu, jen obfuskátor strukturovaného návrhu (což je ovšem přesně to, s čím se většinou také setkávám - bohužel).
Proč by měl mít možnost objekt něco kreativně domýšlet? S těmi objekty se dá totiž dělat mnohem víc, než jen dědit a instanciovat, což mi připadá, že je taková průměrná představa o OOP u javistů a pluskařů. Dá se za běhu rozhodovat, který objekt bude nejvhodnější v dané situaci vrátit, dá se použít objekt, který vůbec nemusí být veřejně znám, dokonce ani jeho třída nemusí být veřejná. Dá se podstrčit objekt, který namísto objektu volajícím očekávaného třeba jen přesměrovává ty zprávy jinam, nebo je nějak filtruje. A to vše klidně dynamicky měnit za běhu. Dají se snadno vytvářet notifikační centra, observery, zástupné objekty - budoucí objekty, distribuované objekty, filtry, agenty, guardy, supervisory... Dají se tak snadno vyrábět třeba heterogenní kolekce, které samy přeposílají zprávy objektům, které obsahují, a vytvářet tak dynamicky komponované objekty - různé proxy apod. Je toho strašně moc, jak se taková volnost dá využít, přičemž lze jednoduše dosáhnout něčeho, co by se bez těchto možností dělalo jen dost komplikovaně a s hromadou kódu.
Já Ti nevím, ale mně to Tvoje "proč bych to měl chtít" připadá jak "proč by měl někdo chtít víc než 640 KB RAM".