Curso Básico de Objective C: Protocolos y Delegados
Protocolos (protocols)
Los protocolos en Objective C son algo similar a los interfaces en Java. Permiten definir un conjunto de propiedades y métodos para que luego puedan ser implementados por parte de otras clases.
Creación de un protocolo
Para crear un nuevo protocolo se realiza de una manera similar a la de la creación de una clase, utilizando el menús File->New->New File o pulsando Comando+N en Xcode. Nos aparecerá la siguiente pantalla de selección:
Bien estemos creando un programa para iOS o para Mac OSX seleccionaremos Cocoa Touch o Cocoa y en la parte derecha seleccionaremos Objective C protocol y pulsamos en Next. Nos aparecerá la siguiente pantalla:
Aquí podremos configurar el nombre del protocolo, recuerda seguir la misma nomenclatura que con las clases, CamelCase con prefijo. Pondremos por ejemplo MiProtocolo y pulsamos en Next.
Ahora veremos la pantalla de selección de guardado:
Indicamos donde queremos guardar el fichero y pulsamos el botón Create. Y nos debería aparecerá el siguiente código:
Como podemos ver en el código, a parte de los comentarios y el import de las clases fundacionales, nos encontramos con que el código del protocolo se verá incluido entre el @protocol y el @end . A continuación escribimos el nombre del protocolo y luego decimos que debería implementar este protocolo. En este caso sería una especie de herencia de propiedades y atributos de otro protocolo el NSObject por eso se coloca después del nombre del protocolo y entre <>. Como puede verse en el código de Objective C antes de definir una clase NSObject se define un protocolo de como debe funcionar un NSObject.
Con el código de ejemplo decimos que todo protocolo debe funcionar como un NSObject de base y luego contendrá todo aquello que queramos añadir.
Para poder añadir propiedades y métodos lo podemos hacer exactamente igual a como lo hacíamos en una clase, lo único es que no tenemos porque definir la implementación, sino solo las definiciones, por lo que para definir un protocolo sólo necesitamos crear un fichero .h de cabecera.
Inclusión de propiedades y métodos
A continuación un ejemplo de inclusión de una propiedad y un método:
Implementación de un Protocolo
A continuación debemos incluir la dependencia del protocolo MiProtocolo, empezamos por añadir el import del protocolo:
Y a continuación después del nombre de la clase padre, indicamos entre <> el nombre del protocolo que queremos implementar en la clase:
De esta manera sería como hacerlo similar al implements NombreDeInterfaz en Java.
Ahora es cuando tendríamos que codificar la implementación del protocolo en la clase, dentro del fichero .m:
Como podemos ver sintetizamos la propiedad i definida en el protocolo y realizamos la implementación del método definido en el protocolo.
Así que se puede decir que la clase Implentadora implementa el protocolo MiProtocolo con todos sus propiedades y métodos.
Si necesitara implementar varios protocolos en una misma clase sólo tendría que separarlos con comas dentro de los <>, por ejemplo:
@interface Implementadora : NSObject <MiProtocolo, MiOtroProtocolo>
Métodos opcionales y requeridos
Como podemos ver disponemos de dos nuevas a notaciones @required y @optional de esta manera colocándolas delante de cada método podemos indicar si es requerido u opcional respectivamente.
Si dejamos el código de la función implementadora tal como está no debería haber ningún problema, porque hemos implementado el método requerido, y aunque no hemos implementado el segundo método, como está definido como opcional, no tenemos la obligación de implementarlo y nuestro programa compilará sin problemas.
Aunque la comprobación de los métodos opcionales en Objective C se realiza en tiempo de ejecución, el programa fallará si se intenta ejecutar un método opcional no implementado.
Comments