Em um dos muitos protestos anti-POO em cat-v.org , encontrei uma passagem de Joe Armstrong levantando várias objeções contra o modelo de POO, uma das quais era a seguinte:
Objeção 4 - Objetos possuem estado privado
O estado é a raiz de todo mal. Em particular, funções com efeitos colaterais devem ser evitadas.
Embora o estado nas linguagens de programação seja indesejável, no mundo real o estado é abundante. Estou muito interessado no estado da minha conta bancária e, quando deposito ou saio dinheiro do meu banco, espero que o estado da minha conta seja atualizado corretamente.
Dado que o estado existe no mundo real, que facilidades a linguagem de programação deve oferecer para lidar com o estado?
OOPLs dizem "ocultar o estado do programador". Os estados estão ocultos e visíveis apenas através das funções de acesso. As linguagens de programação convencionais (C, Pascal) dizem que a visibilidade das variáveis de estado é controlada pelas regras de escopo da linguagem. Linguagens declarativas puras dizem que não há estado. O estado global do sistema é realizado em todas as funções e sai de todas as funções. Mecanismos como mônadas (para FPLs) e DCGs (linguagens lógicas) são usados para ocultar o estado do programador, para que possam programar “como se o estado não importasse”, mas ter acesso total ao estado do sistema, caso isso seja necessário.
A opção "ocultar o estado do programador" escolhida pelos OOPLs é a pior opção possível. Em vez de revelar o estado e tentar encontrar maneiras de minimizar o incômodo do estado, eles o escondem.
O que exatamente se entende por isso? Tenho muito pouca experiência em procedimentos ou nível baixo, principalmente OOP, de modo que provavelmente explique o quanto eu não estou familiarizado com isso. E de um ponto de vista mais moderno, agora que a maioria da histeria orientada a objetos foi aprovada (pelo menos até onde eu sei), qual é a precisão / relevância que vocês acham que essa passagem é?
Obrigado pela ajuda.