Aprendiendo Cocoa

Metodos y Atributos en Objetive-C

Septiembre 18th, 2007 por admin

En primer lugar, daros las gracias a los que nos escribís dándonos apoyo y ánimos para seguir escribiendo, mil gracias, me llena de orgullo y satisfacción (como al rey, jaja).
Aunque en otro post ya os hablamos de Objetive-C, hoy vamos a repasar algunas cosas distintas de Objetive-C que puede chocar al verlas. La razón de hace este post es debido a que realizando otro post con un programa (CuentaCaracteres) nos hemos dado cuenta, que hay pequeñas diferencias que os resultarán un poco extrañas al verlas, y lo que queremos es aprender y no seguir haciendo Copy&Paste. También volver a recomendaros el libro de Fernando López de Macprogramadores (descarga).

Sabemos que Objetive-C obtiene muchas cosas de C, pero en los métodos cambia muchísimo, la razón fue la introducción de una notación infija heredada de Smalltalk para los parámetros. Muchos diréis, ¿pero que es esto de notación infija? Pues es una manera de que un método esté autodocumentado, y no cometamos el típico error de introducir un parámetro que no corresponde o no es su posición.

Imaginaros que tenéis una clase llamada Coche, y un método declarado en esa clase llamado CrearCoche con cuatro parámetros la id,marca,modelo y matricula. Pero ¿siempre te vas a acordar de que es ese orden?¿y si tienes un método como muchísimos mas parámetros?
En C++ lo llamaríamos así
coche->CrearCoche("Renault","Clio","6489-DHM");
Pero en Objetive-C sería
[coche CrearCoche:1 Marca:"Renault" Modelo:"Clio" Matricula:"6489-DHM"]
Y esto se consigue ya que en la cabecera de la declaración del método, especificamos como se llama cada parámetro
-(void) CrearCoche:(int)id Marca:(String *) Modelo:(String *) Matricula:(String*);

No penséis que con esta solución escribimos mas, todo lo contrario, el autocompletado de Xcode nos ayuda a darnos el prototipo del método listo para escribir los parámetros pulsando ESC, pero no os preocupéis que ya aprenderemos como.

La llamada a método la acabais de ver, suponiendo que coche es una instancia de la clase Coche.
[coche CrearCoche:1 Marca:"Renault" Modelo:"Clio" Matricula:"6489-DHM"]
Con un simple golpe de vista, sabéis perfectamente lo que le estáis pidiendo al método.

En Java, una clase posee métodos y atributos, pues en Objetive-C lo mismo, con la salvedad que estos atributos se denominan conexiones Outlet, y realmente son punteros a Objetos. Pero como consejo personal a la hora de diseñar, resulta mucho mas fácil pensar que son simples atributos.

También cuando un método se encarga de establecer o devolver un atributo se le llama setter o getter (getMarca,setMarca…) pues es Objetive-C por convenio, es aconsejable al setter exactamente igual (setMarca) pero al getter, únicamente con el nombre del parámetro que devuelve, por ejemplo, Marca existiría como método y como atributo.

Por ultimo, comentaros la diferencia con los strings. Podemos utilizar incluso las string de C, pero os aconsejo utilizar la clase NSString ( aquí todas las clases llevan NS, de NextStep), ya que resulta mas cómodo trabajar con ellas.
Se crean e inicializan de esta forma
NSString* mensaje=@"esto es una pedazo de cadena";
Siempre con el @ delante, para distinguirlas de las cadenas de C.

El próximo post, se llamará CuentaCaracteres, un programa sencillo, con una interfaz completa y muy curioso de programa, con el que seguiremos nuestra andadura en Cocoa.

Posted in Cocoa

Animate a dejar un comentario

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.