Constructores nombrados
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy. Lección 11 de 110.
Los constructores con nombre le permiten crear múltiples constructores para una clase, cada uno con un nombre descriptivo que aclara su propósito. Esto es especialmente útil cuando necesita diferentes formas de inicializar un objeto.
La sintaxis utiliza el nombre de la clase seguido de un punto y el nombre del constructor:
class Point {
int x;
int y;
// Constructor regular
Point(this.x, this.y);
// Constructor con nombre para el punto de origen
Point.origin() : x = 0, y = 0;
// Constructor con nombre a partir de un solo valor
Point.diagonal(int value) : x = value, y = value;
}Cada constructor con nombre proporciona una forma clara y legible de crear objetos:
Point p1 = Point(3, 5);
Point p2 = Point.origin();
Point p3 = Point.diagonal(10);
print('p1: (${p1.x}, ${p1.y})'); // p1: (3, 5)
print('p2: (${p2.x}, ${p2.y})'); // p2: (0, 0)
print('p3: (${p3.x}, ${p3.y})'); // p3: (10, 10)Los constructores con nombre hacen que tu código sea más expresivo. En lugar de adivinar qué significa Point(0, 0), Point.origin() comunica inmediatamente la intención. Este patrón es común en las librerías de Dart y ayuda a crear código autodocumentado.
Desafío
FácilConstruyamos un convertidor de temperatura que muestre el poder de los constructores con nombre. Crearás una clase Temperature que se puede inicializar de distintas maneras según la unidad con la que comiences.
Organizarás tu código en dos archivos:
temperature.dart: Define una claseTemperaturecon una variable de instanciadouble celsius. Tu clase debe proporcionar tres maneras de crear una temperatura:- Un constructor normal
Temperature(this.celsius)que recibe directamente un valor en Celsius - Un constructor con nombre
Temperature.fromFahrenheitque acepta un valor en Fahrenheit y lo convierte a Celsius usando la fórmula:(fahrenheit - 32) * 5 / 9 - Un constructor con nombre
Temperature.freezing()que crea una temperatura en el punto de congelación (0 grados Celsius)
display()que muestre:[celsius]C- Un constructor normal
main.dart: Importa tu clase de temperatura y crea tres objetos de temperatura:- Uno usando el constructor normal con
25.0 - Uno usando
fromFahrenheitcon98.6 - Uno usando
freezing()
display()en cada temperatura en el orden indicado arriba.- Uno usando el constructor normal con
Formato de salida esperado:
25.0C
37.0C
0.0CPruébalo tú mismo
import 'temperature.dart';
void main() {
// TODO: Crea una Temperature usando el constructor regular con 25.0
// TODO: Crea una Temperature usando fromFahrenheit con 98.6
// TODO: Crea una Temperature usando freezing()
// TODO: Llama a display() en cada temperatura en orden
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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