Logo Studenta

06 Semana_6_Dart_Avanzado_ii

¡Este material tiene más páginas!

Vista previa del material en texto

Semana 6: Dart Avanzado (ii)
Facultad de Ingeniería de Sistema e Informática
LENGUAJE DE PROGRAMACIÓN V
Ing. Angel Marthans Ruiz, Mg.
Objetivos: 
Al finalizar, el alumno logrará:
 Conocer los conceptos fundamentales de la Herencia en 
Dart.
 Conocer los conceptos de Clases Abstractas en Dart.
 Conocer los conceptos de Interfaces en Dart.
 Conocer los conceptos de Mixins en Dart.
2
Temas:
 Herencia
 Clases Abstractas
 Interfaces
 Mixins
3
Herencia
4
En muchas situaciones, necesitarás crear una jerarquía de clases que compartan alguna 
funcionalidad base. Puedes crear tus propias jerarquías extendiendo clases. Esto también se 
llama herencia porque las clases forman un árbol en el que las clases hijas heredan de las clases 
padres. Las clases padre e hija también se llaman superclases y subclases respectivamente. La 
clase Object es la superclase superior para todos los tipos no nulables en Dart. Todas las demás 
clases, excepto Null , son subclases de Object.
Herencia
5
Herencia
6
Crear una SubClase
Para ver cómo funciona la herencia, crearás tu propia jerarquía de clases. Crearás una clase 
Student que necesita calificaciones (Grade), así que primero crea un enum Grade. Luego crearas 
una clase Person y otra clase Student.
Herencia
7
Naturalmente, las clases Person y Student son 
muy similares, ya que los alumnos son en 
realidad personas. La única diferencia por el 
momento es que un Student tendrá una lista 
de calificaciones (grades).
Herencia
8
Se puede eliminar la duplicación entre Student y Person haciendo que Student extienda a 
Person. Esto se hace añadiendo extends Person después del nombre de la clase y eliminando 
todo excepto el constructor Student y la lista de calificaciones.
Herencia
9
 Los nombres de los parámetros del constructor ya no hacen referencia a this. Siempre que 
veas la palabra clave this, debes recordar que this se refiere al objeto actual, que en este caso 
sería una instancia de la clase Student. Dado que Student ya no contiene los nombres de 
campo givenName y surname , usar this.givenName o this.surname no tendría nada a lo 
que hacer referencia.
 A diferencia de this , la palabra clave super se utiliza para referirse un nivel por encima de la 
