Sie sind auf Seite 1von 20

PROGRAMACIN ORIENTADA A OBJETOS

A partir de la dcada de los 70 se origin la llamada Crisis del Software debido


a una serie de problemas encontrados en el desarrollo de sistemas para
computadoras. La crisis tambin se deriv de la contradiccin entre el reciente
desarrollo del hardware y su aprovechamiento a travs del software, esto es,
que se dedic poco esfuerzo al desarrollo de metodologas para la creacin del
software, creando un atraso de entre una y dos generaciones entre los
microprocesadores y el software que los manipula.
Las a estos problemas fueron entre otras:
Programaciones estructuradas en los lenguajes de programacin.
Modularidad y organizacin de bibliotecas.
Estas mejoras no fueron suficientes para resolver el problema ya que no se
consider:
Recursos humanos para el mantenimiento consistente en adaptar el
software a nuevos requerimiento imposibles de haber sido planificados
inicialmente.
Errores del software, esto es, resultados errneos.
Altos costos y tiempo de desarrollo muy largos.
1. El anlisis era deficiente, lo cual derivaba cambios y adaptaciones.
2. Problemas de comunicacin entre los diferentes mdulos al momento
de la unin.
Sistemas poco flexibles y confiables.
1. Esto ocurre cuando el sistema no cubre las necesidades del usuario
final.
2. No proporciona la informacin que el usuario requiere.
3. Informacin no confiable.
4. sistema difcil de manipular.
Ante tantos problemas, los especialistas en software llegaron a la conclusin de
que en cualquier tcnica que trate de resolver los problemas anteriores, el
desarrollo de sistemas deber contemplar las siguientes caractersticas:
Entender el problema y dominarlo.
Comunicacin entre personas.
Prever cambios continuos.
Reutilizar el cdigo.

Historia de la Programacin Orientada a Objetos (POO).


Al mismo tiempo que se da la Crisis del Software, por otro lado la Orientacin a
Objetos (OO) se empez a discutir a fines de los aos 60 con el desarrollo del
lenguaje SIMULA67 por Nygaard y Ole-Johan Dahl en el Centro de Clculo
Noruego, en l, introdujeron los conceptos de clase, subclases y rutinas, muy
parecidos los conceptos a los lenguajes orientados a objetos de hoy en da. A
mitad de la dcada de los 70 los cientficos del Centro de Investigaciones Palo
Alto de XEROX (PARC) (XEROX Palo Alto Research Center) crearon el
lenguaje SMALLTALK, el primer lenguaje orientado a objetos consistente y
completo. En l cada elemento del lenguaje fue realizado un objeto. Este ltimo
lenguaje evolucion a travs de varios lanzamientos realizados por PARC.
A pesar de este movimiento temprano hacia los lenguajes orientados a objetos,
slo se lograron pequeas incursiones en la comunidad de la programacin
general. El progreso reciente se ha acelerado debido principalmente a la
disponibilidad de las extensiones orientadas a objetos para dos lenguajes
populares:
C y PASCAL, y a las extensiones prometidas para otros lenguajes comerciales
populares como BASIC y COBOL.
Paradigma de la Programacin Orientada a Objetos.
Para aquel que no es un programador, Orientacin a Objetos significa algo
bastante familiar: considerar al mundo como un conjunto de entidades u objetos
que estn relacionados y se comunican entre ellos.
Esta es la forma en que la gente normal ve el mundo, as es que este
pensamiento tiene intrnsecamente sentido.
La Orientacin a Objetos se basa en estas ideas: un programa es un mundo
que representa un subconjunto del mundo real. La estructura del programa se
simplifica en gran medida si cada una de las entidades u objetos del problema
que se est modelando corresponde directamente con un objeto que se puede
manipular internamente en un programa.
Para el desarrollo de sistemas, la orientacin a objetos es un nivel de
abstraccin de computadora ms all de los procedimientos y los datos. La
orientacin a objetos anima al desarrollador de sistemas a concentrarse en los
temas importantes e ignorar el resto a la hora de la modelacin.

