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 nombrado para el punto de origen
Point.origin() : x = 0, y = 0;
// Constructor nombrado a partir de un solo valor
Point.diagonal(int value) : x = value, y = value;
}Cada constructor nombrado 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ácilVamos a construir un convertidor de temperatura que muestre el poder de los constructores nombrados. Crearás una clase Temperature que puede ser inicializada de diferentes maneras dependiendo de la unidad con la que estés comenzando.
Organizarás tu código en dos archivos:
temperature.dart: Define una claseTemperaturecon una variable de instanciadouble celsius. Tu clase debe proporcionar tres formas de crear una temperatura:- Un constructor regular
Temperature(this.celsius)que toma un valor Celsius directamente - Un constructor nombrado
Temperature.fromFahrenheitque acepta un valor Fahrenheit y lo convierte a Celsius usando la fórmula:(fahrenheit - 32) * 5 / 9 - Un constructor nombrado
Temperature.freezing()que crea una temperatura en el punto de congelación (0 grados Celsius)
display()que imprima:[celsius]C- Un constructor regular
main.dart: Importa tu clase de temperatura y crea tres objetos de temperatura:- Uno usando el constructor regular con
25.0 - Uno usando
fromFahrenheitcon98.6 - Uno usando
freezing()
display()en cada temperatura en el orden listado anteriormente.- Uno usando el constructor regular con
Formato de salida esperado:
25.0C
37.0C
0.0CHoja de referencia
Los constructores con nombre te permiten crear múltiples constructores para una clase con nombres descriptivos que aclaran su propósito.
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;
}Uso de constructores con nombre:
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 el código sea más expresivo y autodocumentado al comunicar claramente la intención.
Prué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 Repository