Menu
Coddy logo textTech

Recapitulação - Sistema de Registros de Alunos

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy. Lição 43 de 91.

challenge icon

Desafio

Fácil

Vamos criar um Sistema de Registros de Alunos que reúne todos os conceitos de encapsulamento que você aprendeu neste capítulo. Você criará um sistema bem organizado que gerencia os dados dos alunos com segurança, usando promoção de construtor, propriedades privadas, getters e setters com validação e ocultação de informações.

Você organizará seu código em três arquivos:

  • Student.php: Crie uma classe Student usando promoção de construtor para um $name (string) privado e um $studentId (string) privado. Inclua também uma propriedade de array privada $grades (inicializada como vazia). Seu aluno deve ter:
    • getName(): retorna o nome do aluno
    • getStudentId(): retorna o ID do aluno
    • addGrade(int $grade): adiciona uma nota somente se ela estiver entre 0 e 100 (inclusive)
    • getAverage(): retorna a média de todas as notas como um float (retorna 0.0 se não houver notas)
    • getGradeCount(): retorna o número de notas registradas
  • Classroom.php: Crie uma classe Classroom que gerencie uma coleção de alunos. Use um array privado para armazenar os alunos. Inclua o arquivo Student. Sua sala de aula deve ter:
    • Um construtor que aceite um $roomName (string) privado usando promoção de construtor
    • addStudent(Student $student): adiciona um aluno à sala de aula
    • getStudentCount(): retorna o número de alunos matriculados
    • getClassAverage(): calcula a média das médias de todos os alunos (retorna 0.0 se não houver alunos ou notas)
    • getRoomName(): retorna o nome da sala de aula
  • main.php: Inclua o arquivo Classroom. Você receberá cinco entradas: o nome de uma sala, o nome de um aluno, o ID de um aluno e dois valores de notas. Crie uma Classroom com o nome da sala. Crie um Student com o nome e o ID, adicione ambas as notas (convertidas para inteiros) e, em seguida, adicione o aluno à sala de aula. Imprima quatro linhas:
    • O nome da sala
    • O nome do aluno seguido pela média formatada com 1 casa decimal: "[name]: [average]"
    • O número de notas desse aluno
    • A média da turma formatada com 1 casa decimal

Este sistema demonstra o encapsulamento adequado: as notas são protegidas contra manipulação direta, as médias são calculadas internamente sem expor os dados brutos e todos os dados passam por métodos controlados. A sala de aula não precisa saber como os alunos calculam suas médias. Ela apenas solicita o resultado.

Experimente você mesmo

<?php

require_once 'Classroom.php';

// Ler entradas
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));

// TODO: Crie uma Classroom com o nome da sala

// TODO: Crie um Student com o nome e o ID

// TODO: Adicione ambas as notas ao estudante

// TODO: Adicione o estudante à sala de aula

// TODO: Imprima o nome da sala

// TODO: Imprima o nome do estudante seguido da média formatada com 1 casa decimal: "[name]: [average]"

// TODO: Imprima o número de notas desse estudante

// TODO: Imprima a média da turma formatada com 1 casa decimal

?>

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de PHP online