Sei sulla pagina 1di 36

Introduccin

Objective-C es un lenguaje de programacin orientado a objetos creado como un superconjunto de C pero que implementa un modelo de objetos parecido al de Smalltalk. Originalmente fue creado por Brad Cox y la corporacin StepStone en 1980. En 1988 fue adoptado como lenguaje de programacin de NEXTSTEP y en 1992 fue liberado bajo licencia GPL para el compilador GCC. Actualmente se usa como lenguaje principal de programacin en Mac OS X y GNUstep.

Qu es Objective C
Al igual que C++, Objective-C es una extensin de C para hacerlo orientado a objetos, pero a diferencia de C++, Objective- C est basado en ideas del mundo de Smalltalk, lo cual hace que Objective - C sea un lenguaje ms limpio, pequeo y rpido de aprender que C++. Sin embargo Objective- C es un lenguaje mucho menos usado que C++. El mundo de Mac OS X es quiz una excepcin a esta regla debido a que Objective - C es el lenguaje utilizado para programar en Cocoa, la nueva API orientada a objetos de Mac OS X que pretende mejorar la antigua API de programacin Carbon.

Caracteristicas
Debido a que Objective-C es una extensin de C compatible hacia atrs, muchas caractersticas de la sintaxis de C han sido heredadas por Objective- C, entre ellas: Sentencias de control de flujo. Los tipos de datos fundamentales, estructuras y punteros. Conversiones implcitas y explcitas entre tipos. Los mbitos de las variables: Globales, estticas y locales. Las funciones y su sintaxis.

Lenguaje Marcadamente Dinmico


Si hubiera que elegir una caracterstica que diferencie a Objective - C de otros lenguajes, sta sera que es un lenguaje muy dinmico, en el sentido de que muchas decisiones que muchos lenguajes toman en tiempo de compilacin, Objective- C las deja para el tiempo de ejecucin. La gran ventaja de este dinamismo se aprecia en las herramientas de desarrollo, donde las herramientas tienen acceso a todo el runtime del programa, con lo que las herramientas de desarrollo pueden instanciar los objetos del programa, representarlos visualmente, personalizarlos, monitorizarlos, y depurarlos de forma muy cmoda para el programador.

Los cinco tipos de dinamismo que diferencian a Objective - C de otros lenguajes:

1. 2. 3. 4. 5.

Memoria dinmica Tipos dinmicos Introspeccin Enlace dinmico Carga dinmica

Tipos dinmicos
Id: Este tipo es el tipo general para cualquier tipo de objeto id anObject; El tipo id es completamente no restrictivo, por si mismo este no contiene informacin de un objeto, excepto que este es un objeto.

Introspeccion
Verifica si el receptor es instancia de una clase

en particular if ( [anObject isMemberOfClass:someClass] )


Verifica si el receptor hereda o si es miembro de

una clase en particular if ( [anObject isKindOfClass:someClass] )

Enlace Dinamico
Los lenguajes orienta dos a objeto reemplazan el concepto de

llamada a funcin por el de envo de mensajes. La diferencia est en que el mismo mensaje puede ejecutar diferentes funciones dependiendo del objeto que reciba el mensaje. A esta capacidad que tienen los objetos de responder al mismo mensaje de distinta forma es a lo que se ha venido a llamar polimorfismo.

Objetos y Clases: Clases


Las clases en Objective - C constan de una interfaz y una implementacin. La interfaz indica la estructura del objeto, y la implementacin contiene la implementacin de sus mtodos. La interfaz y la implementacin se suelen poner en dos ficheros distintos (con las extensiones .h y .m respectivamente). El cdigo fuente del fichero de interfaz debe estar disponible para ser usados por otros programadores. Sin embargo el fichero de implementacin puede entregarse compilado.

La interfaz
Lo primero que se indica es el nombre de la clase y la clase de la que deriva. En Objective - C si una clase no deriva de NSObject (o de Object ), no puede utilizar las ventajas del runtime de Objective- C. aunque es posible que una clase Objective- C no derive de ninguna clase, esto slo se hace cuando la clase se va a utilizar como un almacn de datos (al estilo de las estructuras C), pero no se van a ejecutar mtodos sobre ella. Tambin veremos que otra razn por la que Objective- C nos permite que una clase no tenga clase base es por eficiencia.

Implementacin
Lo primero que se suele hacer en la implementacin de una clase es importar su interfaz, y despus se usan las directivas del compilador @ implementation y @end para encerrar la implementacin de la clase. Slo si una clase no tiene mtodos, podemos omitir su implementacin. O bserve que, a diferencia de la interfaz, en la implementacin se indica el nombre de la clase, pero no se vuelve a indicar de qu clase deriva.

Herencia
Enlaza todas las clases en un rbol jerrquico,

con una simple clase en su raiz, esta clase raiz es NSObject .

NSObject Class
Es la clase raiz y no tiene superclase, este define

un framework basico para los objetos de ObjectiveC y para la interacion entre los objetos

Encapsulamiento
Los mensajes no son un mecanismo de

concurrencia, sino un mecanismo de modularidad. La mensajera crea la encapsulacin de datos y procedimientos que se denomina objeto. Muchos de los conceptos tradicionales de orientacin a objetos, como encapsulacin, herencia, y polimorfismo, estn presentes en Objective-C.

