Sunteți pe pagina 1din 29

Sistemas de Procesamiento de Datos

INTRODUCCION 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 dificil de modificar, ciclos de desarrollo largos y tecnicas de codificacion no intuituvas. Un lenguaje orientado a objetos ataca estos problemas. Tiene tres caractersticas basicas: 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 yprogramas 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 suinterior cierto nmero de componentes bin estructurados. En segundo lugar, cada objeto no es un ente aislado, sino que forma parte de unaorganizacin 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 insterte 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 lapropiedad 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 distribuda 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 ordenes ser la informacin requerida, siempre que el objeto considere que quien enva el mensaje est autorizado para obtenerla. 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 construdo, 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 tipos de jerarquas: sern simples cuando su estructura pueda ser representada por medio de un "arbol". En otros casos puede ser ms compleja. En cualquier caso, sea la estructura simple o compleja, podrn distinguirse en ella tres niveles de objetos. -La raz de la jerarqua. Se trata de un objeto nico y especial. Este se caracterza 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 otraclase 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: -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 (en la fig. 2, B es padre de D,E y F, es decir, D,E y F son hijos de B; en la fig. 3, los objetos B y C son padres de F, que a su vez es hijo de ambos). Una organizacin jerrquica simple puede definirse como aquella en la que un objeto puede tener un solo padre, mientras que en una organizacion jerrquica compleja un hijo puede tener varios padres). -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 yHOMBRE. El primero (vida) comprender las ciencias biolgicas: Biologa y Medicina. El segundo (mundo), las ciencias de la naturaleza inerte: lasMatemticas, 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 Newtontrabaj en ptica (vase la fig. 4). La relacin es, evidentemente, semntica, pus 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: 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, apoyandonos 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 mas o menos estructurados (matrices, vectores, listas, etc.). Adems, los valores pueden ser de cualquier tipo (numrico, alfabtico, etc.) si elsistema 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: -Propiedades propias. Estn formadas dentro de la cpsula del objeto. -Propiedades heredadas. Estan definidas en un objeto diferente, antepasado de ste (padre,"abuelo", etc.). A veces estas propiedades se llamanpropiedades 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: -Mtodos propios. Estn includos dentro de la cpsula del objeto. -Mtodos heredados. Estan 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 polimorfsmo, 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, pero se diferencia de estos porque su ejecucin no se activa con un mensaje, sino que se desencadena autmticamente 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 datosmultimediales, automatizacin de oficinas, ambientes de ingeniera de software, etc. An en las aplicaciones tradicionales encontramos que definir interfases hombre-mquina "a-laWindows" 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 concepual para analizar, disear e implementar aplicaciones permite obtener aplicaciones ms modificables, fcilmente extendibles y a partir de componentes reusables. Esta reusabilidad del cdigo disminuye eltiempo 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 multiple mientras que SmallTalk no lo soporta; en consecuencia la eleccin de un lenguaje tiene ramificaciones de diseo muy importamtes. Determinacion 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 planificacinoriginal. Performance. En un sistema donde todo es un objeto y toda interaccion 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 situacion 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. Idealmente, habra una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategiaorientada a objetos. Deberia existir una metodologa fcil de aprender e independiente del lenguaje, y facil 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 (y diversos apuntes conseguidos de distintas publicaciones) Lucas Introduccin l trmino de Programacin Orientada a Objetos indica ms una forma de diseo y una metodologa de desarrollo de software que un lenguaje de programacin, ya que en realidad se puede aplicar el Diseo Orientado a Objetos (En ingls abreviado OOD, Object Oriented Design), a cualquier tipo de lenguaje de programacin. El desarrollo de la OOP empieza a destacar durante la dcada de lo 80 tomando en cuenta la programacin estructurada, a la que engloba y dotando al programador de nuevos elementos para el anlisis y desarrollo de software.

El propsito de este trabajo es explicar el diseo orientado a objeto y no una explicacin de su programacin, puesto que no nos alcanzara toda la currcula para hacerlo. Bsicamente la OOP permite a los programadores escribir software, de forma que est organizado en la misma manera que el problema que trata de modelizar. Los lenguajes de programacin convencionales son poco ms que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia. Si en algn punto del programa modificamos la estructura de los datos o la accin realizada sobre ellos, el programa cambia. La OOP aporta un enfoque nuevo, convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones. De esta forma, cualquier modificacin de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella, siendo esta una de la diferencias radicales respecto a la programacin estructurada. Para quienes no estn familiarizados con la programacin estructurada dir que una de las bases de esta escuela de programacin parte del diseo arriba abajo. En esta forma de diseo se descomponen los requerimientos del programa paso a paso, hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones. La OOP estructura los datos en objetos que pueden almacenar, manipular y combinar informacin. En resumen, la programacin estructurada presta atencin al conjunto de acciones que manipulan el flujo de datos (desde la situacin inicial a la final), mientras que la programacin orientada a objetos presta atencin a la interrelacin que existe entre los datos y las acciones a realizar con ellos. Muchos habrn odo comentarios sobre la incidencia de la OOP sobre la programacin convencional. Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicin del ensamblador sobre el cdigo de mquina. La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacin

