Resumen - Registros de estudiantes
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 35 de 110.
Desafío
FácilVamos a construir un sistema de expedientes estudiantiles que reúna todos los conceptos de encapsulación que has aprendido en este capítulo. Crearás una clase Student que proteja adecuadamente los datos académicos sensibles mientras proporciona acceso controlado a través de getters, setters y propiedades calculadas.
Organizarás tu código en dos archivos:
student.dart: Define una claseStudentque gestione los expedientes académicos con una encapsulación adecuada:- Un
final String id- el ID del estudiante nunca debe cambiar después de la creación - Un
String namepúblico - los nombres se pueden actualizar - Un
List<int> _gradesprivado - la lista de calificaciones original debe estar protegida - Un constructor que reciba el id, el nombre y una lista inicial de calificaciones
- Un getter
gradeCountque devuelva cuántas calificaciones hay registradas - Un getter calculado
averageque calcule y devuelva el promedio de todas las calificaciones como undouble(devuelve0.0si no existen calificaciones) - Un getter calculado
letterGradeque devuelva una letra basada en el promedio:'A'para 90+,'B'para 80-89,'C'para 70-79,'D'para 60-69, y'F'para menos de 60 - Un método
addGrade(int grade)que solo acepte calificaciones entre 0 y 100 (inclusive). Si es válida, añade la calificación e imprimeGrade [grade] added for [name]. Si no es válida, imprimeInvalid grade: [grade] - Un método
getHighestGrade()que devuelva la calificación más alta, o0si no existen calificaciones - Un método
displayRecord()que muestre el resumen académico del estudiante
- Un
main.dart: Importa tu clase de estudiante y demuestra la encapsulación en acción:- Crea un estudiante con id
'STU001', nombre'Emma', y calificaciones iniciales[85, 92, 78] - Llama a
displayRecord() - Añade una calificación de
95 - Intenta añadir una calificación inválida de
150 - Añade una calificación de
88 - Llama a
displayRecord() - Imprime
Highest grade: [highest]
- Crea un estudiante con id
El método displayRecord() debe imprimir en este formato:
===== Student Record =====
ID: [id]
Name: [name]
Grades Recorded: [gradeCount]
Average: [average]
Letter Grade: [letterGrade]Salida esperada:
===== Student Record =====
ID: STU001
Name: Emma
Grades Recorded: 3
Average: 85.0
Letter Grade: B
Grade 95 added for Emma
Invalid grade: 150
Grade 88 added for Emma
===== Student Record =====
ID: STU001
Name: Emma
Grades Recorded: 5
Average: 87.6
Letter Grade: B
Highest grade: 95Pruébalo tú mismo
import 'student.dart';
void main() {
// TODO: Crear un estudiante con id 'STU001', nombre 'Emma' y calificaciones iniciales [85, 92, 78]
// TODO: Llamar a displayRecord()
// TODO: Añadir una calificación de 95
// TODO: Intentar añadir una calificación inválida de 150
// TODO: Añadir una calificación de 88
// TODO: Llamar a displayRecord()
// TODO: Imprimir "Highest grade: [highest]"
}
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de POO
Archivos externosLibrerías e importacionesIntroducción a la POOClases vs. ObjetosLa palabra clave thisMétodosVariables de instanciaConceptos básicos de constructoresResumen - Calculadora sencilla4Seguridad de nulos
Introducción a la seguridad de nulosNulables vs No nulablesLos operadores ? y !Palabra clave Late y Null SafetyOperadores Null-awareNull Safety en clasesResumen - Sistema de perfil de usuario7Clases abstractas e interfaces
Clases abstractasMétodos abstractosInterfaces en DartInterfaces implícitasImplementar vs. ExtenderInterfaces múltiplesRepaso - Calculadora de figuras10Colecciones y Genéricos
Visión general de List, Set y MapColecciones con seguridad de tiposClases genéricasMétodos genéricosRestricciones genéricasIterable e IteratorResumen - Almacenamiento genérico2Constructores en Dart
Constructor por defectoConstructores nombradosListas de inicializaciónConstructores constantesConstructores de fábricaConstructores de redireccionamientoResumen - Constructor de formas5Encapsulamiento
Miembros públicos vs. privadosLa convención del prefijo _Privacidad a nivel de libreríaProfundidad en Getters y SettersOcultamiento de informaciónResumen - Registros de estudiantes8Mixins
Introducción a los MixinsCreación de MixinsUso de múltiples MixinsPalabra clave on en MixinsMixin vs HerenciaMixin vs InterfazResumen - Sistema Animal11Métodos especiales
Sobrescritura de toString()Sobrescritura de hashCode y ==Interfaz ComparableMétodo call()Sobrescritura de noSuchMethodResumen - Colección personalizada14Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy3Propiedades de clase
Miembros de instancia vs. estáticosCampos Final y ConstVariables LateMétodos y campos estáticosGetters y SettersResumen - Gestor de cuentas bancarias6Herencia
Herencia básicaLa palabra clave superSobrescritura de métodosLa anotación @overrideLa palabra clave final en clasesConstructores y herenciaResumen - Jerarquía de empleados9Polimorfismo
Fundamentos del polimorfismoPolimorfismo mediante interfacesComprobación de tipos en tiempo de ejecuciónLos operadores is y asPalabra clave covariantResumen - Procesador de pagos12POO Asíncrona
Futures y async/awaitFundamentos de StreamsStream ControllersConstructores asíncronosAsincronía en métodos de claseRepaso - Data Fetcher15Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository