Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
1. 2. 3. 4. 5.
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
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.
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,
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:
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];
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
Objetos cadena
La clase NSString se
usa para representar cadenas invariantes. La Clase NSMutableString se usa slo para representar cadenas variables.
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.
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.
propiedades autogeneradas (@property y @synthesize). Para los objetos temporales, si los has creado llamando a alloc o a copy.
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.
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.
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.