C-Objective

El lenguaje de programación Objective-C es un lenguaje de programación sencilo diseñado para permitir la sofisticada programación orientada a objetos. Objective-C extiende el estándar ANSI del lenguaje C, proporcionando sintaxis para definir clases, métodos, así como otras estructuras que promueven la extensión dinámica de clases.


Si ya has programado en lenguajes orientados a objetos, la siguiente información te resultará de ayuda para aprender la sintaxis básica de Objetcive-C. Muchaos de los conceptos tradicionales de orientación a objetos, como encapsulación, herencia, y polimorfismo, están presentes en Objective-C. Hay algunas diferencias importantes, pero esas diferencias están remarcadas en este artículo y también se encuentra información más detallada por si la necesita.


Si nunca ha programado usando un lenguaje orientado a objetos, necesita entender al menos algunos de los conceptos antes de proceder. El uso de objetos y los patrones de diseño orientado a objetos son fundamentales para el diseño de aplicaciones usando Cocoa, y entender como interactuan es crítico para crear sus aplicaciones.


Extensión

Tipo Fuente


.h


Ficheros de Cabeceras. Los ficheros de cabeceras incluyen declaración de clases, tipos, funciones y constantes.


.m


Ficheros Origen. Esta es la típica extensión usada para ficheros de código fuente y pueden contener código tanto de Objective-C como de C.


.mm


Ficheros Origen. Un fichero origen con esta extensión depuede contener código C++ además de código Objective-C y C. Esta extensión debe usarse únicamente si hace referencia a clases o funcionalidades de C++ en su código Objective-C.


Cuando quiere incluir ficheros de cabecera en su código, típicamente se usa la directiva #import. Esto es como #include, excepto que se asegura de que el mismo fichero nunca se incluye más de una vez. Los ejemplos de Objective-C y esta documentación tienen preferencia sobre #import, y su propio código debería hacerlo.

Clases

Como en otros lenguajes orientados a objeto, las clases en Objective-C proporcionan la estructura básica para encapsular datos con las acciones que operan con esos datos. Un objeto es una instancia en tiempo de ejecución de una clase, que contiene su propia copia en memoria de las variables de instancia declaradas por esa clase y punteros a los métodos de la clase.


La especificación de una clase en Objective-C requiere de dos piezas: la interfaz y la implementación. La parte de la interfaz contiene la declaración de la clase y define las variables de instancia y los métodos asociados con la clase. La interfaz normalmente se encuentra en un fichero .h. La parte de la implementación contiene el código para los métodos de la clase. Normalmente, la implementación se encuentra en un fichero .m.




La Figura 1 muestra la sintaxis de la declaración de una clase llamada MyClass, que hereda de la clase base NSObject. Siguiendo el nombre de la clase (y separado por dos puntos) está el nombre de la clase padre. Las variables de instancia (o miembros) de la clase están declaradas en un código de bloque delimitado por corchetes ({ and }). A continuación del bloque de  las variables de instancia se encuentra el listado de los métodos declarados por la clase. Un punto y coma indica el final de cada variable de instancia y cada declaración de método.


Figura 1 Declaración de la clase

(c)developer.apple.com


(c)developer.apple.co



Métodos y Paso de Mensajes


Una clase en Objective-C puede declarar dos tipos de métodos: métodos de instancia y métodos de clase. Un método de instancia es un método cuya ejecución tiene como ámbito una instancia particular de la clase. En otras palabras, antes de que llames al método, primero debe crear una instancia de la clase. Los métodos de clase, por comparación, no requieren el crear una instancia, pero especificaremos eso más adelante.

La declaración de un método consiste en un identificador de tipo, un tipo de retorno, una o más palabras clave, y el tipo y nombre de de parámetro. La Figura 2 muestra la declaración del método de instancia insertObject:atIndex:

Figura 2  Sintaxis de la declaración de método


 
Declaración métodos ((c)developer.apple.com)


ejemplo de un listado :


@implementation MyClass


- (id)initWithString:(NSString *)aName

{

    if (self = [super init]) {

        name = [aName copy];

    }

    return self;

}


+ (MyClass *)createMyClassWithString: (NSString *)aName

{

    return [[[self alloc] initWithString:aName] autorelease];

}

@end

Propiedades Declaradas
Las propiedades declaradas son una notación conveniente usada para reemplazar la declaración y, opcionalmente, implementación de los métodos de acceso.




