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