El hecho de que el tema central sean los objetos, aunque intuitivamente, marca
una desviacin significativa de los anteriores paradigmas de la programacin.
Una ecuacin para reconocer una aproximacin a la Orientacin a Objetos es:
ORIENTACIN_OBJETOS = CLASES Y OBJETOS + HERENCIA + COMUNICACIN CON MENSAJES

Todos los sistemas que merecen la descripcin de Orientado a Objetos


contienen estos mecanismos esenciales, aunque los mecanismos pueden no
estar realizados exactamente de la misma forma. Analicemos ahora los
trminos de la ecuacin.
OBJETOS (Sinnimo de instancia). Es la abstraccin de alguna cosa en el
dominio del problema que refleja la capacidad de un sistema de alcanzar
informacin alrededor de l. Los objetos, por lo tanto, son entidades que tienen
atributos (datos) y formas de comportamiento (procedimientos) particulares. Las
aplicaciones pueden constar de diferentes clases de objetos. Un objeto pasivo
es el que acta solamente bajo peticin. Los objetos activos efectan el
seguimiento de los sucesos que ocurren en una aplicacin y actan de forma
autnoma.
CLASE. Una clase es una descripcin de un conjunto de objetos casi idnticos.
Una clase consta de mtodos y datos que resumen las caractersticas comunes
de los objetos, incluyendo una descripcin de cmo crear un nuevo objeto de la
clase. En otras palabras, las clases contienen los anteproyectos para crear
objetos.
Redefiniendo un objeto. Un objeto es un modelo o instancia de una clase.
Ejemplos de estos conceptos (utilizaremos un lenguaje ms fcil de entender
para definirlos):
Una clase es un molde que define los datos y procedimientos que actan sobre
esos datos y los objetos sern los elementos producidos por ese molde.

Ejemplo 1
Consideremos cmo un programador podra designar una aplicacin de
procesamiento de una posicin en el espacio en forma orientada a objetos.
Clase

Posicin

Los objetos seran Punto A, Punto B donde tanto Punto A como Punto B tienen
las caractersticas de posicin.
Ejemplo 2:
Veamos ahora cmo sera la aplicacin con el sistema de los nmeros
complejos en forma orientada a objetos.
Clase

Complejos

Algunos objetos son p y q que por ser nmeros complejos son de la forma (real,
imaginaria).
Descripcin del trmino herencia
La herencia es un mecanismo para expresar similaridad entre clases,
simplificando definiciones de las clases similares previamente definidas. La
herencia permite crear nuevas clases llamadas subclases agregando solamente
las diferencias con la clase. En otras palabras la herencia es una particin en
subclases ms especializadas.

El principio en que se basa este concepto es de que las clases que se derivan
de otra clase, comparten las caractersticas comunes de la clase de la que
descienden.
Ejemplo 1:

Ejemplo 2:
Para este ejemplo usaremos la clase publicacin.

Descripcin del trmino comunicacin con mensajes.


Los objetos tienen la posibilidad de actuar, la accin sucede cuando un objeto
recibe un mensaje, que es, una solicitud que pide al objeto que se comporte de
alguna forma. Cuando se ejecutan los programas orientados a objetos, los
objetos reciben, interpretan y responden a mensajes procedentes de otros
objetos. Los mensajes pueden contener informacin para clasificar una
solicitud. El objeto emisor del mensaje no necesita conocer la forma en que el
objeto receptor est llevando a cabo la solicitud, solamente conoce que se est
sucediendo.
Los procedimientos residen en el objeto y determinan cmo acta el objeto
cuando recibe un mensaje. De hecho, los mtodos proporcionan el nico
mecanismo para cambiar los valores de las variables del objeto. (A este hecho
se le conoce como encapsulamiento).
Los mensajes que reciben el objeto son los nicos conductos que conectan al
objeto con el mundo exterior. Estas caractersticas de los objetos confieren a la
orientacin a objetos su ventaja: la orientacin a objetos fomenta la
modularidad haciendo muy claras las fronteras entre objetos, explcita la
comunicacin entre los mismo y oculta los detalles de la realizacin.
En un programa con orientacin a objetos ocurren tres sucesos:
1) Se crean los objetos cuando se necesitan.
2) Los mensajes se mueven de un objeto a otro a medida que el programa
procesa internamente informacin o responde a la entrada de los
usuarios.
3) Se borran los objetos cuando ya no son necesarios y se recupera
memoria.

