Introducción

Objective-C es un lenguaje de programación 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 corporación StepStone en 1980. En 1988 fue adoptado como lenguaje de programación de NEXTSTEP y en 1992 fue liberado bajo licencia GPL para el compilador GCC. Actualmente se usa como lenguaje principal de programación en Mac OS X y GNUstep.

Qué es Objective C
Al igual que C++, Objective-C es una extensión 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 más limpio, pequeño y rápido 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 excepción 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 programación Carbon.

Caracteristicas
Debido a que Objective-C es una extensión de C compatible hacia atrás, muchas características 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 implícitas y explícitas entre tipos. • Los ámbitos de las variables: Globales, estáticas y locales. • Las funciones y su sintaxis.

C de otros lenguajes. Objective. y depurarlos de forma muy cómoda para el programador. en el sentido de que muchas decisiones que muchos lenguajes toman en tiempo de compilación. representarlos visualmente. .Lenguaje Marcadamente Dinámico Si hubiera que elegir una característica que diferencie a Objective . donde las herramientas tienen acceso a todo el runtime del programa. ésta sería que es un lenguaje muy dinámico. con lo que las herramientas de desarrollo pueden instanciar los objetos del programa. La gran ventaja de este dinamismo se aprecia en las herramientas de desarrollo.C las deja para el tiempo de ejecución. personalizarlos. monitorizarlos.

2. 5. 4.Los cinco tipos de dinamismo que diferencian a Objective . 3. Memoria dinámica Tipos dinámicos Introspección Enlace dinámico Carga dinámica .C de otros lenguajes: 1.

. por si mismo este no contiene información de un objeto. El tipo id es completamente no restrictivo.Tipos dinámicos Id: Este tipo es el tipo general para cualquier tipo de objeto  id anObject. 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] ) .

. 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. La diferencia está en que el mismo mensaje puede ejecutar diferentes funciones dependiendo del objeto que reciba el mensaje.Enlace Dinamico  Los lenguajes orienta dos a objeto reemplazan el concepto de llamada a función por el de envío de mensajes.

.Objetos y Clases: Clases Las clases en Objective . La interfaz indica la estructura del objeto.C constan de una interfaz y una implementación. La interfaz y la implementación se suelen poner en dos ficheros distintos (con las extensiones . Sin embargo el fichero de implementación puede entregarse compilado.h y .m respectivamente). y la implementación contiene la implementación de sus métodos. El código fuente del fichero de interfaz debe estar disponible para ser usados por otros programadores.

C nos permite que una clase no tenga clase base es por eficiencia.La interfaz Lo primero que se indica es el nombre de la clase y la clase de la que deriva. .C si una clase no deriva de NSObject (o de Object ). En Objective .C. no puede utilizar las ventajas del runtime de Objective. También veremos que otra razón por la que Objective. esto sólo se hace cuando la clase se va a utilizar como un almacén de datos (al estilo de las estructuras C). aunque es posible que una clase Objective.C no derive de ninguna clase. pero no se van a ejecutar métodos sobre ella.

.

Implementación Lo primero que se suele hacer en la implementación de una clase es importar su interfaz. O bserve que. pero no se vuelve a indicar de qué clase deriva. podemos omitir su implementación. . en la implementación se indica el nombre de la clase. Sólo si una clase no tiene métodos. y después se usan las directivas del compilador @ implementation y @end para encerrar la implementación de la clase. a diferencia de la interfaz.

.

. con una simple clase en su raiz.Herencia  Enlaza todas las clases en un árbol jerárquico. 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 .

herencia. como encapsulación. sino un mecanismo de modularidad.Encapsulamiento  Los mensajes no son un mecanismo de concurrencia. están presentes en Objective-C. . y polimorfismo. La mensajería crea la encapsulación de datos y procedimientos que se denomina objeto.  Muchos de los conceptos tradicionales de orientación a objetos.

Objetos En Objective-C. Esta circunstancia hace que debamos declarar los objetos mediante punteros tal como sigue: Persona p. // Esto es lo correcto. al igual que en Java y al contrario que C++. . // Esto daría error de compilación. Persona *p. los objetos sólo se pueden crear en memoria dinámica.