jerarquía, utilizando super(givenName, surname) pasa los parámetros del constructor a otro 
constructor. Sin embargo, como estás usando super en lugar de this , estás reenviando los 
parámetros al constructor de la clase padre, es decir, al constructor de Person.
Herencia
1 0
En lugar de reenviar manualmente los parámetros del constructor a la superclase, puede utilizar 
super más el nombre del parámetro directamente. Así, la clase Student quedaría modificada por 
la siguiente forma simplificada:
Herencia
1 1
Jerarquía Multi-Nivel
Herencia
1 2
Clases Abstractas
1 3
Las clases y subclases que creaste anteriormente eran clases concretas. Esto significa que 
puedes crear objetos a partir de ellas. Esto contrasta con las clases abstractas, a partir de las 
cuales no se pueden crear objetos.
Después de hacer muchas clases concretas, empiezas a notar patrones y características más 
generalizadas de las clases que estás escribiendo. Así que cuando llegas al punto de querer 
describir las características generales y el comportamiento de una clase sin especificar la forma 
exacta en que se implementa, estás listo para escribir clases abstractas.
Clases Abstractas
1 4
• La forma de definir una clase abstracta en Dart es anteponer la 
palabra clave abstract a class.
• Además de que la clase en sí es abstracta, Animal también tiene dos 
métodos abstractos: eat y move . Se sabe que son abstractos porque 
no tienen llaves; simplemente terminan con un punto y coma.
• Estos métodos abstractos describen el comportamiento que una 
subclase debe implementar. Sin embargo, no dicen cómo 
implementar ese comportamiento. Eso depende de la subclase, lo 
cual es bueno. 
• El hecho de que una clase sea abstracta no significa que no pueda 
tener métodos o datos concretos. Puedes ver que Animal tiene un 
campo isAlive concreto, con un valor por defecto de true . Animal 
también tiene una implementación concreta del método toString, 
que pertenece a la superclase Object. La propiedad runtimeType
también proviene de Object y proporciona el tipo de objeto en 
tiempo de ejecución.
Interfaces
1 5
Las interfaces son similares a las clases abstractas en el sentido de que permiten definir el 
comportamiento que se espera de todas las clases que implementan la interfaz. Son un medio 
de ocultar los detalles de implementación de las clases concretas del resto de tu código. ¿Por 
qué es importante? Para responder a esta pregunta es útil entender un poco de arquitectura de 
software.
Arquitectura de Software
A la hora de crear una aplicación, el objetivo debe ser mantener la lógica empresarial principal 
separada de la infraestructura, como la interfaz de usuario, la base de datos, la red y los paquetes 
de terceros. ¿Por qué? La lógica empresarial central no cambia con frecuencia, mientras que la 
infraestructura sí lo hace a menudo. 
Interfaces
1 6
Nota: La lógica de negocio, que a veces se 
denomina reglas de negocio o lógica de 
dominio, se refiere a la esencia de lo que 
hace tu aplicación. La lógica de negocio de 
una aplicación de calculadora serían los 
propios cálculos matemáticos. Esos cálculos 
no dependen del aspecto de tu interfaz de 
usuario ni de cómo almacenes las 
respuestas.
La siguiente imagen muestra una aplicación 
idealizada con la lógica empresarial estable 
en el centro y las partes más volátiles de la 
infraestructura a su alrededor:
Interfaces
1 7
La interfaz de usuario no debería comunicarse directamente con la web. Tampoco deberías 
dispersar las llamadas directas a la base de datos a través de su aplicación. Todo pasa a través de 
la lógica de negocio central. En Además de eso, la lógica de negocio no debería conocer ningún 
detalle de implementación sobre la infraestructura.
Esto le da una arquitectura de estilo plug-in, donde se puede cambiar un marco de base de 
datos por otro y el resto de la aplicación ni siquiera sabrá que algo cambió. Puedes sustituir su 
interfaz de usuario móvil con una interfaz de usuario de escritorio, y el resto de la aplicación no le 
importaría. Esto es útil para construir aplicaciones escalables, mantenibles y comprobables.
Interfaces
1 8
Reglas de comunicación
Aquí es donde entran en juego las interfaces. Una interfaz es una descripción de cómo se 
gestionará la comunicación entre dos partes. Un número de teléfono es un tipo de interfaz. Si 
quieres llamar a tu amigo, tienes que marcar su número de teléfono. Marcar un número diferente 
no funcionará. Otra palabra para interfaz es protocolo, como el Protocolo de Internet (IP) o el 
Protocolo de Transferencia de Hipertexto (HTTP). Estos protocolos son las reglas que rigen la 
comunicación entre los usuarios del protocolo.
Interfaces
1 9
Cuando creas una interfaz en Dart, defines las reglas de cómo una parte de tu código base se 
comunicará con otra parte. Mientras ambas partes sigan las reglas de la interfaz, cada parte 
puede cambiar independientemente de la otra. Esto hace que tu aplicación sea mucho más 
manejable. En entornos de equipo, las interfaces también permiten a diferentes personas 
trabajar en diferentes partes del código base sin preocuparse de que van a estropear el código 
de otra persona.
Interfaces
2 0
Separando la Lógica de Negocio de la Infraestructura
En la imagen de abajo, se puede ver la interfaz es entre la lógica de negocio y el código para 
acceder a la base de datos.
La lógica de negocio no sabe nada de la base de datos. Sólo habla con la interfaz. Eso significa 
que incluso podrías cambiar la base de datos por una forma completamente diferente de 
almacenamiento, como almacenamiento en la nube o almacenamiento de archivos. A la lógica 
de negocio no le importa.
Interfaces
2 1
Implementar una Interface en Dart
No haypalabra clave de interfaz en Dart. En su lugar, puedes usar cualquier clase como interfaz. 
Dado que sólo los nombres de campo y método son importantes, la mayoría de las interfaces 
están hechas de clases abstractas que no contienen lógica.
Mixins
2 2
Los Mixins son una característica interesante de Dart con la que puede que no estés 
familiarizado, incluso si conoces otros lenguajes de programación. Son una forma de reutilizar 
métodos o variables entre clases que de otro modo no estarían relacionadas.
Para hacer un mixin, tomas el código concreto que quieras compartir con diferentes clases, y lo 
empaquetas en su propia clase mixin especial.
Mixins
2 3
Referencias:
 https://dart.dev/language/extend
 https://dart.dev/language/extension-methods
 https://dart.dev/language/mixins
2 4
https://dart.dev/language/extend
https://dart.dev/language/extension-methods
https://dart.dev/language/mixins
La manera de empezar es dejar de 
hablar y comenzar a actuar.
Walt Disney
2 5
	�����Semana 6: Dart Avanzado (ii)
	Objetivos: �Al finalizar, el alumno logrará:
	Temas:
	Herencia
	Herencia
	Herencia
	Herencia
	Herencia
	Herencia
	Herencia
	Herencia
	Herencia
	Clases Abstractas
	Clases Abstractas
	Interfaces
	Interfaces
	Interfaces
	Interfaces
	Interfaces
	Interfaces
	Interfaces
	Mixins
	Mixins
	Referencias:
	La manera de empezar es dejar de hablar y comenzar a actuar.

Otros materiales

Materiales relacionados