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

E lá vamos nós de novo :-)


Já falei aqui sobre isso, mas como o assunto sempre volta, vale repetir:

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 também aqui, e sugiro ler e seguir todos os links indicados (e mais os links em cada em cada um deles) 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, encapsulamento ou polimorfismo (as características que sempre aparecem em qualquer texto sobre o assunto). 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.

Mesmo os "pilares" não são consenso. Tem gente que diz que "abstração" é um termo genérico demais para pertencer a um único paradigma, por exemplo.

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. Ou usando protótipos, como faz o JavaScript (apesar de ter a palavra chave class, ela é apenas um syntax sugar). Ou seja, a classe é apenas um mecanismo que facilita, mas não é pré-requisito pra algo ser orientado a objeto. E ela por si só também não garante nada, muita gente faz programas procedurais em Java sem perceber, por exemplo.

Por fim, sobre getters e setters, sugiro ler os links que estão aqui, tem discussões muito boas pra se aprofundar no tema, em especial esta (sim, o assunto é mais complexo do que parece).

Carregando publicação patrocinada...
2

Desculpe se parecer rude, mas no post completo tem uma seção chamada “O que é POO?” onde esclareço justamente isso, de que não existe uma definição clara sobre POO. Coloquei esta seção justamente por conta que li a sua resposta a primeira vez que postou.

Entendi algo errado?

Novamente, desculpe se parecer rude. O post é open-source e toda contribuição é bem-vinda.

1

Eu vi o post, mas como não dá pra saber se todo mundo vai clicar, resolvi responder e deixar a informação aqui também. Desculpe pelo mal entendido.


Mas eu reconheço que isso é uma batalha perdida. A esmagadora maioria dos cursos só ensina de uma forma, até porque é a que se tornou mais popular e no fim a mais usada. E por isso a maioria vai continuar achando que é a única.

Eu só insisto porque sou teimoso mesmo, ainda acredito que as pessoas deveriam se aprofundar no tema e entender que "não é só isso" :-)

1

A definição do Alan Kay implica em alguns resultados que podem passar despercebidos para alguns programadores. Um exemplo simples que serve para visualizar melhor a definição:

2 + 4 * 3 = 18 e não 14

Como tudo são objetos, a expressão acima poderia ser traduzida como:

2.plus(4).times(3)