Caractersticas deseadas de la Programacin Orientada a Objetos


Las caractersticas deseadas pueden variar y es difcil ponerse de acuerdo.
Principio de Abstraccin
Datos
Procedimientos
Encapsulamiento
Herencia
Simple
Mltiple
Comunicacin con mensajes
Polimorfismo
Manejo automtico de memoria
Constructores
Destructores
Mtodos virtuales
Sobreposicin de operadores

Antes de ver cada uno de estos conceptos es importante mencionar que los
ejemplos de los mismos se darn con seudo cdigo, por lo que daremos una
idea de este concepto.
El seudo cdigo se utiliza como una herramienta para estructurar el cdigo de
un programa sin comprometerse con ningn lenguaje, pero que es posible que
tenga alguna semejanza con el lenguaje a utilizar.
En el seudo cdigo se utilizan palabras en nuestro lenguaje que son similares a
las palabras utilizadas por los lenguajes de programacin. En realidad el seudo
cdigo es muy similar a un algoritmo pero ms estructurado, ya que se le deben
de dar sangras a la escritura de las instrucciones para hacerlo ms legible en
la lectura. Iniciamos:
Principio de abstraccin
Es el principio de ignorar los aspectos de un sujeto que no son relevantes en
un propsito de orden de concentracin ms exacto.
El proceso de representar entidades reales como elementos internos a un
programa recibe el nombre de abstraccin.
De esta forma, un tipo de dato abstracto se puede escribir concentrndose en
las operaciones que manipulan a los objetos de este tipo, sin caer en detalles
de representacin y manipulacin
de datos.
Datos. Es un atributo del objeto que representa cuantitativamente o
cualitativamente a ese objeto.
Procedimiento. Es una operacin que lleva a cabo un servicio a los
atributos del objeto.

Ejemplo 1:
En el ejemplo de la posicin en el espacio se quiere representar en objetos,
queremos abstraer esta parte del mundo real a un programa que pueda
representarlos. Una posicin en el plano la determinan las coordenadas (x, y),
que seran nuestros datos y los procedimientos que las manipulen pueden ser:
Iniciar posicin
Leer x
Leer y
Saluda

Ejemplo 2:
En el ejemplo de los nmeros complejos se tiene que stos son de la forma
(real, imaginaria), donde real e imaginaria son nmeros reales, de lo que
podemos intuir que los datos sean:
real e imaginaria
Los atributos que manipulan estos datos pueden ser todos los operadores
aritmticos (+, -, *, /) y los operadores de relacin ( =, < > ).
Encapsulamiento (ocultamiento de datos). Se refiere al hecho de que ningn
programador ni de ninguna otra parte de un programa se pueda tener acceso a
los datos de un objeto en forma directa, sino a travs de los procedimientos del
objeto.
Ejemplo 1:
En este ejemplo para leer cualquiera de las coordenadas no se puede
directamente slo leyendo por separado las coordenadas con los
procedimientos de lectura.
Ejemplo 2:
En el ejemplo de los nmeros complejos cada nmero complejo no se puede
modificar a menos que sea con los operadores.
Herencia. La herencia es un mecanismo que para expresar similaridad entre
clases, simplificando definiciones de clases similares previamente detenidas.
La herencia simple es cuando el lenguaje slo permite que una clase derive
de una clase.
La herencia mltiple es cuando una clase puede ser derivada de ms de una
clase.
Ejemplo 1. Herencia simple:

Ejemplo 2. Herencia mltiple (multimedia):

Comunicacin con mensajes. Las variables de un objeto slo pueden ser


