Objective-C

Objective-C
Información general
Paradigma
orientado a objetos
Apareció en
1980
Diseñado por
Brad Cox
Tipo de dato
fuerte, estático
Implementaciones numerosas
Influido por
C, Smalltalk
Ha influido a
Objective-C++, Java
[editar datos en Wikidata]

Objective-C es un lenguaje de programación orientado a objetos creado como un superconjunto de C
para que implementase 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 un lenguaje principal de programación para Mac OS X, iOS y GNUstep, además de swift.

Índice
 1 Historia
 1.1 Popularización mediante NeXT
 1.2 Desarrollo de Apple y Swift
 2 Sintaxis
 2.1 Mensajes
 2.2 Interfaces e implementaciones
 2.2.1 Interfaz
 2.2.2 Implementación
 2.2.3 Instanciación
 2.3 Protocolos
 2.4 Tipado dinámico
 2.5 Reenvío
 2.5.1 Ejemplo
 2.5.2 Notas
 3 Variantes del lenguaje

2. 3.2.2.5 Sintaxis de Objective-C "Moderna" (1997)  3.0  3.4.7 GEOS Objective-C  3.3 Blocks  3.4 Modern Objective-C  3.2 Objective-C 2.5 Extensión de clases  3.4 Enumeración rápida  3.2 Propiedades  3.8 Clang  4 Véase también  5 Referencias  6 Enlaces externos .1 Automatic Reference Counting  3.1 Recolección de basura  3.3 Variables de instancia no frágiles  3.3 Subíndices  3.2.4.6 Portable Object Compiler  3.4.2.2 Literales  3.1 Objective-C++  3.