Uniformidad. Ya que la representacin de los objetos lleva implica tanto el anlisis como el diseo y la codificacin de los mismos. Comprensin. Tanto los datos que componen los objetos, como los procedimientos que los manipulan, estn agrupados en clases, que se corresponden con las estructuras de informacin que el programa trata. Flexibilidad. Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar, cualquier cambio que se realice sobre ellos quedar reflejado automticamente en cualquier lugar donde estos datos aparezcan. Estabilidad. Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo. Reusabilidad. La nocin de objeto permite que programas que traten las mismas estructuras de informacin reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan. De esta forma, el desarrollo de un programa puede llegar a ser una simple combinacin de objetos ya definidos donde estos estn relacionados de una manera particular. Uno de los puntos clave a remarcar en esta introduccin es que la programacin orientada a objetos no sustituye a ninguna metodologa ni lenguaje de programacin anterior. Todos los programas que se realizan segn OOD se pueden realizar igualmente mediante programacin estructurada. Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas basadas en un interface de usuario grfico como Windows, OS/2, xWindows, etc. Es mucho ms sencillo OBJETOS Caractersticas de los Objetos Identidad del Objeto La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos, son distintos entre s. De esta forma incluso una serie de Objetos coches, recin fabricados son distintos los unos de los otros. La afirmacin anterior, aunque parece obvia, tiene importancia cuando descendemos al nivel de programacin. En este mbito cada uno de los objetos tiene un controlador pro el cual se identifica. Este puede ser una variable, una estructura de datos, una cadena de caracteres, etc. El controlador ser distinto para cada uno de los objeto, aunque las referencias a stos sean uniformes e independientes del contenido, permitiendo crear agrupaciones de objetos con el mismo tratamiento. Clasificacin Con la clasificacin comienza la verdadera programacin orientada a objetos. Ellos nos obliga a una abstraccin del concepto de objeto denominadaclase. Las clases permiten la agrupacin de objetos que comparten las mismas propiedades y comportamiento. Si bien clase y objeto suelen usarse como sinnimos, no lo son. El esfuerzo del programador ante una aplicacin orientada a objetos se centra en la identificacin de las clases, sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas Las propiedades deber ser significativas dentro del entorno de la aplicacin es decir, deben servir para identificar claramente y de una manera nica (y univoca) a cada uno de los objetos El nmero de propiedades de un objeto debe ser el mnimo para realizar todas las operaciones que requiera la aplicacin. Definamos una clase rectngulo. Esta clase puede tener como atributos un punto (x,y), la anchura (a) y la longitud (l). Las operaciones a realizar son: mover, agrandar, reducir, et. Es posible realizarlas con las propiedades de la clase? Un anlisis posterior nos indica que es posible la realizacin de estas operaciones con los atributos definidos. Pero si incluimos la operacin girar , vemos que con las propiedades definidas para la clase esta operacin no se puede realizar. Para incluir esta nueva operacin debemos redefinir las propiedades del objeto, en este caso las coordenadas de los vrtices. Encapsulacin y ocultacin de datos La capacidad de presentacin de informacin dentro de un objeto se divide en dos partes bien diferenciadas: Interna: La informacin que necesita el objeto para operar y que es innecesaria para los dems objetos de la aplicacin. Estos atributos se denominada privados y tienen como marco de aplicacin nicamente a las operaciones asociadas al objeto. Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos . Estas propiedades se denominan pblicas y corresponde a la informacin que necesitan conocer los restantes objetos de la aplicacin respecto del objeto definido para poder operar. Podemos imaginarla encapsulacin como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida. Si introducimos datos por la entrada automticamente obtendr un resultado en la salida. No necesita conocer ningn detalle del funcionamiento interno de la caja. El trmino encapsulacin indica l capacidad que tienen los objetos de construir una cpsula a su alrededor, ocultando la informacin que contienen (aqulla que es necesaria para su funcionamiento interno, pero innecesaria para los dems objetos) a las otras clases que componen la aplicacin. Aunque a primera vista la encapsulacin puede parecer superflua, tengamos en cuenta que existen muchas variables utilizadas de forma temporal: contadores y variables que contienen resultados intermedios, etc. D no ser por la encapsulacin estas variables ocuparan memoria y podran interferir en el funcionamiento del resto de los objetos. La encapsulacin no es exclusiva de los lenguajes de programacin orientados a objetos. Aparece en los lenguajes basados en procedimientos (PASCAL, C, COBOL, ETC) como una forma de proteger los datos que se manipulan dentro de las funciones. Los lenguajes OOP incorporan la posibilidad de encapsular tambin las estructuras de datos que sirven como base a las funciones. Aportan por tanto un nivel superior en cuanto a proteccin de informacin. La encapsulacin nos permite el uso de libreras de objetos para el desarrollo de nuestros programas. Recordemos que las libreras son definiciones de objetos de propsito general que

se incorporan a los programas. Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde est definido, ya que contiene y define todo lo que necesita para poder funcionar, es fcil utilizarlo en los mas variados tipos de aplicaciones. Si aseguramos , depurando las propiedades y las operaciones dentro de la clase que el objeto funcin bien dentro de una aplicacin, con una correcta encapsulacin el objeto podr funcionar en cualquier otra. Otra de las ventajas de la encapsulacin es que , al definir el objeto como una caja negra con entradas y salida asociadas, en cualquier momento podemos cambiar el contenido de las operaciones del objeto, de manera que no afecte al funcionamiento general del programa. La encapsulacin est en el ncleo de dos grandes pilares de la construccin de sistemas; mantenibilidad y reusabilidad.

Mantenibilidad Cualidad que indica que un programa o sistema debe ser fcilmente modificable. Es decir que los cambios en las condiciones externas (como la definicin de una nueva variable) implicarn modificaciones pequeas en el programa / sistema. El concepto de mantenibilidad implica que un programa, al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante. Reusabilidad Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccin de otros programas. Ello implica que los objetos definidos en un programa pueden ser extrados del mismo e implantados en otro sin tener que realizar modificaciones importantes en el cdigo del objeto. El objeto final es que el programador construya una librera de objetos que le permita realizar programas basndose en la tcnica de cortar y pegar. Esta extrae (corta) cdigo de otras aplicaciones ya realizadas y las implementa (pega) en la

