Mě ta argumentace přijde nesmyslná. Protected je contract. Je vhodné, když kompilátor při přímém přístupu k protected proměnné zařve, že tohle asi není to, co programátor chtěl udělat, ale programátor by měl mít možnost to obejít, pokud se domnívá, že to potřebuje obejít. Proto zrušit protected se zdůvodněním, že programátor ho může obejít, je nesmysl; to není chyba zapouzdření, to je vlastnost toho, že programy tvoří programátor.
U čeho mi naopak uniká rozumný důvod, proč existuje, je private. Poděděná třída má mít možnost přistupovat k vnitřnímu stavu děděné třídy, jinak je dědění velmi omezené (v používaných analogiích private ani nedává smysl, pokud Plachetnice dědí Loď, tak má přeci přístup ke všem vlastnostem Lodi). Vím o případech, kdy jsou nějaké vnitřní stavy, kde přístup poděděné třídy nedává smysl, ale ještě jsem neviděl případ, kdy by to nebylo způsobené tím, že si programátor usnadnil práci a nedostatečně dekomponoval ten objekt (třeba u té Lodi tím, že nějaké fyzikální vlastnosti nechal počítat přímo Loď, ale Loď přeci fyziku nedefinuje). Ještě nikdy jsem neviděl případ, kdy by private byl opravdu potřeba, naopak jsem viděl mnoho případů, kdy neuvěřitelně házel klacky pod nohy (C++ STL je velmi dobrý příklad).