Page cover

✍️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 mostrarInfo que 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 propriedade modelo.

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:

  1. Adicionar uma nova propriedade chamada "font-size" com o valor 16.

  2. 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 }).

  1. Compare-os usando === e explique o resultado no console.

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

[
  {"id": 1, "nome": "Carlos", "cidade": "São Paulo"},
  {"id": 2, "nome": "Mariana", "cidade": "Rio de Janeiro"}
]

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.

const jsonInvalido = "{ 'nome': 'Pedro', 'idade': 25 }"; // String com JSON invá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:

  1. Uma camiseta com preço 49.90.

  2. Um tenis com preço 199.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.

  1. Use Veiculo.call(this, ...) para chamar o construtor pai.

  2. Use Object.create() para configurar a herança do protótipo.

  3. Não se esqueça de corrigir a propriedade constructor do protótipo de Moto.

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:

  1. É uma instância de Gato.

  2. É uma instância de Animal.

  3. É 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().

const humano = Object.assign({}, podeAndar("João"), podeFalar("João"));
humano.andar();
humano.falar();

29. Desafio do Carrinho de Compras

Crie um sistema de carrinho de compras usando classes:

  1. Classe Item: com nome, preco e quantidade.

  2. Classe Carrinho:

    • Deve ter uma propriedade itens (array).

    • Método adicionarItem(item) que adiciona um objeto da classe Item ao carrinho.

    • Método removerItem(nomeDoItem) que remove o item pelo nome.

    • Um getter valorTotal que 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:

  1. Crie uma string JSON que representa um array de usuários, cada um com id, nome e email.

  2. Use JSON.parse() para converter a string em um array de objetos.

  3. Crie uma classe Usuario com constructor para id, nome e email.

  4. Use o método map no array de objetos para transformar cada objeto genérico em uma instância da classe Usuario.

  5. O array final deve ser uma lista de instâncias da classe Usuario. Imprima-o no console para verificar.

Last updated