aplicacin a realizar donde, tras algunos retoques, la nueva aplicacin estar lista para funcionar. Como podr observar el concepto de reusabilidad, permite reducir el tiempo de realizacin , ganando en claridad, mantenibilidad y productividad. La encapsulacin de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad, con el nico coste adicional de definir con precisin las entradas y salida de nuestras operaciones. Poliformismo El polimorfismo es una nueva caracterstica aportada por la OOP. Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre, diferencindolas nicamente en los parmetros de entrada. Dependiendo del objeto que se introduzca como parmetro de entrada, se elegir automticamente cual de las operaciones se va a realizar. Ya est habituado al operador <<suma>> que est presente en todos los lenguajes de programacin. Sin embargo, los operadores <<suma de fracciones>> y <<suma de nmeros complejos>> no existen en casi ningn lenguaje de programacin. Los lenguajes OOP permiten definir un operador <<suma>> tal que reconozca que tipo de objeto se le est aplicando, a travs de operaciones de objetos. Previamente deber definir la fraccin y el nmero complejo como una clase y la operacin suma como una operacin de una clase. Definiendo adecuadamente las operaciones suma de fracciones y suma de nmeros imaginarios, el operador suma devolver, en el caso que los operandos sean fracciones, una fraccin y , en el caso de los nmeros imaginarios, otros nmero imaginario. Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos. Aunque a primera vista la expresin C= A+B, siendo A y B bases de datos, nos pudiera parecer una extraordinaria simplificacin, nos conduce a la pregunta: Qu es la suma de una base d datos? Consideremos varias posibilidades: Introduccin de registros: Lo que exige que A y B tengan la misma estructura. Unin de campos: Aquellos campos que aparezcan en B pero no en A sern aadidos a C Alguna de estas dos opciones es verdaderamente una suma? Es decir Cumple las propiedades conmutativa, asociativa, de elemento neutro, etc.? Qu ocurre si sumo dos bases de datos con estructuras distintas? Como puede observar, la definicin de un operador sobre un tipo complejo de datos, intentando utilizar identificadores de operadores de datos simples, puede tener resultados impredecibles. Una de las ventajas ms importantes, sin entrar en la redefinicin de operadores es permitir la realizacin de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan. Gracias a la encapsulacin y el polimorfismo, aunque se utilicen los mismos nombre con las operaciones en dos clases distintas, el programa reconoce a que clase se aplica durante la ejecucin. Como se podr observar el polimorfismo y la encapsulacin de datos estn ntimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucin que ha supuesto la introduccin de los lenguajes orientados a objetos dentro de la programacin. Herencia La herencia es la ltima de las propiedades relativas a la OOP, Consiste en la propagacin de los atributos y las operaciones a travs de distintas sub-clases definidas a partir de una clase comn. Introduce, por tanto, una posibilidad de refinamiento sucesivo del concepto de clase. Nos permite definir una clase principal y , a travs de sucesivas aproximaciones, cualquier caracterstica de los objetos. A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales. La herencia nos permite crear estructuras jerrquicas de clases donde es posible la creacin de sub-clases que incluyan nuevas propiedades y atributos. Estas sub-clases admiten la definicin de nuevos atributos, as como crear, modificar o inhabilitar propiedades. Para pensarlo de manera ms fcil podemos abstraernos al siguiente ejemplo. Pensemos en los distintos sub-modelo s asociados a un modelo bsico de automvil. A partir de este modelo bsico, los fabricantes introducen distintas caractersticas (aire acondicionado, ABS, distintas tapiceras , acabados, etc.) que crean sub clases. Todas estas sub-clases tienen en comn la estructura bsica (chasis , direccin , etc.) u varan slo en algunos de sus componentes. Asociemos a este tipo bsico una clase cuyos atributos representen las piezas que componen el coche. Las sub-clases aportarn sus propios atributos (en el caso de vehculos con aire

acondicionado, todos aquellas piezas que lo componen), permitiendo la definicin de todos los posibles modelos.

Adems, es posible que una sub-clase herede atributos y propiedades de ms de una clase. Este proceso se denomina herencia mltiple y lo veremos con ms detalle en captulos posteriores. La herencia es, sin duda alguna, una de las propiedades ms importantes de la OOP, ya que permite, a travs de la definicin de una clase bsica, ir aadiendo propiedades a medida que sean necesarias y, adems, en el sub-conjunto de objetos que sea preciso. La herencia permite que los objetos pueden compartir datos y comportamientos a travs de las diferentes sub-clases, sin incurrir en redundancia. Ms importante que el ahorro de cdigo, es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa. Conclusin. Identidad, clasificacin, polimorfismo y herencia caracterizan a los lenguajes orientados a objetos. Cada uno de estos conceptos puede utilizarse aisladamente, incluso aparecen en otras metodologas de programacin, pero juntos se complementan en una relacin sinrgica. Los beneficios de la programacin orientada a objetos son ms que los que pueden verse a simple vista. El nfasis en las propiedades esenciales de un objeto, fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente ms preciso, general y robusto que si pusiramos el nfasis en los procedimientos y los datos por separado

Construccin de clases Tal como hemos definido con anterioridad, una clase de objeto describe a un grupo de objetos con similares:

Propiedades (atributos) Comportamientos (operaciones) Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos. Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase. Cada objeto <<conoce>> cul es su clase. La mayora de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucin del programa. A continuacin expondremos una serie de pasos para definir una clase. Identificar los objetos. Para ello examine la aplicacin e identifique las distintas estructuras de datos, algunos tips a tener en cuenta son los siguientes:

