Vous êtes sur la page 1sur 53

PROGRAMACION

ORIENTADA A
OBJETOS
La inteligencia es la capacidad de crear objetos artificiales, es
especial, herramientas para hacer herramientas Henry Bergson
Introduccin y profundizacin en el estudio de lenguajes orientados a
objetos.

Diego Gutirrez, Gabriel Rodrguez, Gonzalo Micelli,


Miguel Guaymas

2011

Pgina | 2

Programacin
Orientada a
Objetos
Integrantes

GUAYMAS, Miguel A.

- 58828

GUTIERREZ, Diego A.

- 57972

MICELLI, Gonzalo D.

- 59192

RODRIGUEZ, Gabriel

- 57885

Profesor

Vctor Fernndez

INFORMTICA I 2011

UNIVERSIDAD TECNOLGICA NACIONAL FACULTAD


REGIONAL CRDOBA

INTRODUCCIN

Pgina | 3

Este trabajo surgi de la idea de profundizar el tema de objetos en


programacin, ya que ltimamente era frecuente escuchar sobre
lenguajes y programacin orientada a objetos como un tipo de
programacin mas eficaz, verstil y fcil de realizar, por lo que esto nos
caus cierto asombro y en base a esto fue lo que nos condujo a la
eleccin del tema.
En el contenido que veremos a continuacin trataremos de descifrar
algunas pequeas inquietudes sobre la programacin en C, ms
precisamente, lenguaje y programacin basada en C orientado a objetos.
En grandes libros sobre este tipo de programacin, en especial en
algunos textos universitarios, se cuidan en exceso el formalismo con lo
que se tienen textos elegantsimos e irreprochables con los que es casi
imposible enterarse de que se trata. Nosotros por nuestra parte, nos
basaremos en un lenguaje bsico y muchos y sencillos ejemplos para un
mejor esclarecimiento de los conceptos y definiciones fundamentales y
una buena interpretacin de todo lo que tenga ver con programacin
orientada a objetos (POO, en adelante).
Es muy importante citar y destacar en esta parte introductoria que
cuando hacemos referencia a la programacin orientada a objetos no
estamos hablando de unas cuantas caractersticas nuevas aadidas a un
lenguaje de programacin, sino que invoca una nueva forma de pensar
acerca del proceso de descomposicin de problemas y de desarrollo de
soluciones de programacin.
En primera instancia, con el fin de un mejor esclarecimiento de los
conceptos previo a todo el contenido, empezaremos describiendo sobre la
base de la POO y su principal, y a veces confundible diferencia con los
lenguajes no orientados a objetos.
Explicaremos detalladamente sobre los lenguajes, ANSI C, Smaltalk y
Objective C, cuyos ltimos dos lenguajes son la base fundamental de la
programacin sobre objetos, por lo que sobre ellos daremos un poco mas

Pgina | 4

de nfasis. Estos dos ltimos se basan en las funciones de ANSI C y es un


conjunto de extensiones de este mismo lenguaje.
Trataremos de dejar claro este tema para su posterior anlisis o
debate, segn las especificaciones del profesor.
En las pginas siguientes esperemos que le sean de sumo agrado y
que logre distinguir el propsito de usar esta maravillosa forma de,
bsicamente, pensar y descifrar los problemas y por supuesto, programar.
Deseamos dejar de la mejor y eficaz forma, explcitamente todo el
contenido.

Pgina | 5

INDICE

UNA BASE FUNDAMENTAL: LENGUAJE C................................................7


ANSI C E ISO C................................................................................................. 8
Propiedades..................................................................................................... 9
Ventajas........................................................................................................... 9
Variantes........................................................................................................ 10
Proceso de compilacin..................................................................................10
Estructura bsica de un programa en C.........................................................11
Tipos bsicos y variables...............................................................................12
Funciones....................................................................................................... 13
Aplicaciones................................................................................................... 14
PROGRAMACIN ORIENTADA A OBJETOS.............................................15
Qu es la programacin orientada a objetos?.................................................15
La gran diferencia entre lenguajes orientados y no orientados a objetos.........16
Qu es un objeto?............................................................................................ 17
Que es un mensaje?........................................................................................ 19
Qu es una clase?........................................................................................... 22
LOS TRES PRINCIPIOS DE LOS LENGUAJES ORIENTADOS A OBJETOS......24
Encapsulacin................................................................................................... 24
Herencia............................................................................................................ 24
Polimorfismo..................................................................................................... 26
Otras caractersticas extras.............................................................................. 26
Abstraccin.................................................................................................... 26

Pgina | 6
Recoleccin de basura................................................................................... 27
Sobrecarga..................................................................................................... 27
ALGUNOS LENGUAJES BASADOS EN POO.............................................27
Smalltalk........................................................................................................... 27
Adaptaciones de Smalltalk............................................................................. 28
Objective C........................................................................................................ 29
Qu es Objective C?..................................................................................... 29
Caractersticas del lenguaje...........................................................................30
Compilador..................................................................................................... 39
Crear un ejecutable........................................................................................ 40
Cuadro comparativo C y Objective C.............................................................41
C++.................................................................................................................. 41
Tipos de datos................................................................................................ 42
Ejemplo de una clase..................................................................................... 43
C#..................................................................................................................... 43
Instrucciones de control.................................................................................44
Metas del diseo del lenguaje........................................................................47
Compiladores................................................................................................. 47
Cadena de caracteres.................................................................................... 48
CONCLUSIN....................................................................................49
BIBLIOGRAFA CONSULTADA...............................................................50

Pgina | 7

DESARROLLO
UNA BASE FUNDAMENTAL: LENGUAJE C

