26
PROGRAMACIÓN ORIENTADA A OBJETOS A partir de la década 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 también se derivó de la contradicción entre el reciente desarrollo del hardware y su aprovechamiento a través del software, esto es, que se dedicó poco esfuerzo al desarrollo de metodologías para la creación 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 programación. Modularidad y organización 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 erróneos. Altos costos y tiempo de desarrollo muy largos. 1. El análisis era deficiente, lo cual derivaba cambios y adaptaciones. 2. Problemas de comunicación entre los diferentes módulos al momento de la unión. Sistemas poco flexibles y confiables. 1. Esto ocurre cuando el sistema no cubre las necesidades del usuario final. 2. No proporciona la información que el usuario requiere. 3. Información no confiable.

Programación Orientada a Objetos

Embed Size (px)

DESCRIPTION

programacion orientada a objetos

Citation preview

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 PaloAlto 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

EncapsulamientoHerencia Simple Mltiple

Comunicacin con mensajes

Polimorfismo

Manejo automtico de memoria Constructores Destructores

Mtodos virtuales

Sobreposicin de operadoresAntes 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 manipulacinde 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 /* *************** clase posicion ******************* */class posicion{private:int X,Y;public: // caracteristica de lenguaje hibridovoid iniciar (int iniciarX, int iniciarY){X = iniciarX;Y = iniciarY;};int leerX();int leerY();virtual void mensaje(){ cout