
✍️Mão na Massa
Lista de Exercícios: Classes e Objetos em JavaScript
Bloco 1: Fundamentos de Objetos Literais (Exercícios 1-5)
1. Crie seu Primeiro Objeto
Crie um objeto literal chamado filme com as seguintes propriedades:
titulo(string)ano(number)diretor(string)Um método chamado
mostrarInfoque imprime no console uma frase como: "O filme [título], lançado em [ano], foi dirigido por [diretor]."
2. Adicionando e Acessando Propriedades
Crie um objeto carro vazio. Em seguida, adicione as seguintes propriedades usando a notação de ponto:
marca(ex: "Ford")modelo(ex: "Ka")ano(ex: 2020) Depois, acesse e imprima no console a propriedademodelo.
3. Notação de Colchetes
Crie um objeto configuracoes com as propriedades tema: "dark" e idioma: "pt-br". Use a notação de colchetes para:
Adicionar uma nova propriedade chamada
"font-size"com o valor16.Acessar e imprimir o valor da propriedade
"font-size"no console.
4. O Poder do this
Crie um objeto calculadora com um método somar. Este método deve receber dois números como parâmetros e retornar a soma deles. Dentro do objeto, adicione uma propriedade historico (um array vazio). Modifique o método somar para que, toda vez que for chamado, ele adicione uma string como "soma: 2 + 3 = 5" ao array historico usando a palavra-chave this.
5. Removendo Propriedades
Crie um objeto usuario com as propriedades nome, email e senha. Antes de "enviar" esses dados para um servidor (simulação), remova a propriedade senha usando a palavra-chave delete. Imprima o objeto no console para confirmar que a senha foi removida.
Bloco 2: Aprofundando em Objetos e JSON (Exercícios 6-10)
6. Objetos Aninhados (Sub-Namespaces)
Crie um objeto biblioteca que represente uma prateleira de livros. O objeto deve ter uma propriedade prateleira, que é um outro objeto. Este objeto prateleira deve conter as chaves ficcao, fantasia e autoajuda, e cada uma delas deve ser um array de strings com títulos de livros. Acesse e imprima o primeiro livro da prateleira de fantasia.
7. Comparação de Objetos
Crie dois objetos, obj1 e obj2, com exatamente as mesmas propriedades e valores (ex: { nome: "Ana", idade: 30 }).
Compare-os usando
===e explique o resultado no console.Use
JSON.stringify()para comparar o conteúdo dos objetos e imprima se são iguais ou não.
8. Convertendo para JSON
Pegue o objeto biblioteca do exercício 6 e converta-o para uma string JSON. Imprima o resultado no console.
9. Analisando uma String JSON
Dada a seguinte string JSON, converta-a de volta para um objeto JavaScript usando e acesse a propriedade cidade do primeiro usuário da lista.
10. Erro Comum em JSON
Tente analisar (JSON.parse()) a seguinte string e observe o erro no console. Corrija a string para que ela se torne um JSON válido.
Dica: Preste atenção nas aspas.
Bloco 3: Introdução a Classes e Construtores (Exercícios 11-15)
11. Criando sua Primeira Classe
Crie uma classe Produto com um constructor que recebe nome e preco. Armazene esses valores nas propriedades do objeto.
12. Instanciando Objetos
Usando a classe Produto do exercício anterior, crie duas instâncias:
Uma
camisetacom preço49.90.Um
teniscom preço199.99. Imprima os dois objetos no console.
13. Métodos em Classes
Adicione um método descrever() à classe Produto que retorna uma string formatada: "[Nome] custa R$[Preço].". Chame esse método nas instâncias camiseta e tenis.
14. Getters para Propriedades Calculadas
Na classe Produto, adicione um get chamado precoComDesconto que retorna o preço do produto com 10% de desconto.
15. Setters para Validação
Adicione um set para a propriedade preco na classe Produto. O setter deve verificar se o novo preço é maior que zero. Se não for, ele deve lançar um erro ou imprimir uma mensagem de aviso.
Bloco 4: Funções Construtoras e Protótipos (Exercícios 16-20)
16. Função Construtora
Reescreva a classe Produto dos exercícios anteriores como uma função construtora ProdutoFunc.
17. Adicionando Métodos ao prototype
Mova o método descrever() da função construtora ProdutoFunc para o seu prototype (ProdutoFunc.prototype). Explique em um comentário por que essa é uma boa prática.
18. Herança com Object.create()
Crie um objeto base animal com um método emitirSom() que imprime "Som de animal". Em seguida, crie um novo objeto cachorro usando Object.create(animal) e adicione uma propriedade raca a ele. Chame o método emitirSom() a partir do objeto cachorro.
19. Herança com Funções Construtoras
Crie uma função construtora Veiculo(rodas). Depois, crie uma função Moto(rodas, capacete) que herda de Veiculo.
Use
Veiculo.call(this, ...)para chamar o construtor pai.Use
Object.create()para configurar a herança do protótipo.Não se esqueça de corrigir a propriedade
constructordo protótipo deMoto.
20. Verificando a Cadeia de Protótipos
Crie uma instância da Moto do exercício anterior e use Object.getPrototypeOf() duas vezes para mostrar no console a cadeia de protótipos (Instância da Moto -> Protótipo da Moto -> Protótipo do Objeto).
Bloco 5: Pilares da POO e Herança Avançada (Exercícios 21-27)
21. Herança com class, extends e super
Reescreva a herança de Veiculo e Moto dos exercícios 19 e 20 usando a sintaxe de class, extends e super().
22. Polimorfismo
Crie uma classe Animal com um método fazerBarulho(). Crie duas classes que herdam de Animal: Gato e Cachorro. Sobrescreva o método fazerBarulho() em cada uma delas para imprimir "Miau!" e "Au au!", respectivamente. Crie um array com uma instância de Gato e uma de Cachorro e itere sobre ele, chamando o método fazerBarulho() para cada animal.
23. Encapsulamento com Campos Privados
Crie uma classe ContaBancaria com uma propriedade privada #saldo. Adicione métodos públicos: depositar(valor), sacar(valor) e verSaldo(). O método sacar não deve permitir a retirada de um valor maior que o saldo disponível.
24. Abstração
Pense na classe ContaBancaria do exercício anterior. Explique com suas palavras (em um comentário no código) como o conceito de abstração é aplicado nela. Você só interage com depositar() e sacar(), sem precisar saber como o saldo é gerenciado internamente.
25. Métodos e Propriedades Estáticas
Crie uma classe Configuracao que não precisa ser instanciada. Adicione uma propriedade estática versao com o valor "1.0" e um método estático obterVersao() que retorna essa propriedade. Chame o método diretamente da classe, sem criar uma instância.
26. Class Expression Anônima
Crie uma constante Retangulo que recebe uma class expression anônima. A classe deve ter um constructor que recebe largura e altura, e um método calcularArea(). Instancie a classe e calcule a área.
27. Verificando a Instância com instanceof
Usando os objetos e classes do exercício 22 (Animal, Gato, Cachorro), verifique e imprima no console se uma instância de Gato:
É uma instância de
Gato.É uma instância de
Animal.É uma instância de
Cachorro.
Bloco 6: Desafios Finais (Exercícios 28-30)
28. Desafio de Composição
Em vez de usar herança, crie uma função podeAndar(nome) que retorna um objeto com um método andar(). Crie outra função podeFalar(nome) que retorna um objeto com um método falar(). Crie um objeto humano que "compõe" os comportamentos de ambos, usando Object.assign().
29. Desafio do Carrinho de Compras
Crie um sistema de carrinho de compras usando classes:
Classe
Item: comnome,precoequantidade.Classe
Carrinho:Deve ter uma propriedade
itens(array).Método
adicionarItem(item)que adiciona um objeto da classeItemao carrinho.Método
removerItem(nomeDoItem)que remove o item pelo nome.Um
gettervalorTotalque calcula e retorna o preço total de todos os itens no carrinho.
30. Desafio Final: API de Usuários
Simule o consumo de uma API:
Crie uma string JSON que representa um array de usuários, cada um com
id,nomeeemail.Use
JSON.parse()para converter a string em um array de objetos.Crie uma classe
Usuariocomconstructorparaid,nomeeemail.Use o método
mapno array de objetos para transformar cada objeto genérico em uma instância da classeUsuario.O array final deve ser uma lista de instâncias da classe
Usuario. Imprima-o no console para verificar.
Atualizado