Objetos
En Objective-C, al igual que en Java y al contrario que C++, los objetos slo se pueden crear en memoria dinmica. Esta circunstancia hace que debamos declarar los objetos mediante punteros tal como sigue:

Persona p; // Esto dara error de compilacin. Persona *p; // Esto es lo correcto.

Objeto(...)

Interfaz: Poligono.h

Objetos()

Implementacin: Poligono.m

Objetos()

main.m

Instanciar
Para instanciar objetos usaremos los mtodos alloc e init, que funcionarn a modo de Constructor de la clase. Lo que hace alloc es reservar memoria para el objeto, para luego inicializar el objeto con init. Un objeto Persona se construira as en Java:

Persona p = new Persona(); En Objective-C sera como sigue: Persona *p = [Persona alloc]; p = [p init]; Pudindose realizar todo en la misma lnea Persona *p = [[Persona alloc] init];

Tipos Dinmicos y Estticos


Para declarar objetos dinmicos, en lugar de especificar la clase del objeto lo que haremos ser usar el tipo de objeto id, tal como sigue (observar que no se pone ya el asterisco, ya que id ya indica un puntero por s mismo):

id p = [[Persona alloc] init]; // Versin Dinmica

Person *persona = [[Persona alloc] init]; //Versin esttica

Mtodos
Los mtodos son operaciones asociadas con un

objeto, y se usan, o bien como interfaces para leer y cambiar el estado de un objeto, o bien como un mecanismo para pedir al objeto que realice una accin.

Declaracin de un Mtodo
Las principales partes de la declaracin de un mtodo son:
Nivel

Tipo de retorno.
El nombre del mtodo. Los parmetros del objeto.

Encapsulacin
Para facilitar la encapsulacin, es decir, para poder

ocultar las partes del objeto que otros programadores no necesitan conocer para manejar nuestro objeto, ObjectiveC permite limitar el mbito desde el que podemos acceder a las variables de instancia de un objeto.
Para declarar los niveles de encapsulacin de las variables

de instancia se usan los modificadores de acceso @public, @protected y @private.

Objetos cadena
La clase NSString se

usa para representar cadenas invariantes. La Clase NSMutableString se usa slo para representar cadenas variables.

Tipo de datos 32 y 64 bits


Objective-C tambin utiliza los tipos de datos

fundamentales de C. GCC permite generar cdigo tanto de 32 bits como de 64 bits y sigue los convenios ILP32 y LP64.

Tipos fundamentales

GCC sigue el modelo LP64, Apple ha elegido el modelo ILP32 y ILP64 para los binarios de 64 bits de Objective-C. Apple tipos NSInteger y NSUInteger tien tamao correcto tanto en binarios de 32 bits como en binarios de 64 bits.

Ciclo de vida de un objeto


Clases de Objective-C implementan mtodos que

manejen el ciclo de vida del objeto:


Creacin, inicializacin, copia y destruccin. NSObject + initialize + alloc + new - init - copy

Ciclo de vida de un objeto(2)


Object aade los siguientes mtodos:
shallowCopy deepCopy deepen free

Recolector de Basura
El recolector de basura automatiza

completamente la liberacin de la memoria de los objetos Por otro lado, dejar que un recolector de basura realice la gestin de memoria tiene una penalizacin en el rendimiento de la aplicacin. En este sentido, esta tcnica sera equivalente a la gestin de memoria que realiza Java.

Recolector de Basura (2)


Para las variables de instancia, usa SIEMPRE

propiedades autogeneradas (@property y @synthesize). Para los objetos temporales, si los has creado llamando a alloc o a copy.

Redefinir mtodos y variables de instancia


Para redefinir un mtodo heredado no hace falta

declararlo en la interfaz de la clase derivada, basta con declararlo en la implementacin. Esta es una diferencia con C++ donde para poder redefinir un mtodo es necesario declararlo tanto en la interfaz como en la implementacin.

receptores especiales self y super


El receptor self es puntero a objeto esttico

tipificado con la clase sobre la que se ejecuta el mtodo. El receptor super proporciona una forma de saltarse los mtodos redefinidos e ir directaente al mtodo de la clase base.

receptores especiales self y super(2)


El receptor super no podemos asignarle un valor,

pero por el contrario el receptor self s que se puede modificar. Esta es una diferencia con C++ o Java donde this es de slo lectura.

Conclusiones
El lenguaje Objective C actua como un tipo de Sistema

Operativo, asi como la asignacion dinamica de memoria en tiempo de ejecucion. El uso de objetos distribuidos para enviar mensajes entre objetos de diferentes direcciones. Mejora la productividad ya que el programador puede olvidarse de cumplir con el protcolo de cuenta de referencias Evita que posibles errores en la programacin den lugar a fugas de memoria. Evita las retenciones cclicas que el recolector de basura puede detectar que dos objetos que se referencian entre ellos de forma cclica no son alcanzables desde el root set, y los elimina. En general consume menos ciclos de CPU ya que no existe un hilo auxiliar de recogida de basura encargado de determinar peridicamente los objetos inalcanzables a liberar.

Potrebbero piacerti anche