Documentos de Académico
Documentos de Profesional
Documentos de Cultura
OBJECTIVE C
PRESENTADO POR:
JULIAN MEJIA
EDGAR RIVERA (no presento ponencia)
CURSO:
PROGRAMACION III
GRUPO:
AD
PRESENTADO A:
CARLOS HENRIQUEZ MIRANDA
Qu es Objective C?
Es un lenguaje de programacin sencillo diseado para permitir la
sofisticada programacin orientada a objetos nacido en la dcada de
los 80, creado como un superconjunto de C. es decir, es posible
compilar cualquier programa escrito en C con un compilador de
Objective-C, y tambin se puede incluir libremente cdigo en C dentro
de una clase de Objective-C. Objective-C extiende el estndar ANSI
del lenguaje C, proporcionando sintaxis para definir clases, mtodos,
as como otras estructuras que promueven la extensin dinmica de
clases.
Muchos de los conceptos tradicionales de orientacin a objetos, como
encapsulacin, herencia, y polimorfismo, estn presentes en
Objective-C.
Objective-C es un superconjunto de la versin ANSI del lenguaje de
programacin C y soporta la misma sintaxis que C. Como con cdigo
C, puede definir sus ficheros de cabeceras y sus ficheros de cdigo
fuente para separar las declaraciones pblicas de los detalles de la
implementacin de su cdigo.
Caractersticas de C que estn presentes en Objective-C son:
Si se tuviese que elegir una caracterstica que diferencie a ObjectiveC de otros lenguajes (ya no slo de C++), sta sera su dinamismo,
en el sentido de que Objective-C es un lenguaje marcadamente
dinmico. Muchas de las decisiones que otros lenguajes toman en
tiempo de compilacin, Objective-C las toma en tiempo de ejecucin.
Ejemplos:
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
Sintaxis
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;
}
Clases
Como en otros lenguajes orientados a objeto, las clases en ObjectiveC proporcionan la estructura bsica para encapsular datos con las
acciones que operan con esos datos. Un objeto es una instancia en
tiempo de ejecucin de una clase, que contiene su propia copia en
memoria de las variables de instancia declaradas por esa clase y
punteros a los mtodos de la clase.
La especificacin de una clase en Objective-C requiere de dos piezas:
la interfaz y la implementacin. La parte de la interfaz contiene la
declaracin de la clase y define las variables de instancia y los
mtodos asociados con la clase. La interfaz normalmente se
encuentra en un fichero .h. La parte de la implementacin contiene el
cdigo para los mtodos de la clase. Normalmente, la implementacin
se encuentra en un fichero .m.
La Figura 1 muestra la sintaxis de la declaracin de una clase llamada
MyClass, que hereda de la clase base NSObject. Siguiendo el nombre
de la clase (y separado por dos puntos) est el nombre de la clase
padre. Las variables de instancia (o miembros) de la clase estn
declaradas en un cdigo de bloque delimitado por corchetes
({ and }). A continuacin del bloque de las variables de instancia se
encuentra el listado de los mtodos declarados por la clase. Un punto
y coma indica el final de cada variable de instancia y cada
declaracin de mtodo.
Declaracin de la clase:
Mtodos
Una clase en Objective-C puede declarar dos tipos de mtodos:
mtodos de instancia y mtodos de clase. Un mtodo de instancia es
un mtodo cuya ejecucin tiene como mbito una instancia particular
de la clase. En otras palabras, antes de que llames al mtodo,
primero debe crear una instancia de la clase. Los mtodos de clase,
por comparacin, no requieren el crear una instancia, pero
especificaremos eso ms adelante.
De Clase
+ (id)alloc;
+ (id)identifier;
De Instancia
- (id)init;
- (float)height;
- (void)walk;
La declaracin de un mtodo consiste en un identificador de tipo, un
tipo de retorno, una o ms palabras clave, y el tipo y nombre de
parmetro. La imagen muestra la declaracin del mtodo de instancia
insertObject:atIndex:
Sintaxis de la declaracin de mtodo:
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 esta
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:
obj method:parameter]; [
Ambos estilos de programacin poseen sus fortalezas y debilidades.
La POO al estilo Simula permite herencia mltiple y rpida ejecucin
utilizando vinculacin en tiempo de compilacin siempre que sea
posible, pero no soporta vinculacin 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.
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;
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
Tipado dinmico
En Objective-C un objeto puede enviar un mensaje que no est
especificado en su interfaz. Esto puede permitir una mayor
flexibilidad, ya que permite que un objeto capture un mensaje y lo
enve a un objeto diferente que puede responder al mensaje de
manera apropiada. Este comportamiento se conoce como el reenvo
de mensajes o delegacin.
Categoras
Las categoras nos permiten modificar una clase ya existente aunque
no dispongamos de su cdigo fuente. La diferencia que hay entre la
herencia y la categorizacin es que la herencia slo nos permite crear
nuevas hojas en la jerarqua de clases, mientras que la categorizacin
nos permite modificar nodos inferiores de la jerarqua de clases.
Entero.h
# import <objc /Object.h>;
@interface Entero : Object {
int entero;
}
- (int)entero;
- (id)entero:(int) param;
@end
</objc>
Entero.m
# import "Integer.h"
@implementation Integer
(int)entero {
return integer;
}
- (id)entero:(int)param {
entero = param;
return self;
}
@end
Entero+Aritmetica.h
# import "Integer.h"
Encapsulacin
Para declarar los niveles de encapsulacin de las variables de
instancia, se usan las directivas del compilador @public, @protected y
@private. Ests directivas del compilador actan cmo modificadores
de acceso, pueden aparecer tantas veces cmo sea necesario, y
afectan a todas las variables de instancia desde su aparicin, hasta el
nuevo modificador de acceso. Si no existe modificador de acceso, por
defecto las variables de instancia son @protected. Los efectos de los
modificadores de acceso son los siguientes:
Herencia
Clases Abstractas
En Objective (al igual que en lenguajes como Java o C++) es posible
definir clases abstractas. Recordemos que una clase abstracta es
aquella donde es posible tener implementacin de mtodos y
tambin prototipos de mtodos, que debern ser implementados por
aquellas clases que implementen o hagan el implements (Java) de
la clase abstracta. Por lo general las clases abstractas se utilizan para
definir clases con comportamientos comunes e implementar en cada
clase aquellos comportamientos distintos entre s.
Cmo definir
Objective C?
una
clase
abstracta
en
Ejemplo:
@"Tres",
@"Cuatro",
nil];
Un array es una lista de objetos. En este caso, hemos creado una lista
que contiene las cadenas de texto Uno, Dos, Tres y Cuatro. Solamente
indica el final de la lista y no se incluye en esta. Este array creado de
esta forma es autoliberado y no debemos preocuparnos por la
administracin de la memoria que este utiliza.