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 é 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).