A polêmica da orientação a objeto
Leia
e
http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en
Faz meia vida que eu falo sobre isso. Muitas pessoas ignoram ou até refutam (ao menos internamente) o que eu sempre falo.
Minhas ideias sobre o tema são frutos de muita reflexão, estudo em cima de fundamentos da computação e filosofia da ciência.
Eu sempre disse que as pessoas abusam de OOP, aprendem errado, usam errado e por consequência ensinam errado.
Geralmente elas misturam duas escolas completamente diferentes do que seria orientação a objeto, criando um frankenstein que passou ser adotado sem questionamentos. E daí toda uma indústria fora criada, trabalhos derivados nasceram em cima de algo, no mínimo, duvidoso.
Eu nunca disse que OO é ruim e inútil, mas sempre falei que as pessoas não o entendem, começando pelo termo ser errado. E o criador dele admite isso. Pior, ainda hoje ele não consegue definir bem qual seria o termo correto e já está no terceiro termo para a mesma coisa.
Pode parecer só teoria boba, mas quando você não faz o alicerce certo a casa sai torta, não tem jeito. As pessoas ignoram os fundamentos e não usam o pensamento crítico para aprender e explorar a técnica da melhor maneira.
Por isso eu sempre repeti, e é o que mais falo, que seguir receitas de bolo não faz ninguém ser um bom profissional. Por mais que essas receitas sejam repetidas por todos, que parece ser um conhecimento dominado e universal. Sempre pode haver erros. E venho os apontando há anos. Mais recentemente ganhei esse aliado importante.
As principais confusões estão entre abstração, encapsulamento e information hiding, que acham ser a mesma coisa, e frequentemente sinônimo de orientação a objeto. E ainda acham que criando uma classe estão fazendo OOP.
As pessoas não deveriam usar algo sem dominá-lo profundamente. Por sorte OOP não é uma serra elétrica. E não deveriam ensinar o que elas não entendem completamente, vira religião, porque ensinam no que elas creem.
E os exemplos que usam para “ensinar” OOP é oque faz mais estrago. Fica fácil passar a ideia, mas faz todo mundo acreditar que OOP é aquilo.
Eu nem acho que eu sei tudo sobre o assunto, mas ao menos eu admito isso, e acredito que qualquer pessoa que afirme saber provavelmente tem um Dunning-Kruger pesado. As pessoas podem discordar, questionar ou argumentar contra, mas precisa pelo menos conhecer a realidade.
Mas eu sei, depois da mentira repetida milhões de vezes, não tem mais como as pessoas perceberem o erro e começarem tratar o assunto da forma correta, é difícil aceitar que sempre estiveram errados. Pelo menos algumas técnicas mandam fazer menos OOP, mesmo dizendo que ainda é OOP, e vai consertando a situação. Só que isso só é aprendido pelos mais dedicados, e como receita de bolo, não por consciência. É triste, mas é como caminhamos.
Eu passei meia vida acreditando no que me foi ensinado… errado.
Não acredite no que eu digo, apenas estude mais, com e mente aberta, procurando várias fontes com aprofundamento, e use método científico para formar sua opinião e aproveitar a ferramenta de uma forma mais útil. Só porque está em um livro não significa que está certo, papel aceita tudo (bom, eu ia usar um exemplo, mas uma polêmica já basta :)).
Mas pra encerrar com mais uma polêmica, mais uma das pessoas mais conhecidas e veneradas da nossa área tem uma definição muito própria do que é OOP e que influencia muito do erro que se comete. Por sorte nem todos o seguem cegamente. Ah, o Marin Fowler costuma ser coerente, mesmo quando eu discordo dele, é o outro :D
Para complementar leia e veja os vídeos:
- https://www.quora.com/Why-does-object-oriented-programming-mean-so-many-different-things-to-different-people (é tudo tão coinfuso que a resposta se perde. Ela começa bem, mas aí cai no erro que ela indica no começo que a as pessoas fazem)
- https://www.quora.com/What-did-Alan-Kay-mean-by-I-made-up-the-term-object-oriented-and-I-can-tell-you-I-did-not-have-C++-in-mind
- https://www.quora.com/What-is-Alan-Kays-definition-of-Object-Oriented
- http://lists.squeakfoundation.org/pipermail/squeak-dev/1998-October/017019.html