sábado, 19 de marzo de 2016

Programación orientada a protocolos

La nueva apuesta frente a POO

Todos conocemos a estas alturas en que consiste el paradigma de programación orientado a objetos, pero y el ¿orientado a protocolos? pues bien este nuevo paradigma fuertemente implementado en Swift el nuevo lenguaje de Apple, trae una serie de mejoras, digamos que es la “siguiente versión”, la evolución de la orientación a objetos ¡ya se habían tardado!. La orientación a objetos tiene algunas carencias, pero vayamos al grano a ver en que consiste este nuevo paradigma y en que se diferencia de la orientación a objetos.

Como sabemos la orientación a objetos no es mas que un modelo de abstracción, igualmente la orientación a protocolos, la diferencia importante consiste en que en orientación a objetos una variable guarda la dirección de memoria donde esta el objeto y cualquier nueva asignación solo copia dicha dirección y aumenta las referencias a este objeto, en Swift no sucede así, pues cada nueva asignación copia al objeto ¿Como lo lograron? básicamente sustituyeron clases por structs, al hacer esto se adquirió la “naturaleza” de los structs que principalmente consiste de las siguientes características:
1.- Son tipos de datos por valor y no por referencia.
2.- No necesitan inicializar sus propiedades cuando se crea su implementación.

¿Pero si los Structs no soportan herencia como accederemos a la abstracción? ¡a través de protocolos!

Los protocolos solo definen los métodos y propiedades que deberá tener nuestro struct, pero no incluye su implementación (el cuerpo del código) al igual que en las interfaces, con esto podemos crear cualquier estructura que adopte un protocolo y proporcionar un código diferente para cada método dentro de cada struct que creemos, algo parecido a un override de un método padre en el hijo, solo que aquí todos funcionan al mismo nivel.

Lo anterior nos trae un problema, ¿Debo implementar el código de cada método en cada struct que cree? ¡vaya avance, si parece que retrocedimos!. Es que esto no termina aquí, lo siguiente es el concepto de extension de protocolo, lo que hacen las extensiones no solo es indicar que métodos y propiedades han de incluirse por defecto si no también la implementación (el cuerpo del código), lo que hará que el código se “replique” en todos los structs que adopten un protocolo, por supuesto que podemos sobre escribirlos a nuestro gusto y lo útil en esto es que no es necesario incluir las propiedades y métodos implementados en la extension si no que son opcionales para cada adopción. Ademas a partir de Swift 2 se agrego un concepto un poco mas avanzado, la implementación de genéricos a través de la instrucción where, lo que permite acotar las extensiones a un determinado tipo de dato. Con esto tenemos cubierto perfectamente, el equivalente a la herencia, pero con un montón de nuevas posibilidades que no nos permite la orientación a objetos.

Para dejarlo mas claro, nada como un ejemplo practico, la siguiente url apunta a un blog donde se expone perfectamente:


 https://medium.com/ios-en-español/programación-orientada-a-protocolos-122f0bfa3cbf#.t9g4iqb6u

Como pudieron comprobar, este nuevo paradigma es muy potente aunque requiere cambiar un poco la forma de pensar. 


Hasta la próxima y felices códigos.

No hay comentarios.:

Publicar un comentario