Creación de Entidades: Alumno, Asignatura y Evaluación en C#

Clase 27 de 32Fundamentos de C# con NET Core 2.1

Resumen

Modela un sistema escolar en C# con entidades claras, relaciones útiles y buenas prácticas: GUID para identificadores únicos, propiedades autoimplementadas y listas genéricas para componer cursos, alumnos y evaluaciones. Verás decisiones de diseño reales y recomendaciones de tipos numéricos para notas, con ejemplos listos para ampliar.

¿Cómo organizar entidades con guid y constructor?

Crear entidades base con Unique ID y nombre asegura trazabilidad. Se definieron las clases Alumno, Asignatura y Evaluaciones con un GUID generado solo en el constructor, evitando asignaciones externas y garantizando unicidad. Se verificó el comportamiento con un punto de interrupción en School Engine y ejecución en debug, confirmando que el GUID se asigna correctamente.

  • Identificador único con GUID generado en el constructor.
  • Nombre como dato descriptivo principal.
  • Asignación controlada: el ID solo se asigna en el constructor.
  • Verificación con punto de interrupción en debug.

Ejemplo de Alumno en C#:

ausing System; namespace CoreEscuela.Entidades { public class Alumno { public string Nombre { get; set; } public Guid Id { get; private set; } public Alumno() { Id = Guid.NewGuid(); } } }

¿Qué buenas prácticas aplicar en archivos y nombres?

  • En C# no es obligatorio que el archivo se llame como la clase.
  • En Java sí es obligatorio: renombrar es buena práctica.
  • Se puede tener varias clases en un mismo archivo en C#.
  • Mantener consistencia facilita mantenimiento y búsqueda.

¿Qué relaciones definen curso, asignatura y alumno?

Un curso requiere más que identificador y nombre. Además de la jornada, un curso mantiene listas genéricas de Asignaturas y de Alumnos con propiedades autoimplementadas. Para las colecciones se usa using System.Collections.Generic.

  • Curso con Unique ID, nombre y jornada.
  • Lista de Asignaturas que se ven en el curso.
  • Lista de Alumnos inscritos en el curso.
  • Uso de List con get y set.

Ejemplo de Curso:

using System; using System.Collections.Generic; namespace CoreEscuela.Entidades { public class Curso { public Guid Id { get; private set; } public string Nombre { get; set; } public string Jornada { get; set; } public List<Asignatura> Asignaturas { get; set; } = new List<Asignatura>(); public List<Alumno> Alumnos { get; set; } = new List<Alumno>(); public Curso() { Id = Guid.NewGuid(); } } }

¿Cómo decidir la pertenencia de evaluaciones?

Hay dos caminos de diseño: poner en Evaluaciones una referencia a Asignatura y Alumno, o que Asignatura mantenga una lista de evaluaciones. Ambas son válidas. Para avanzar pronto, se optó por registrar desde la evaluación a qué Asignatura pertenece y quién es el Alumno que la presenta.

  • Referencia de Evaluaciones a Alumno.
  • Referencia de Evaluaciones a Asignatura.
  • Decisión basada en el modelo de datos que se quiera manejar.

¿Cómo modelar evaluaciones y notas con precisión?

La evaluación tiene Unique ID, nombre, el Alumno que la presenta, la Asignatura correspondiente y la nota. La nota no puede ser entera si hay decimales, por eso se evaluaron tipos numéricos: float, double y decimal. Recomendación general actual: usar double. Para casos financieros con alta precisión, usar decimal. Aquí se deja en float por simplicidad.

  • Entero: sin decimales, no apto para notas con coma.
  • Float: maneja decimales, precisión moderada.
  • Double: recomendado hoy para cálculos generales.
  • Decimal: recomendado en finanzas por su alta precisión.

Ejemplo de Evaluaciones:

using System; namespace CoreEscuela.Entidades { public class Evaluaciones { public Guid Id { get; private set; } public string Nombre { get; set; } public Alumno Alumno { get; set; } public Asignatura Asignatura { get; set; } public float Nota { get; set; } public Evaluaciones() { Id = Guid.NewGuid(); } } }

¿Qué sigue en el motor de datos?

El siguiente paso es el engine de carga: crear para cada curso sus Asignaturas, registrar sus Alumnos y luego generar Evaluaciones ligadas a una Asignatura y a un Alumno. Así se completa el flujo de datos para operar y probar.

  • Cargar Asignaturas por curso.
  • Cargar Alumnos por curso.
  • Crear Evaluaciones con referencia a Asignatura y Alumno.
  • Probar y validar en debug con punto de interrupción.

¿Te gustaría comentar cómo modelarías la relación de evaluaciones según tu contexto o qué tipo numérico prefieres para notas?