Protocolo vs. Clase
La programación orientada a objetos nos acostumbró a pensar en términos modulares :
Cómo puedo resolver este problema en pocos pasos, sin crear funciones gigantes ?
Cómo puedo resolver este problema utilizando el principio de responsabilidad individual ?
Cómo puedo crear código bien ordenado y fácil de comprender ?
En Swift tenemos una herramienta que nos ayuda con el decoupling y con la tarea de independizar las piezas de código la una de la otra en nuestras apps :
Protocolos !
Los Protocolos nos permiten establecer elementos y funciones sin implementación.
protocol Instrumento {
var afinado: Bool { get set}
func afinar()
}
class Bajo: Instrumento {
var afinado: Bool
func afinar(){
//Implementación
}
//Implementación
}
}
La ventaja que nos dá el Protocolo, es que la falta de una implementación por defecto nos permite tener entidades que implementen sus funciones de la forma que mejor se adapte a su identidad y podemos establecer relaciones entre estas entidades que pueden no tener otras cosas en común mas que adscribir al mismo o a los mismos Protocolos.
Podemos crear una estructura de datos como un Array o un Dictionary usando objetos de Clases, Structs o Enums que implementen el mismo Protocolo.
Podemos crear una estructura de datos como un Array o un Dictionary usando objetos de Clases, Structs o Enums que implementen el mismo Protocolo.
Terminó el tiempo de las Clases ?
Pues Protocolos y Clases tienen diferencias que los hacen útiles para diferentes funciones.
En primer lugar, la entidad puede heredar de una Clase y a la vez implementar varios Protocolos, lo que no los hace excluyentes.
Sin embargo es importante tener en claro lo que cada una de estas abstracciones significa y cómo trabaja internamente.
Sin embargo es importante tener en claro lo que cada una de estas abstracciones significa y cómo trabaja internamente.
Una Clase es como una madre que dice :
- Hijo, como soy tu madre voy a dejarte mi herencia. Esta herencia consiste en elementos (mi colección de libros, mis utencillos de cocina, etc.) y talentos (mi sabiduría, mi recetas, etc.). Puedes hacer uso de todo eso, tienes todos los problemas resueltos, todas las fórmulas están allí ! Por supuesto, sólo tú y tus hermanos recibirán la herencia, aunque ninguno de ustedes recibirá mas herencia que la mía !
Un Protocolo es como un padre que dice :
- Hijo, yo no te ofrezco nada. Pero si quieres ser un adulto, y quieres llamarte “hijo mío”, debes implementar todos los talentos que yo tengo. Puedo dispensarte de alguno de ellos, que serán opcionales.
Por tanto, los Protocolos nos demandan un comportamiento para establecer reglas comunes mientras las Clases nos otorgan derecho sobre sus funcionalidades. Con las Extensiones de los Protocolos también tenemos implementaciones definidas cuando necesitemos utilizar acciones por defecto, sin embargo tenemos que tener en cuenta que esta suerte de "herencia" múltiple, trae aparejados los clásicos problemas de los lenguajes que la utilizan como mecanismo natural.
Importante subrayar que las funciones marcadas como opcionales, están disponibles sólo incluyendo el Runtime Objective-C, lo que limitará la funcionalidad de nuestro código Swift en algunas ocasiones.
Los Protocolos nos permiten :
Importante subrayar que las funciones marcadas como opcionales, están disponibles sólo incluyendo el Runtime Objective-C, lo que limitará la funcionalidad de nuestro código Swift en algunas ocasiones.
Los Protocolos nos permiten :
- Agregar funcionalidad o relacionar elementos preexistentes de en la API de Swift, por ejemplo, añadir funciones a un UIButton
- Utilizar los Protocolos como argumentos en las Funciones
- Declarar Protocolos exclusivos de ciertas Clases
Comentarios
Publicar un comentario