El nombre de la aplicacin a veces nos da la del nombre del objeto principal Los objetos software pueden imitar el mundo real, modelizando las propiedades de los objetos a travs de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a travs de variables. Los objetos no se han de corresponder siempre con objetos fsicos, sino que tambin pueden ser entidades que se utilizan dentro de la construccin del programa. Piense en el objeto en <<primera persona>>. Este truco nos puede identificar claramente los atributos y sus operaciones asociadas: <<Soy un cuadrado y me muevo, giro, agrando y reduzco. Las partes que me componen son los puntos de mis vrtices>>.

Una clase es un tipo de dato que puede ser usado para declarar objetos, de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables.

Definir las operaciones Defina las operaciones a partir de los objetos, examinando las distintas operaciones asociadas a un conjunto de datos. Los atributos del objeto se deben definir de tal manera que stos satisfagan todos los requerimientos de cada una de las operaciones. A estas operaciones aada dos ms: Crear y Destruir. Estas operaciones nos servirn para inicializar y borrar el objeto dentro de la aplicacin. A partir de la definicin de las propiedades, un objeto siempre debe ser capaz de responder a estas tres preguntas: Qu soy ?, Qu hago? Qu dejo ver al resto del mundo? Algunas de las operaciones slo se aplicarn a determinados objetos pertenecientes a las clases. Hemos visto que a travs de la herencia podemos <<especializar>> un sub conjunto de objetos creando una sub-clase. nicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase. El resto, que corresponden a las operaciones de sub-Grupos de objetos, se deben definir dentro de la especializaciones de la clase. Definir los atributos de los objetos Una vez identificados los objetos, defina los atributos de la clase. Un atributo es un valor almacenado en los objetos de la clase. Aplicaciones orientadas a objetos A lo largo de la historia de la programacin, los lenguajes y las metodologas han pasado de una relativa simplicidad a una complejidad creciente. Los lenguajes de programacin orientados a objetos pretenden aportar simplicidad a la tarea de programacin de grandes aplicaciones. Cuando se crearon las primeras computadoras todava no existan los lenguajes de programacin, tal como ahora los entendemos. El lenguajeensamblador puede considerarse como el primer lenguaje de programacin propiamente dicho. Permita al usuario un dilogo ms fluido con la mquina a travs de instrucciones que tenan relacin directa con el conjunto de operaciones que la mquina poda realizar. A partir de este momento empez la evolucin de los lenguajes de programacin. _cada uno tena su entorno definido y aunque en realidad todos los lenguajes son polivalentes (en teora, con cualquiera de ellos se puede desarrollar cualquier programa de gestin o cientfico). Pronto apareci la especializacin funcional. As, COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el diseo de aplicaciones de gestin.; FORTRAN (Formula Translator) para el diseo de aplicaciones cientficas; APL (A Programming Language) para el clculo matemtico, etc. A medida que el software tomaba importancia, aparecieron los primeros problemas relacionados con la programacin. Al tiempo que aumenta elvolumen de un programa, disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento.

En un intento de solucionar estos problemas aparecen las metodologas de programacin. Una metodologa es un conjunto de reglas destinadas a simplificar las tareas de diseo, estimacin de costes, desarrollo y mantenimiento de un sistema informtico. A menudo se ven acompaadas con unas herramientas (CASE: Computer Aided Software Engeneering) que permiten la elaboracin estructurada y documentada de los sistemas informticos. DISEO DE APLICACIONES Y ELECCIN DE ENTORNO. En entorno de programacin implica tanto el lenguaje de programacin como al empleo de una determinada metodologa. Los lenguajes de programacin no se producen por generacin espontnea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar. De esta manera se crea un conjunto de reglas para simplificar la tarea de programacin. Generalizadas y codificadas, se convierten en <<principios>> de los que surgen los lenguajes de programacin en un afn por darles soporte. Estos <<principios>> son modelos que proporcionan tcnicas que , a su vez, deben aplicarse en el diseo e implementacin de los programas. Estas tcnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar. Decimos que un lenguaje de programacin <<soporta>> un conjunto de <<principios>> si el lenguaje simplifica la aplicacin de estas tcnicas. A estos <<principios>> se les denomina metodologas de programacin. Las metodologas de programacin son modelos sobre como disear e implementar los programas. Diferentes modelos tienen como resultado diferentes tcnicas. Que cada tcnica sea distinta no implica que una sea la verdadera y que las dems falsas. Por el contrario, las metodologas se complementan entre s. Lo que todas las metodologas tienen en comn es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver, y que la implementacin de la solucin se debe realizar mediante un conjunto de mdulos preferiblemente reutilizables. Las metodologas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales. La base de esta metodologa es que una estructura de datos debe contener las operaciones que los modifican. La tcnica que se utiliza para obtener esta <<abstraccin de datos>> es la encapsulacin de los mismos en una estructura conocida como clase. El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define. Por tanto, la metodologa orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos, al asociar a cada dato el conjunto de operaciones que lo modifican. Como podr ver, ambos enfoques son complementarios. Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos, considere el diseo de un <<compilador>> El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el cdigo objeto que posteriormente se convierte en programa. Para realizar su trabajo, el compilador lee el fichero fuente y separa de l las variables y las instrucciones. Las variables constituyen la tabla de smbolos del programa, mientras que las instrucciones se organizan en un rbol sintctico donde se plasman todas la referencias que realizan los mandatos y funciones entre s.

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccin de un programa como una coleccin de funciones. Las metodologas proporcionan una grua sobre cmo disear, organizar e implementar las funciones que componen un programa. El mtodo de diseo es la descomposicin funcional que identifica las funciones como los pasos a seguir en la resolucin de un problema. La organizacin en archivospermite que las funciones se agrupen mdulos separados, mientras que las tcnicas de programacin estructurada permiten que las implementaciones de las funciones sean fciles de consultar y mantener. La programacin orientada a objetos est basada en un modelo de construcciones de programas como un conjunto de clases. El diseo orientado a objetos identifica los tipos que representan los distintos objetos en el programa. Las operaciones a realizar con cada uno delos objetos son, al igual que en el modelo procedural, los pasos destinados a solucionar el problema. El objeto sirve adems de mdulo que puede reutilizarse para la solucin de un problema de similares caractersticas en otro programa. Ninguna metodologa resuelve con acierto todos los tipos de problemas. La programacin requiere una especializacin como la que se produce en laingeniera pero todava no es posible identificarla como una ciencia. Las tcnicas a emplear se han de utilizar con exquisito cuidado, sin perder de vista el objetivo de resolver un determinado problema. Actualmente existe la tendencia de identificar la programacin con una disciplina como la ingeniera. Sin embargo, debe considerarse ms como un artecomo la arquitectura, donde se unen la inspiracin y el dominio de la tcnica. Para la eleccin de un determinado entorno debemos fijar los criterios necesarios, como los que describimos a continuacin.: Tamao de la aplicacin

