Conceptos básicos de constructores
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 8 de 110.
Un constructor es un método especial que se ejecuta automáticamente cuando creas un objeto nuevo. Inicializa las variables de instancia del objeto justo en el momento de la creación.
Aquí hay un ejemplo de una clase con un constructor:
class Dog {
String name;
String breed;
Dog(String name, String breed) {
this.name = name;
this.breed = breed;
}
}El constructor tiene el mismo nombre que la clase. Los parámetros se pasan al crear el objeto.
Crea objetos pasando argumentos al constructor:
Dog rex = Dog('Rex', 'German Shepherd');
Dog buddy = Dog('Buddy', 'Golden Retriever');Accede a las variables establecidas por el constructor:
print(rex.name);
print(rex.breed);
print(buddy.name);
print(buddy.breed);Salida:
Rex
German Shepherd
Buddy
Golden RetrieverDart también ofrece una sintaxis de constructor abreviada utilizando this.variableName directamente en la lista de parámetros:
class Dog {
String name;
String breed;
// Abreviatura: asigna automáticamente los parámetros a las variables de instancia
Dog(this.name, this.breed);
}Ambas versiones producen el mismo resultado. La forma abreviada es una característica popular de Dart que elimina la necesidad de escribir this.name = name manualmente.
También puedes añadir valores de parámetros por defecto:
class Cat {
String name;
int age;
Cat(this.name, [this.age = 1]); // la edad por defecto es 1
}
Cat fluffy = Cat('Fluffy', 3);
Cat whiskers = Cat('Whiskers'); // la edad por defecto es 1
print('${fluffy.name} is ${fluffy.age}'); // Fluffy is 3
print('${whiskers.name} is ${whiskers.age}'); // Whiskers is 1Punto clave: Los constructores aseguran que cada objeto se inicialice correctamente con datos en el momento en que se crea, evitándote tener que configurar las variables manualmente después.
Desafío
FácilSe te proporcionan archivos PHP (book.dart y driver.dart) para implementar un sistema de libros.
Tus tareas:
- Completa la clase
Bookenbook.dartagregando un constructor que inicialicetitle,authorypages— utiliza la sintaxis abreviada de DartBook(this.title, this.author, this.pages); - En
driver.dart, crea un objetoBookpara'Harry Potter'de'J.K. Rowling'con400páginas
Sigue los comentarios TODO en cada archivo.
Hoja de referencia
Un constructor es un método especial que se ejecuta automáticamente al crear un nuevo objeto. Inicializa las variables de instancia del objeto en el momento de la creación.
El constructor tiene el mismo nombre que la clase:
class Dog {
String name;
String breed;
Dog(String name, String breed) {
this.name = name;
this.breed = breed;
}
}Cree objetos pasando argumentos al constructor:
Dog rex = Dog('Rex', 'German Shepherd');Dart ofrece una sintaxis abreviada para constructores utilizando this.variableName directamente en la lista de parámetros:
class Dog {
String name;
String breed;
Dog(this.name, this.breed);
}Puede añadir valores de parámetros por defecto utilizando parámetros posicionales opcionales:
class Cat {
String name;
int age;
Cat(this.name, [this.age = 1]); // age por defecto es 1
}
Cat fluffy = Cat('Fluffy', 3);
Cat whiskers = Cat('Whiskers'); // age por defecto es 1Pruébalo tú mismo
import 'book.dart';
void main() {
// TODO: Crea un objeto Book con:
// title: 'Harry Potter', author: 'J.K. Rowling', pages: 400
Book myBook = ?;
print("'${myBook.title}' by ${myBook.author}, ${myBook.pages} pages");
}
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