Resumen - Sistema de registros de estudiantes
Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy — lección 43 de 91.
Desafío
FácilVamos a construir un Sistema de Registros de Estudiantes que reúna todos los conceptos de encapsulación que has aprendido en este capítulo. Crearás un sistema bien organizado que gestione los datos de los estudiantes de forma segura, utilizando la promoción de constructores, propiedades privadas, getters y setters con validación, y la ocultación de información.
Organizarás tu código en tres archivos:
Student.php— Crea una claseStudentutilizando la promoción de constructores para un$name(string) privado y un$studentId(string) privado. También incluye una propiedad de array$gradesprivada (inicializada como vacía). Tu estudiante debe tener:getName()— devuelve el nombre del estudiantegetStudentId()— devuelve el ID del estudianteaddGrade(int $grade)— añade una calificación solo si está entre 0 y 100 (inclusive)getAverage()— devuelve el promedio de todas las calificaciones como un float (devuelve 0.0 si no existen calificaciones)getGradeCount()— devuelve el número de calificaciones registradas
Classroom.php— Crea una claseClassroomque gestione una colección de estudiantes. Utiliza un array privado para almacenar a los estudiantes. Incluye el archivo Student. Tu aula debe tener:- Un constructor que acepte un
$roomName(string) privado utilizando la promoción de constructores addStudent(Student $student)— añade un estudiante al aulagetStudentCount()— devuelve el número de estudiantes inscritosgetClassAverage()— calcula el promedio de los promedios de todos los estudiantes (devuelve 0.0 si no hay estudiantes o no hay calificaciones)getRoomName()— devuelve el nombre del aula
- Un constructor que acepte un
main.php— Incluye el archivo Classroom. Recibirás cinco entradas: un nombre de aula, un nombre de estudiante, un ID de estudiante y dos valores de calificación. Crea unClassroomcon el nombre del aula. Crea unStudentcon el nombre e ID, añade ambas calificaciones (convertidas a enteros), luego añade al estudiante al aula. Imprime cuatro líneas:- El nombre del aula
- El nombre del estudiante seguido de su promedio formateado a 1 decimal:
"[name]: [average]" - El número de calificaciones de ese estudiante
- El promedio de la clase formateado a 1 decimal
Este sistema demuestra una encapsulación adecuada: las calificaciones están protegidas de la manipulación directa, los promedios se calculan internamente sin exponer los datos brutos y todos los datos fluyen a través de métodos controlados. El aula no necesita saber cómo calculan los estudiantes sus promedios; simplemente solicita el resultado.
Pruébalo tú mismo
<?php
require_once 'Classroom.php';
// Leer entradas
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));
// TODO: Crear un Classroom con el nombre de la sala
// TODO: Crear un Student con el nombre y el ID
// TODO: Agregar ambas calificaciones al estudiante
// TODO: Agregar al estudiante al aula
// TODO: Imprimir el nombre de la sala
// TODO: Imprimir el nombre del estudiante seguido de su promedio formateado a 1 decimal: "[nombre]: [promedio]"
// TODO: Imprimir el número de calificaciones de ese estudiante
// TODO: Imprimir el promedio de la clase formateado a 1 decimal
?>Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosIntroducción a OOPClases vs ObjetosLa palabra clave $thisMétodosPropiedadesConstructor (__construct)Destructor (__destruct)Resumen - Calculadora simple4Herencia
Herencia básicaLa palabra clave parent::Sobrescritura de métodosLa palabra clave finalClases abstractasResumen - Jerarquía de empleados7Encapsulamiento
Público, Protegido, PrivadoModificadores de acceso a fondoGetters y SettersOcultamiento de informaciónPromoción de constructor (8.0)Resumen - Sistema de registros de estudiantes10Conceptos avanzados de POO
Composición vs. HerenciaInyección de dependenciasClases anónimasEnums (PHP 8.1)Fibers (PHP 8.1)Clonación de objetos a fondoGeneradores e Iteradores13Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository2Espacios de nombres y Autoloading
Introducción a los espacios de nombresLa palabra clave useEstándar de Autoloading PSR-4Autoloader de ComposerResumen - Proyecto organizado5Interfaces y Contratos
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesInterfaz vs Clase AbstractaType Hinting con InterfacesResumen - Calculadora de Formas8Métodos mágicos
Introducción a los métodos mágicos__toString y __debugInfo__get, __set, __isset, __unset__call y __callStatic__clone y clonación de objetos__serialize y __unserializeResumen - Colección personalizada3Propiedades de clase
Propiedades de instancia vs. estáticasConstantes en clasesMétodos y propiedades estáticosPropiedades privadas y protegidasPropiedades de solo lectura (PHP 8.1)Resumen - Gestor de cuenta bancaria6Polimorfismo
Sobrescritura de métodos revisadaPolimorfismo mediante interfacesType Hinting y tipos de uniónEnlace estático tardíoResumen - Procesador de pagos9Traits
Introducción a los TraitsUso de múltiples TraitsResolución de conflictos de TraitsMétodos abstractos en TraitsTraits frente a herencia12Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy