Después de construir toda la lógica del sistema de gestión de estudiantes, llega el momento de ponerlo en marcha. Aquí se conectan todas las piezas: creación de instancias, inserción de estudiantes, asignación de materias con calificaciones y generación de reportes. Todo desde el playground de Swift, simulando un entorno real de uso.
¿Cómo se prepara el playground para ejecutar el sistema?
El primer paso es crear las materias y los estudiantes que alimentarán el sistema. En este caso se definen cuatro materias: matemáticas, español, biología y economía. Los estudiantes se crean sin materias inscritas ni notas asignadas, porque esa responsabilidad recae en el administrador del sistema [0:10].
Una vez listos los objetos iniciales, se crea la instancia principal del programa: un objeto de tipo StudentManager. Este objeto se inicializa con una lista vacía, simulando un sistema completamente nuevo al que se le irán agregando datos paso a paso [1:00].
swift
let service = StudentManager(students: [])
Esta forma de trabajar refleja cómo funciona un sistema real: se parte de cero y se alimenta con información de manera progresiva.
¿Cómo se insertan estudiantes y se asignan materias?
Con el servicio ya creado, el siguiente paso es insertar estudiantes usando el método insertStudent [1:18].
swift
service.insertStudent(s1)
service.insertStudent(s2)
Después se utiliza el método assignSubjectToStudent para vincular cada materia con su calificación correspondiente. Por ejemplo, el estudiante S1 queda inscrito en tres materias con distintos puntajes [1:30]:
- Matemáticas: 80.
- Español: 70.
- Biología: 90.
swift
service.assignSubjectToStudent(math, score: 80, student: s1)
service.assignSubjectToStudent(spanish, score: 70, student: s1)
service.assignSubjectToStudent(biology, score: 90, student: s1)
El estudiante S2 también recibe sus materias con calificaciones propias, incluyendo economía en lugar de biología. Esta separación permite verificar que el sistema maneja correctamente estudiantes con catálogos de materias distintos.
¿Qué muestra el reporte generado?
El método generateStudentReport imprime en consola la información completa de cada estudiante junto con sus materias asignadas [2:30]. Al ejecutarlo se confirma que:
- Tiago, estudiante normal, tiene tres materias con sus respectivos requisitos para aprobar.
- María, estudiante avanzada, aparece con sus propiedades particulares y la materia diferenciadora: economía.
Este reporte valida que la herencia entre tipos de estudiantes funciona correctamente y que cada instancia mantiene sus datos de forma independiente.
¿Cómo se obtienen promedios y materias cursadas?
El StudentManager también expone funciones de cálculo sobre todo el sistema. El método getAverage devuelve el promedio de calificaciones por estudiante [3:15]:
- Estudiante uno: promedio de 80.
- Estudiante dos: promedio de 70.
Por otro lado, getCoursedSubjects retorna un set con todas las materias cursadas en el sistema sin repetirlas [3:30]. El resultado incluye español, matemáticas, biología y economía. Al ser un set, garantiza que cada materia aparezca una sola vez aunque varios estudiantes la compartan.
swift
let average = service.getAverage()
let subjects = service.getCoursedSubjects()
¿Qué conceptos de programación orientada a objetos se aplicaron?
Todo el sistema integra los pilares fundamentales de programación orientada a objetos en Swift:
- Structs para modelar datos como las materias.
- Clases con herencia para diferenciar tipos de estudiantes.
- Protocolos que definen contratos de comportamiento.
- Enumerables para categorías predefinidas.
- Funciones avanzadas de arreglos, como filtrado y mapeo.
El patrón de diseño utilizado separa la lógica de negocio dentro del StudentManager, dejando al playground como un simulador limpio del flujo de uso. Esta arquitectura facilita extender el sistema con nuevas funcionalidades sin modificar la estructura base.
Si quieres consolidar estos conocimientos, presenta el quiz del módulo y comparte en los comentarios qué funcionalidad adicional le agregarías al sistema.