Executando verificação de segurança...
7

[Dúvida] Porque muitos acham que a Orientação a Objetos é ruim?

Sou um adolescente e não tenho experiencia real de emprego então talvez possa estar falando merda de muitas coisas que vivenciei, mas tento ser lógico e analisar as situações :v.

Não tenho dados para provar que muitos achem isso, mas muitos por ai, pensam nisso.
E tudo bem de certa forma, porque cada um tem sua opinião, mas muitos opinam sobre algo sem ter experiencia ou habilidade, daquilo que falam, muitos falam e afirmam sobre coisas que não sabem direito, e tudo bem de certa forma também, todo mundo pode opinar, mas muitas dessas pessoas inexperientes ou iniciantes, acabam definindo a narrativa da internet, com frases tipo, "C é dificil", "X não escala" (ah sim, como se sua única experiencia individual conta-se ;-;), novamente, não tenho dados para provar isso, mas acontece, acontece, que muitos acabam odiando algo, porque alguem mais experiente odeia tambem, e certas vezes acontecendo que pessoas odeiam a mesma coisa por motivos totalmente diferentes, muitas vezes por imaturidade própria. Hoje em dia, é muito mais acessivel programar do que antigamente, e isso é bom! mas, hoje em dia fazer um projetinho ou resolver algum algoritmo, e a pessoa acha que já é programador, orientação a objetos é muito mais do que classes ou campos de dados, e também não é apenas uma coisa, e sim um conjunto de coisas (muitas dessas coisas de separadas ja existiam e eram aplicadas antes do OO ser amplamente adotado), consigo então afirmar que muitos usam OO, mas não sabem como usar (pra ser sincero, eu também não sei muito), fazer OO não é tão dificil, fazer correto é dificil. Já vi algumas pessoas dizer que OO foi apresentado como a solução de todos nossos problemas, e pra ser sincero, acredito que isso realmente aconteceu, mas agora o coice que a OO esta tomando pela programação funcional(não que isso seja realmente verdade, mas é oque algumas pessoas da internet acreditam), e agora, a programação funcional está se tornando endeusada, muitas adotam a programação funcional, linguagem Rust, por modinha e hype, oque me entristece um pouco. Há criticas válida de pessoal experiente da nossa área com propriedade para criticar sobre assunto, pessoas menos experientes acabam repetindo sem entender de fato oque foi dito, e ainda distorcer isto. Ainda assim fico muito em dúvida nessas situações, quando há duas pessoas com propriedade, com opiniões bem opostas (ou pelo menos que parece do meu ponto de vista). Eu pessoalmente não gosto que alguem tente fazer tudo em OO ou tudo em programação funcional (se é que de verdade eles estão fazendo apenas isso, provavelmente estarão fazendo a programação estruturada junto).
Concluindo, acredito que OO seja mal usado, e muitos pode ter motivos banais não gostarem, mas tambem pode ter otimos motivos, cada programador tem suas ferramentas preferidas. Gostaria de compartilhar algumas visões na internet sobre o assunto que achei boas:

"Por que tantos desenvolvedores odeiam programação orientada a objetos?"
Resposta de Jose Morins sobre a pergunta:

Resposta do Maniero sobre a pergunta:






mas lembre-se, isso aqui é uma pergunta, estarei feliz de ler as respostas.

Outra pergunta: que maneiras boas de programar sem usar o paradigma OOP e sem usar o paradigma funcional?

Carregando publicação patrocinada...
5

muitos falam e afirmam sobre coisas que não sabem direito

Verdade.

muitas dessas pessoas inexperientes ou iniciantes, acabam definindo a narrativa da internet

Isso mesmo.

muitos usam OO, mas não sabem como usar

Perfeito.

fazer OO não é tão dificil, fazer correto é dificil

Exatamente.

a programação funcional está se tornando endeusada

Assim como acontece com OOP, mas os problemas de se adotar cada uma é diferente. De fato o funcional puro não é tão útil assim. Anedoticamente o criador de Haskell disse que a linguagem dele não serve para nada real. Adotar o paradigma funcional dentro de um código imperativo pode ser bem interessante em certos casos.

por modinha e hype

Modinha é o que usamos no Brasil para o hype. OOP é modinha. O que as pessoas não entendem sobre moda é que ela não efêmera, o entendimento de quase todo mundo, ela é sobre principalmente algo usado porque outras pessoas estão usando. OOP é muito modinha, mesmo que ela exista a décadas, esteja consolidada e vá durar por muito mais tempo. Note que muitos casos ela será a melhor solução, o que não impede de ser adotada por modinha. Até eu faço isso.

Funcional é modinha para algumas pessoas, não é para outras, mas assim como OOP, em geral é adotado por modinha.

pessoas menos experientes acabam repetindo sem entender de fato oque foi dito, e ainda distorcer isto

Isso mesmo. Eu estudo e pratico (pra ficar claro) OOP há 40 anos. Mais recentemente (poucos anos) eu comecei achar que entendi OOP, mesmo assim estou alerta porque posso ter entendido algo errado, mas o básico eu sei. Sei por exemplo que existem duas escolas de OOP e que a maioria adota um pedaço de cada criando uma definição toda própria, embora ela acabe sendo popular em tempos de internet e influenciadores.

não gosto que alguem tente fazer tudo em OO ou tudo em programação funcional

Uma coisa não elimina a outra, para entender melhor sobre paradigmas:

Provavelmente preciso revisar algumas coisas aí, mas farei só nas minhas iniciativas próprias (veja mais no fim desta resposta). Tem coisas aí com mais de 10 anos, eu certamente aprendi melhor sobre o assunto durante esse período e mudaria alguns pontos.

