Sobre como aprendí a dejar de preocuparme y querer a Objective-C (2)

26
Diciembre
2005

Básicamente Objective-C es C, pero como ya hemos dicho le añade elementos nuevos para permitir al desarrollador una programción orientada a objetos eficaz.

Objetos y clases

Cuando se habla de programación orientada a objetos estos términos siempre se mezclan, se confunden y se lían. Para hacerlo fácil vamos a decir que los objetos viven en tiempo de ejecución y las clases viven en tiempo de desarrollo. No es cierto del todo, pero por ahora sirve.

Los objetos son datos y operaciones y son el alma de la programación orientada a objetos. Se podría decir que son las estructuras clásicas de C en esteroides, como ellas tienes los campos de datos pero además también puedes disponer de operaciones que operan sobre estos datos (operaciones a las que se invoca mediante paso de mensajes).

Los objetos en Objective-C son siempre dinámicos, nunca residirán en la pila, siempre en el heap (por lo tanto siempre se manejan como punteros).

Las clases son tipos de datos. Un objeto es instancia de una clase. La estructura de la clase define la estructura de los objetos que la instancien. Su implementación define como se comportarán los objetos.

Además de las clases Objective-C proporciona categorías (categories) y protocolos (protocols). Las primeras permiten ampliar una clase sin tener que escribir una clase nueva que herede de la que queremos ampliar, los segundos permiten definir sólo el interfaz que luego otras clases pueden implementar (la idea es similar a las interfaces de Java).

Normalmente la declaración de la clase se hace en un archivo .h cuyo nombre será el nombre de la clase declarada en él. Lo cierto es que esta regla es recomendable para la mayoría de los lenguajes orientados a objetos, incluso hay algunos que fuerzan a que se siga esta regla.

#import <cabecera/sistema.h>
#import "mi-cabecera.h"

@class MiClasePrevia;

@interface MiClase : MiClasePadre {
  @protected
    void campo;
}
- (void)métodoDeInstancia;
+ (void)métodoDeClase;
@end

Lo primero que llama la atención es posiblemente #import que no es más que un #include de C pero que tiene en cuenta los archivos importados para no realizar su importación más de una vez por compilación.

Luego está @class que se utiliza para declarar clases que se utilizarán más adelante, pero cuya definición no se va a proporcionar. @interface comienza la definición del interfaz de una nueva clase, que no termina hasta @end. Dentro de ese bloque podemos encontrar la parte de definición de campos de la clase (entre llaves) y la parte de definición de método (fuera de las llaves).

Los campos se definen al igual que se haría en C, pero además se les puede proporcionar una visibilidad (@public, @protected o @private). El ámbito de estas visibilidades es hasta el final del bloque de declaración o hasta el siguiente cambio de visibilidad. Es posible cambiar la visibilidad en el bloque tantas veces como queramos. Por defecto los campos tienen visibilidad protegida.

La última parte es la declaración de los mensajes a los que responde la clase. No es necesario redeclarar los mensajes heredados de clases padre si no se van a modificar. El símbolo “+” o “-” indica el tipo de método: los métodos de clase afectan a la clase en sí, mientras que los métodos de instancia se aplican a cada instancia específica de la clase. La definición del tipo de retorno y los parámetros varía mucho con respecto al C clásico ya que Objective-C permite nombres de funciones “por partes” y otras especialidades. Otra cosa a destacar es que los nombres de los campos y los nombres de los mensajes pueden ser los mismos sin problemas.

Para implementar una clase se utiliza el nombre de la clase y se utiliza la extensión .m. En este archivo se encontrarán las implementaciones de los métodos públicos de la clase (y de una forma un poco especial también los métodos privados).

#import "MiClase.h"

@implementation Circle
    + (void)métodoDeClase { /* ... */ }
    - (void)métodoDeInstancia { /* ... */ }
@end


Los comentarios están cerrados.

Tu servidor sin límites: 20GB de espacio, 1TB de transferencia, 1 dominio gratuito. Por 1.5€ al mes utilizando el código "RUIDOBLANCO" en DreamHost. Más información.