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 crear un sistema de expedientes académicos que reúna todos los conceptos de encapsulación que has aprendido en este capítulo. Crearás una clase Student que proteja correctamente los datos académicos confidenciales y, al mismo tiempo, proporcione acceso controlado mediante getters, setters y propiedades calculadas.
Organizarás el código en dos archivos:
student.dart: Define una claseStudentque gestione los expedientes académicos con la encapsulación adecuada:- Un
final String id: el ID del estudiante no debería cambiar nunca después de su creación - Un
String namepúblico: los nombres se pueden actualizar - Una
List<int> _gradesprivada: la lista sin procesar de calificaciones debería estar protegida - Un constructor que reciba el id, el nombre y una lista inicial de calificaciones
- Un getter
gradeCountque devuelva cuántas calificaciones se han registrado - Un getter calculado
averageque calcule y devuelva el promedio de todas las calificaciones comodouble(devuelve0.0si no hay calificaciones) - Un getter calculado
letterGradeque devuelva una letra según el promedio:'A'para 90 o más,'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 hay calificaciones - Un método
displayRecord()que muestre el resumen académico del estudiante
- Un
main.dart: Importa la clase de estudiante y demuestra la encapsulación en acción:- Crea un estudiante con el id
'STU001', el nombre'Emma'y las calificaciones iniciales[85, 92, 78] - Llama a
displayRecord() - Añade una calificación de
95 - Intenta añadir una calificación no válida de
150 - Añade una calificación de
88 - Llama a
displayRecord() - Imprime
Highest grade: [highest]
- Crea un estudiante con el id
El método displayRecord() debería imprimir con este formato:
===== Student Record =====
ID: [id]
Name: [name]
Grades Recorded: [gradeCount]
Average: [average]
Letter Grade: [letterGrade]Resultado esperado:
===== 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: Crea un estudiante con id 'STU001', nombre 'Emma' y calificaciones iniciales [85, 92, 78]
// TODO: Llama a displayRecord()
// TODO: Añade una calificación de 95
// TODO: Intenta añadir una calificación no válida de 150
// TODO: Añade una calificación de 88
// TODO: Llama a displayRecord()
// TODO: Imprime "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 RepositoryPractica por tu cuenta: Compilador de Dart online