Resumen - Almacenamiento genérico
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 69 de 110.
Desafío
Fácil¡Vamos a construir un sistema de almacenamiento genérico que combine todo lo que has aprendido sobre colecciones y genéricos! Crearás una clase Storage<T> que pueda almacenar elementos de cualquier tipo, recuperarlos y ser iterada usando un bucle for-in.
Organizarás tu código en dos archivos:
storage.dart: Crea tu sistema de almacenamiento genérico con dos clases:- Una clase
StorageIterator<T>que implementeIterator<T>para permitir la iteración sobre los elementos almacenados - Una clase
Storage<T>que extiendaIterable<T>con las siguientes capacidades:- Una lista privada para contener los elementos internamente
- Un método
add(T item)para almacenar un nuevo elemento - Un método
getAt(int index)que devuelva el elemento en el índice dado - Un getter
countque devuelva el número de elementos almacenados - Un getter
iteratorque devuelva unStorageIteratorpara los elementos almacenados
- Una clase
main.dart: Importa tu archivo de almacenamiento y demuestra el almacenamiento genérico con diferentes tipos:- Crea un
Storage<String>y añade tres nombres de ciudades:'Paris','Tokyo','Sydney' - Imprime el conteo de elementos
- Imprime el elemento en el índice 1
- Usa un bucle
for-inpara imprimir cada ciudad en su propia línea - Imprime una línea vacía
- Crea un
Storage<int>y añade cuatro números:100,200,300,400 - Usa el método
wherepara filtrar valores mayores a 150, luego imprime la lista resultante
- Crea un
Tu sistema de almacenamiento debería funcionar sin problemas con cualquier tipo manteniendo total seguridad de tipos. ¡Debido a que extiende Iterable, obtiene automáticamente acceso a métodos potentes como where, map y fold!
Salida esperada:
Count: 3
Item at 1: Tokyo
Paris
Tokyo
Sydney
[200, 300, 400]Pruébalo tú mismo
import 'storage.dart';
void main() {
// TODO: Crear un Storage<String> para ciudades
// Añadir tres ciudades: 'Paris', 'Tokyo', 'Sydney'
// TODO: Imprimir el recuento de elementos (formato: "Count: X")
// TODO: Imprimir el elemento en el índice 1 (formato: "Item at 1: X")
// TODO: Usar un bucle for-in para imprimir cada ciudad en su propia línea
// TODO: Imprimir una línea vacía
print('');
// TODO: Crear un Storage<int> para números
// Añadir cuatro números: 100, 200, 300, 400
// TODO: Usar el método where para filtrar valores mayores que 150
// Luego imprimir la lista resultante usando toList()
}
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