Cuanto mayor sea el volumen de informacin a procesar, mas necesidad habr de estructurar dicha informacin de forma que se fcil su manipulacin. Complejidad Podemos dividir el problema de la complejidad en dos grandes apartados. Datos: La complejidad viene reflejada por el tipo de datos a tratar, por las relaciones que puedan tener los datos entre si, etc. Funciones: El mtodo para la obtencin de nuevos datos es complicado o requiere un esfuerzo de programacin importante. Aunque tratados como grupos independientes, ambos estn generalmente interrelacionados. De esta forma una estructura de datos compleja suele ir acompaada de un conjunto de funciones de diseo complejo. Asimismo, una mayor abstraccin se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos ms complejas. Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en cdigo ejecutable por la mquina) ha de introducir una cantidad grande de cdigo auxiliar para poder ejecutar el cdigo fuente. Si ha programado en C o en Turbo Pascal, habr observado que los ejecutables son en general de pequeo tamao. Un simple programa <<Hola mundo>>, clsico de programacin. Nunca es mayor de seis lneas de cdigo y su ejecutable es siempre inferior a 10 Kbytes. Si tomamos Clipper el programa no ocupa ms de una lnea pero ms de 200 Kbytes. Rapidez En algunos problemas la rapidez de respuesta es crtica. Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia. Portabilidad La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos. La realizacin de un programa portable , en general, depende de la eleccin de un lenguaje de programacin , as como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo. La creacin de un programa portable a menudo incide negativamente en los apartados de tamao y rapidez, ya que un alejamiento de la plataforma hardware y del sistema operativo, a menudo se consigue emulando sus caractersticas. Esto conlleva un aumento del tamao y la complejidad del programa, as como un incremento en el tiempo de ejecucin. Gestin de recursos Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado. El ms limitado, aun ms que el espacio en disco, es la memoria. Un programa grande que gestione de manera incorrecta la memoria pronto agotar todos los recursos del sistema. Interface de usuario. Aunque no se puede contar como un factor a considerar, la importancia que el interface de usuario est tomando en los ltimos aos hace que lo consideremos por separado. El diseo del

interface de usuario aporta una complejidad propia al desarrollo de aplicaciones. De hecho, se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacin, para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad. La aparicin de interfaces grficos de usuario estndar (Windows, os2, X-Windows, etc.) ha hecho que factores como la rapidez o el tamao vuelvan a tomarse en cuenta, despus de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular. APLICACIONES ORIENTADAS A OBJETOS Cmo afectan los requerimientos anteriores para la eleccin de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas? Claridad Al ligar de forma evidente la estructura de la informacin con los procedimientos que la manipulan, los programas ganan en claridad a la hora de desarrollarlos y mantenerlos. Esto supone una ventaja frente a los lenguajes procedurales , aunque stos podran suplir esta deficiencia mediante una correcta eleccin de los nombres de las variables y funciones, lo que se denomina una <<oportuna codificacin>>. Complejidad Cuando la complejidad de un problema es abarcable por una sola persona, resolverlo con una herramienta u otra no aporta grandes ventajas. Pero cuando este desarrollo la tiene que realizar un equipo grande, debe existir una forma para aislar partes de problema. Uno de los problemas ms comunes , y a su vez ms simples de solucionar en el diseo de grandes sistemas, es el nombre que se da a las funciones y que tipo de datos manipulan stas. En la realizacin de un sistema informtico se utiliza un equipo de varias personas. El trabajo se divide en tres reas funcionales: una parte del equipo se encarga del interface de usuario, otra de la manipulacin de datos y, la ltima del diseo de salidas impresas. Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disea funciones para su uso interno y para el uso del resto de los grupos. Si no se realiza la divisin del trabajo de forma adecuada puede producirse el caos. He aqu una pequea enumeracin de los problemas que se pueden encontrar.

Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los dems. Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo. Estas funciones y variables son prcticamente iguales a las desarrolladas por nosotros, pero varan ligeramente en el tratamiento de la informacin, por lo que no podemos sustituir nuestras funciones. Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria. El resto de los grupos slo cubren determinados aspectos de la informacin a tratar, pero no proporcionan toda la informacin necesaria para que el programa funcione. El resto de informacin debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos.

Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los mdulos. Tamao

