trabajo objetive c

Upload: jesus-alcantara

Post on 05-Apr-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/2/2019 Trabajo Objetive c

    1/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 pero 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 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 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 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 Steve Jobs y Armando Padilla 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.

    http://es.wikipedia.org/w/index.php?title=Biblioteca_%28programaci%C3%B3n%29http://es.wikipedia.org/w/index.php?title=C%C3%B3digo_spaghettihttp://es.wikipedia.org/w/index.php?title=GNUstephttp://es.wikipedia.org/w/index.php?title=Mac_OS_Xhttp://es.wikipedia.org/w/index.php?title=GCChttp://es.wikipedia.org/w/index.php?title=Compiladorhttp://es.wikipedia.org/w/index.php?title=GNU_General_Public_Licensehttp://es.wikipedia.org/w/index.php?title=1992http://es.wikipedia.org/w/index.php?title=NEXTSTEPhttp://es.wikipedia.org/w/index.php?title=Lenguaje_de_programaci%C3%B3nhttp://es.wikipedia.org/w/index.php?title=1988http://es.wikipedia.org/w/index.php?title=1980http://es.wikipedia.org/w/index.php?title=Smalltalkhttp://es.wikipedia.org/w/index.php?title=Lenguaje_de_programaci%C3%B3n_Chttp://es.wikipedia.org/w/index.php?title=Programaci%C3%B3n_orientada_a_objetoshttp://es.wikipedia.org/w/index.php?title=Lenguaje_de_programaci%C3%B3nhttp://es.wikipedia.org/w/index.php?title=Lenguaje_de_programaci%C3%B3n_Javahttp://es.wikipedia.org/w/index.php?title=Objective-C%2B%2Bhttp://es.wikipedia.org/w/index.php?title=Smalltalkhttp://es.wikipedia.org/w/index.php?title=Lenguaje_de_programaci%C3%B3n_Chttp://es.wikipedia.org/w/index.php?title=Tipo_de_datohttp://es.wikipedia.org/w/index.php?title=Brad_Coxhttp://es.wikipedia.org/w/index.php?title=Orientado_a_objetoshttp://es.wikipedia.org/w/index.php?title=Paradigma_de_programaci%C3%B3n
  • 8/2/2019 Trabajo Objetive c

    2/7

    Objective-C 2

    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.

    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

    intmain( int argc, constchar*argv[] ) {

    printf( "Hola Mundo\n" );

    return0;

    }

    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:

    intmain( int argc, constchar*argv[] )

    {

    NSLog( @"Hola Mundo\n" );

    return0;

    }

    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++:

    http://es.wikipedia.org/w/index.php?title=Smalltalkhttp://es.wikipedia.org/w/index.php?title=C%2B%2Bhttp://es.wikipedia.org/w/index.php?title=Simulahttp://es.wikipedia.org/w/index.php?title=Smalltalkhttp://es.wikipedia.org/w/index.php?title=Superconjunto
  • 8/2/2019 Trabajo Objetive c

    3/7

    Objective-C 3

    obj->method(parameter);

    mientras que en Objective-C se escribira como sigue:

    [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 (an 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 enel archivo Clase.h.

    La declaracin de la interfaz de la forma:

    @interfaceclassname : 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:

  • 8/2/2019 Trabajo Objetive c

    4/7

    Objective-C 4

    classclassname: superclassname

    {

    public:

    // instance variables

    // Class (static) functions

    staticvoid* 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.

    @implementationclassname

    +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];

  • 8/2/2019 Trabajo Objetive c

    5/7

    Objective-C 5

    }

    intfunction(int i)

    {

    return square_root(i);

    }

    La sintaxis admite pseudo-nombrado de argumentos.

    -(int)changeColorToRed:(float)red green:(float)green blue:(float)blue

    [myColor changeColorToRed:5.0green:2.0blue: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 estilode 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;

    }

  • 8/2/2019 Trabajo Objetive c

    6/7

    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, llamadosprotocolos informales, y el compilador debe cumplir los llamadosprotocolos 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).

    http://sourcecookbook.com/en/recipes/37/hola-mundo-para-el-i-phonehttp://sourcecookbook.com/en/recipes/37/hola-mundo-para-el-i-phonehttp://www.macprogramadores.org/?q=tutoriales#LenguajeObjective-Chttp://www.macprogramadores.org/?q=tutoriales#LenguajeObjective-Chttp://www.macprogramadores.org/http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/index.htmlhttp://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/index.htmlhttp://www.mikeash.com/?page=pyblog/performance-comparisons-of-common-operations.htmlhttp://www.mikeash.com/?page=pyblog/performance-comparisons-of-common-operations.htmlhttp://es.wikipedia.org/w/index.php?title=C%23http://es.wikipedia.org/w/index.php?title=Lenguaje_de_programaci%C3%B3n_Javahttp://es.wikipedia.org/w/index.php?title=Protocolo_%28programaci%C3%B3n_orientada_a_objetos%29http://es.wikipedia.org/w/index.php?title=Herencia_m%C3%BAltiplehttp://es.wikipedia.org/w/index.php?title=NeXT
  • 8/2/2019 Trabajo Objetive c

    7/7

    Fuentes y contribuyentes del artculo 7

    Fuentes y contribuyentes del artculoObjective-C Fuente: http://es.wikipedia.org/w/index.php?oldid=55212810 Contribuyentes: ActiveMan, Albertoac, Bloqmacr, D4gnu, DarkSulivan, GermanX, Ggalaz, Javierito92,

    JoaquinFerrero, Lucien leGrey, ManuelGR, Mctpyt, Moriel, Mortadelo, Mstreet linux, Niqueco, Obelix83, Sauron, Silvershark, Wfox, Yago AB, 27 ediciones annimas

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