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

Sei que a ideia do post é ser um guia básico, mas de qualquer forma é uma ótima oportunidade pra esclarecer novamente uma coisa muito importante:

Não existe uma definição única, canônica, universal e livre de controvérsias sobre Orientação a Objetos. A definição dada acima é uma das existentes, mas na realidade o buraco é mais embaixo.

Já respondi sobre isso aqui, e sugiro ler e seguir todos os links do texto para se aprofundar no tema.

Mas só pra resumir:

Existem várias vertentes (ou "escolas", se preferir) de Orientação a Objetos, e a mencionada no texto é apenas uma delas - provavelmente a mais popular, e talvez por isso muita gente acredita que é a única. As definições mais conhecidas são a de Alan Kay e Bjarne Stroustrup (respectivamente, à esquerda e direita na imagem abaixo):

Alan Kay e Bjarne Stroustrup, cada um com sua definição de OO

Alan Kay é o cara que cunhou o termo "Orientação a Objetos", mas ironicamente a definição dele é diferente da que está no texto. Ele definiu, entre outras coisas, que "tudo é um objeto" (o que excluiria Java como linguagem orientada a objeto, só pra ficar em um exemplo), e que eles se comunicam via troca de mensagens.

Ou seja, nada de herança e encapsulamento (e faltou mencionar polimorfismo, que é outra que sempre aparece nesses "guias básicos"). Essas características se aproximam muito mais da definição de Bjarne Stroustrup, que basicamente pegou o mesmo termo e "ressignificou". No fim, acabou virando a definição mais conhecida.

Isso não quer dizer que o post está errado. Mas é importante mencionar que orientação a objetos é bem mais complexo que isso, e mesmo a sua definição exata é controversa. Por exemplo, não é obrigatório ter classes, tanto que dá pra fazer POO em C. A classe é apenas um mecanismo que facilita.

Vale lembrar que a rigor, JavaScript não tem classes. Apesar de ter a palavra chave class, ela é apenas um syntax sugar, pois por baixo dos panos continua tendo protótipos e funções construtoras.

Carregando publicação patrocinada...
3

Para complementar além disso, que é fundamental postar aqui, conforme colocado na postagem original, OOP não é fundamental em C++, e embora popular, muitos códigos são feitos sem nada disso. Alguns ambientes é proibido o uso de OOP, até porque a metaprogramação de C++ é tão poderosa que permite obter quase o mesmo sem os mecanismos tradicionais de OO.

Até em Java ele tem papel menor do que alguns acreditam. E em C# está tgendo cada vez menos, assim como Java tem diminuído a importância, ainda que mais lentamente e com menos barulho. As linguagens mais novas têm abandonado de vez. Não que isso seja o mais certo a fazer, mas faz algum sentido.

Manter algo privado não é encapsulamento. Isto é information hidden. Encapsulamento é manter tudo o que é necessário em um mesmo invólucro, em geral, a classe, então estado e comportamento está lá sem precisar de nada extra.

Quase todos exemplos básicos de herança monstram o mecanismo e não como a herança deve ser aplicada no mundo real. Hoje se fala mais em composição do que herança, de tanto que é usada errada. O exemplo mostrado é visto muito em livros, não é de uso real. Por isso falo que as pessoas deveriam evitar um pouco OOP, pelo menos até entenderem certo. QUando treina o erro, é ele que fará para sempre. E passará para frente.

Geralmemente quando se fala em herança se fala em polimorfismo, até porque sem ele a herança fica muito limitada e começa nem fazer sentido.

OOP pode ser usada sem classes, e JS é uma das linguagens que permitem isso. Embora instância seja necessário, não é um pilar de OO. Inclusive existem instâncias em 100% de qualquer outra coisa de programação que não seja OO.

E para terminar de complementar algo que não tem nessa imagem e que o Alan Kay batia na tecla, era o uso do early binding, que geralmente apenas linguagens de script possuem. C++, Java, C#, Deplhi, Kotlin, Swift, D, F#, Scala, etc., só por isso já não podem ser OO de acordo com o biólogo, apesar de algumas permiterem de forma heterodoxa.

Observou? Faz sentido para você?

Espero ter ajudado. Em geral estou à disposição na plataforma (sem abusos :D)


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

2

Um erro do ensino de OOP, gerou grandes problemas mais tarde.
Pessoas acham que OOP é só uma coisa e de um jeito.

Sempre que posso faço o mesmo que você, mostro esse artigo e falo que existem mais definições de OOP!