You are on page 1of 7

Programacin Orientada a Objetos (POO)

Programacin Orientada a Objetos (POO)


Introduccin: Sistemas de Procesamiento de Datos
Actualmente una de las reas ms candentes en la industria y en el mbito acadmico es la orientacin a objetos. La orientacin a objetos promete mejoras de amplio alcance en la forma de diseo, desarrollo y mantenimiento del software ofreciendo una solucin a largo plazo a los problemas y preocupaciones que han existido desde el comienzo en el desarrollo de software: la falta de portabilidad del cdigo y reusabilidad, cdigo que es difcil de modificar, ciclos de desarrollo largos y tcnicas de codificacin no intuitivas. Un lenguaje orientado a objetos ataca estos problemas. Tiene tres caractersticas bsicas: debe estar basado en objetos, basado en clases y capaz de tener herencia de clases. Muchos lenguajes cumplen uno o dos de estos puntos; muchos menos cumplen los tres. La barrera ms difcil de sortear es usualmente la herencia. El concepto de programacin orientada a objetos (OOP) no es nuevo, lenguajes clsicos como SmallTalk se basan en ella. Dado que la OOP se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolucin del problema se realiza en trminos de objetos, un lenguaje se dice que est basado en objetos si soporta objetos como una caracterstica fundamental del mismo. El elemento fundamental de la OOP es, como su nombre lo indica, el objeto. Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organizacin. Esta definicin especifica varias propiedades importantes de los objetos. En primer lugar, un objeto no es un dato simple, sino que contiene en su interior cierto nmero de componentes bien estructurados. En segundo lugar, cada objeto no es un ente aislado, sino que forma parte de una organizacin jerrquica o de otro tipo.

ESTRUCTURA DE UN OBJETO
Un objeto puede considerarse como una especie de cpsula dividida en tres partes: 1 - RELACIONES 2 - PROPIEDADES 3 - METODOS Cada uno de estos componentes desempea un papel totalmente independiente: Las relaciones permiten que el objeto se inserte en la organizacin y estn formadas esencialmente por punteros a otros objetos. Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organizacin y tiene valores que dependen de la propiedad de que se trate. Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organizacin. Los mtodos son las operaciones que pueden realizarse sobre el objeto, que normalmente estarn incorporados en forma de programas (cdigo) que el objeto es capaz de ejecutar y que tambin pone a disposicin de sus descendientes a travs de la herencia. Encapsulamiento y ocultacin Como hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos y programas, todos ellos relacionados entre s, como si estuvieran encerrados conjuntamente en una cpsula. Esta propiedad (encapsulamiento), es una de las caractersticas fundamentales en la OOP. Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los programadores conozcan cmo est distribuida la informacin o qu informacin hay disponible. Esta propiedad de los objetos se denomina ocultacin de la informacin. Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene. Si as fuera no se podra hacer gran cosa con l. Lo que sucede es que las peticiones de informacin a un objeto deben realizarse a travs de mensajes dirigidos a l, con la orden de realizar la operacin pertinente. La respuesta a estas rdenes ser la informacin requerida, siempre que el objeto considere que quien enva el mensaje est autorizado para obtenerla. Profesor: Jos Luis Sifuentes Quijada Pg. # 1

Programacin Orientada a Objetos (POO)


El hecho de que cada objeto sea una cpsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organizacin, o incluso a otra organizacin totalmente diferente que precise de l. Si el objeto ha sido bien construido, sus mtodos seguirn funcionando en el nuevo entorno sin problemas. Esta cualidad hace que la OOP sea muy apta para la reutilizacin de programas. Organizacin de los objetos En principio, los objetos forman siempre una organizacin jerrquica, en el sentido de que ciertos objetos son superiores a otros de cierto modo. Existen varios tipos de jerarquas: sern simples cuando su estructura pueda ser representada por medio de un "rbol". En otros casos puede ser ms compleja. En cualquier caso, sea la estructura simple o compleja, podrn distinguirse en ella tres niveles de objetos. 9 La raz de la jerarqua. Se trata de un objeto nico y especial. Este se caracteriza por estar en el nivel ms alto de la estructura y suele recibir un nombre muy genrico, que indica su categora especial, como por ejemplo objeto madre, Raz o Entidad. Los objetos intermedios. Son aquellos que descienden directamente de la raz y que a su vez tienen descendientes. Representan conjuntos o clases de objetos, que pueden ser muy generales o muy especializados, segn la aplicacin. Normalmente reciben nombres genricos que denotan al conjunto de objetos que representan, por ejemplo, VENTANA, CUENTA, FICHERO. En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase. Los objetos terminales. Son todos aquellos que descienden de una clase o subclase y no tienen descendientes. Suelen llamarse casos particulares, instancias o tems porque representan los elementos del conjunto representado por la clase o subclase a la que pertenecen.

