Právě C++, které objektové paradigma nevynucuje to _částečně_ řeší. Ten zmiňovaný operátor+ se tam dá udělat jako funkce...
Řeší to tím, že rezignuje na objektové paradigma. Řeší to útěkem do strukturovaného neobjektového programování.
V C++ se to pak zamotává. Neobjektová funkce není součástí třídy. Implicitně proto neobjektová funkce operator+() v C++ nemá přístup do vnitřního stavu objektů, se kterými manipuluje. Musíte pak pomocí friend říci třídám, že nějaká vnější funkce bude šmátrat do jejího vnitřního stavu. A zapouzdření a ochrana stavu objektů před okolím dostává na zadek.
Zkrátka v objektovém paradigmatu není daný problém řešitelný. Dá se řešit jen zprasením.
To nebylo myšleno jako jediné, co můžu vytknout. To byl příklad pro mně hodně překvapivé a neintuitivní vlastnosti smalltalku.
Ale ono je to intuitivní. Je to prostě zaslání zprávy objektu. Je to konzistentní.
Jiné jazyky mají seznam věcí, které se dělají opravdu objektivně špatně, mnohem delší.
a) Mně se třeba také nelíbí, že C/C++ neumí ani tak naprosto základní věc, jako je práce s polem. Tedy něco, co uměl už první existující programovací jazyk na světě Fortran v 50. letech 20. století.
b) Ba dokonce C neumí ani rozumnou a efektivní práci s textovým řetězcem. To co v jiném jazyce je (jako operace s textovým řetězcem) na jeden srozumitelný řádek, to je v C kryptický kód na 1-2 obrazovky plné strlen(), strcmp(), strcpy(), ...
c) PHP dodnes nemá ani datový typ textový řetězec! Namísto toho se musíte tlouct se sekvencí bajtů, dávat tomu nějaký význam a charset. Myslel jsem si, že ve 21. století si takovou nesmyslnost nedovolí žádný programovací jazyk na světě.
Jinak řečeno, za obskurní, nedomyšlené a neintuitivní - a plné ošklivých kompromisů co dnes a denně vadí každému programátorovi - považuji dnešní mainstreamové jazyky. Smalltalk je velice čistý, a pokud dokážete říci, že vám vadí jen jedna konkrétní věc - pak je to plus pro Smalltalk. Zbytek je omezení plynoucí z objektového paradigmatu.