Lenguaje C
C es un lenguaje de programacin creado en 1972 por Dennis M.
Ritchie en los Laboratorios Bell como evolucin del anterior lenguaje B (Se
le dio el nombre "C" porque muchas de sus caractersticas fueron tomadas
del lenguaje anterior B, ambos basados en BCPL.
BCPL es la sigla en ingls de Basic Combined Programming
Language (Lenguaje de Programacin Bsico Combinado). Fue diseado
por Martin Richards de la Universidad de Cambridge en 1966 .
El primer compilador implementado fue escrito en 1967. El lenguaje
fue descrito por primera vez en una conferencia informtica en 1969. Aos
despus, Dennis Ritchie lo utiliz como base para desarrollar B.
Los lenguajes de los que surgi son lenguajes sin tipos, al contrario
que el C que proporciona varios tipos de datos. Los tipos que ofrece son
caracteres, nmeros enteros y en coma flotante, de varios tamaos.
Adems se pueden crear tipos derivados mediante la utilizacin de
punteros, vectores, registros y uniones.
El lenguaje C se trata de un lenguaje categorizado de medio nivel
pero con muchas caractersticas de bajo nivel. Dispone de las estructuras
tpicas de los lenguajes de alto nivel pero, a su vez, dispone de
construcciones del lenguaje que permiten un control a muy bajo nivel.
Trabaja con tipos de datos que son directamente tratables por
el hardware de la mayora de computadoras actuales, como son los
caracteres, nmeros y direcciones. Estos tipos de datos pueden ser
manipulados por las operaciones aritmticas que proporcionan las
computadoras. No proporciona mecanismos para tratar tipos de datos que
no sean los bsicos, debiendo ser el programador el que los desarrolle.
Esto permite que el cdigo generado sea muy eficiente y de ah
el xito que ha tenido como lenguaje de desarrollo de sistemas. No
proporciona otros mecanismos de almacenamiento de datos que no sea el
esttico y no proporciona mecanismos de entrada ni salida. Ello permite
que el lenguaje sea reducido y los compiladores de fcil implementacin

Pgina | 8

en distintos sistemas. Por contra, estas carencias se compensan mediante


la inclusin de funciones de librera para realizar todas estas tareas, que
normalmente dependen del sistema operativo.
En 1973, este se haba vuelto tan potente que la mayor parte del
kernel Unix, originalmente escrito en el lenguaje ensamblador PDP-11/20,
fue reescrita en C. ste fue uno de los primeros ncleos de sistema
operativo implementados en un lenguaje distinto al ensamblador.
En 1978, Ritchie y Brian Kernighan publicaron la primera edicin de El
lenguaje de programacin C, tambin conocido como La biblia de C. Este
libro fue durante aos la especificacin informal del lenguaje. El lenguaje
descrito recibe habitualmente el nombre de "el C de Kernighan y Ritchie" o
simplemente "K&R C" (Luego aparece el estndar ANSI C)

Al salir al mercado de la informtica y ser una grata novedad,


muchos programadores quisieron adaptar este tipo de lenguajes en otros
propios, pero siguiendo la base en programacin C, por lo que esto
acarreaba mucha problemtica y distintos tipos de lenguajes de pronto
todos hacan lenguajes C!

ANSI C e ISO C
La primera estandarizacin del lenguaje C fue en ANSI, con el
estndar X3.159-1989. El lenguaje que define este estndar fue conocido
vulgarmente como ANSI C. Posteriormente, en 1990, fue ratificado como
estndar ISO (ISO/IEC 9899:1990).
El estndar est basado en el manual de referencia original de 1972 y
se desarrolla con el mismo espritu de sus creadores originales. La primera
versin de estndar se public en 1988 y actualmente todos los
compiladores utilizan la nueva definicin. Una aportacin muy importante
de ANSI consiste en la definicin de un conjunto de libreras que
acompaan al compilador y de las funciones contenidas en ellas. Muchas
de las operaciones comunes con el sistema operativo se realizan a travs
de estas funciones. Una coleccin de ficheros de encabezamiento,
headers, en los que se definen los tipos de datos y funciones incluidas en
cada librera.
A finales de la dcada de 1970, C empez a sustituir a BASIC como
lenguaje de programacin de microcomputadores predominante. Durante
la dcada de 1980 se empez a usar en los IBM PC, lo que increment su
popularidad significativamente. Al mismo tiempo, Bjarne Stroustrup

Pgina | 9

empez a trabajar con algunos compaeros de Bell Labs para aadir


funcionalidades de programacin orientada a objetos a C. El lenguaje que
crearon, llamado C++, es hoy en da el lenguaje de programacin de
aplicaciones ms comn en el sistema operativo Microsoft Windows;
mientras que C sigue siendo ms popular en el entorno Unix.
En parte a causa de ser de relativamente bajo nivel y de tener un
modesto conjunto de caractersticas, se pueden desarrollar compiladores
de C fcilmente.
C se desarroll originalmente (conjuntamente con el sistema
operativo Unix, con el que ha estado asociado mucho tiempo) por
programadores para programadores. Sin embargo, ha alcanzado una
popularidad enorme, y se ha usado en contextos muy alejados de la
programacin de sistemas, para la que se dise originalmente.

Propiedades

Un ncleo del lenguaje simple, con funcionalidades aadidas

importantes, como funciones matemticas y de manejo de archivos,


proporcionadas por bibliotecas.

Es un lenguaje muy flexible que permite programar con

mltiples estilos. Uno de los ms empleados es el estructurado "no llevado


al extremo" (permitiendo ciertas licencias de ruptura).

Un sistema de tipos que impide operaciones sin sentido.

Usa un lenguaje de pre procesado, el preprocesador de C, para

tareas como definir macros e incluir mltiples archivos de cdigo fuente.

Acceso a memoria de bajo nivel mediante el uso de punteros.

Interrupciones al procesador con uniones.

Un conjunto reducido de palabras clave.

Por defecto, el paso de parmetros a una funcin se realiza por

valor. El paso por referencia se consigue pasando explcitamente a las


funciones las direcciones de memoria de dichos parmetros.

Punteros a funciones y variables estticas, que permiten una

forma rudimentaria de encapsulado y polimorfismo.

Tipos de datos agregados (struct) que permiten que datos

relacionados (como un empleado, que tiene un id, un nombre y un salario)

P g i n a | 10

se combinen y se manipulen como un todo (en una nica variable


"empleado").

Ventajas
El lenguaje en c es muy eficiente puesto que es posible utilizar sus
caractersticas de bajo nivel para realizar implementaciones ptimas.
A pesar de su bajo nivel es el lenguaje ms portado en existencia,
habiendo compiladores para casi todos los sistemas conocidos.
Proporciona facilidades para realizar programas modulares y/o utilizar
cdigo o bibliotecas existentes.

Variantes
Este lenguaje fue la base fundamental y esencial para la creacin de
posteriores lenguajes de programacin y ha influido especialmente a
Vala, C#, Objective-C, C++, AWK, Java, entre otros.
Desde el inicio del lenguaje han surgido varias ramas de evolucin
que han generado varios lenguajes:
Objective-C es un primer intento de proporcionar soporte para
la programacin orientada a objetos en C, de escasa difusin, pero
actualmente usado en Mac OS X y GNUstep.
C++ diseado por Bjarne Stroustrup fue el segundo intento de
proporcionar orientacin a objetos a C y es la variante ms difundida y
aceptada. Esta versin combina la flexibilidad y el acceso de bajo nivel de
C con las caractersticas de la programacin orientada a objetos como
abstraccin, encapsulacin y ocultacin.
Tambin el lenguaje C ha influido especialmente a Vala, C#,
Objective-C, C++, AWK, Java, entre otros.

Proceso de compilacin
La compilacin de un programa C se realiza en varias fases que
normalmente son automatizadas y ocultadas por los entornos de
desarrollo:

P g i n a | 11

Preprocesado consistente en modificar el cdigo

fuente en C segn una serie de instrucciones


(denominadas directivas de preprocesado) simplificando de esta
forma el trabajo delcompilador. Por ejemplo, una de las acciones
ms importantes es la modificacin de las inclusiones (#include) por
las declaraciones reales existentes en el archivo indicado.

Compilacin que genera el cdigo objeto a partir del

cdigo ya pre procesado.

Enlazado que une los cdigos objeto de los distintos

mdulos y bibliotecas externas (como las bibliotecas del sistema)


para generar el programa ejecutable final.

Estructura bsica de un programa en C


La mejor forma de aprender un lenguaje es programando con l.
El programa ms sencillo que se puede escribir en C es el siguiente:
main ( )
{
}
Como nos podemos imaginar, este programa no hace nada, pero
contiene la parte ms importante de cualquier programa C y adems, es el
ms pequeo que se puede escribir y que se compile correctamente. En el
se define la funcin main, que es la que ejecuta el sistema operativo al
llamar a un programa C. El nombre de una funcin C siempre va seguida
de parntesis, tanto si tiene argumentos como si no. La definicin de la
funcin est formada por un bloque de sentencias, que esta encerrado
entre llaves {}.
Un programa algo ms complicado es el siguiente:
#include <stdio.h>
main ( )
{
printf ("Hola amigos!\n");

P g i n a | 12

}
Con el visualizamos el mensaje Hola amigos! en el terminal. En la
primera lnea indica que se tengan en cuenta las funciones y tipos
definidos en la librera stdio (standard input/output). Estas definiciones se
encuentran en el fichero header stdio.h. Ahora, en la funcin main se
incluye una nica sentencia que llama a la funcin printf. Esta toma
como argumento una cadena de caracteres, que se imprimen van
encerradas entre dobles comillas " ". El smbolo \n indica un cambio de
lnea.
Hay un grupo de smbolos, que son tratados como caracteres
individuales, que especifican algunos caracteres especiales del cdigo
ASCII. Los ms importantes son:
\a

Alerta

\b

Espacio atrs

\f

Salto de pgina

\n

Salto de lnea

\r

Retorno de carro

\t

Tabulacin horizontal

\v

Tabulacin vertical

\\

Barra invertida

\'

Comilla simple

\"

Comillas dobles

\OOO

Visualiza un carcter cuyo cdigo ASCII es OOO


en octal

\xHHH

Visualiza un carcter cuyo cdigo ASCII es HHH


en hexadecimal

Un programa C puede estar formado por diferentes mdulos


o fuentes. Es conveniente mantener las fuentes de un tamao no muy
grande, para que la compilacin sea rpida. Tambin, al dividirse un
programa en partes, puede facilitar la legibilidad del programa y su
estructuracin. Las diferentes fuentes son compiladas de forma separada,
nicamente las fuentes que han sido modificados desde la ltima

P g i n a | 13

compilacin, y despus combinados con las libreras necesarias para


formar el programa en su versin ejecutable.

Tipos bsicos y variables


Los tipos de datos bsicos definidos por C son caracteres, nmeros
enteros y nmeros en coma flotante. Los caracteres son representados por
char, los enteros por short, int, long y los nmeros en coma flotante por
float y double. Los tipos bsicos disponibles y su tamao son:

Char

Carcter

(normalmente 8 bits)

Short

Entero corto con

(normalmente 16 bits)

signo
Int

Entero con signo

(depende de la
implementacin)

Unsigne

Entero sin signo

(depende de la
implementacin)

Long

Entero largo con

(normalmente 32 bits)

signo
Float

Flotante simple

(normalmente 32 bits)

Double

Flotante doble

(normalmente 64 bits)

Funciones
Un programa C est formado por un conjunto de funciones que al
menos contiene la funcin main. Una funcin se declara con el nombre de
la funcin precedido del tipo de valor que retorna y una lista de
argumentos encerrados entre parntesis. El cuerpo de la funcin est
formado por un conjunto de declaraciones y de sentencias comprendidas
entre llaves
Expresiones y operadores:
Los distintos operadores permiten formar expresiones tanto
aritmticas como lgicas. Los operadores aritmticos y lgicos son:

P g i n a | 14

+, -

suma, resta

++, --

incremento, decremento

*, /, %

multiplicacin, divisin, mdulo

>>,

rotacin de bits a la derecha,

<<

izquierda.
&

AND booleano

OR booleano

EXOR booleano

complemento a 1

complemento a 2, NOT lgico

==, !

igualdad, desigualdad

&&, ||

AND, OR lgico

<, <=

menor, menor o igual

>, >=

mayor, mayor o igual

En estos operadores deben tenerse en cuenta la precedencia de


operadores y las reglas de asociatividad, que son las normales en la
mayora de lenguajes. Se debe consultar el manual de referencia para
obtener una explicacin detallada. Adems hay toda una serie de
operadores aritmticos con asignacin, como pueden ser += y ^=.

Aplicaciones
Hecho principalmente para la fluidez de programacin en
sistemas UNIX. Se usa tambin para el desarrollo de otros sistemas
operativos como Windows o GNU/Linux. Igualmente para aplicaciones
de escritorio como OpenOffice.org, cuyo principal lenguaje de
programacin es C.

P g i n a | 15

De la misma forma, es muy usado en aplicaciones cientficas (para


experimentos informticos, fsicos, qumicos, matemticos, entre otros,
parte de ellos conocidos como modelos y simuladores), industriales
(industria robtica, ciberntica, sistemas de informacin y base de
datos para la industria petrolera y petroqumica. Predominan tambin todo
lo que se refiere a simulacin de mquinas de manufactura), simulaciones
de vuelo (es la ms delicada, ya que se tienen que usar demasiados
recursos tanto de hardware como de software para desarrollar
aplicaciones que permitan simular el vuelo real de una aeronave. Se aplica
por tanto, en diversas reas desconocidas por gran parte de
los usuarios noveles.
Los ordenadores de finales de los 90 son varios rdenes de magnitud
ms potentes que las mquinas en que C se desarroll originalmente.
Programas escritos en lenguajes de tipo dinmico y fcil codificacin
(Ruby, Python, Perl...) que antao hubieran resultado demasiado lentos,
son lo bastante rpidos como para desplazar en uso a C. Aun as, se puede
seguir encontrando cdigo C en grandes desarrollos de animaciones,
modelados y escenas en 3D en pelculas y otras aplicaciones multimedia.

PROGRAMACIN ORIENTADA A OBJETOS

Qu es la programacin orientada a objetos?


La programacin orientada a objetos (POO) es un conjunto completo
de conceptos e ideas. Es una manera de pensar en el problema al que va

P g i n a | 16

dirigido un programa de ordenador y de afrontarlo, de modo ms intuitivo


e incluso ms productivo. Una forma ms cercana a como expresaramos
las cosas en la vida real que otros tipos de programacin. Podramos
asegurar que es una diferente forma de ver, pensar y enfocar en como
disear y programar soluciones a los problemas.
Est basado en varias tcnicas, incluyendo herencia, abstraccin,
polimorfismo y encapsulamiento (tcnicas que explicaremos mas
adelante). Su uso se populariz a principios de la dcada de 1990.
La POO no es difcil, pero es una manera especial de pensar, a veces
subjetiva de quien la programa, de manera que la forma de hacer las
cosas puede ser diferente segn el programador. Aunque podamos hacer
los programas de formas distintas, no todas ellas son correctas, lo difcil no
es programar orientado a objetos sino programar bien.

La gran diferencia entre lenguajes orientados y no


orientados a objetos
Los lenguajes de programacin tradicionales no orientados a objetos,
como C, Pascal, BASIC, o Modula-2, basan su funcionamiento en el
concepto de procedimiento o funcin. Una funcin es simplemente un
conjunto de instrucciones que operan sobre una sucesin de llamadas a
funciones, ya sean stas del propio lenguaje, o desarrolladas por el mismo
usuario.
En un lenguaje orientado a objetos, toda entidad del problema se
expresa a travs del concepto de objetos. Los objetos son la idea central
detrs de la POO. Ya no pensaremos en trminos de estructuras, paquetes
de datos, invocaciones a funciones, punteros; en cambio, pensamos
tpicamente en trminos de objetos.

P g i n a | 17

La mayora de los lenguajes orientados a objetos tienen dos tipos


distintos: aquellos tipos que son intrnsecos al lenguaje (tipos primitivos) y
los tipos que pueden crear los usuarios del lenguaje (clases). Como puede
adivinar, los tipos primitivos son normalmente tipos sencillos, como
caracteres, cadenas, nmeros, y las clases tienden a ser tipos ms
elaborados.
El tener dos grupos discretos de tipos causa muchos problemas. Un
problema se relaciona con la compatibilidad. Por ejemplo, digamos que
usted quera tener una coleccin de ints en un sistema tradicional con
estos dos grupos de tipos. Necesitara crear una clase especficamente
para mantener valores de tipo int. Y si quisiera una clase para mantener
una coleccin de doubles, tendra que hacer lo mismo por ese tipo. La
razn de estas dos clases distintas es que estos tipos primitivos
normalmente no tienen nada en comn. No son objetos reales, por eso no
derivan de una clase base comn.
Dicho lo anterior, en lenguajes orientado a objetos (como es el caso
de C++, Smalltalk, Objective C, C# y Java), el elemento bsico no es la
funcin, sino un ente denominado precisamente objeto.

Qu es un objeto?
Un objeto es un conjunto de variables, atributos (o datos) y mtodos
(o funciones) relacionados entre s. En primer lugar, un objeto no es un
dato simple, sino que contiene en su interior cierto nmero de
componentes bien estructurados. Por lo tanto, un objeto es la
representacin en un programa de un concepto, y contiene toda la
informacin necesaria para abstraerlo: datos que describen sus atributos y
operaciones que pueden realizarse sobre los mismos. Es una estructura
con datos y mtodos que manipulan los datos.

P g i n a | 18

La idea de objeto es similar a la del mundo real: un objeto puede ser


una silla, una mesa, un auto. Tu perro es un objeto. Vamos a basarnos en
ejemplos cotidianos hasta elementales para entender mejor el concepto
de objetos.
Los objetos tienen dos caractersticas: estado y comportamiento. Por
ejemplo un perro tiene un estado: nombre, color, raza, altura, y un
comportamiento: ladrar, cavar, llorar, dormir, etc.
Un auto es un objeto, ya que tambin tiene un estado: cantidad de
puertas, color, tamao, modelo, etc. y un comportamiento: acelerar,
frenar, subir cambio, bajar cambio, girar izquierda, girar derecha, etc.
Entonces podemos decir fcilmente ahora que un objeto es como un
conjunto de datos o caractersticas y funciones relacionadas. A las
funciones de los objetos (tales como acelerar en el caso del auto) de aqu
en adelante las llamaremos mtodos y a los datos los llamaremos
atributos.
Un ejemplo mas complicado de un objeto podra ser el siguiente:

Objeto: cuenta bancaria.

Atributos(datos): tipo, titular, saldo

Mtodos (funciones): depositar, extraer.

La figura 1 muestra una representacin visual de un objeto.

P g i n a | 19
Fig. 1: Representacin de un objeto

Los atributos del objeto (estado) y los mtodos del objeto


(comportamiento) estn expresados por las variables (nombre y tipo) y las
funciones que componen el objeto respectivamente.
Cabe mencionar que el valor concreto de un atributo (dato o
propiedad) de un objeto se llama estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo
se utiliza el operador punto. Por ejemplo:
miCoche.color = rojo
El objeto es miCoche, luego colocamos el operador punto y por ltimo
el nombre e la propiedad a la que deseamos acceder. En este ejemplo
estamos cambiando el valor del estado de la propiedad del objeto a rojo
con una simple asignacin.

Un ejemplo de una bicicleta tomada como objeto seria como


especifica la figura 2:

Bicicleta modelada como un


objeto
Atributos:
* Velocidad
* Cadencia
* Marcha
Mtodos:
* Cambiar marcha
Fig. 2: Bicicleta como
objeto

* Frenar
* Cambiar cadencia

P g i n a | 20

Recordar:
Cuando se dice ATRIBUTOS se hace mencin
al dato concreto, cuando hablamos de METODOS
nos referimos a las funciones que puede realizar el
objeto.

Qu es un mensaje?

Normalmente, un nico objeto por s solo no es muy til. En general,


un objeto aparece como un componente ms de un programa o una
aplicacin que contiene otros muchos objetos ms. Es precisamente
haciendo uso de esta interaccin como los programadores consiguen una
funcionalidad de mayor orden y modelar comportamientos mucho ms
complejos. Por si sola, la bicicleta (por poner una bicicleta en concreto) es
incapaz de desarrollar una actividad. La bicicleta es realmente til en
tanto que otro objeto (persona) interacta con ella (pedalea).
La interaccin entre objetos se produce mediante mensajes. Los
mensajes son llamados a mtodos de un objeto en particular. Cuando un
objeto A quiere que otro objeto B ejecute una de sus funciones (mtodos
de B), el objeto A manda un mensaje al objeto B.

Fig. 3: Objeto A manda mensaje al objeto B a


travs de mensaje.

P g i n a | 21

En ocasiones, el objeto que recibe el mensaje necesita ms


informacin para saber exactamente lo que tiene que hacer. Esta
informacin se pasa junto con el mensaje en forma de parmetro. Ahora
podemos marcar los tres puntos principales del mensaje.

El objeto al cual se enva el mensaje.

El mtodo que debe ejecutar.

Los parmetros que necesita ese mtodo.


Ejemplificando nuevamente con la bicicleta; el objeto A manda el

mensaje de cambiar de marcha pero falta informacin aqu, que es a cual


marcha debe cambiar (parmetro) y luego enva este mensaje al objeto B.
La siguiente figura muestra las tres partes que componen un
mensaje mediante un ejemplo:

Fig. 4: El objeto persona (T) manda el mensajecambiardemarcha con el parmetro marcha


al objetobicicleta (Tbicicleta)

Con estas tres partes (objeto destinatario, mtodo y parmetros) el


mensaje es ptimo para que el objeto que recibe el mensaje ejecute el
mtodo. Cabe destacar dos ventajas importantes que los mensajes
ofrecen:
1) El comportamiento de un objeto est completamente
determinado (a excepcin del acceso directo a variables miembro

P g i n a | 22

pblicas) por sus mtodos, as que los mensajes representan todas las
posibles interacciones que pueden realizarse entre objetos.
2) Los objetos no necesitan formar parte del mismo proceso, ni
siquiera residir en un mismo ordenador para mandarse mensajes entre
ellos (y de esta forma interactuar).

Las palabras "clase" y "objeto" se usan tanto en la programacin


orientada a objetos que resulta muy fcil confundir los trminos y suelen
causar diversas dudas a la hora de lograr definir ambas cosas.
Existen varios objetos de un mismo tipo, o como diremos enseguida,
de una misma clase. Por ejemplo, una bicicleta es una de las muchas
bicicletas que existen en el mundo. Usando la terminologa de la
programacin orientada a objetos, diremos que una bicicleta es una
instancia de la clase de objetos conocida como bicicletas. Todas las
bicicletas tienen algunos estados o atributos (color, marcha actual,
cadencia actual, dos ruedas) y algunos mtodos (cambiar de marcha,
frenar) en comn. Sin embargo, el estado particular de cada bicicleta es
independiente del estado de las dems bicicletas. La particularizacin de
estos atributos puede ser diferente. Es decir, una bicicleta podr ser azul,
y otra roja, pero ambas tienen en comn el hecho de tener una variable
color. De este modo podemos definir una plantilla de variables y
mtodos para todas las bicicletas. Las plantillas para crear objetos son
denominadas clases.

Qu es una clase?
Cuando programamos un objeto y definimos sus caractersticas y
funcionalidades en realidad lo que estamos haciendo es programar una
clase.
Una clase es una plantilla que define las variables y los mtodos que
son comunes para todos los objetos de un cierto tipo.

P g i n a | 23

En nuestro ejemplo, la clase bicicleta definira variables miembro o


atributos comunes a todas las bicicletas, como la marcha actual, la
cadencia actual, etc. Esta clase tambin debe declarar e implementar los
mtodos o funciones miembro que permiten al ciclista cambiar de marcha,
frenar, y cambiar la cadencia de pedaleo, como se muestra en la siguiente
figura:

Fig. 5: Definicin de la clase bicicleta

Despus de haber creado la clase bicicleta, podemos crear cualquier


nmero de objetos bicicleta a partir de la clase. Cuando creamos una
instancia de una clase, el sistema reserva suficiente memoria para el
objeto con todas sus variables miembro. Cada instancia tiene su propia
copia de las variables miembro definidas en la clase.

Fig. 6: Objetos o instancias de la clase


bicicletas

P g i n a | 24

Una clase en C++ podra ser definida como se muestra a


continuacin:

class Aritmetica
{
public:
inline int sumar (int a, int b) const
{
return a + b;
}
inline int restar (int a, int b) const
{
return a - b;
}
inline float multiplicar (int a, int b) const
{
return a * b;
}
inline float dividir (int a, int b) const
{
return a / b;
}};

LOS TRES PRINCIPIOS DE LOS LENGUAJES


ORIENTADOS A OBJETOS
Segn Bjarne Stroustrup, autor del lenguaje de programacin C++,
para que un lenguaje se llame a s mismo orientado a objetos debe
soportar tres conceptos: objetos, clases y herencia. Sin embargo, ha
llegado a pensarse ms comnmente que los lenguajes orientados objetos
son lenguajes construidos sobre el trpode encapsulacin, herencia y
polimorfismo. La razn de este cambio de filosofa es que con el paso de
los aos hemos llegado a darnos cuenta que la encapsulacin y el

P g i n a | 25

polimorfismo son partes tan integrantes de la construccin de sistemas


orientados a objetos como la clases y la herencia.

Encapsulacin
Como ya mencionamos anteriormente, la encapsulacin, a veces
llamada ocultacin de la informacin, es la capacidad de ocultar los
procesos internos de un objeto a sus usuarios y proporcionar una interfaz
para los miembros que quiera que el cliente tenga posibilidad de
manipular directamente. Es bsicamente, el hecho de empaquetar juntos
datos y funcionalidad, dejando visible al exterior solo lo estrictamente
necesario.
Sin embargo, tambin hablamos de abstraccin en el mismo
contexto, por eso en esta seccin aclararemos cualquier confusin
relacionada con estos dos conceptos tan parecidos. La encapsulacin
proporciona el vnculo entre la interfaz externa de una clase -esto es, los
miembros pblicos visibles a los usuarios de la clase- y sus detalles de
implementacin interna. La ventaja de la encapsulacin para el
desarrollador de la clase es que puede exponer los miembros de una clase
que quedaran estticos, o inamovibles, mientras se ocultan los procesos
internos ms voltiles y dinmicos.

Herencia
La herencia sirve para crear objetos que incorporen propiedades y
mtodos de otros objetos. As podremos construir unos objetos a partir de
otros sin tener que reescribirlo todo. Mediante esta tcnica, se pueden
crear (o derivar de otra) nuevas clases a partir de alguna anterior, de
forma que las nuevas "heredan" las caractersticas de sus ancestros
(propiedades y mtodos). Entonces puede modificar la clase de la manera
que quiera y crear objetos nuevos del tipo derivado. Esta habilidad es la
esencia de la creacin de una jerarqua de clases (del mismo aspecto que
el rbol genealgico de una familia).

P g i n a | 26

Es una herramienta clave para abordar la resolucin de un problema


de forma organizada, pues permite definir una relacin jerrquica entre
todos los conceptos que se estn manejando.
Por ejemplo, entendemos que un motor elctrico deriva de la clase
general de los motores, de la cual derivan tambin los de gasolina,
diesel, vapor, etc. y que, sin dejar de ser motores, cada subclase tiene sus
caractersticas peculiares.
La herencia proporciona las siguientes ventajas:

Las clases derivadas o subclases proporcionan comportamientos


especializados a partir de los elementos comunes que hereda de la
clase base. A travs del mecanismo de herencia los programadores
pueden reutilizar el cdigo de la superclase tantas veces como sea
necesario.

Los programadores pueden implementar las llamadas superclases


abstractas, que definen comportamientos genricos. Las clases
abstractas definen e implementan parcialmente comportamientos,
pero gran parte de estos comportamientos no se definen ni se
implementan totalmente. De esta forma, otros programadores
pueden hacer uso de estas superclases detallando esos
comportamientos con subclases especializadas. El propsito de una
clase abstracta es servir de modelo base para la creacin de otras
clases derivadas, pero cuya implantacin depende de las
caractersticas particulares de cada una de ellas. Un ejemplo de
clase abstracta podra ser en nuestro caso la clase vehculos. Esta
clase sera una clase base genrica, a partir de la cual podramos ir
creando todo tipo de clases derivadas.
Como lo que principalmente interesa al usuario de una clase es su

interfaz, son justamente algunos aspectos de esta interfaz los que se


modifican, al objeto de adecuar la nueva subclase a las necesidades
especficas del caso. Por lo general esta modificacin de la interfaz se
consigue de dos formas:

P g i n a | 27

1. Aadiendo propiedades y/o mtodos que no existan en la clase


base

2. Sobrescribiendo propiedades del mismo nombre con distintos


comportamientos (sobrecarga y/o polimorfismo).

Polimorfismo
Una de las caractersticas fundamentales de la POO es el
polimorfismo, que no es otra cosa que la posibilidad de construir varios
mtodos (funciones) con el mismo nombre, pero con relacin a la clase a
la que pertenece cada uno, con comportamientos diferentes. Dicho de
simple manera, el polimorfismo sirve para que no tengamos que
preocuparnos sobre lo que estamos trabajando, y abstraernos para definir
un cdigo que sea compatible con objetos de varios tipos. Esto conlleva la
habilidad de enviar un mismo mensaje a objetos de clases diferentes.
Estos objetos recibiran el mismo mensaje global pero responderan a l de
formas diferentes; por ejemplo, un mensaje "+" a un objeto ENTERO
significara suma, mientras que para un objeto STRING significara
concatenacin ("pegar" strings uno seguido al otro).

Tambin es necesario definir un principio extra, pero no es tomado


como fundamental a fin de mejores efectos prcticos

Otras caractersticas extras

ABSTRACCIN
Denota las caractersticas esenciales de un objeto, donde se capturan
sus comportamientos. Cada objeto en el sistema sirve como modelo de un
"agente" abstracto que puede realizar trabajo, informar y cambiar su
estado, y "comunicarse" con otros objetos en el sistema sin revelar cmo
se implementan estas caractersticas. Los procesos, las funciones o los
mtodos pueden tambin ser abstrados y cuando lo estn, una variedad
de tcnicas son requeridas para ampliar una abstraccin. El proceso de
abstraccin permite seleccionar las caractersticas relevantes dentro de un

P g i n a | 28

conjunto e identificar comportamientos comunes para definir nuevos tipos


de entidades en el mundo real. La abstraccin es clave en el proceso de
anlisis y diseo orientado a objetos, ya que mediante ella podemos llegar
a armar un conjunto de clases que permitan modelar la realidad o el
problema que se quiere atacar.

SOBRECARGA
Posibilidad de crear diferentes mtodos dentro de una clase que
comparten el mismo nombre, pero que aceptan argumentos diferentes y
se comporten de forma distinta segn la naturaleza de estos argumentos.

RECOLECCIN

DE BASURA

La recoleccin de basura o garbage collector es la tcnica por la cual el


entorno de objetos se encarga de destruir automticamente, y por tanto
desvincular la memoria asociada, los objetos que hayan quedado sin
ninguna referencia a ellos. Esto significa que el programador no debe
preocuparse por la asignacin o liberacin de memoria, ya que el entorno
la asignar al crear un nuevo objeto y la liberar cuando nadie lo est
usando. En la mayora de los lenguajes hbridos que se extendieron para
soportar el Paradigma de Programacin Orientada a Objetos como C++ u
Object Pascal, esta caracterstica no existe y la memoria debe
desasignarse manualmente.

ALGUNOS LENGUAJES BASADOS EN POO


Smalltalk
Smalltalk es un lenguaje de programacin que permite realizar tareas
de computacin mediante la interaccin con un entorno de objetos
virtuales e incluye todos los conceptos claves, como clases, mtodos,
mensajes y herencia. Todo el programa es una cadena de mensajes
enviados a objetos. Metafricamente, se puede considerar que un
Smalltalk es un mundo virtual donde viven objetos que se comunican
mediante el envo de mensajes

P g i n a | 29

Todo en Smalltalk es un objeto y toda la computacin es desarrollada


mediante mensajes que son enviados entre los objetos.
El trabajo ms fuerte se hizo en los aos 70, bajo el impulso de Alan
Kay en los laboratorios Xerox PARC (Palo Alto Research Center): fue
desarrollado en perodos de 3 o 4 aos de duracin usando la informacin
y el aprendizaje obtenido en la iteracin anterior para hacer un nuevo
Smalltalk. Esto produjo el Smalltalk/72, Smalltalk/76 y el Smalltalk/80. Este
ltimo es el ms conocido y el que suele ser llamado Smalltalk a secas. F
Fue pblicamente disponible a partir de 1980 y se puede asegurar
que ha influido especialmente a Objective-C, Java, Self, Python, Ruby,
AppleScript.
Inicialmente deba ser un lenguaje para un ordenador personal
llamado Dynabook dirigido a todo tipo de usuarios, incluyendo nios.
Deba ser, por tanto, un sistema con un entorno intuitivo y fcil de
programar. Aunque el proyecto Dynabook nunca se complet, el lenguaje
tom vida propia y continu su camino.
Es poco conocida la gran importancia que tuvo este desarrollo en la
evolucin posterior de la informtica. De l parten muchas de las ideas de
las modernas interfaces de usuario, como el uso de grficos, ratn,
ventanas y menes desplegables.
Un sistema Smalltalk esta compuesto por:

Mquina virtual
Imagen virtual que contiene todos los objetos del sistema

Lenguaje de programacin (tambin conocido como Smalltalk)

Biblioteca de Objetos reusables

Opcionalmente un entorno de desarrollo que funciona como un


sistema en tiempo de ejecucin.

ADAPTACIONES

DE

SMALLTALK

F-script es un lenguaje de script basado en Smalltalk diseado para el

P g i n a | 30

sistema de objetos de MacOS X (Cocoa).


GNU Smalltalk es una implementacin de Smalltalk-80 que funciona en
la mayora de los sistemas Unix. Tambin hay una versin para MS-NT
(sic. Ser Windows NT, supongo).
Little Smalltalk es una implementacin mnima experimental que
requiere muy poca memoria. Carece de rasgos importantes, como
grficos y una interfaz convencional. Fue la primera versin escrita fuera
de Xerox Parc.
Smalltalk/X es una implementacin completa del lenguaje de
programacin y entorno de desarrollo Smalltalk. Hay versiones para
Windows y varios tipos de Unix (incluyendo Linux).
SmallWord es un intrprete de dominio pblico de Little Smalltalk escrito
completamente en Java por el mismo autor.
Spoon es un sistema mnimo derivado de Squeak.
Squeak es un sistema gratuito y de cdigo abierto con licencia Apple en
cuyo desarrollo toman parte los mismsimos padres de Smalltalk, Alan
Kay y Dan Ingalls. Hay versiones para Windows, Unix, Macintosh y otras
plataformas.
Sharp Smalltalk es una implementacin de Smalltalk para ejecutarse
nativamente en entorno .NET.
Strongtalk es una revisin del lenguaje y sistema Smalltalk-80.
Desarrollado a mediados de los 90 por LongView, una empresa
posteriormente absorbida por Sun. Parece que slo se distribuye para
Windows.
Talks2 es un completo entorno de desarrollo Smalltalk. Se ejecuta encima
de la Mquina Virtual Java

Objective C
QUE ES OBJETIVE C?

P g i n a | 31

Al igual que C++, Objective-C es una extensin de C para hacerlo


orientado a objetos, pero a diferencia de C++, este leguaje est basado
en ideas del mundo de Smalltalk, lo cual hace que Objective-C sea un
lenguaje ms limpio, pequeo y rpido de aprender que C++.
Pero sin embargo Objective-C es un lenguaje mucho menos usado en
cierta forma que el C++. El mundo de Mac OS X es quiz una excepcin a
esta regla debido a que Objective-C es el lenguaje para programar en
Cocoa, la nueva API orientada a objetos de Mac OS X que tiene como
objetivo mejorar la antigua API de programacin de Carbon.
A diferencia de otros lenguajes de las GCC, Objective-C no ha sido
estandarizado por ningn organismo internacional, sino que fue
NeXTSTEP, y ahora Mac OS X quienes han contribuido a crear este
lenguaje. NeXT, la empresa que cre NeXTSTEP cedi la implementacin
de Objective-C a las GCC, y ambos estn trabajando en mantener y
mejorar el lenguaje.
Debido a que Objective-C es una extensin de C compartible hacia
atrs, muchas de las caractersticas de la sintaxis de C han sido heredadas
por Objective-C, entre ellas:
Sentencias de control de flujo.
Los tipos de datos fundamentales, estructuras y punteros.
Conversiones implcitas y explicitas entre tipos.
Los mbitos de las variables: Globales, estadsticas y locales.
Las funciones y su sintaxis.
Las directivas del preprocesador, aunque Objective-C aade ms
directivas del procesador, ya tambin aade las llamadas directivas del
compilador.

P g i n a | 32

Vale aclarar que los ficheros de cdigo fuente de Objective-C tienen


extensin .m, y en ellos podemos usar tanto la sintaxis de C como la de
Objective-C.
Las GCC cuyo significado es GNU C Compiler (compilador GNU para
C), porque slo compilaba el lenguaje C. Posteriormente se extendi para
compilar C++, Fortran, Ada y otros, llamndose a la versin como GCC
2.95, que compila Objective-C++, que no es ms que la combinacin de
Objective-C ms C++. Los ficheros de Objective-C++ se caracterizan por
tener la extensin .mm o .M.

CARACTERISTICAS DEL LENGUAJE :


LENGUAJE DINMICO: Muchas decisiones que muchos lenguajes
toman en tiempo de compilacin, Objective-C las deja para el tiempo de
ejecucin.
La gran ventaja de esta caracterstica, son las herramientas de
desarrollo, donde estas tienen acceso a todo runtime del programa, esto
quiere decir que las herramientas de desarrollo pueden instanciar los
objetos del programa, representarlos visualmente, personalizarlos,
monitorizarlos y permite depurarlos de manera mas cmoda para el
programador.
Los tipos de dinamismo que diferencian Objective-C de otros tipos de
lenguaje son los siguientes:
MEMORIA DINAMICA: En los primeros lenguajes la cantidad de
memoria que usaba un programa quedaba fijada durante su compilacin
durante su compilacin. Con el tiempo los lenguajes comenzaron a ser
conscientes de la importancia de que un programa pudiera decidir en
tiempo de ejecucin la cantidad de memoria que quera reservar. Por
ejemplo C introdujo la funcin malloc() para reservar memoria
dinmicamente.

P g i n a | 33

TIPOS DINAMICOS: Asociar un tipo a una variable es una muy buena


idea ya que ayuda al compilador a identificar errores de codificacin. Por
ejemplo mucho lenguajes no permiten asignar directamente cadenas a
nmeros (debido a que la cadena podra no contener un redondeo)
Adems la tipificacin de los objetos le permite al compilador informar al
programador de que est intentando acceder a un mtodo o variable de
instancia que no existe en el objeto.
La tipificacin de variables puede ser de dos tipos: TIPIFICACION
ESTTICA, que se produce cuando es el compilador quien lleva la cuenta
de los tipos de las variables para identificar errores, y TIPIFICACION
DINAMICA, que se da cuando es el runtime del lenguaje el que en un
tiempo de ejecucin detecta y usa el tipo de las variables
INTROSPECCION: Esta caracterstica la tienen solo algunos lenguajes
como Objective-C o Java de observar y manipular como datos el estado
de su ejecucin. Con la introspeccin podemos preguntar el tiempo de
ejecucin a un objeto, cosas como: A que clase pertenece, de que clase
deriva, que mtodos tiene, etc.
ENLACE DINAMICO: Los lenguajes orientados a objeto reemplazan el
concepto de llamada a funcin por el envi de mensajes. La diferencia
radica en que el mismo mensaje puede ejecutar diferentes funciones
dependiendo del objeto que reciba el mensaje. A esta capacidad que
tienen los objetos de responder al mismo mensaje de distinta forma es a lo
que se ha enviado a llamar POLIMORFISMO.
CARGA DINMICA: Es una caracterstica que pertenece a algunos
lenguajes como Java u Objective-C, consiste en poder cargar solo un
conjunto bsico de clases al empezar el programa, y luego, en funcin de
la evolucin del flujo de programa ir cargando las clases de nuevos objetos
que se necesiten instanciar. Para instanciar a un objeto, debemos llamar a
los mtodos alloc e init.

P g i n a | 34

alloc: Sera el equivalente a new en Java o C++; reserva

memoria dinmica y pone a cero todas las variables de instancia del


objeto. Es un mtodo de clase
Punto* p = [Punto alloc];

init: Sera el equivalente al constructor en Java o C++; se

encarga de inicializar las variables de instancia del objeto. Es un mtodo


de instancia

p = [p init];

Como ya se ha mencionado anteriormente acerca de la idea base de


este tipo de el lenguaje Objective-C, el mismo es bsicamente un
lenguaje de programacin diseado para facilitar la programacin
orientada a objetos, en otras palabras se definira como un conjunto de
extensiones para el lenguaje ANSI C, teniendo como objetivo principal
dotar a C de capacidad de programacin orientada a objetos de forma
sencilla, a comparacin de otros tipos de lenguajes de programacin.
Cocoa , de API de programacin orientada a objetos de Mac OS X
tradicionalmente se ha dividido en dos caractersticos grupos de clases:
Foundation framework: Son un conjunto de clases de apoyo que
permiten representar estructuras de datos coplejas (entre ellos podemos
encontrar a los arrays, listas, direccionarios, entre otros), y dentro de las
que no se incluyen las clases relacionadas con la interfaz grfica. Vale
aclarar que esta librera es com{n a Mac OS y iPhone OS.
Application Kit Framework (appKit Framework): Abarca a todas las
demas clases, ya sean aquellas clases relacionadas con la interfaz grfica,
con la impresin , acceso directo a audio y video, y todos los dems
aspectos que podemos gestionar desde Cocoa. Dentro de AppKit nos
podemos encontrar con otros Kit de desarrollo en determinadas tareas
como ser: Image Kit , Quick Time, entre otras ms.
FRAMEWORK (marco) Y RUTIME (tiempo de ejecucin)DE OBJECTIVEC:

P g i n a | 35

Hoy en da para programar en Objective-C disponemos de dos


frameworks distintos, ellos son los siguientes:
1.

FRAMEWORK de clases de GNU, que son originalmente un

conjunto de clases iniciales fabricado por NeXTSTEP para Objective-C que


fueron abiertas bajo la licencia de GNU, y cuya clase base es la clase
sObject.
2.

FRAMEWORK de clases de NeXTSTEP, es un conjunto de clases

desarrollado por el mismo en el ao 1994, siendo la clase base inicial


NSObject, y que hoy en da es usado por Mac OS X para implementar
Cocoa. Como dato extra, se conoce que el cdigo fuente del framework de
clases de NeXTSTEP no est abierto.
Actualmente el framework de clases GNU ha dejado de actualizarse y
GNU tambin est haciendo una implementacin de cdigo fuente abierto
del nuevo framework de clases de NeXTSTEP llamado llama GNUStep, vale
aclarar que esta ultima utiliza la misma clase base NSObject as como el
resto de clases del framework de NeXTSTEP, pero actualmente no est
terminada.
Para usar el framework de clases de GNU debemos de enlazar con el
fichero libobject.a, a travs del uso de la opcin del enlazador lobjc.Por el
contrario, para enlazar con el framework de clases de NeXTSTEP debemos
de enlazar con el framework Foundation.framework usando la opcin del
enlazador framework Foundation. Lgicamente podemos enlazar con
ambos frameworks de clases usando ambas opciones durante el enlazado.
Es importante no confundir los frameworks de Objective-C, que son
libreras de clases, con el runtime de Objective-C, que es un conjunto de
funciones de librera, escritas en C, en las que se basan las clases de
Objective-C para alcanzar el mximo potencial caracterstico de este
lenguaje: Mac OS X se usa el runtime de NeXTSTEP, el cual actualmente
da soporte al framework de clases de GNU, como al framework de clases
de NeXTSTEP. Podemos pedir usar el runtime de GNU usando la opcin del
enlazador fgnu runtime, pero en este caso slo tendremos acceso al

P g i n a | 36

framework de clases de GNU, y adems deberemos enlazar con la librera


llamada libobjc gnu.a usando la opcin lobjc gnu.
A continuacin se describir el mtodo de programacin en ambas
clases:
A.

PROGRAMAR CON EL FRAMEWORK DE CLASES DE GNU:

Normalmente cada clase Objective-C consta de dos ficheros: Uno con


la extensin .h que contiene la interfaz, y otro con la extensin .m que
contiene la implementacin, debajo se mostrar un ejemplo de interfaz e
implementacin de una clase Objective-C llamada Saludos. Debemos tener
en cuenta que estamos usando como clase base la clase Object situada en
el fichero de cabecera <objc/Object.h>.
/* Saludos.h */
#import <object.h>
@interface Saludos: Object {
Char* saludo:
}
- Init;
- (void)setsaludo: (char*) un saludo;
- (void)setsaludo: (char*) un saludo y: (char*) una coletilla;
- (void)saluda;
@end

/* Saludos.m */
#import Saludos.h
#import <stdio.h>

P g i n a | 37

#import <stdlib.h>
#import <string.h>
@ implementacin Saludos
- Init {
If (self=[super init]) {
Saludo=Hola mundo;
}
return self;
}
- (void) setSaludo: (char*) un saludo {
Saludo=unSaludo;
}
- (void) setSaludo: (char*) unsaludo y: (char*) unacoletilla {
Saludo=malloc (strlen (unsaludo)+strlen (unacoletilla)+1);
Strcpy (saludo, unsaludo);
Stracat (saludo, unacoletilla);
}
- (void) saluda {
Printf(%s\n, saludo);
}
@end

P g i n a | 38

Una vez que tengamos definida la clase, para instanciar y usar un


objeto de esta clase, necesitamos un programa principal como el
siguiente:
/* pidesaludo.m */
#import saludador.h

Int main() {
Saludador*s=[[saludador alloc] init];
[s saluda];
[s setsaludo: hola de nuevo];
[s saluda];
[s setsaludo: hola buenos das,
Y: encantado de verle];
[s saluda];
[s free];
Return EXIT_SUCCESS;
}
Al estar usando el framework de clases de GNU, el programa puede
ser compilado y enlazado con los comandos:
$ GCC C Saludos.m
$ GCC C pidesaludo.m
$ GCC Saludos.o pidesaludos.o lobjc o pidesaludo

O bien realizar los tres pasos a la vez con el comando:

P g i n a | 39

$ GCC pidesaludo.m saludo.m lobjc o pidesaludo


B.

PROGRAMAR CON EL FRAMEWORK DE CLASES DE NeXTSTEP

A continuacin se mostrarn unos ejemplos de cmo usar e


implementar la clase Saludos del apartado anterior enlazando con el
framework de clases de NeXTSTEP. La principal diferencia est en que
ahora derivamos de NSObject en ves de Object. La segunda diferencia
est en qie importamos el fichero <Foundation/NSObject.h> en vez de
importar el fichero <objc/Object.h>.
Para compilar y ejecutar ahora el programa podemos usar los
comandos:
$ GCC Saludator.m pidesaludo.m framework Foundation o
pidesaludo
$ ./pidesaludo

/* saludo */
#import <Foundation/NSObject.h>
@interface Saludo:NSObject {
Char* saludo;
}
-init;
-(void) setsaludo(char*)unsaludo;
-(void) setsaludo(char*) unsaludo y(char*)unacoletilla;
-(void) saluda;
@end

P g i n a | 40

*/ saludo */
#import saludo.h
#import <stdio.h>
#import <stdblib.h>
#import <string.h>
@implementacion saludos
-init {
If (self=[super init]) {
Saludo=hola mundo;
}
Return self;
}
-(void) setsaludo:(char*)unsaludo {
Saludo=unsaludo;
}
-(void) setsaludo:(char*) unsaludo y: (char*) unacoletilla {
Saludo=malloc (strelen(unsaludo)+strlen(unacoletilla)+1);
Strcpy (saludo, unsaludo);
Strcat (saludo, unacoletilla);
}
-(void) saluda {
printf (%s\n, saludo);
}

P g i n a | 41

@end

/* pidesaludo.m */
#import saludos.h
Int main()

Saludos*s=[[saludos alloc]init];
[s saluda];
[s setsaludo: hola de nuevo];
[s saluda];
[s setsaludo: hola buenos das,
Y: encantado de verle];
[s saluda];
[s release];
Return EXIT_SUCCESS;
}

COMPILADOR
El compilador a usar en este lenguaje ser el GCC (GNU Compiler
Collection), es escencialmente un conjunto de herramientas que proporciona GNU
para programar en varios lenguajes y plataformas. Mac OS X y IPhone OS se
apoyan en estas herramientas para realizar las tareas de compilacin y enlazado
de sus correspondientes aplicaciones.

COMPILANDO CON XCODE :


Con el objetivo de mejorar tanto la productividad como la facilidad de uso
de estas herramientas Apple cre Xcode, este es un IDE (Integrader Development

P g i n a | 42
Environment) que permite realizar de forma grfica las tareas comunes de
programacin, y que hace las correspondientes llamadas a las GCC para realizar
las tareas caractersticas de compilacin y enlazado de forma transparente al
programador.
XCODE, incluye la creacin de compiladores del proyecto GNU (GCC), y
puede compilar cdigo C,C++, Objective-C, Objective-C++, Java y Apple Script,
mediante una amplia gama de modelos de programacin entre los ms
destacados Cocoa, Carbn y Java.

Se puede afirmar que Xcode mejora la productividad del programador en


forma considerable.

CREAR UN EJECUTABLE:
Como aclaramos anteriormente que Objective-C es una extensin al
lenguaje C, entonces un programa en C se puede compilar en Objective-C sin la
necesidad de efectuar ningn cambio. Debemos aclarar que solo se deben llevar
a cabo dos cambios, un programa de Objective-C usa la sintaxis de C excepto por
dos aspectos, ellos son los siguientes:
El primer aspecto es que en vez de usar la directiva del procesador #include
se ha usado la directiva del procesador #import. Ambas directivas realizan la
operacin de incluir un fichero dentro de otro fichero, pero a diferencia de
#include la directiva #import asegura que el fichero incluido no se incluya nunca
ms de una vez, con lo que en los ficheros de cabecera incluidos nunca s
incluidos con esta directiva no es necesario hacer un control de inclusiones. Con
la directiva del procesador #ifdef, tal como se acostumbra a hacer en C y C++.
La otra direncia radica en que est en que la extensin de los ficheros
Objective-C es .m, extensin usada por el comando GCC para saber que se trata
de un programa en Objective-C.
/* holamundo.m */
#import <stdio.h>
#import <stdlib.h>
Int main()

P g i n a | 43
{
Printf(hola mundo desde Objective-C\n);
Return EXIT_SUCCESS;
}
Para compilar y ejecutar este programa bastara con ejecutar los comandos:
$ GCC hola mundo.m -o holamundo
$ ./holamundo
Hola desde Objective-C

CUADRO

COMPARATIVO DE

Caractersticas
Directiva del
prepreprocesador
En cadenas
Compilador
Archivo
Herramienta grfica

OBJECTIVE C

Lenguaje C
#include

Lenguaje Objective C
#import

#ifdef
Char *
Turbo C, entre

#ifdef
NSString
GCC

otros
.c

.h(interface)

No tiene

.m(implementacin)
X Code

C++
C++ es un lenguaje de programacin diseado a mediados de los
aos 1980 por Bjarne Stroustrup. La intencin de su creacin fue el
extender al exitoso lenguaje de programacin C con mecanismos que
permitan la manipulacin de objetos.

P g i n a | 44

Al comienzo era una extensin del lenguaje C que fue denominada C


with classes. El nombre C++ es tambin de ese ao, y hace referencia al
carcter del operador incremento de C (++), que significa incremento de
C.
En la actualidad, el C++ es un lenguaje verstil, potente y general. Su
xito entre los
programadores profesionales le ha llevado a ocupar el primer puesto como
herramienta de
desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a
riqueza de operadores y expresiones, flexibilidad, concisin y eficiencia.
Adems, ha eliminado algunas de las dificultades y limitaciones del C
original. La evolucin de C++ ha continuado con la aparicin de Java, un
lenguaje creado simplificando algunas cosas de C++ y aadiendo otras,
que se utiliza para realizar aplicaciones en Internet.
Hay que sealar que el C++ ha influido en algunos puntos muy
importantes del ANSI C, como por ejemplo en la forma de declarar las
funciones, en los punteros a void, etc. En efecto, aunque el C++ es
posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas
de las mejoras de ste fueron tomadas del C++.
Un ejemplo de programacin en C++(Hola mundo) es como el
siguiente ejemplo:
# include <iostream> // Este header permite usar los objetos
que encapsulan los descriptores stdout y stdin: cout(<<) y
cin(>>)//
using namespace std;
int main()
{
cout << "Hola mundo" << endl;
return 0;

TIPOS

DE DATOS

C++ tiene los siguientes tipos fundamentales:

Caracteres: char (tambin es un entero), wchar_t

Enteros: short int, int, long int, long long int

P g i n a | 45

Nmeros en coma flotante: float, double, long double

Booleanos: bool

Vaco: void

El modificador unsigned se puede aplicar a enteros para obtener nmeros


sin signo (por omisin los enteros contienen signo), con lo que se consigue
un rango mayor de nmeros naturales.
Tipo
Char
Short
Int
Float
Doubl

UN

Nmero de bits
8
16
32
32
64

EJEMPLO DE UNA CLASE EN

C++:

class Punto
{
//por omisin los miembros son 'private' para que slo se
puedan modificar desde la propia clase.//
private:
// Variable miembro privada
int id;
protected:
// Variables miembro protegidas
int x;
int y;
public:
// Constructor
Punto();
// Destructor
~Punto();
// Funciones miembro o mtodos
int ObtenerX();
int ObtenerY();
};

C#
C o C# (pronunciado si sharp en ingls) es un lenguaje de
programacin orientado a objetos desarrollado y estandarizado por
Microsoft como parte de su plataforma .NET

P g i n a | 46

Anders Hejlsberg lider el proyecto de desarrollo de C#, el cual


apareci en el mercado en el ao 2001. Anteriormente, ya particip en el
desarrollo de otros lenguajes como Turbo Pascal, J++ y Borland Delphi.
Este lenguaje fue fuertemente influido por Java, C++, Lenguaje C, Delphi,
Eiffel.
La creacin del nombre del lenguaje, C, proviene de dibujar dos
signos positivos encima de los dos signos positivos de "C++", queriendo
dar una imagen de salto evolutivo, del mismo modo que ocurri con el
paso de C a C++.

INSTRUCCIONES

DE CONTROL

La instruccin if-else es bsicamente igual que en C, C++ y Java.

La diferencia de la instruccin switch con la versin de C, C++ y


Java es que todo cuerpo perteneciente a un case debe de toparse
con un break o un goto antes de toparse con otro case, a menos
que dicho cuerpo est vaco.

La instruccin for es bsicamente igual que en C, C++ y Java.

La instruccin while es bsicamente igual que en C, C++ y Java.

La instruccin do-while es bsicamente igual que en C, C++ y Java.

La instruccin foreach realiza un ciclo a travs de los elementos de


una coleccin (grupo de objetos). El formato de esta instruccin es:
foreach(tipo variable in coleccion) instruccion;. En este
ciclo se recorre la coleccin y la variable recibe un respectivo
elemento de dicha coleccin en cada iteracin.

Al igual que en C y C++, la instruccin break permite forzar la


salida de un ciclo omitiendo el cdigo restante en el cuerpo del ciclo.

Al igual que en C y C++, la instruccin continue permite forzar la


repeticin temprana de un ciclo omitiendo el cdigo restante en el
cuerpo del ciclo.

P g i n a | 47

La instruccin return es bsicamente igual que en C, C++. Se

utiliza para devolver un valor y salir de un mtodo.


La instruccin goto se sigue utilizando en C a pesar de toda la

polmica que esto conlleva.

Una clase en C# seria como se detalla a continuacin:


class Coche
{
public Coche(string marca, string modelo, string color,
string numbastidor)
{
this.Marca=marca;
this.Modelo=modelo;
this.Color=color;
this.NumBastidor=numbastidor;
}

public double Velocidad


{
get
{
return this.velocidad;

P g i n a | 48

}
}

protected double velocidad=0;


public string Marca;
public string Modelo;
public string Color;
public string NumBastidor;

public void Acelerar(double cantidad)


{
// Aqu se le dice al motor que aumente las
revoluciones pertinentes, y...
Console.WriteLine("Incrementando la velocidad en {0}
km/h", cantidad);
this.velocidad += cantidad;
}

public void Girar(double cantidad)


{
// Aqu ira el cdigo para girar

P g i n a | 49

Console.WriteLine("Girando el coche {0} grados",


cantidad);
}

public void Frenar(double cantidad)


{
// Aqu se le dice a los frenos que acten, y...
Console.WriteLine("Reduciendo la velocidad en {0}
km/h", cantidad);
this.velocidad -= cantidad;

METAS

DEL DISEO DEL LENGUAJE

El estndar ECMA lista las siguientes metas en el diseo para C:

Lenguaje de programacin orientado a objetos simple, moderno y


de propsito general.

Inclusin de principios de ingeniera de software tales como revisin


estricta de los tipos de datos, revisin de lmites de vectores,
deteccin de intentos de usar variables no inicializadas, y
recoleccin de basura automtica.

Capacidad para desarrollar componentes de software que se puedan


usar en ambientes distribuidos.

Portabilidad del cdigo fuente

Fcil migracin del programador al nuevo lenguaje, especialmente


para programadores familiarizados con C y C++.

Soporte para internacionalizacin

P g i n a | 50

Adecuacin para escribir aplicaciones de cualquier tamao: desde


las ms grandes y sofisticadas como sistemas operativos hasta las
ms pequeas funciones.

Aplicaciones econmicas en cuanto a memoria y procesado.

COMPILADORES
En la actualidad existen los siguientes compiladores para el lenguaje
C:

Microsoft.NET framework SDK incluye un compilador de C, pero no


un IDE.

Microsoft Visual Studio, IDE por excelencia de este lenguaje, versin


2002, 2003, 2005, 2008 y 2010.

#develop, es un IDE libre para C bajo licencia LGPL, muy similar a


Microsoft Visual C#.

Mono, es una implementacin GPL de todo el entorno .NET


desarrollado por Novell. Como parte de esta implementacin se
incluye un compilador de C.

Delphi 2006, de Borland Software Corporation.

dotGNU Portable.NET, de la Free Software Foundation.

CADENAS

DE CARACTERES

El tipo de dato cadena se llama string.

Realmente la palabra clave string es un alias de la clase


System.String de la plataforma .NET.

En C las cadenas son objetos y no una matriz de caracteres, aun


as, se puede obtener un carcter arbitrario de una cadena por
medio de su ndice (mas no modificarlo).

P g i n a | 51

La forma ms comn de construir una cadena es por medio de una


literal o constante: string str = "Una cadena";

El operador == determina si dos referencias hacen referencia al


mismo objeto, pero al usar dicho operador con dos operandos tipo
string se prueba la igualdad del contenido de las cadenas y no su
referencia. Sin embargo, con el resto de los operadores relacionales,
como < o >= se comparan las referencias.

Se pueden concatenar (unir) dos cadenas mediante el operador +.

Las cadenas son inmutables, una vez creadas no se pueden


modificar, solo se pueden copiar total o parcialmente.

Las cadenas se pueden usar en las instrucciones switch.

CONCLUSIN
Como hemos ledo anteriormente en todas estas paginas, el trabajo
consisti en explicitar arduamente todo esta gran forma de programacin.
Como primera instancia detallamos sobre la base de lo que es la POO, sin
dejar de lado las definiciones fundamentales de la misma.
Describimos los principios y caractersticas bsicas de esta
programacin ya que sobre ellos se forman y se basan todos los lenguajes
orientados a objetos; lenguajes que tambin explicamos y con ellos

P g i n a | 52

concluimos que todos se basan en las mismas funciones y en la misma


interpretacin a la hora de resolver un algoritmo en computadora.
Vimos que si bien cada lenguaje tiene sus caractersticas propias,
muchos de ellos fueron influenciados por el lenguaje C y a su vez, cada
uno de los mismos lenguajes orientados a objetos, fue una influencia para
el siguiente lenguaje orientado a objetos. Todos fueron de alguna u otra
forma influenciados (para el autor, motivado) para el desarrollo de otro
lenguaje.
Los lenguajes orientados a objetos, de los cuales nosotros solo hemos
detallados solo 4, son muchos ms, solo que hemos dado prioridades e
informamos sobre los ms principales y los que ms se suelen escuchar y
relacionar al hablar de POO. De mas estara escribir sobre todos los dems
lenguajes ya que se tornara ms denso y tedioso el trabajo y asi se
perdera la finalidad con la que fue creado este trabajo.
Considero personalmente que el desarrollo de este trabajo podra
considerarlo, de una rgida forma, como una pequea base introductoria
para todo aqul lector que desee informarse y aprender sobre esta distinta
forma de pensar y encarar un problema, hasta de la vida cotidiana.

BIBLIOGRAFA CONSULTADA

1. IZQUIERDO, Luis R. Introduccion a la programacin


orientada a objetos, Mayo de 2007.
2. ARCHER, Tom. A fondo C, trad. Inside C#, Madrir, Espaa:
McGraw-Hill, 2001.
3.

Wikipedia,
extrado

art.
de

Programacin

orientada

objetos,

http://es.wikipedia.org/wiki/Programaci

%C3%B3n_orientada_a_objetos

P g i n a | 53

4.

Wikipedia,

art.

Objetos

(programacin),

extrado

de

http://es.wikipedia.org/wiki/Objetos_(programaci
%C3%B3n_orientada_a_objetos)
5. Diego Gomz, art. Smalltalk, extrado de
http://swiki.agro.uba.ar/small_land/65
6. Rodoval, art. Smalltalk extraido de
http://www.rodoval.com/paginalen.php?len=Smalltalk
7. Germn S. Arduino, art. Intrduccin Informal a Smalltalk
extraido de http://www.arsol.net/art/introst/introst.htm
8. MacProgramadores, El lenguaje Objective-C para
programadores C++ y Java

Vous aimerez peut-être aussi