Mientras que las estaciones de trabajo de NeXT no consiguieron . La programación estructurada se estableció para ayudar a dividir los programas en pequeñas partes. llevando a código spaghetti y dificultando la reutilización de código. Se dio cuenta de que un lenguaje como Smalltalk sería imprescindible en la construcción de entornos de desarrollo potentes para los desarrolladores en ITI Corporation. De hecho. la programación estructurada se volvió compleja dado el desorden de algunos programadores para invocar instrucciones repetitivamente. como los problemas seguían creciendo al pasar el tiempo.Historia A principios de los 80. lo cual requería mucha memoria para esa época. venir con un conjunto de bibliotecas que fueran utilizables. para comercializar su producto. Ambos fueron iniciados en Smalltalk mientras estaban en el Programming Technology Center de ITT en 1981. Cox y Love luego fundaron una nueva empresa. y era demasiado lento. y permitir que el código (y cualquier recurso necesitado por el código) pudiera ser empaquetado en un formato multiplataforma. Sin embargo. Objective-C frecuentemente fue comparado detalladamente con otros lenguajes. Aunque él fue cuidadoso en resaltar que hay muchos problemas de reutilización que no dependen del lenguaje. haciendo más fácil el desarrollo cuando la aplicación se volvía muy grande. Para demostrar que se hizo un progreso real. Específicamente. Cox mostró que para hacer componentes de software verdaderamente intercambiables sólo se necesitaban unos pequeños cambios en las herramientas existentes. Productivity Products International (PPI). Smalltalk ya tenía solucionados muchos de estos problemas: algunos de los sistemas más complejos en el mundo funcionaban gracias a Smalltalk. Cox se vio interesado en los problemas de reutilización en el desarrollo de software. estas necesitaban soportar objetos de manera flexible. lo que influyó en su estilo como programador. Cox empezó a modificar el compilador de C para agregar algunas de las capacidades de Smalltalk. Popularización mediante NeXT En 1998. el cual era un compilador de Objective-C con un conjunto de bibliotecas potentes. En 1986. Cox publicó la principal descripción de Objective-C en su forma original en el libro ObjectOriented Programming. Love mientras tanto. An Evolutionary Approach. Pero Smalltalk usaba una máquina virtual. el software se desarrollaba usando programación estructurada. fue contratado por Shlumberger Research en 1982 y tuvo la oportunidad de adquirir la primera copia de Smalltalk-80. Pronto tuvo una extensión para añadir la programación orientada a objetos a C la cual llamó «OOPC» (Object-Oriented Programming in C). Muchos vieron que la programación orientada a objetos sería la solución al problema. al mismo tiempo que desarrolló las librerías AppKit y Foundation Kit sobre las que se basaron la interfaz de usuario y la interfaz de creación de NeXTstep. el dueño de la marca Objective-C) y extendió el compilador GCC para dar soporte a Objective-C. NeXT licenció el Objective-C de StepStone (el nuevo nombre de PPI. Objective-C fue creado principalmente por Brad Cox y Tom Love a inicios de los 80 en su compañía Stepstone.

const char *argv[] ) { printf( "Hola Mundo\n" ). Este incluía Objective-C y la herramienta de desarrollo basada en Objective-C de NeXT. Thorup también trabajó en NeXT desde 1993 hasta 1996. es uno de los desarrollados por Kresten Krab Thorup cuando era un estudiante universitario en Dinamarca. el código anterior quedaría de la siguiente manera: . que ha sido usado desde 1993. que es llamado "Objective-C sin la C". y también puede incluir libremente código en C dentro de una clase de Objective-C. Esto llevó a que otras compañías desarrollaran esas librerías bajo licencias de código abierto. vendiendo NeXTstep (y OpenStep) como una plataforma para la programación a medida. las herramientas fueron ampliamente alabadas en la industria. El sistema GNU Objective-C. Esto es. es posible compilar cualquier programa escrito en C con un compilador de Objective-C. Esto llevó a NeXT a abandonar la producción de hardware y enfocarse en las herramientas de software. y además es un estricto superconjunto de C. Steve Naroff fue también un colaborador principal al trabajo de Apple de construir la interfaz de Objective-C Clang. pero la función printf("") es puramente C. se puede utilizar el siguiente código: #import <stdio. para escribir el programa clásico "Hola Mundo" para correr en consola. Desarrollo de Apple y Swift Tras adquirir NeXT en 1996. Sintaxis Objective-C consiste en una capa muy fina situada por encima de C.hacer un gran impacto en el mercado. Mac OS X. La función propia de Objective-C para imprimir una cadena de caracteres en consola es NSLog(@""). El trabajo para extender GCC fue liderado por Steve Naroff. pero no las librerías de tiempo de ejecución. y es el entorno de desarrollo de Objective-C más usado para desarrollo activo. En la WWDC de 2014. utilizándola. Esto es. Interface Builder.h> int main( int argc. El proyecto GNU comenzó a trabajar en su implementación de Cocoa como software libre. Project Builder (que luego se ha expandido y ahora se conoce por Xcode).1 Dennis Glatting escribió el primer sistema en tiempo de ejecución de GNU Objective-C en 1992. return 0. así como la herramienta de diseño de interfaz. llamado GNUstep y basado en el estándar de OpenStep. } El código anterior se diferencia de un código en C común por la primera instrucción #import. Apple empleó OpenStep en su nuevo sistema operativo. Más tarde. Apple anunció planes para reemplazar a Objective-C en el desarrollo de Cocoa por el nuevo lenguaje Swift. La mayoría de la actual Cocoa API de Apple está basada en objetos de interfaz de OneStep. Los cambios del compilador fueron puestos a disposición bajo términos de licencia GPL. que se unió a NeXT proveniente de StepStone. dejando la contribución de código abierto inutilizable para el público general. que difiere del #include del C clásico.

En un lenguaje al estilo Simula. mientras que la sintaxis para las características orientadas a objetos es una implementación similar a la mensajería de Smalltalk. el mensaje sigue siendo simplemente un nombre. se requiere una implementación del método para efectuar la llamada). toda una colección de objetos pueden enviar un mensaje sin temor a producir errores en tiempo de ejecución. return 0. se debe notar que debido a la sobrecarga de la interpretación de los mensajes. const char *argv[] ) { NSLog( @"Hola Mundo\n" ).2 . al menos que sean virtuales (aun así. y es resuelto en tiempo de ejecución: el objeto receptor tiene la tarea de interpretar por sí mismo el mensaje.int main( int argc. pero no soporta vinculación dinámica por defecto. declaración de funciones y llamadas a funciones) son idénticas a las de C. En Objective-C uno no llama a un método. } La sintaxis de objetos de Objective-C deriva de Smalltalk. y si no lo hace. uno envía un mensaje. Esto es diferente al modelo de programación al estilo de Simula. pre-procesamiento. un mensaje en Objective-C toma. Esto fuerza a que todos los métodos posean su correspondiente implementación. el nombre del método es en la mayoría de los casos atado a una sección de código en la clase objetivo por el compilador. y la diferencia entre ambos conceptos radica en cómo el código referido por el nombre del mensaje o método es ejecutado. La POO al estilo Smalltalk permite que los mensajes no posean implementación . simplemente lo ignora y retorna un puntero nulo. Enviar el mensaje method al objeto apuntado por el puntero obj requeriría el siguiente código en C+ +: obj->method(parameter). Una consecuencia de esto es que el mensaje del sistema que pasa no tiene chequeo de tipo: el objeto al cual es dirigido el mensaje (conocido como receptor) no está inherentemente garantizado a responder a un mensaje. (Ver más abajo la sección tipado dinámico) para más ventajas de la ligadura dinámica. pero en Smalltalk y Objective-C. expresiones.por ejemplo. en el mejor de los casos. Ambos estilos de programación poseen sus fortalezas y debilidades. utilizado por C++ y esta distinción es semánticamente importante. El envío de mensajes tampoco requiere que un objeto sea definido en tiempo de compilación. Sin embargo. La POO al estilo Simula permite herencia múltiple y rápida ejecución utilizando vinculación en tiempo de compilación siempre que sea posible. mientras que en Objective-C se escribiría como sigue: [obj method:parameter]. tres veces más tiempo que una llamada a un método virtual en C++. Toda la sintaxis para las operaciones no orientadas a objetos (incluyendo variables primitivas. Mensajes El modelo de programación orientada a objetos de Objective-C se basa en enviar mensajes a instancias de objetos.

.Interfaces e implementaciones Objective-C requiere que la interfaz e implementación de una clase estén en bloques de código separados.