Objeto(.) Interfaz: Poligono...h .

Objetos(…) Implementación: Poligono.m .

m .Objetos(…) main.

Un objeto Persona se construiría así en Java: Persona p = new Persona(). p = [p init]. En Objective-C sería como sigue: Persona *p = [Persona alloc]. que funcionarán a modo de Constructor de la clase. Pudiéndose realizar todo en la misma línea Persona *p = [[Persona alloc] init]. Lo que hace alloc es reservar memoria para el objeto.Instanciar Para instanciar objetos usaremos los métodos alloc e init. . para luego inicializar el objeto con init.

en lugar de especificar la clase del objeto lo que haremos será usar el tipo de objeto “id”.Tipos Dinámicos y Estáticos Para declarar objetos dinámicos. // Versión Dinámica Person *persona = [[Persona alloc] init]. //Versión estática . ya que id ya indica un puntero por sí mismo): id p = [[Persona alloc] init]. tal como sigue (observar que no se pone ya el asterisco.

. o bien como interfaces para leer y cambiar el estado de un objeto.Métodos  Los métodos son operaciones asociadas con un objeto. o bien como un mecanismo para pedir al objeto que realice una acción. y se usan.

.Declaración de un Método Las principales partes de la declaración de un método son:  Nivel  Tipo de retorno.  El nombre del método.  Los parámetros del objeto.

@protected y @private.  Para declarar los niveles de encapsulación de las variables de instancia se usan los modificadores de acceso @public. . es decir.Encapsulación  Para facilitar la encapsulación. 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.

.  La Clase NSMutableString se usa sólo para representar cadenas variables.Objetos cadena  La clase NSString se usa para representar cadenas invariantes.

.  GCC permite generar código tanto de 32 bits como de 64 bits y sigue los convenios ILP32 y LP64.Tipo de datos 32 y 64 bits  Objective-C también utiliza los tipos de datos fundamentales de C.

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 tamaño correcto tanto en binarios de 32 bits como en binarios de 64 bits. .

Ciclo de vida de un objeto  Clases de Objective-C implementan métodos que manejen el ciclo de vida del objeto:  Creación. copia y destrucción.copy . inicialización.init  .  NSObject  + initialize  + alloc  + new  .

Ciclo de vida de un objeto(2)  Object añade los siguientes métodos:   shallowCopy  deepCopy  deepen  free .

esta técnica sería equivalente a la gestión de memoria que realiza Java.Recolector de Basura  El recolector de basura automatiza completamente la liberación de la memoria de los objetos  Por otro lado.  En este sentido. . dejar que un recolector de basura realice la gestión de memoria tiene una penalización en el rendimiento de la aplicación.

Recolector de Basura (2)  Para las variables de instancia. si los has creado llamando a alloc o a copy. .  Para los objetos temporales. usa SIEMPRE propiedades autogeneradas (@property y @synthesize).

 Esta es una diferencia con C++ donde para poder redefinir un método es necesario declararlo tanto en la interfaz como en la implementación. . basta con declararlo en la implementación.Redefinir métodos y variables de instancia  Para redefinir un método heredado no hace falta declararlo en la interfaz de la clase derivada.

receptores especiales self y super  El receptor self es puntero a objeto estático tipificado con la clase sobre la que se ejecuta el método. .  El receptor super proporciona una forma de saltarse los métodos redefinidos e ir directaente al método 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 sólo lectura.

asi como la asignacion dinamica de memoria en tiempo de ejecucion. En general consume menos ciclos de CPU ya que no existe un hilo auxiliar de recogida de basura encargado de determinar periódicamente los objetos inalcanzables a liberar. El uso de objetos distribuidos para enviar mensajes entre objetos de diferentes direcciones. y los elimina. . Evita las retenciones cíclicas que el recolector de basura puede detectar que dos objetos que se referencian entre ellos de forma cíclica no son alcanzables desde el root set.Conclusiones  El lenguaje Objective C actua como un tipo de Sistema      Operativo. Mejora la productividad ya que el programador puede olvidarse de cumplir con el protcolo de cuenta de referencias Evita que posibles errores en la programación den lugar a fugas de memoria.

Sign up to vote on this title
UsefulNot useful