Eu sempre falo que a maioria das pessoas não sabem programar OO porque os exemplos dos materiais didáticos são para fazer entender o conceito e o mecanismo, mas não para treinar o uso. Só que eles não deixam isso muito claro, e não induzem fazer o certo. Consequência: as pessoas treinam o erro, e é ele que ela passa fazer sempre. E muitas vezes ensinam outras pessoas assim.
Modelar é muito difícil. Em muitos casos é melhor procurar algo mais simples que não se preocupe tanto com o modelo, porque modelar errado pode causar mais estrago. Os menos inexperientes não percebem isso. Eu percebo, e ainda cometo erros.