📚 Exercício de Fixação 04 – Encapsulamento, Condicionais e Herança
Conteúdos Trabalhados
- Classes e Objetos
- Visibilidade de atributos
- Encapsulamento
- Getters e Setters
- Estruturas Condicionais
- Herança
- Reutilização de Código
- Instanciação de Objetos
🎯 Objetivos de Aprendizagem
Ao concluir esta atividade o estudante deverá ser capaz de:
- Criar classes utilizando JavaScript moderno;
- Declarar atributos privados utilizando
#; - Implementar métodos Getters e Setters;
- Aplicar validações utilizando estruturas condicionais;
- Utilizar herança através da palavra-chave
extends; - Reutilizar métodos herdados;
- Instanciar objetos e testar seus comportamentos;
- Compreender a importância do encapsulamento na proteção dos dados.
📖 Contextualização
Uma instituição de ensino está desenvolvendo um sistema para cadastro de pessoas.
Na primeira versão do sistema foi criada uma classe chamada Pessoa, responsável por armazenar informações básicas como nome e e-mail.
Agora será necessário expandir esse sistema para permitir o cadastro de alunos e professores, aproveitando os conceitos de herança e encapsulamento estudados em sala.
Seu papel será implementar as classes necessárias e realizar os testes para verificar seu funcionamento.
🧩 Parte 1 – Classe Pessoa
Crie um arquivo chamado:
Pessoa.js
Requisitos
A classe deve possuir os seguintes atributos privados:
#nome
#email
Métodos Obrigatórios
setNome()
getNome()
setEmail()
getEmail()
Regras de Negócio
Método setNome()
Deve:
- receber um parâmetro chamado
nome; - verificar se o valor não está vazio;
- armazenar o valor apenas quando válido;
- retornar
truequando a operação for realizada; - retornar
falsequando o valor estiver vazio.
Método setEmail()
Deve:
- receber um parâmetro chamado
email; - verificar se o valor não está vazio;
- armazenar o valor apenas quando válido;
- retornar
truequando a operação for realizada; - retornar
falsequando o valor estiver vazio.
🧩 Parte 2 – Classe Aluno
Crie um arquivo chamado:
Aluno.js
Herança
A classe deverá herdar da classe:
Pessoa
utilizando:
extends
Novo Atributo
Adicionar o atributo privado:
#matricula
Métodos
Implementar:
setMatricula()
getMatricula()
Regra
A matrícula somente poderá ser cadastrada quando possuir algum valor.
Caso contrário o método deverá retornar:
false
🧩 Parte 3 – Classe Professor
Crie um arquivo chamado:
Professor.js
Herança
A classe deverá herdar da classe:
Pessoa
Atributo
Adicionar:
#disciplina
Métodos
Implementar:
setDisciplina()
getDisciplina()
Regra
A disciplina não poderá ser vazia.
🧪 Parte 4 – Arquivo de Testes
Criar um arquivo chamado:
usaPessoas.js
Teste 1 – Pessoa Válida
Criar um objeto:
const p = new Pessoa();
Cadastrar:
Nome: João Silva
Email: joao@email.com
Exibir os dados utilizando os métodos Getters.
Teste 2 – Pessoa Inválida
Criar um objeto:
const p2 = new Pessoa();
Cadastrar:
Nome: ""
Email: ""
Exibir mensagens adequadas quando ocorrer erro.
Exemplo:
Nome inválido
Email inválido
Teste 3 – Aluno Válido
Criar um objeto:
const a = new Aluno();
Cadastrar:
Nome: Maria
Email: maria@email.com
Matrícula: 2025001
Exibir:
Nome:
Email:
Matrícula:
Teste 4 – Aluno Inválido
Cadastrar:
Nome: Pedro
Email: ""
Matrícula: ""
Verificar quais métodos retornam:
false
e exibir mensagens apropriadas.
Teste 5 – Professor Válido
Criar um objeto:
const prof = new Professor();
Cadastrar:
Nome: Carlos
Email: carlos@email.com
Disciplina: Programação Web
Exibir todos os dados.
Teste 6 – Professor Inválido
Cadastrar:
Nome: Ana
Email: ana@email.com
Disciplina: ""
Exibir mensagem informando erro no cadastro da disciplina.
⭐ Desafio Extra 1 – Validação de E-mail
Modificar o método:
setEmail()
para aceitar apenas e-mails que possuam o caractere:
@
Exemplo:
if(email.includes("@"))
Casos de Teste
Válidos:
aluno@email.com
professor@escola.com
Inválidos:
alunoemail.com
professor.com
⭐ Desafio Extra 2 – Validação de Matrícula
Modificar:
setMatricula()
para aceitar somente matrículas com pelo menos:
6 caracteres
⭐⭐ Desafio Avançado
Criar uma nova classe:
Coordenador
que herde de:
Professor
Novo Atributo
#setor
Métodos
setSetor()
getSetor()
Objetivo
Demonstrar herança em múltiplos níveis:
Pessoa
↑
Professor
↑
Coordenador
📌 Questões Teóricas
Responda em seu caderno:
1)
O que é encapsulamento?
2)
Qual a vantagem de utilizar atributos privados?
3)
Qual a diferença entre:
getNome()
e
setNome()
4)
O que faz a palavra-chave:
extends
5)
Uma classe filha pode utilizar métodos da classe pai?
Explique.
6)
Por que utilizar validações dentro dos métodos de uma classe?
7)
Qual a diferença entre herança e reutilização de código por cópia?
📌 Critérios de Avaliação
| Critério | Pontos |
|---|---|
| Classe Pessoa | 1,5 |
| Encapsulamento correto | 1,5 |
| Uso de condicionais | 1,5 |
| Classe Aluno | 1,5 |
| Classe Professor | 1,5 |
| Arquivo de testes | 1,5 |
| Questões teóricas | 1,0 |
Total: 10,0 pontos
💡 Dicas
- Desenvolva uma classe por vez.
- Teste cada método logo após implementá-lo.
- Utilize bastante o comando:
console.log()
para verificar o comportamento do programa.
- Não avance para herança antes que a classe Pessoa esteja funcionando corretamente.
- Sempre valide os dados antes de armazená-los.
🚀 Desafio Final
Implemente um menu simples utilizando:
prompt()
ou
readline()
que permita:
1 - Cadastrar Pessoa
2 - Cadastrar Aluno
3 - Cadastrar Professor
4 - Listar Dados
5 - Sair
Este desafio servirá como preparação para os próximos conteúdos de:
- Composição de Objetos;
- Coleções de Objetos;
- Persistência de Dados.