Incluye la declaración de propiedades con la declaración de métodos en la interfaz de tu clase. La definición básica utiliza la directiva de compilador @property, seguida de información de tipo y el nombre de la propiedad. También puedes configurar la propiedad con opciones personalizadas, que definen como se comporta el método de acceso. El siguiente ejemplo muestra unas declaraciones simples de propiedades:




@property BOOL flag;


@property (copy) NSString *nameObject;  // Copy the object during assignment.


@property (readonly) UIView *rootView;  // Declare only a getter method.




Cada propiedad con acceso de lectura especifica un método con el mismo nombre que la propiedad. Cada propiedad con acceso de escritura especifica un método adicional con la forma setPropertyName: donde la primera letra del nombre de la propiedad se encuentra en mayúsculas.




En su implemetnación de clase, puede usar la directiva de compilador @synthesize para pedirle al compilador que genere métodos de acuerdo con la especificación en la declaración:


@synthesize flag;


@synthesize nameObject;


@synthesize rootView;




Puede combinar las declaraciones de @synthesize en una sola linea si quiere:


@synthesize flag, nameObject, rootView;


Hablando desde un punto de vista práctico, las propiedades reducen la cantidad de código redudante que necesita escribir. Debido a que la mayoría de métodos de acceso están implementados de manera similar, las propiedades eliminan la necesita de implementar un método getter y setter para cada propiedad de la clase. En su lugar, especifica el comportamiento que quiere usar en la declaración de la propiedad y luego sintetiza los actuales métodos getter y setter en tiempo de compilación basados en la declaración.




Cadenas (Strings)



Como un superset de C, Objective-c soporta las mismas especificaciones sobre cadenas de C. En otras palabras, caracteres simples están rodeados de comillas simples y las cadenas de caracteres están rodeadas de comillas dobles. Sin embargo, la mayoría de frameworks de Objective-C no suelen usan strings al estilo de C. En su lugar, la mayoría de frameworks pasan strings en objetos NSString.


La clase NSString proporciona un objeto envoltorio para cadenas que tiene todas las ventajas que espera, incluyendo gestión de memoria para almacenar cadenas de longitud arbitraria, soporte para Unicode, utilidades de formateo del tipo printf, y más. Debido a que los strings se usan con mucha frecuencia, Objective-C proporciona un notación reducida para crear objetos NSString desde valores constantes. Para usar esta notación reducida, lo único que tiene que hacer es preceder una cadena rodeada de comillas dobles con el símbolo @, como se muestra en los siguientes ejemplos:




NSString *myString = @"My String\n";




NSString *anotherString = [NSString stringWithFormat:@"%d %s", 1, @"String"];




// Create an Objective-C string from a C string


NSString *fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding];




Protocolos y Delegados



Un protocolo declara métodos que pueden ser implementados por cualquier clase. Los protocolos no sno clases por si mismos. Simplemente definen una interfaz que otros objetos son responsables de implementar. Cuando implementa los métodos de un protocolo en una de sus clases, se dice que su clase se ajusta al protocolo.


Los protocolos son utilizados para especificar la interfaz para objetos delegados. Un objeto delegado es un objeto que actúa en nombre de, o coordinándose con, otro objeto. La mejor manera de entender la relación entre protocolos, delegados, y otros objetos es simplemente verlo con un ejemplo.

La clase UIApplication implementa el comportamiento requerido por una aplicación. En lugar de forzarte a hacer una subclase de UIApplication para recibir simples notificaciones sobre el estado actual de la aplicación, la clase UIApplication entrega estas notificaciones llamando a métodos específicos asignados a un objeto delegado. Un objeto que implementa los métodos del protocolo UIApplicationDelegate pueden recibir estas notificaciones y proporcionar una respuesta apropiada.

La declaración de un protocolo es similiar a la declaración de la interfaz de una clase, con la siguientes excepciones, puesto que los protocolos no tienen una clase padre y no definen instancias de clase. El siguiente ejemplo muestra la declaración de un protocolo simple con un único método:

@protocol MyProtocol


- (void)myProtocolMethod;


@end



En el caso de muchos protocolos delegados, adoptar un protocolo es simplemente un asunto de implementar los métodos definidos por ese protocolo. Hay algunos protocolos que requieren que se diga explícitamente que usted soporta el protocolo, y los protocolos pueden especificar métodos requeridos y opcionales.


este es un vídeo para lo entiendan mas gráficamente:


No hay comentarios.:

Publicar un comentario

3 lenguajes de programación mas populares

hoy veremos los 3 lenguajes de programación mas populares mas el ultimo en el top 10 según el indice TIOBE. El Índice TIOBE es un índice e...