Unixtopia

main/ artigos/

Programação Orientada a Objetos

Quando inventei o termo orientado a objetos, C++ não era o que eu tinha em mente — Alan Kay

A programação obcecada por objetos é um paradigma que tenta modelar a realidade como uma coleção de objetos abstratos que se comunicam entre si e obedecem a algumas regras. Embora a ideia em si não seja ruim e possa ser útil em certos casos, se tornou usada em excesso, mal implementada e totalmente forçada em linguagens que aplicam essa abstração a cada conceito, criando antipadrões e problemas desnecessários. Portanto, a POO é um câncer do desenvolvimento de software. Exemplos incluem Java e C++. Outras linguagens como Python e JavaScript incluem POO, mas o tornaram um pouco mais leve e pelo menos permitem que você evite usá-lo. Você deve aprender POO, mas apenas para ver por que ela é uma praga, e para realmente entender 99% do código escrito hoje em dia.

Princípios

Tenha em mente que POO não tem uma definição única. Ela assume muitas formas e mutações dependendo da linguagem e é praticamente sempre combinada com outros paradigmas, como o imperativo. Geralmente, programas POO resolvem problemas tendo objetos que se comunicam entre si. Cada objeto é especializado para fazer alguma coisa, e.g, um lida com o texto, outro com cache, outro com renderização de imagens. Cada objeto tem seus dados e métodos, funções próprias do objeto, por exemplo, humano pode fornecer métodos getHeight, drinkBeer ou petCat. Os objetos podem enviar mensagens uns aos outro,: por exemplo, um objeto humano envia uma mensagem a outro objeto humano para obter seu nome, na prática, isso significa que o primeiro objeto chama um método do outro objeto, assim como chamamos funções, como em human2.getName()).

Agora, linguagens POO usam classes. Nelas, definimos classes de objetos, uma classe é um modelo para um objeto, ela define métodos e tipos de dados para armazenar. Qualquer objeto que criamos é criado com base em alguma classe, por exemplo, criamos o objeto Mr. Unix e Lady C da classe Humano, assim como normalmente criamos uma variável x e y do tipo int. Dizemos que um objeto é uma instância de uma classe, i.e, objeto é uma manifestação real do que uma classe descreve, com dados específicos. O tipo mais leve de POO é chamado de POO sem classes, que é baseado em ter os chamados objetos protótipos em vez de classes. Podemos simplesmente criar objetos sem classes e então atribuir a eles propriedades e métodos dinamicamente em tempo de execução. Aqui, em vez de criar uma classe Human, criamos um objeto protótipo que serve como um modelo para outros objetos. Para criar humanos específicos, clonamos o protótipo humano e modificamos o clone. A POO vem com alguns princípios básicos.

Por que é uma praga?

Qual paradigma usar em vez de POO?

Depois que perceberam que POO é uma merda, houve diversas alternativas, como funcional e programação orientada a agentes. Então qual usar? Imperativo, também chamado de procedimental. Lembre-se de que isso não quer dizer que você nunca deve aplicar um paradigma diferente, mas o imperativo deve ser padrão, o mais prevalente e adequado para usar na solução da maioria dos problemas. Por que imperativo?