Oi Marcelo, tudo bem?
Na verdade, existem duas alternativas corretas! Vamos entender o motivo?
Pergunta: Ao criarmos o Sistema de Autenticação do bytebank precisamos autenticar todos usuários que são Gerentes, Diretores e Funcionários. Além disso, os Clientes também precisam ser autenticados pelo mesmo sistema. Para isso criamos um método chamado autenticardentro de todas essas classes.
Como é possível que o Sistema de autenticação consiga receber diversos tipos de objetos por parâmetro e mesmo assim continuar funcionando?
A) Isso só é possível porque o JS não é uma linguagem fortemente tipada e por isso não depende apenas dos tipos pré definidos mas sim se eles possuem ou não as propriedades que queremos utilizar.
Isso é verdade! A função login
da classe Authenticate
recebe um objeto como parâmetro, mas não importa qual objeto for, o que importa é se ele terá ou não o método authenticate()
, que iremos realizar a autenticação de fato.
B) Isso só é possível porque estamos sempre herdando todos os objetos a partir de uma classe comum e por isso todos tem o mesmo tipo base.
Na verdade não é por isso. Veja que a classe Authenticate
não herda de nenhuma outra, o JS é fracamente tipado então não importa o objeto que ele receber.
C) Através do polimorfimo o JS consegue tratar diferentes objetos de maneiras semelhantes e por isso conseguimos autenticar diferentes tipos de objetos em nosso sistema.
Isso é verdade! O polimorfismo é a habilidade de tratar objetos diferentes como semelhantes, economizando muitas verificações de instâncias. Não precisamos ficar fazendo verificações do tipo: autenticavel é uma instância de Cliente, ou Gerente, ou Diretor. Com o polimorfismo, só interessa que o objeto tenha o método autenticar.
D) Como cada objeto pode ser de um tipo diferente precisamos criar condicionais explícitas para cada um desses tipos assim garantimos que o código não dará nenhum erro.
Isso é falso! Graças ao polimorfismo não precisamos ficar criando condicionais, ao tratarmos diferentes objetos de forma igual conseguimos economizar toda essa lógica condicional e deixar nosso código mais simples.
Espero ter ajudado :D Bons estudos!