Olá, Amanda, tudo bem?
Apesar da dificuldade que você está enfrentando, é muito legal ver que você está se esforçando para absorver os conhecimentos! Não se preocupe, pois os conceitos de Programação Orientada a Objetos (POO) realmente são mais avançados, e dependendo da linguagem e ferramentas que você for focar, é possível que você nem trabalhe com classes no dia a dia. Mas claro, sempre incentivamos que nossos alunos e alunas busquem conhecimentos adicionais, nunca se sabe quando precisaremos deles :)
Respondendo sua pegunta, para você ter uma base teórica mais fortalecida, você pode ler este artigo da Alura sobre Programação orientada a objetos e programação estruturada. Esse artigo consegue abordar praticamente todos os conceitos desses dois cursos de JS Orientado a Objetos. Dá uma olhada nesse parágrafo:
As duas bases da POO são os conceitos de classe e objeto. Desses conceitos, derivam alguns outros conceitos extremamente importantes ao paradigma, que não só o definem como são as soluções de alguns problemas da programação estruturada. Os conceitos em questão são o encapsulamento, a herança, as interfaces e o polimorfismo.
Os exemplos dados são em Java e Python, mas é possível entender pelo menos a teoria e você pode tentar fazer a associação dos conceitos com a prática que você está vendo nos cursos. Ou seja, se você chegar na parte do curso que trata de polimorfismo, você pode ir no artigo e ver um pouco sobre a teoria e como ela é aplicada nessas outras duas linguagens.
Diferenças de JS POO para outras linguagens
Talvez uma das dificuldades que você esteja tendo seja justamente porque JS não é uma linguagem tão focada em POO como algumas outras, e nós não vemos restrições muito fortes, como por exemplo um método ser realmente privado. Em linguagens mais focadas em POO, se você declarar um método privado, você provavelmente receberá um erro se tentar acessá-lo.
Um exemplo de polimorfismo: digamos que você tenha um método transferir
que recebe um parâmetro conta
, e esse parâmetro deve ser uma instância da classe Conta
. E que no seu sistema, você também tem classes ContaCorrente
e ContaPoupanca
que são filhas da classe Conta
. Na prática, você consegue usar como parâmetro conta
tanto um objeto do tipo ContaCorrente
quanto um objeto do tipo ContaPoupanca
, pois podemos dizer que ambos os objetos também são do tipo Conta
(pois suas classes herdam da classe Conta
). Veja como isso pode ser feito em JS:
transferir(valor, conta) {
if (conta instanceof Conta) {
this.sacar(valor);
conta.depositar(valor);
} else {
console.log("O objeto conta não é instância de uma Conta!")
}
}
Queremos garantir que o parâmetro conta
seja um objeto que possua o método depositar
, e sabemos que a classe Conta
possui esse método. Dessa forma, classes filhas de Conta
também possuirão o método depositar
, e assim instâncias de ContaCorrente
e ContaPoupanca
são permitidas a serem o parâmetro conta
desse método. Se aproveitar de características comuns entre diferentes classes é o que chamamos de Polimorfismo.
Em linguagens mais focadas em POO, em vez de fazermos uma verificação "direta" como conta instanceof Conta
, bastaria dizermos que o parâmetro conta
deve ser do tipo Conta
e seria o suficiente para o código imprimir um erro caso essa condição não fosse cumprida.
São apenas exemplos, mas espero ter clareado alguns conceitos!
Nessa página da documentação da MDN, também são explicados os conceitos básicos de POO, com algumas figuras que podem te ajudar. Mas atenção! Os exemplos dessa página mostram a sintaxe mais antiga de implementar orientação a objetos usando Javascript, enquanto o curso que você está fazendo utiliza realmente os conceitos de classe e objetos, que foram introduzidos no JS a partir do ES6 (ECMAScript 6 ou ES2015, uma versão do JS implementada em 2015). Então recomendo ver mais a parte teórica, no início da página.
Você também pode ver esse vídeo para entender um pouco mais sobre as vantagens dos conceitos implementados pela POO e suas aplicações.
Espero ter ajudado! Se você ainda enfrentar dificuldades ou dúvidas, pode nos chamar que ficaremos felizes em te ajudar. Pode ir com calma, revise os conceitos, que sei que você conseguirá aprender. Abraços e bons estudos!