Clases vs. Objetos
Parte de la sección Programación Orientada a Objetos del Journey de Dart de Coddy — lección 4 de 110.
Las clases y los objetos sirven para propósitos diferentes. Una clase es un plano, mientras que un objeto es lo que construyes a partir de ese plano.
Aquí hay un ejemplo de una clase con variables de instancia:
class Dog {
String name = '';
String breed = '';
}Las variables declaradas dentro de una clase (como name y breed) pertenecen a cada objeto creado a partir de esa clase. Exploraremos las variables de instancia en profundidad más adelante.
Crea múltiples objetos de la misma clase:
Dog dog1 = Dog();
Dog dog2 = Dog();Cada objeto puede tener sus propios valores únicos para esas variables:
dog1.name = 'Nicky';
dog1.breed = 'Siberian Husky';
dog2.name = 'Teemon';
dog2.breed = 'Labrador';Usa el operador de punto . para acceder a las variables de un objeto:
print('${dog1.name} is a ${dog1.breed}');
print('${dog2.name} is a ${dog2.breed}');Salida:
Nicky is a Siberian Husky
Teemon is a LabradorDiferencia clave: La clase Dog define la estructura que comparten todos los perros, mientras que dog1 y dog2 son objetos individuales con sus propios datos únicos.
Desafío
FácilCompleta el código para crear dos objetos de estudiante a partir de la clase Student y establecer sus variables.
student.dart: Contiene la claseStudent(bloqueado)driver.dart: Crea dos objetos y establece sus datos
Establece los siguientes valores:
student1: name es'Alice'con grade'A'student2: name es'Bob'con grade'B'
Hoja de referencia
Una clase es un plano que define la estructura y el comportamiento de los objetos. Un objeto es una instancia creada a partir de una clase.
Define una clase con variables de instancia:
class Dog {
String name = '';
String breed = '';
}Crea objetos a partir de una clase:
Dog dog1 = Dog();
Dog dog2 = Dog();Accede y modifica las variables de un objeto utilizando el operador de punto .:
dog1.name = 'Nicky';
dog1.breed = 'Siberian Husky';
dog2.name = 'Teemon';
dog2.breed = 'Labrador';Accede a las variables del objeto:
print('${dog1.name} is a ${dog1.breed}');
// Salida: Nicky is a Siberian HuskyPruébalo tú mismo
import 'student.dart';
void main() {
// TODO: Crear dos objetos Student
// TODO: Establecer nombre y calificación para student1 (nombre: 'Alice', calificación: 'A')
// TODO: Establecer nombre y calificación para student2 (nombre: 'Bob', calificación: 'B')
print('${student1.name} has grade ${student1.grade}');
print('${student2.name} has grade ${student2.grade}');
}
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