manipuladas por sus propios mtodos. Es decir, los mensajes mandan una
peticin de accin a un objeto, mientras que los mtodos del objeto deciden
cmo llevar a cabo la accin.
Ejemplo: En la definicin de posicin consta de los datos, coordenadas X e Y y
los mtodos que inician y devuelven los valores X y Y.
Procedimiento leer X
Regresa valor de X
Polimorfismo
Es cuando una clase tiene varios procedimientos con el mismo nombre, pero
con distinto tipo y/o nmero de argumentos.
Ejemplo 1:
Se puede tener ms de un procedimiento saluda en la clase posicin.
a) Se puede tener un procedimiento
Procedimiento Saluda escribe "Hola soy posicin";
b) Se puede tener un procedimiento
Procedimiento Saluda (mensaje) escribe mensaje;

Manejo Automtico de Memoria. En el apartado de comunicacin con


mensajes se menciona que en un programa con orientacin a objetos ocurren
tres sucesos, dos de ellos nos interesan. El primer suceso dice: "Se crean los
objetos cuando se necesitan." y el tercer suceso indica: "Se borran los objetos
cuando ya no son necesarios y se recupera la memoria.". Estos sucesos se
desarrollan con los constructores y destructores.
Constructores
Los constructores son procedimientos de la clase que permiten crear objetos.
Un constructor es llamado para asignar memoria a un objeto, para asignar
valores a los datos del objeto y realizar tareas iniciales para un nuevo objeto.
Esto implique que si no podemos trabajar con un objeto que no haya sido
creado a travs de un constructor y si slo se pueden modificar mediante los
procedimientos de la clase NO TENEMOS FORMA DE CORROMPER EL
OBJETO, lo cual aumenta la confiabilidad y facilita la reusabilidad.
Destructores
Un destructor es un procedimiento de la clase que realiza la tarea opuesta a su
constructor, libera la memoria que fue asignada al objeto que fue creado por el
constructor. Es deseable que el destructor se invoque implcitamente cuando el
objeto abandone el bloque donde fue declarado. El destructor le permite al
programador despreocuparse de tener que liberar la memoria que deja de
utilizar y correr el riesgo de que sta se sature.
Ejemplos:
Normalmente en los lenguajes con orientacin a objetos el destructor como el
constructor tiene el mismo nombre de la clase a la que pertenece.
Ejemplo 1:
Constructor iniciar (real 1, real 2)
x = real 1
y = real 2
Destructor iniciar
borra x
borra y

Mtodos Virtuales. Una jerarqua de clases unidas por la herencia, con


nombres de mtodos comunes para operaciones que son similares
conceptualmente, pero que realizan tareas diferentes. Como consecuencia,
cuando diferentes objetos de las diferentes clases de la jerarqua reciben el
mismo mensaje, ste provoca acciones totalmente distintas.
Ejemplo:
En el ejemplo 1, Posicin, Punto y Crculo pueden recibir cada uno el mensaje
saluda y responder de distinta forma, los procedimientos seran:
a) posicin saluda
"Hola, soy posicin";
b) punto saluda
"Hola, soy punto";
c) crculo saluda
"Hola, soy crculo"
Se puede hacer algo ms complejo como hacer procedimientos que mostrar el
punto o mostrar el crculo.
Sobreposicin de Operadores. Es una caracterstica de un lenguaje de
programacin que permite que el mismo operador sea utilizado con tipos
diferentes. Dicho de otra forma, si se tiene una aritmtica definida con ciertos
operadores, sera deseable que permita utilizar la misma notacin para los
nuevos tipos de operadores que se definan.
Ejemplo:
En el ejemplo 2 de nmeros complejos se tienen los operadores aritmticos un
ejemplo de sobrecarga de operadores sera:
Complejos operador + (complejo, complejo)

Complejos operador *(complejo, complejo)

Lenguajes de Programacin Orientada a Objetos