Las aplicaciones orientadas a objetos son ideales para la realizacin de programas de gran tamao. Las facilidades de encapsulacin y asociacin de las funciones a los datos que manipulan, simplifican el proceso de desarrollo. De hecho las bases de datos orientadas a objetos suponen un gran adelanto, ya que anan la flexibilidad en la manipulacin de los OOP con la capacidad de consulta de un DBMS (Data Base Management System) Relacin entre Datos Por el mismo motivo se vern beneficiados aquellos programas que impliquen una relacin compleja entre los datos. Este tipo de complejidad permite la utilizacin de todas las ventajas de los lenguajes de programacin orientados a objetos. Propiedades como la herencia ( donde los objetos pueden heredar estructura y operaciones de objetos predecesores), la encapsulacin, etc. Muestran en este tipo de programas todas sus ventajas. Rapidez En este aspecto, los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan ms a las especificaciones de la mquina. Si la rapidez es crtica, puede elegir un lenguaje de programacin como C++, que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C. Gestin de recursos Las aplicaciones orientadas a objetos demandan normalmente ms recursos del sistema que las aplicaciones procedurales. La creacin dinmica de objetos, que ocupa un lugar en la memoria del ordenador, puede acarrear graves problemas. Una de las soluciones, que incluye alguno delos lenguajes OOP, es liberar a menudo el espacio que los objetos dejan de utilizar. Este procedimiento de optimizacin como garbage collection (recoleccin debasura, implementado en java), minimiza los efecto de la creacin dinmica de objetos. Interface de usuario. El interface de usuario es uno de los aspectos ms importantes en la programacin actual. La aparicin de sistemas de explotacin que soportan un interface grfico de usuario como Windows, X-Windows o Presentation Manager hace que la mayora de los usuarios prefieran que sus programas corran bajo este tipo de interface. Este es uno de los puntos fuertes para la eleccin de un lenguaje OOP. La mayora de los interfaces grficos actuales han sido diseados o rediseados en base a la OOP. Existen en el mercado libreras de clases que soportan todos los dispositivos de control de ventanas como mens, combo box, listas, barras de herramientas, etc. Lenguajes orientados a objetos Los lenguajes OOP implementan de manera distinta los conceptos de programacin orientada a objetos. No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos A Continuacin unos consejos que nos facilitarn la eleccin del lenguaje de programacin adecuado:

Si los programas se van a sentar en una cualidad concreta de los OOP como herencia, elija el que mejor soporte le d. Los lenguajes interpretados sirven para realizar un desarrollo rpido o para aquellos programas que necesiten una actualizacin constante. Si el programa necesita rapidez o es crtico respecto al tamao, considere el uso de lenguajes que incorporen compilador. No <<reinvente la rueda>>. Si el lenguaje le proporciona una librera de clases no intente reescribrlas de nuevo, use las que le ofrece el sistema. Es ms tome como factor de eleccin las libreras de clases que el compilador incorpora o que estn disponibles en el mercado. Si necesita mejorar la calidad del programa previniendo errores, utilice un lenguaje que le permita definir las variables con sus tipos asociados. Si la memoria del sistema es limitada, utilice lenguajes que permitan la creacin y destruccin automtica de clases dependiendo de su utilizacin. CARACTERSTICAS DE LOS LENGUAJES OOP

Herencia mltiple Esta caracterstica suele ser comn a la mayora de los lenguajes OOP, aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo, aunque con distinto tipo y valor, de mas de un predecesor. Alguno de los lenguajes de programacin solucionan este problema de forma automtica, aunque los ms populares generan un error en el tiempo de compilacin. Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores. Eficiencia. Los lenguajes OOP arrastraron en un principio la reputacin de ser ineficaces. Esto se deba en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados. La existencia de compiladores permite a los desarrolladores ganar rapidez. Actualmente, usando un buen lenguaje orientado a objetos como C++, Java, etc. Junto con las libreras apropiadas para la realizacin de un programa, puede que se ejecute ms rpidamente que el mismo programa compilado con un lenguaje procedural. Asignacin de tipos. Los lenguajes orientados a objetos varan de forma sustancial la forma por la que se aproximan a la asignacin de tipos. Por asignacin de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacin fuerte) o sea simplemente un objeto indeterminado (asignacin dbil). Eiffel y C son dos lenguajes basados en la asignacin fuerte, frente a Smalltalk, en el que todas las variables definidas pertenecen a una clase indeterminada. La asignacin fuerte sirve a dos propsitos. Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacin. De forma concreta, en aquellos lenguajes donde est implementado el operator overloading (refefinicin de operador), el compilador puede reconocer a travs de las clases que entran como parmetros en la operacin que operacin tiene que utilizar. Por otra, este tipo de declaracin permite al compilador un mayor grado de optimizacin, ya que conoce en todo momento el espacio que ha de asignar. Manejo de memoria.

Los OOP son lenguajes que utilizan de manera intensiva la memoria de la computadora. Hay dos tipos de aproximacin a la gestin de memoria. El sistema en tiempo de ejecucin libera la memoria automticamente a medida que los objetos dejan de utilizarse. El sistema tiene instrucciones concretas para liberar l memoria explcitamente. Este el enfoque adoptado por lenguajes como C++, que aportan dos operadores: crear y destruir. El primero reserva automticamente memoria, mientras que el segundo la libera. Encapsulacin Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto, de aquellos necesario para su funcionamiento propio. No es propio de los lenguajes orientados a objetos, pero la capacidad de stos para unir las estructuras de datos a los procedimientos que los modifican lo hacen ms potente que los lenguajes llamados <<Modulares>> PANORAMICA DE LOS LENGUAJES OOP A continuacin, una pequea panormica de los lenguajes orientados a objetos SMALLTALK Fue el primer lenguaje de programacin orientado a objetos. Desarrollado en el Xerox PARC, en sus primeras implementaciones no ofrece solamente un interprete, sino que es mucho ms ambicioso, integrando intrprete on-line y otros aspectos que le convierten en un <<pseudo>> sistema operativo. Es el primero en aportar la arquitectura de Modelo/Visor/Controlador. El interface de usuario se divide en una definicin sobre la que se aplican determinado nmero de vistas gestionadas por un controlador. El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacin (el modelo) y aadir interfaces de usuarios ( las vistas y controles) de forma independiente. Ventajas