Isso algo que todos deveriam entender, até mesmo algo escrito pelos melhores programadores (que não é o meu caso), pode ficar datado e a pessoa não vai lá corrigir o erro que cometeu naquela época. Desconfie de tudo o que lê (ou vê ou ouça), sem entrar em paranoia ou se tornar arrogante achando que sabe tudo.

provavelmente estarão fazendo a programação estruturada junto

Entenda melhor nos links acima e pesquise mais por conta própria.

A postagem do José Morins é quase perfeita. OOP não depende de classes para existir.

Vai ajudar: https://pt.stackoverflow.com/q/205482/101.

Não vou comentar prints de resposta minha;)

Concordo com os demais prints mesmo não sabendo que quem são, acho que alguma é minha.

Como eu já disse acima, existe o paradigma Modular, mas ele é pouco adotado pelas linguagens, então ele não se torna popular, mas mesmo sem mecanismos específicos é possível programar assim na maioria das linguagens. Mas ficará pouco idiomático. Veja https://pt.stackoverflow.com/q/223549/101. Para esmagadora maioria dos problemas o ideal é ter a programação imperativa com vários mecanismos de funcional e alguma forma de modularizar a base de código, e não tem como não dizer que o mais fácil hoje é com OOP. Fugiu disso você está sendo "mosca branca" e terá algumas dificuldades por causa do mercado. Tem horas que devemos ceder à modinha porque todo mundo trabalha em prol dela. Mas podemos fazer de forma crítica, podemos fazer sem radicalismos. Me lembro que teve uma época que se ouvia muito algumas pessoas "denunciando" que algo foi feito sem OOP e isso é ruim por si só, mas não vejo muito isso mais, ou caíram na real, ou perderam espaço ou teve algum outro fenômeno.

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui).

2

O criador da OOP disse que as pessoas utilizam o conceito errado, e que ele talvez devesse ter escolhido outra nomenclatura porque isso confundiu muito as pessoas.

2

Qual criador? Podemos colocar pelo menos 3 criadores (na verdade um deles é uma dupla, então 4 pessoas). Podemos considerar duas escolas porque a dupla e um dos criadores (do C++) seguiram o mesmo caminho, apesar de Simula, a primeira que usou o que conhecemos como OOP, ser um pouco diferente de C++. O biólogo Alan Kay criou o termo, mas ele mesmo reconheceu o que ele chamou inicialmente de orientação a objetos é na verdade orientação à mensagens. Ainda que ele tome pra si a criação do termo e acha errado o que o Bjarne Stroustrup criou e chamou de OOP.

2

Ola, Gustavo.

Sua reflexão é bem interessante e eu pessoalmente me identifico com ela, pois percebi algo parecido quando estava aprendendo programação. Em especial, naquele momento que comecei a aprender os primeiros conceitos de orientação a objetos, olhei para meus primeiros algoritmos e tentei inaginar como faria para aplicar esse conceito a eles.

Eu gosto muito de ambos os paradigmas - Orientado a Objetos e Funcional - e tendo vivenciado programar com ambos por quase uma década em aplicações comerciais, constatei as linguagens de programação mais populares (Java, C#, JavaScript, PHP, Python, etc) bebem das duas fontes. A programação pragmática aplicada no mercado de trabalho tende a explorar as particularidades de cada um onde isso tornar o código mais expressivo, fácil de construir e manter. Tanto que linguagens puristas, como SmallTalk (em OOP) ou Haskell (em FP) tendem a ter uma difusão mais restrita.

Não que eu desencoraje que linguagens mais puristas sejam exploradas, pelo contrário. Desenvolver um projeto em Haskell, por exemplo, para quem tem uma base forte em OOP num primeiro momento pode parecer frustrante, mas é extremamente enriquecedor em termos de encontrar novas abordagens de resolver problemas e nos tornar melhores programadores de forma geral. Aprender FP pode te tornar um melhor programador OOP, ainda que isso possa parecer contraditório, já que pode te deixar consciente das limitações do paradigma e de como contorná-las da melhor forma possível.

Indo à sua questão, acredito que muito do criticismo sobre OOP é devido a tipo de programação predominante atualmente, ao menos quando falamos em software empresarial. Compare com qualquer outra ciência e vai ver que tudo que é status quo em um momento é alvo de maiores ponderações.

Com isso, quero dizer que OOP é perfeita? Certamente que não. É um paradigma muito rico conceitos e te dá muitas possibilidades de estruturar um projeto que, às vezes, pode te levar a construir software de uma forma que dificulta a manutenabilidade. Porém, isso é questão de maturidade e maestria para aplicar os conceitos de formas positivas.

Muita gente argumenta que aplicar OOP pode deixar seu código difícil de manter. Dependendo de como, isso é verdadeiro, mas com FP, é possível terminar com o mesmo problema. O conceito de currying é muito bacana, por exemplo, mas dependendo de como é aplicado, pode diminuir a legibilidade e dificultar a manutenção de um código se mal aplicado.

Sobre OOP e boas práticas, eu diria que os conceitos principais precisam ser bem compreendidos, mas a aplicação deles tem que ser cuidadosa. Herança, por exemplo, é um conceito muito interessante e útil, mas sua aplicação tem que muito cuidadosa e restrita para evitar terminar com um codigo que é desnecessariamente complexo.

Eu diria para focar no âmago do paradigma - que é sobre trocas de mensagens entre objetos -, e priorizar sempre a composição em relação a herança.

Da mesma forma, aplicar conceitos de FP quando eles facilitam a compreensão e manutenabilidade do código, como funções de primeira ordem. Que dependendo do caso, usar métodos estáticos não é nenhum crime e pode ser a melhor forma de resolver um dado problema (funções de utilidades, por exemplo).

Por fim, lembrar que código bom é que código que é seguro, veloz, que pode ser facilmente compreendido e mantido por diferentes pessoas.

-4