Skip to main content

📚 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 true quando a operação for realizada;
  • retornar false quando 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 true quando a operação for realizada;
  • retornar false quando 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érioPontos
Classe Pessoa1,5
Encapsulamento correto1,5
Uso de condicionais1,5
Classe Aluno1,5
Classe Professor1,5
Arquivo de testes1,5
Questões teóricas1,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.