Smalltalk es un lenguaje puro orientado a objetos La implementacin a travs de un intrprete facilita la labor de desarrollo de programas. Las clases son aadidas, corregidas y depuradas de forma interactiva. Tiene una sintaxis simple, donde las variables y los atributos no necesitan tener un tipo asociado. Todo est definido en principio como objeto, incluyendo las propias clases.

Inconvenientes

Es un lenguaje interpretado, lo que reduce su rendimiento y dificulta su comercializacin. Al proporcionar su propio entorno operativo, interacta mal con otro tipo de software o hardware

Eiffel Es un lenguaje de programacin escrito por Bertrand Meyer. Al contrario que Smalltalk, incluye un preprocesador que permite la traduccin de cdigo Eiffel a Lenguaje C. Es ideal para la ingeniera de software, que permite la encapsulacin , control de acceso y mbito de las modificaciones. Como lenguaje orientado a objetos <<puro>>, es presumiblemente el mejor por sus capacidades tcnicas.

Los programas consisten en la declaracin de colecciones de clases que incluyen mtodos. El punto primordial de un programa Eiffel es la declaracin de clases, que asocia atributos. Ambos, clases y atributos, son accesibles a partir de la implementacin de un concepto llamado caracterstica. Una caracterstica es, por tanto, una agrupacin de datos y unas formas tpicas de tratarlos. En Eiffel una declaracin de clases puede incluir:

Una lista de caractersticas exportables. Una lista de las clases antecesora: clases de la que sta es una derivacin Una lista de declaraciones de caractersticas.

Ventajas

Es un lenguaje orientado a objetos <<puro>> Eiffel es un lenguaje de programacin orientado hacia el diseo de grandes aplicaciones. Las propiedades anteriores le hacen ideal para el diseo de aplicaciones en grupos de trabajo. El paso intermedio a cdigo C se puede considerar como una ventaja y no como un inconveniente, ya que aquellas secciones que sean difciles de tratar con Eiffel pueden elaborarse a partir de cdigo C. Su compatibilidad con C asegura tambin su portabilidad hacia otros sistemas operativos

Desventajas

El manejo de la memoria , un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk. Las libreras de clases son reducidas El rendimiento es mayor que el de Smalltalk, pero al tener que incluir un mdulo Run-time dentro del ejecutable, su tamao crece y su rendimiento baja.

C++ Es un lenguaje de uso general que deriva del C. Aade a su predecesor una serie de caractersticas que le convierten en un lenguaje orientado a objetos. Dentro de estas caractersticas debemos resaltar:

La abstraccin de datos La programacin orientada a objetos, ya que permite asociar a los datos las funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C. De hecho, el cdigo C puede tratarse con compiladores C++ y ejecutarse sin ningn problema. En un principio C++ era traducido a cdigo C a travs de una utilidad llamada precompilador. Tambin es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir cdigo no orientado a objetos. Enumeramos los aspectos ms importantes que hacen del C++ un lenguaje orientado a objetos:

La mayor contribucin que realiza C++ al C es la introduccin del tipo clase. Las clases permiten definir conjunto de datos y las funciones que los manipulan.

La ocultacin de datos es el mecanismo para implementar la abstraccin de datos. La abstraccin de datos permite al programador <<olvidar>> el funcionamiento interno de una clase, ya que sabe que su funcionamiento no va a alterar anmalamente el funcionamiento de otras clases. Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo bsico. La herencia extiende el concepto de abstraccin de datos al permitir la construccin de clases a partir de otras (sus antecesores) Los operadores definidos por el usuario permiten un tratamiento homogneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado.

Otras caractersticas no relativas a la programacin orientada a objetos, simplifican el diseo y desarrollo.


Optimizacin de explotacin de memorias, que permite la creacin de estructuras de datos dinmicas. Implementacin del solapamiento de funciones. Esta tcnica permite definir varias funciones con el mismo nombre pero distintos parmetros de entrada. Dependiendo de los parmetros que acompaen la llamada de la funcin, ser ejecutada una u otra.

BASES DE DATOS ORIENTADAS A OBJETOS La programacin orientada a objetos es muy verstil. No se restringe nicamente al diseo de programas, sino que es posible aplicar los mismo conceptos al diseo de bases de datos. El uso de una tcnica orientada a objetos trasciende a la eleccin de la base de datos. El uso de esta tcnica en el diseo de bases de datos aporta las cualidades de esta metodologa a nuestro diseo. Eficiencia, coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta. Como valor aadido, el uso de una misma tcnica en el diseo, tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema. Las bases de datos orientadas a objetos unen dos tecnologas: La de las bases de datos y la de los lenguajes orientados a objetos. Los Lenguajes OOP aportan gran capacidad en la manipulacin de datos, pero no implementan el almacenamiento y consulta de grandes volmenes de datos. Por el contrario, las bases de datos convencionales aportan un dominio de las tcnicas de almacenamiento y consulta de grandes volmenes de datos, aunque su capacidad de manipulacin es limitada. Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacin de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS. Las aplicaciones convencionales que agrupan programas y bases de datos, separan ambos entornos de manera clara. El desarrollador usa tcnicas procedurales para la descomposicin de problemas y su codificacin en funciones. Posteriormente se emplean tcnicas como las de Entidad Relacin para el diseo de la base de datos.