Para explotar el paradigma de la orientacin a objetos se necesitan lenguajes
idneos. Existen dos tipos diferentes de lenguajes de Programacin Orientada
a Objetos: Puros e Hbridos.
Los lenguajes puros son aquellos en los que casi todo es un objeto, es decir,
tienen las propiedades especficas de la programacin orientada a objetos.
Entre ellos se tienen SIMULA (basado en ALGOL), SMALLTALK y SMALLTALK
V (que es el ms difundido), ACTOR y EIFFEL.
Los lenguajes hbridos son los lenguajes que aaden a las propiedades
tradicionales estructuradas, caractersticas orientadas a objetos.
Representantes de este grupo son C++ descendiente de C, TURBO PASCAL.
Caractersticas de algunos lenguajes
SMALLTALK
Es el primer lenguaje con orientacin a objetos. Descendiente de SIMULA-67
fue desarrollado por XEROX5 es el lenguaje puro de POO por excelencia. El
entorno SMALLTALK est disponible en muchas plataformas, entre ellas DOS,
OS/2 y WINDOWS.
TURBO / QUICK / OBJECTIVE-PASCAL
Borland International y Microsoft simultneamente lanzaron versiones
orientadas a objetos de PASCAL. Borland utiliz la filosofa de C++ y Microsoft
la filosofa de SMALLTALK en sus versiones. Sin embargo, Borland ha
evolucionado su producto con versiones 5.5 / 6.0 y 7.0 incluyendo una
biblioteca de clases llamada Turbo Visin est disponible en DOS, WINDOWS y
OS/2.
C++
C++ es el hbrido ms popular, existen versiones para las plataformas: DOS,
OS/2, WINDOWS, UNIX, XENIX, etc. y muchos fabricantes, como AT&T,
Borland, etc. Es descendiente de C ANSI.

Ejemplos con C++


Ejemplo 1:
Figuras geomtricas
#include <iostream.h>
/* *************** clase posicion ******************* */
class posicion
{
private:
int X,Y;
public: // caracteristica de lenguaje hibrido
void iniciar (int iniciarX, int iniciarY)
{
X = iniciarX;
Y = iniciarY;
};
int leerX();
int leerY();
virtual void mensaje(){ cout << "Hola estoy en posicion\n";};
}; // fin posicin
int posicion::leerY()
{
return Y;
}
int posicion::leerX()
{
return X;
}
/* *************** clase punto ********************** */
class punto : public posicion
{
int visible;
public:
virtual void mostrar();
virtual void ocultar();
int EsVisible();
virtual void saluda(){ cout << " Hola soy un punto\n";};
}; // fin punto
void punto::mostrar()

{
visible = 1;
};
void punto::ocultar()
{
visible = 0;
};
int punto::EsVisible()
{
return visible;
}
/* *************** clase circulo ********************** */
class circulo : public punto
{
int radio;
public:
void iniciar (int iniciarX, int iniciarY, int IniciaRadio)
{
punto::iniciar(iniciarX, iniciarY);
radio = IniciaRadio;
};
void expandir(int ExpandirPor);
void comprimir(int ComprimirPor);
virtual void saluda(){ cout << " Hola soy un circulo\n";};
};
void circulo::expandir(int ExpandirPor)
{
radio = radio + ExpandirPor;
};
void circulo::comprimir(int ComprimirPor)
{
radio = radio - ComprimirPor;
}
/* *************** fin clase circulo ********************** */
void main (void)
{
int Z;
circulo posicionA;
posicionA.iniciar(16,3,35);
posicionA.ocultar();
if (posicionA.EsVisible())

{
Z = posicionA.leerX();
cout << "\n valor visible de X " << Z;
posicionA.saluda();
}
else
cout << "\n valor X no visible " ;
}
Ejemplo 2:
Sistema de los nmeros complejos
#include <iostream.h>
class complex
{
private:
double r,i;
public:
void create (double, double); // crea un objeto tipo complejo
complex (double, double); // constructor crea un complejo
complex operator +( complex ); // sobrecarga de operadores
// polimorfismo
void suma(complex);
complex suma(complex, complex);
complex operator *(complex ); // sobrecarga de operadores
// polimorfismo
void producto(complex);
complex producto(complex,complex);
complex operator =(complex ); // sobrecarga de operadores
/* complex operator -(complex );
complex operator /(complex ); */
double real(void);
double imag(void);
void escritura(void);
}; // fin complex
void complex::create (double re= 0, double im= 0)
{
r= re;
i= im;
}

