Resumen - Colección personalizada
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 75 de 110.
Desafío
Fácil¡Vamos a construir un sistema ScoreBoard que rastree las puntuaciones de los jugadores y demuestre cómo los métodos especiales trabajan juntos para crear una clase pulida y profesional!
Organizarás tu código en dos archivos:
score_board.dart: Crea una clasePlayery una claseScoreBoardque trabajen juntas para gestionar las puntuaciones del juego.Tu clase
Playerdebe tener unname(String) y unscore(int). Debe:- Implementar
Comparable<Player>para que los jugadores puedan ser ordenados por puntuación en orden descendente (la más alta primero) - Sobrescribir
==yhashCodepara que dos jugadores con el mismo nombre sean considerados iguales (independientemente de la puntuación) - Sobrescribir
toString()para devolver:[name]: [score] points
Tu clase
ScoreBoarddebe almacenar una lista de jugadores y proporcionar:- Un método
addPlayer(Player player)que añada un jugador solo si aún no existe (¡usa tu implementación de igualdad!) - Un método
call()que no reciba argumentos y devuelva una copia ordenada de la lista de jugadores (ordenada por puntuación, la más alta primero) - Sobrescribir
toString()para mostrar todos los jugadores (sin ordenar), uno por línea, con el encabezadoScoreBoard:en la primera línea
- Implementar
main.dart: Importa tu archivo de tablero de puntuaciones y demuestra cómo todos estos métodos especiales funcionan juntos:- Crea un
ScoreBoard - Añade estos jugadores:
Alicecon150,Bobcon200,Charliecon175 - Intenta añadir a
Alicede nuevo con la puntuación999(debería ser rechazada por ser un duplicado) - Imprime el tablero de puntuaciones usando su
toString() - Imprime una línea vacía
- Imprime
Rankings: - Llama al tablero de puntuaciones como una función para obtener las clasificaciones ordenadas, luego imprime cada jugador
- Crea un
¡Este desafío reúne toString() para la visualización, == y hashCode para la detección de duplicados, compareTo() para el ordenamiento y call() para una interfaz llamable limpia!
Salida esperada:
ScoreBoard:
Alice: 150 points
Bob: 200 points
Charlie: 175 points
Rankings:
Bob: 200 points
Charlie: 175 points
Alice: 150 pointsPruébalo tú mismo
import 'score_board.dart';
void main() {
// TODO: Crear un ScoreBoard
// TODO: Añadir jugadores: Alice (150), Bob (200), Charlie (175)
// TODO: Intentar añadir a Alice de nuevo con una puntuación de 999 (debe ser rechazada por duplicado)
// TODO: Imprimir el marcador usando su toString()
// TODO: Imprimir una línea vacía
// TODO: Imprimir "Rankings:"
// TODO: Llamar al marcador como una función para obtener las clasificaciones ordenadas, luego imprimir cada jugador
}
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