
✍️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 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.
[
{"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:
Uma
camiseta
com preço49.90
.Um
tenis
com 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
constructor
do 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()
.
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:
Classe
Item
: comnome
,preco
equantidade
.Classe
Carrinho
:Deve ter uma propriedade
itens
(array).Método
adicionarItem(item)
que adiciona um objeto da classeItem
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:
Crie uma string JSON que representa um array de usuários, cada um com
id
,nome
eemail
.Use
JSON.parse()
para converter a string em um array de objetos.Crie uma classe
Usuario
comconstructor
paraid
,nome
eemail
.Use o método
map
no 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.
Last updated