Podle mě v praxi prostě vázne právě ta formální stránka kódu. Bez ručního přečtení kódu se nemůže člověk spolehnout skoro na nic. Není jasné, zda mají metody vedlejší efekty, není jasná kardinalita vztahů, není jasné, co se kde validuje, není jasné které entity jsou attached vzhledem k databázi, není jasné, kam všude se může dostat null hodnota, není jasné co je bezpečné pro běh ve více vláknech atd. atd. atd.
Samozřejmě různé návrhové vzory, rozhraní, anotace atd. se tohle všechno snaží nějak řešit, ale přijde mi to pořád takové nespolehlivé. Jako ideál bych si představil to, že si pro aplikaci postavím takový typový systém, který si pak už sám ohlídá, že se správné věci dějí na správných místech. Asi jako když si stavím strukturu relační databáze.
Nejspíš se tohle příliš nerozšířilo hlavně kvůli tomu, že to vyžaduje víc matematiky a víc abstrakce, než kolik je mezi programátory běžně k dispozici. Proto to zůstává spíš na akademické půdě a praxi se pořád „tak nějak prasí“.
Ale rád se poučím, pokud se to někde dělá jinak. Docela rád bych i viděl to „pravé OOP“. POřád mi není úplně jasné, co se tím míní a v čem se to liší od současného stavu.