Veamos ahora en detalle los tres elementos mencionados en "Estructura de un Objeto".

1. RELACIONES
Las relaciones entre objetos son, precisamente, los enlaces que permiten a un objeto relacionarse con aquellos que forman parte de la misma organizacin. Las hay de dos tipos fundamentales: 9 Relaciones jerrquicas. Son esenciales para la existencia misma de la aplicacin porque la construyen. Son bidireccionales, es decir, un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organizacin en la que ambos forman parte; asimismo, si un objeto es padre de otro, el segundo es hijo del primero. Una organizacin jerrquica simple puede definirse como aquella en la que un objeto puede tener un solo padre, mientras que en una organizacin jerrquica compleja un hijo puede tener varios padres). 9 Relaciones semnticas. Se refieren a las relaciones que no tienen nada que ver con la organizacin de la que forman parte los objetos que las establecen. Sus propiedades y consecuencia solo dependen de los objetos en s mismos (de su significado) y no de su posicin en la organizacin. Se puede ver mejor con un ejemplo: supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definicin de una palabra cualquiera. Supongamos que, en dicho diccionario, las palabras son objetos y que la organizacin jerrquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo. La raz del diccionario podra llamarse TEMAS. De ste trmino genrico descendern tres grandes ramas de objetos llamadas VIDA, MUNDO y HOMBRE. El primero (vida) comprender las ciencias biolgicas: Biologa y Medicina. El segundo (mundo), las ciencias de la naturaleza inerte: las Matemticas, la Fsica, la Qumica y la Geologa. El tercero (hombre) comprender las ciencias humanas: la Geografa, la Historia, etc. Veamos un ejemplo: estableceremos la relacin trabajo entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabaj en ptica (vase la fig. 4). La relacin es, evidentemente, semntica, pues no establece ninguna connotacin jerrquica entre NEWTON y OPTICA y su interpretacin depende exclusivamente del significado de ambos objetos. La existencia de esta relacin nos permitir responder a preguntas como:

Profesor: Jos Luis Sifuentes Quijada

Pg. # 2

Programacin Orientada a Objetos (POO)


Quin trabaj en ptica? En qu trabaj Newton? Quien trabaj en Fsica? Las dos primeras se deducen inmediatamente de la existencia de la relacin trabajo. Para la tercera observamos que si Newton trabaj en ptica automticamente sabemos que trabaj en Fsica, por ser ptica una rama de la Fsica (en nuestro diccionario, el objeto OPTICA es hijo del objeto FISICA). Entonces gracias a la OOP podemos responder a la tercera pregunta sin necesidad de establecer una relacin entre NEWTON y FISICA, apoyndonos slo en la relacin definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA. De este modo se elimina toda redundancia innecesaria y la cantidad de informacin que tendremos que definir para todo el diccionario ser mnima.

2. PROPIEDADES
Todo objeto puede tener cierto nmero de propiedades, cada una de las cuales tendr, a su vez, uno o varios valores. En OOP, las propiedades corresponden a las clsicas "variables" de la programacin estructurada. Son, por lo tanto, datos encapsulados dentro del objeto, junto con los mtodos (programas) y las relaciones (punteros a otros objetos). Las propiedades de un objeto pueden tener un valor nico o pueden contener un conjunto de valores ms o menos estructurados (matrices, vectores, listas, etc.). Adems, los valores pueden ser de cualquier tipo (numrico, alfabtico, etc.) si el sistema de programacin lo permite. Pero existe una diferencia con las "variables", y es que las propiedades se pueden heredar de unos objetos a otros. En consecuencia, un objeto puede tener una propiedad de maneras diferentes: 9 9 Propiedades propias. Estn formadas dentro de la cpsula del objeto. Propiedades heredadas. Estn definidas en un objeto diferente, antepasado de ste (padre,"abuelo", etc.). A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase.

3. METODOS
Una operacin que realiza acceso a los datos. Podemos definir mtodo como un programa procedimental o procedural escrito en cualquier lenguaje, que est asociado a un objeto determinado y cuya ejecucin slo puede desencadenarse a travs de un mensaje recibido por ste o por sus descendientes. Son sinnimos de 'mtodo' todos aquellos trminos que se han aplicado tradicionalmente a los programas, como procedimiento, funcin, rutina, etc. Sin embargo, es conveniente utilizar el trmino 'mtodo' para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP, que afectan fundamentalmente a la forma de invocarlo (nicamente a travs de un mensaje) y a su campo de accin, limitado a un objeto y a sus descendientes, aunque posiblemente no a todos. Si los mtodos son programas, se deduce que podran tener argumentos, o parmetros. Puesto que los mtodos pueden heredarse de unos objetos a otros, un objeto puede disponer de un mtodo de dos maneras diferentes: 9 9 Mtodos propios. Estn incluidos dentro de la cpsula del objeto. Mtodos heredados. Estn definidos en un objeto diferente, antepasado de ste (padre,"abuelo", etc.). A veces estos mtodos se llaman mtodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase.