Su codificacin suele realizarse en un lenguaje de alto nivel como C, que lleva embebido cdigo SQL. El trmino embebido describe la inclusin de un mdulo escrito bajo otro lenguaje de programacin dentro del cdigo fuente. El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el cdigo embebido. Como podr observar, esta tcnica presenta defectos evidentes: Por una parte, se utilizan diferentes tcnicas para el desarrollo de ambos apartados, por lo que la tarea de diseo no se puede considerara como un todo nico Por otra y en gran medida debida a la primera, los lenguajes que se utilizan para la implementacin difieren, dificultando las labores de mantenimiento. Ejemplos Como habr podido observar a lo largo de esta monografa, nuestro propsito no ha siso el de ensear una metodologa ni la enseanza de un determinado lenguaje de programacin. El objetivo es por el contrario dar una panormica de los conceptos de la programacin orientada a objetos, de las metodologas y de las tcnicas de desarrollo de aplicaciones. En este apartado nos centraremos en lo aspectos ms importantes en el desarrollo de aplicaciones bajo OOP: identificacin de objetos y anlisis de asociaciones. OBJETOS Y ASOCIACIONES. La parte ms importante de todo diseo es el punto de entrada de la definicin de requerimientos. En la observacin atenta de los requerimientos se pueden hallar la mayora de los objetos pertenecientes a nuestra aplicacin. En este ejemplo nos centraremos en la identificacin de objetos a partir de los requerimientos bsicos de la aplicacin. Este anlisis es el primero que debe hacerse dentro de OOP y es tambin til para cualquier otra tcnica de programacin. Analicemos la siguiente definicin de requerimientos: El <<sistema de tratamiento de informacin documental>> es un gestor de <<documentos>>, de tal manera que puedan clasificar en uno o varios <<ndices>>, recuperar para su modificacin, visualizar, para su consulta, reclasificar, archivar y destruir. El <<sistema>> procesa la peticin del <<usuario>>, devolviendo un mensaje e indicando el xito o el fracaso de la peticin. De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos. De esta forma hemos identificado los objetos principales de la aplicacin y las operaciones asociadas a cada uno de los objetos. Observe el siguiente diagrama.

Hemos traducido los requerimientos a un conjunto de objetos. Estos estn inconexos entre s, pero aplicando la <<lgica>> podemos ver las relaciones que existen entre ellos. Sin salirnos de las especificaciones de la aplicacin, vemos que existen las asociaciones que aparecen en la siguiente figura:

Como podemos observar, algunas asociaciones cclicas como Indice <-> Documento. Estas asociaciones pueden simplificarse. Tambin existen otras implcitas que examinaremos ms adelante, como Usuario->Documento->Indice. Observemos grficamente las asociaciones que mantienen los objetos entre s en la siguiente figura

Como puede verse hay dos asociaciones sospechosas, ya que no son verbos sino los sustantivos <<peticin>> y <<mensaje>>. Estas dos asociaciones se pueden <<objetivar>> de tal manera que renan las condiciones de un objeto. Para ello debemos volver a las especificaciones iniciales. Cuando se archiva un documento se debe indicar el nombre del documento as como los ndices a los que se va a asociar. Las peticiones de recuperacin deben incluir un ndice y el nombre del archivo. Las consultas a los ndices deben incluir el nombre del indice y una condicin. A partir de este anlisis se puede depurar con HERENCIA y posteriormente realizar un <<ajuste fino>> LA RELACION DE HERENCIA. A continuacin vamos a centrarnos en la relacin de herencia. Como ya sabemos sta puede agrupar objeto son similares caracterstica o bien especializar objetos a partir de una genrico. Observemos nuevamente los requerimientos de nuestro sistema:

BIBLIOGRAFA / INFOGRAFIA Principles of Component Design 1518A Microsoft Autorized academic trining program Fundamentos del diseo y la programacin orientada a objetos Sergio M Fernndez Sastre, editorial McGraw Hill Ingeniera de software, Sommerville I, editorial Addison-Wesley Object-Oriented Programming, Coad P . Editorial Yourdon Press. Apuntes de ctedra Programacin 3 lenguae C++ Universidad Nacional de la Matanza.

Autor: Tejerina Martn

Comentarios

Sbado, 5 de Julio de 2008 a las 11:49 | 0

Jaime Stuardo Hola.

La explicacin dada sobre Polimorfismo es incorrecta. Lo que t explicaste se llama "sobrecarga", la cual puede afectar tanto a mtodos como a operadores. El polimorfismo es otra cosa. Literalmente cuando un objeto toma muchas formas, como la etimologa lo indica. Un ejemplo. Se sabe que un "animal" puede realizar una accin que se llama "Comer", sin embargo, dado que "animal" es algo "genrico" (abstracto) no se puede saber cmo come un animal, pero de lo que s estamos seguros es que come. Ahora bien, una especializacin de animal puede ser "gallina", "perro", etc. Ambos, por ser animales, tambin comen, pero en forma diferente. Eso es el polimorfismo, es decir, la clase animal toma diferentes formas segn la especializacin. En la prctica, aterrizndolo ms a la programacin, se puede definir una clase abstracta llamada "Animal". Dicha clase realiza una accin mediante un mtodo llamado "Comer". Dicho mtodo no tiene implementacin, dado que como lo seal, no se puede saber cmo come un animal. Adicionalmente, podemos tener dos clases que se heredan de "Animal": "Gallina" y "Perro". Ambos, por ser animales, DEBEN tambin definir la accin "Comer", pero adems, implementarla, debido que ahora s se sabe cmo es realizada la accin. Imaginemos ahora que queremos hacer comer al perro y la gallina. Bien podemos escribir gallina.comer() y leon.comer(), pero eso sera una mala prctica, sobre todo si tenemos ms animales en nuestra granja virtual. Lo que se hara es: "para cada animal dentro de los animales haga, animal.Comer()" Si la variable "animal" es una gallina, entonces se invocar el mtodo "Comer" de "Gallina". Si "animal" es un perro, entonces se invocar el mtodo "Comer" de "Perro". Espero que la explicacin haya quedado clara y as haber contribuido al desarrollo de este trabajo. Salu2 Jaime

S-ar putea să vă placă și