void complex::complex (double re= 0, double im= 0) // constructor


{
r= re;
i= im;
}
complex complex::operator +(complex a) // sobrecarga de operadores
{
complex t;
t.create (a.r + r, a.i+i);
return t;
}
complex complex::suma (complex a, complex b) // suma de dos complejos
{
complex t;
t.create (a.r + b.r, a.i+b.i);
return t;
}
void complex::suma (complex a) // suma de 2 complejos
{
r+= a.r;
i+= a.i;
}
complex complex::producto (complex a, complex b)
{
complex t;
t.create (a.r * b.r - b.i * a.i , a.i * b.r + a.r * b.i);
return t;
}
void complex::producto (complex a)
{
r = a.r * a.r - a.i * a.i;
i = 2 * a.i * a.r;
}
complex complex::operator *(complex a)
{
complex t;
r = a.r * a.r - a.i * a.i;
i = 2 * a.i * a.r;
t.create(r,i);
return t;
}

complex complex::operator =(complex a)


{
r = a.r;
i = a.i;
return *this;
}
double complex::real (void)
{
return r;
}
double complex::imag (void)
{
return i;
}
void complex::escritura(void)
{
cout << " ( " << r << " , " << i << " )" << "\n";
}
void main (void)
{
complex z1, z2,z3;
z1.create (2.0,3.0);
z2.create (1.0,4.0);
z3 = z3.suma(z1,z2);
// z3.suma(z3);
z3 = z1 + z2;
z3.escritura();
// cout << z3.real() << endl;
// cout << z3.imag() << endl;
z3 = z3.producto(z1,z2);
z3.escritura();
// z2.producto(z2);
// z2.escritura();
}

Comparacin del paradigma de la Programacin Orientada a Objetos


contra otros paradigmas.
El paradigma de la programacin orientada a objetos difiere de las tradiciones
histricas de la programacin
procedimental. La programacin procedimental se centra en los datos y
procedimientos sin limitaciones
acerca de los procedimientos que pueden actuar sobre dichos datos.

paradigmas tradicionales
En el paradigma de la orientacin a objetos los programas son conjuntos de
una nica entidad bsica, el objeto, el cual combina los datos con los
procedimientos que actan sobre ellos, adems los objetos reciben las
peticiones e interactan enviando mensajes a cada uno de los dems.

Paradigma de la orientacin a objetos


Con el paradigma procedimental es ms difcil modelar el mundo real
Con el paradigma orientado a objetos se beneficia al desarrollo del software
proporcionando una forma natural de modelar el fenmeno del complejo mundo
real. Esto es, ofrece realmente un modelo ms natural del mundo real.
Las caractersticas comunes entre dos entes quedan explcitas en la
Programacin Orientada a Objetos mientras que en la Programacin tradicional
no es as.
Los lenguajes orientados a objetos benefician el desarrollo de software
modular, esto quiere decir que el programador no necesita examinar todo el
cdigo para ver si los cambios locales causarn problemas en cualquier otra
parte del sistema. Por el contrario, con los lenguajes tradicionales, siempre
existe la posibilidad de que una actualizacin de una subrutina o elemento de
datos afecte a alguna rutina que se halle fsicamente muy alejada de la
actualizacin.
El apartado anterior implica que se facilita la reutilizacin del cdigo creando
una biblioteca de clases que estn perfectamente probadas.
La herencia, que no tienen los lenguajes tradicionales, es una de las
caractersticas ms importantes y ms potentes de la programacin orientada a
objetos, le permite a los programadores crear nuevas clases programando
solamente las diferencias con las clases "padres".
El encapsulamiento facilita la comunicacin entre programadores.
Se han hecho pruebas y se ve que un programa escrito con orientacin a
objetos no es muy ms grande ni lento que uno similar usando programacin
tradicional.

Das könnte Ihnen auch gefallen