Polimorfsmo Una de las caractersticas fundamentales de la OOP es el polimorfismo, que no es otra cosa que la posibilidad de construir varios mtodos con el mismo nombre, pero con relacin a la clase a la que pertenece cada uno, con comportamientos diferentes. 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) Demonios Es un tipo especial de mtodos, relativamente poco frecuente en los sistemas de OOP, que se activa automticamente cuando sucede algo especial. Es decir, es un programa, como los mtodos ordinarios, Profesor: Jos Luis Sifuentes Quijada Pg. # 3

Programacin Orientada a Objetos (POO)


pero se diferencia de estos porque su ejecucin no se activa con un mensaje, sino que se desencadena automticamente cuando ocurre un suceso determinado: la asignacin de un valor a una propiedad de un objeto, la lectura de un valor determinado, etc. Los demonios, cuando existen, se diferencian de otros mtodos por que no son heredables y porque a veces estn ligados a una de las propiedades de un objeto, mas que al objeto entero.

CONSIDERACIONES FINALES
Beneficios que se obtienen del desarrollo con OOP Da a da los costos del Hardware decrecen. As surgen nuevas reas de aplicacin cotidianamente: procesamiento de imgenes y sonido, bases de datos multimediales, automatizacin de oficinas, ambientes de ingeniera de software, etc. An en las aplicaciones tradicionales encontramos que definir interfases hombre-mquina "a-la-Windows" suele ser bastante conveniente. Lamentablemente, los costos de produccin de software siguen aumentando; el mantenimiento y la modificacin de sistemas complejos suele ser una tarea trabajosa; cada aplicacin, (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo, etc. Todos estos problemas an no han sido solucionados en forma completa. Pero como los objetos son portables (tericamente) mientras que la herencia permite la reusabilidad del cdigo orientado a objetos, es ms sencillo modificar cdigo existente porque los objetos no interaccionan excepto a travs de mensajes; en consecuencia un cambio en la codificacin de un objeto no afectar la operacin con otro objeto siempre que los mtodos respectivos permanezcan intactos. La introduccin de tecnologa de objetos como una herramienta conceptual para analizar, disear e implementar aplicaciones permite obtener aplicaciones ms modificables, fcilmente extensibles y a partir de componentes reusables. Esta reusabilidad del cdigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en trminos de objetos ms que en trminos de algoritmos de software. Problemas derivados de la utilizacin de OOP en la actualidad Un sistema orientado a objetos, por lo visto, puede parecer un paraso virtual. El problema sin embargo surge en la implementacin de tal sistema. Muchas compaas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales. Especficamente los siguientes temas suelen aparecer repetidamente: Curvas de aprendizaje largas. Un sistema orientado a objetos ve al mundo en una forma nica. Involucra la conceptualizacin de todos los elementos de un programa, desde subsistemas a los datos, en la forma de objetos. Toda la comunicacin entre los objetos debe realizarse en la forma de mensajes. Esta no es la forma en que estn escritos los programas orientados a objetos actualmente; al hacer la transicin a un sistema orientado a objetos la mayora de los programadores deben capacitarse nuevamente antes de poder usarlo. Dependencia del lenguaje. A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos, en la prctica existen muchas dependencias. Muchos lenguajes orientados a objetos estn compitiendo actualmente para dominar el mercado. Cambiar el lenguaje de implementacin de un sistema orientado a objetos no es una tarea sencilla; por ejemplo C++ soporta el concepto de herencia mltiple mientras que SmallTalk no lo soporta; en consecuencia la eleccin de un lenguaje tiene ramificaciones de diseo muy importantes. Determinacin de las clases. Una clase es un molde que se utiliza para crear nuevos objetos. En consecuencia es importante crear el conjunto de clases adecuado para un proyecto. Desafortunadamente la definicin de las clases es ms un arte que una ciencia. Si bien hay muchas jerarquas de clase predefinidas usualmente se deben crear clases especficas para la aplicacin que se este desarrollando. Luego, en 6 meses 1 ao se da cuenta que las clases que se establecieron no son posibles; en ese caso ser necesario reestructurar la jerarqua de clases devastando totalmente la planificacin original. Performance. En un sistema donde todo es un objeto y toda interaccin es a travs de mensajes, el trfico de mensajes afecta la performance. A medida que la tecnologa avanza y la velocidad de microprocesamiento, potencia y tamao de la memoria aumentan, la situacin mejorar; pero en la situacin actual, un diseo de una aplicacin orientada a objetos que no tiene en cuenta la performance no ser viable comercialmente. Profesor: Jos Luis Sifuentes Quijada Pg. # 4

Programacin Orientada a Objetos (POO)


Idealmente, habra una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos. Debera existir una metodologa fcil de aprender e independiente del lenguaje, y fcil de reestructurar que no drene la performance del sistema. Bibliografa consultada Revista COMPU MAGAZINE, Nmero 51, Octubre '92 Revista COMPU MAGAZINE, Nmero 50, Septiembre '92

Programacin Orientada a Objetos (POO)


Entrando en el tema
La programacin Orientada a objetos (POO) es una forma especial de programar, ms cercana a como expresaramos las cosas en la vida real que otros tipos de programacin. Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en trminos de objetos, propiedades, mtodos y otras cosas que veremos rpidamente para aclarar conceptos y dar una pequea base que permita soltarnos un poco con este tipo de programacin.

Motivacin
Durante aos, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvan una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se cre la POO. Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el cdigo se pueda reutilizar. 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. Programar bien es importante porque as nos podemos aprovechar de todas las ventajas de la POO.

Cmo se piensa en objetos


Pensar en trminos de objetos es muy parecido a cmo lo haramos en la vida real. Por ejemplo vamos a pensar en un automvil para tratar de modelizarlo en un esquema de POO. Diramos que el automvil es el elemento principal que tiene una serie de caractersticas, como podran ser el color, el modelo o la marca. Adems tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o estacionar. Pues en un esquema POO el automvil sera el objeto, las propiedades seran las caractersticas como el color o el modelo y los mtodos seran las funcionalidades asociadas como ponerse en marcha o parar. Por poner otro ejemplo vamos a ver cmo modelizaramos en un esquema POO una fraccin, es decir, esa estructura matemtica que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2. La fraccin ser el objeto y tendr dos propiedades, el numerador y el denominador. Luego podra tener varios mtodos como simplificarse, sumarse con otra fraccin o nmero, restarse con otra fraccin, etc. Estos objetos se podrn utilizar en los programas, por ejemplo en un programa de matemticas hars uso de objetos fraccin y en un programa que gestione un taller de automviles utilizars objetos automvil. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos tambin son objetos. Es decir, el taller de automvil ser un objeto que utilizar objetos automvil, herramienta, mecnico, recambios, etc.

Clases en POO
Las clases son declaraciones de objetos, tambin se podran definir como abstracciones de objetos. Esto quiere decir que la definicin de un objeto es la clase. Cuando programamos un objeto y definimos sus caractersticas y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los Profesor: Jos Luis Sifuentes Quijada Pg. # 5

Programacin Orientada a Objetos (POO)


ejemplos anteriores en realidad hablbamos de las clases automvil o fraccin porque slo estuvimos definiendo, aunque por encima, sus formas.

Propiedades en clases
Las propiedades o atributos son las caractersticas de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo as como variables donde almacenamos datos relacionados con los objetos.

Mtodos en las clases


Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos mtodos. Los mtodos son como funciones que estn asociadas a un objeto.

Objetos en POO
Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crear. Esta accin de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccin de la palabra instace que en ingls significa ejemplar). Por ejemplo, un objeto de la clase fraccin es por ejemplo 3/5. El concepto o definicin de fraccin sera la clase, pero cuando ya estamos hablando de una fraccin en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto. Para crear un objeto se tiene que escribir una instruccin especial que puede ser distinta dependiendo el lenguaje de programacin que se emplee, pero ser algo parecido a esto. miAutomvil = new Automvil() Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacin. Dentro de los parntesis podramos colocar parmetros con los que inicializar el objeto de la clase coche.

Estados en objetos
Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la propiedad color tomar un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto de una 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. miAutomvil.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.

Mensajes en objetos
Un mensaje en un objeto es la accin de efectuar una llamada a un mtodo. Por ejemplo, cuando le decimos a un objeto coche que se ponga en marcha estamos pasndole el mensaje ponte en marcha. Para mandar mensajes a los objetos utilizamos el operador punto, seguido del mtodo que deseamos invocar. miAutomvil.ponerseEnMarcha() En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar parntesis igual que cualquier llamada a una funcin, dentro iran los parmetros.

Otras cosas
Hay mucho todava que conocer de la POO ya que slo hemos hecho referencia a las cosas ms bsicas. Tambin existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades ms potentes de la POO. 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. Profesor: Jos Luis Sifuentes Quijada Pg. # 6

Programacin Orientada a Objetos (POO)


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. Son conceptos avanzados que cuesta explicar en las lneas de ese informe. No hay que olvidar que existen libros enteros dedicados a la POO y aqu solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengis que poneros delante de ellas en los lenguajes de programacin que debe conocer un desarrollador del web.

Profesor: Jos Luis Sifuentes Quijada

Pg. # 7

You might also like