Sie sind auf Seite 1von 7

Objective-C

1
Objective-C
Objective-C
Informacin general
Paradigma orientado a objetos
Apareci en 1980
Diseado por Brad Cox
Tipo de dato fuerte, esttico
Implementaciones numerosas
Influido por C, Smalltalk
Ha influido a Objective-C++, Java
Objective-C es un lenguaje de programacin 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
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, iOS y GNUstep.
Historia
A principios de los 80, el software se desarrollaba usando programacin estructurada. La programacin estructurada
se estableci para ayudar a dividir los programas en pequeas partes, haciendo ms fcil el desarrollo cuando la
aplicacin se volva muy grande. Sin embargo, como los problemas seguan creciendo al pasar el tiempo, la
programacin estructurada se volvi compleja dado el desorden de algunos programadores para invocar
instrucciones repetitivamente, llevando a cdigo spaghetti y dificultando la reutilizacin de cdigo.
Muchos vieron que la programacin orientada a objetos sera la solucin al problema. De hecho, Smalltalk ya tena
solucionados muchos de estos problemas: algunos de los sistemas ms complejos en el mundo funcionaban gracias a
Smalltalk. Pero Smalltalk usaba una mquina virtual, lo cual requera mucha memoria para esa poca, y era
demasiado lento.
Objective-C fue creado principalmente por Brad Cox y Tom Love a inicios de los 80 en su compaa Stepstone.
Ambos fueron iniciados en Smalltalk mientras estaban en el Programming Technology Center de ITT en 1981. Cox
se vio interesado en los problemas de reutilizacin en el desarrollo de software. Se dio cuenta de que un lenguaje
como Smalltalk sera imprescindible en la construccin de entornos de desarrollo potentes para los desarrolladores
en ITI Corporation. Cox empez a modificar el compilador de C para agregar algunas de las capacidades de
Smalltalk. Pronto tuvo una extensin para aadir la programacin orientada a objetos a C la cual llam OOPC
(Object-Oriented Programming in C). Love mientras tanto, fue contratado por Shlumberger Research en 1982 y tuvo
la oportunidad de adquirir la primera copia de Smalltalk-80, lo que influy en su estilo como programador.
Para demostrar que se hizo un progreso real, Cox mostr que para hacer componentes de software verdaderamente
intercambiables slo se necesitaban unos pequeos cambios en las herramientas existentes. Especficamente, estas
necesitaban soportar objetos de manera flexible, venir con un conjunto de bibliotecas que fueran utilizables, y
permitir que el cdigo (y cualquier recurso necesitado por el cdigo) pudiera ser empaquetado en un formato
multiplataforma.
Cox y Love luego fundaron una nueva empresa, Productivity Products International (PPI), para comercializar su
producto, el cual era un compilador de Objective-C con un conjunto de bibliotecas potentes.
Objective-C
2
En 1986, Cox public la principal descripcin de Objective-C en su forma original en el libro Object-Oriented
Programming, An Evolutionary Approach. Aunque l fue cuidadoso en resaltar que hay muchos problemas de
reutilizacin que no dependen del lenguaje, Objective-C frecuentemente fue comparado detalladamente con otros
lenguajes.
Sintaxis
Objective-C consiste en una capa muy fina situada por encima de C, y adems es un estricto superconjunto de C.
Esto es, es posible compilar cualquier programa escrito en C con un compilador de Objective-C, y tambin puede
incluir libremente cdigo en C dentro de una clase de Objective-C.
Esto es, para escribir el programa clsico "Hola Mundo" para correr en consola, se puede utilizar el siguiente cdigo:
#import <stdio.h>
int main( int argc, const char *argv[] ) {
printf( "Hola Mundo\n" );
return 0;
}
El cdigo anterior se diferencia de un cdigo en C comn por la primera instruccin #import, que difiere del
#include del C clsico, pero la funcin printf("") es puramente C. La funcin propia de Objective-C para imprimir
una cadena de caracteres en consola es NSLog(@""); utilizndola, el cdigo anterior quedara de la siguiente
manera:
int main( int argc, const char *argv[] )
{
NSLog( @"Hola Mundo\n" );
return 0;
}
La sintaxis de objetos de Objective-C deriva de Smalltalk. Toda la sintaxis para las operaciones no orientadas a
objetos (incluyendo variables primitivas, pre-procesamiento, expresiones, declaracin de funciones y llamadas a
funciones) son idnticas a las de C, mientras que la sintaxis para las caractersticas orientadas a objetos es una
implementacin similar a la mensajera de Smalltalk.
Mensajes
El modelo de programacin orientada a objetos de Objective-C se basa en enviar mensajes a instancias de objetos.
Esto es diferente al modelo de programacin al estilo de Simula, utilizado por C++ y sta distincin es
semnticamente importante. En Objective-C uno no llama a un mtodo; uno enva un mensaje, y la diferencia entre
ambos conceptos radica en cmo el cdigo referido por el nombre del mensaje o mtodo es ejecutado. En un
lenguaje al estilo Simula, el nombre del mtodo es en la mayora de los casos atado a una seccin de cdigo en la
clase objetivo por el compilador, pero en Smalltalk y Objective-C, el mensaje sigue siendo simplemente un nombre,
y es resuelto en tiempo de ejecucin: el objeto receptor tiene la tarea de interpretar por s mismo el mensaje. 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, y si no lo hace,
simplemente lo ignora y retorna un puntero nulo.
Enviar el mensaje method al objeto apuntado por el puntero obj requerira el siguiente cdigo en C++:
obj->method(parameter);
mientras que en Objective-C se escribira como sigue:
Objective-C
3
[obj method:parameter];
Ambos estilos de programacin poseen sus fortalezas y debilidades. La POO al estilo Simula permite herencia
mltiple y rpida ejecucin utilizando ligadura en tiempo de compilacin siempre que sea posible, pero no soporta
ligadura dinmica por defecto. Esto fuerza a que todos los mtodos posean su correspondiente implementacin, al
menos que sean virtuales (aun as, se requiere una implementacin del mtodo para efectuar la llamada). La POO al
estilo Smalltalk permite que los mensajes no posean implementacin - por ejemplo, toda una coleccin de objetos
pueden enviar un mensaje sin temor a producir errores en tiempo de ejecucin. El envo de mensajes tampoco
requiere que un objeto sea definido en tiempo de compilacin. (Ver ms abajo la seccin tipado dinmico) para ms
ventajas de la ligadura dinmica.
Sin embargo, se debe notar que debido a la sobrecarga de la interpretacin de los mensajes, un mensaje en
Objective-C toma, en el mejor de los casos, tres veces ms tiempo que una llamada a un mtodo virtual en C++.
[1]
Interfaces e implementaciones
Objective-C requiere que la interfaz e implementacin de una clase estn en bloques de cdigo separados. Por
convencin, la interfaz es puesta en un archivo cabecera y la implementacin en un archivo de cdigo; los archivos
cabecera, que normalmente poseen el sufijo .h, son similares a los archivos cabeceras de C; los archivos de
implementacin (mtodo), que normalmente poseen el sufijo .m, pueden ser muy similares a los archivos de cdigo
de C.
Interfaz
La interfaz de la clase es usualmente definida en el archivo cabecera. Una convencin comn consiste en nombrar al
archivo cabecera con el mismo nombre de la clase. La interfaz para la clase Clase debera, as, ser encontrada en
el archivo Clase.h.
La declaracin de la interfaz de la forma:
@interface classname : superclassname
{
// instance variables
}
+classMethod1;
+(return_type)classMethod2;
+(return_type)classMethod3:(param1_type)parameter_varName;
-(return_type)instanceMethod1:(param1_type)param1_varName
:(param2_type)param2_varName;
-(return_type)instanceMethod2WithParameter:(param1_type)param1_varName
andOtherParameter:(param2_type)param2_varName;
@end
Los signos ms denotan mtodos de clase, los signos menos denotan mtodos de instancia. Los mtodos de clase no
tienen acceso a las variables de la instancia.
Si usted viene de C++, el cdigo anterior es equivalente a algo como esto:
class classname : superclassname
{
public:
// instance variables
Objective-C
4

// Class (static) functions
static void* classMethod1();
static return_type classMethod2();
static return_type classMethod3(param1_type parameter_varName);

// Instance (member) functions
return_type instanceMethod1(param1_type param1_varName, param2_type
param2_varName);
return_type instanceMethod2WithParameter(param1_type param1_varName,
param2_type param2_varName = default);
};
Note que instanceMethod2WithParameter demuestra la capacidad de nombrado de parmetro de
Objective-C para la cual no existe equivalente directo en C/C++.
Los tipos de retorno pueden ser cualquier tipo estndar de C, un puntero a un objeto genrico de Objective-C, o un
puntero a un tipo especfico as como NSArray *, NSImage *, o NSString *. El tipo de retorno por defecto es el tipo
genrico id de Objective-C.
Los argumentos de los mtodos comienzan con dos puntos seguidos por el tipo de argumento esperado en los
parntesis seguido por el nombre del argumento. En algunos casos (por ej. cuando se escriben APIs de sistema) es
til agregar un texto descriptivo antes de cada parmetro.
-(void) setRangeStart:(int)start End:(int)end;
-(void) importDocumentWithName:(NSString *)name
withSpecifiedPreferences:(Preferences *)prefs
beforePage:(int)insertPage;
Implementacin
La interfaz nicamente declara la interfaz de la clase y no los mtodos en s; el cdigo real es escrito en la
implementacin. Los archivos de implementacin (mtodos) normalmente poseen la extensin .m.
@implementation classname
+classMethod {
// implementation
}
-instanceMethod {
// implementation
}
@end
Los mtodos son escritos con sus declaraciones de interfaz. Comparando Objective-C y C:
-(int)method:(int)i
{
return [self square_root: i];
}
int function(int i)
{
return square_root(i);
Objective-C
5
}
La sintaxis admite pseudo-nombrado de argumentos.
-(int)changeColorToRed:(float)red green:(float)green blue:(float)blue
[myColor changeColorToRed:5.0 green:2.0 blue:6.0];
La representacin interna de ste mtodo vara entre diferentes implementaciones de Objective-C. Si myColor es de
la clase Color, internamente, la instancia del mtodo -changeColorToRed:green:blue: podra ser
etiquetada como _i_Color_changeColorToRed_green_blue. La i hace referencia a una instancia de
mtodo, acompaado por los nombres de la clase y el mtodo, y los dos puntos son reemplazados por guiones bajos.
Como el orden de los parmetros es parte del nombre del mtodo, ste no puede ser cambiado para adaptarse al estilo
de codificacin.
De todos modos, los nombres internos de las funciones son raramente utilizadas de manera directa, y generalmente
los mensajes son convertidos a llamadas de funciones definidas en la librera en tiempo de ejecucin de Objective-C
el mtodo que ser llamado no es necesariamente conocido en tiempo de vinculacin: la clase del receptor (el
objeto que envi el mensaje) no necesita conocerlo hasta el tiempo de ejecucin.
Instanciacin
Una vez que una clase es escrita en Objective-C, puede ser instanciada. Esto se lleva a cabo primeramente alojando
la memoria para el nuevo objeto y luego inicializndolo. Un objeto no es completamente funcional hasta que ambos
pasos sean completados. Esos pasos tpicamente se logran con una simple lnea de cdigo:
MyObject * o = [[MyObject alloc] init];
La llamada a alloc aloja la memoria suficiente para mantener todas las variables de instancia para un objeto, y la
llamada a init puede ser anulada para establecer las variables de instancia con valores especficos al momento de su
creacin. El mtodo init es escrito a menudo de la siguiente manera:
-(id) init
{
self = [super init];
if (self)
{
ivar1 = '''value1''';
ivar2 = value2;
.
.
.
}
return self;
}
Objective-C
6
Protocolos
Objective-C fue extendido en NeXT para introducir el concepto de herencia mltiple de la especificacin, pero no la
implementacin, a travs de la introduccin de protocolos. Este es un modelo viable, ya sea como una clase base
abstracta multi-heredada en C++, o como una "interfaz" (como en Java o C#). Objective-C hace uso de protocolos
ad-hoc, llamados protocolos informales, y el compilador debe cumplir los llamados protocolos formales.
Referencias
[1] Performance Comparisons of Common Operations (http:/ / www. mikeash. com/ ?page=pyblog/
performance-comparisons-of-common-operations.html)
Enlaces externos
Pgina de Apple sobre Objective-C (http:/ / developer. apple. com/ documentation/ Cocoa/ Conceptual/
ObjectiveC/ index. html).
Comunidad de programadores Mac OS X (http:/ / www. macprogramadores. org/ ).
El lenguaje Objective-C para programadores C++ y Java (http:/ / www. macprogramadores. org/
?q=tutoriales#LenguajeObjective-C).
"Hola Mundo" en Objective-C para el iPhone (http:/ / sourcecookbook. com/ en/ recipes/ 37/
hola-mundo-para-el-i-phone).
Fuentes y contribuyentes del artculo
7
Fuentes y contribuyentes del artculo
Objective-C Fuente: http://es.wikipedia.org/w/index.php?oldid=64475190 Contribuyentes: ActiveMan, Albertoac, Bloqmacr, D4gnu, DarkSulivan, GermanX, Ggalaz, Jaimemf, Javierito92,
JoaquinFerrero, Lucien leGrey, ManuelGR, Mctpyt, Moriel, Mortadelo, Mstreet linux, Niqueco, Obelix83, Sauron, Silvershark, Wfox, Yago AB, 32 ediciones annimas
Licencia
Creative Commons Attribution-Share Alike 3.0 Unported
//creativecommons.org/licenses/by-sa/3.0/

Das könnte Ihnen auch gefallen