Objective C

download Objective C

of 7

description

Resumen de las estructuras principales en el lenguaje objective C.

Transcript of Objective C

  • 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 queimplementase un modelo de objetos parecido al de Smalltalk. Originalmente fue creado por Brad Cox y lacorporacin StepStone en 1980. En 1988 fue adoptado como lenguaje de programacin de NEXTSTEP y en 1992fue liberado bajo licencia GPL para el compilador GCC. Actualmente se usa como lenguaje principal deprogramacin en Mac OS X, iOS y GNUstep.

    HistoriaA principios de los 80, el software se desarrollaba usando programacin estructurada. La programacin estructuradase estableci para ayudar a dividir los programas en pequeas partes, haciendo ms fcil el desarrollo cuando laaplicacin se volva muy grande. Sin embargo, como los problemas seguan creciendo al pasar el tiempo, laprogramacin estructurada se volvi compleja dado el desorden de algunos programadores para invocarinstrucciones 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 tenasolucionados muchos de estos problemas: algunos de los sistemas ms complejos en el mundo funcionaban gracias aSmalltalk. Pero Smalltalk usaba una mquina virtual, lo cual requera mucha memoria para esa poca, y erademasiado 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. Coxse vio interesado en los problemas de reutilizacin en el desarrollo de software. Se dio cuenta de que un lenguajecomo Smalltalk sera imprescindible en la construccin de entornos de desarrollo potentes para los desarrolladoresen ITI Corporation. Cox empez a modificar el compilador de C para agregar algunas de las capacidades deSmalltalk. 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 tuvola 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 verdaderamenteintercambiables slo se necesitaban unos pequeos cambios en las herramientas existentes. Especficamente, estasnecesitaban soportar objetos de manera flexible, venir con un conjunto de bibliotecas que fueran utilizables, ypermitir que el cdigo (y cualquier recurso necesitado por el cdigo) pudiera ser empaquetado en un formatomultiplataforma.Cox y Love luego fundaron una nueva empresa, Productivity Products International (PPI), para comercializar suproducto, 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-OrientedProgramming, An Evolutionary Approach. Aunque l fue cuidadoso en resaltar que hay muchos problemas dereutilizacin que no dependen del lenguaje, Objective-C frecuentemente fue comparado detalladamente con otroslenguajes.

    SintaxisObjective-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 puedeincluir 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

    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 imprimiruna cadena de caracteres en consola es NSLog(@""); utilizndola, el cdigo anterior quedara de la siguientemanera:

    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 aobjetos (incluyendo variables primitivas, pre-procesamiento, expresiones, declaracin de funciones y llamadas afunciones) son idnticas a las de C, mientras que la sintaxis para las caractersticas orientadas a objetos es unaimplementacin similar a la mensajera de Smalltalk.

    MensajesEl 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 essemnticamente importante. En Objective-C uno no llama a un mtodo; uno enva un mensaje, y la diferencia entreambos conceptos radica en cmo el cdigo referido por el nombre del mensaje o mtodo es ejecutado. En unlenguaje al estilo Simula, el nombre del mtodo es en la mayora de los casos atado a una seccin de cdigo en laclase 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. Unaconsecuencia de esto es que el mensaje del sistema que pasa no tiene chequeo de tipo: el objeto al cual es dirigido elmensaje (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 herenciamltiple y rpida ejecucin utilizando ligadura en tiempo de compilacin siempre que sea posible, pero no soportaligadura dinmica por defecto. Esto fuerza a que todos los mtodos posean su correspondiente implementacin, almenos que sean virtuales (aun as, se requiere una implementacin del mtodo para efectuar la llamada). La POO alestilo Smalltalk permite que los mensajes no posean implementacin - por ejemplo, toda una coleccin de objetospueden enviar un mensaje sin temor a producir errores en tiempo de ejecucin. El envo de mensajes tampocorequiere que un objeto sea definido en tiempo de compilacin. (Ver ms abajo la seccin tipado dinmico) para msventajas de la ligadura dinmica.Sin embargo, se debe notar que debido a la sobrecarga de la interpretacin de los mensajes, un mensaje enObjective-C toma, en el mejor de los casos, tres veces ms tiempo que una llamada a un mtodo virtual en C++.[1]

    Interfaces e implementacionesObjective-C requiere que la interfaz e implementacin de una clase estn en bloques de cdigo separados. Porconvencin, la interfaz es puesta en un archivo cabecera y la implementacin en un archivo de cdigo; los archivoscabecera, que normalmente poseen el sufijo .h, son similares a los archivos cabeceras de C; los archivos deimplementacin (mtodo), que normalmente poseen el sufijo .m, pueden ser muy similares a los archivos de cdigode C.

    Interfaz

    La interfaz de la clase es usualmente definida en el archivo cabecera. Una convencin comn consiste en nombrar alarchivo cabecera con el mismo nombre de la clase. La interfaz para la clase Clase debera, as, ser encontrada enel 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 notienen 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 deObjective-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 unpuntero a un tipo especfico as como NSArray *, NSImage *, o NSString *. El tipo de retorno por defecto es el tipogenrico id de Objective-C.Los argumentos de los mtodos comienzan con dos puntos seguidos por el tipo de argumento esperado en losparntesis seguido por el nombre del argumento. En algunos casos (por ej. cuando se escriben APIs de sistema) estil 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 laimplementacin. 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 dela clase Color, internamente, la instancia del mtodo -changeColorToRed:green:blue: podra seretiquetada como _i_Color_changeColorToRed_green_blue. La i hace referencia a una instancia demtodo, 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 estilode codificacin.De todos modos, los nombres internos de las funciones son raramente utilizadas de manera directa, y generalmentelos 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 (elobjeto 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 alojandola memoria para el nuevo objeto y luego inicializndolo. Un objeto no es completamente funcional hasta que ambospasos 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 lallamada a init puede ser anulada para establecer las variables de instancia con valores especficos al momento de sucreacin. 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

    ProtocolosObjective-C fue extendido en NeXT para introducir el concepto de herencia mltiple de la especificacin, pero no laimplementacin, a travs de la introduccin de protocolos. Este es un modelo viable, ya sea como una clase baseabstracta multi-heredada en C++, o como una "interfaz" (como en Java o C#). Objective-C hace uso de protocolosad-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 artculoObjective-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

    LicenciaCreative Commons Attribution-Share Alike 3.0 Unported//creativecommons.org/licenses/by-sa/3.0/

    Objective-CHistoria Sintaxis Mensajes Interfaces e implementaciones Interfaz Implementacin Instanciacin

    Protocolos

    Referencias Enlaces externos

    Licencia