Académique Documents
Professionnel Documents
Culture Documents
Los desarrolladores de software estn descubriendo que, al valerse de un enfoque de diseo e implementacin modular y orientado a objetos, es posible hacer mucho mas productivos a los
____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO
grupos de desarrollo de lo que serian con las tcnicas precias comunes de programacin, como la programacin estructurada. Los programas orientados a objetos son ms fciles de entender, corregir y modificar. Se han desarrollado muchos otros lenguajes orientados a objetos, incluyendo principalmente Smalltalk, que fue desarrollado en el Centro de investigacin de Palo Alto (PARC) de Xerox. Smalltalk en un lenguaje orientado a objetos puro literalmente todo es un objeto. C++ es un lenguaje hbrido es posible programar en C++ tanto en estilo C como en estilo orientado a objetos o en ambos.
POO:
Siglas de "Programacin Orientada a Objetos". En ingls se pone al revs "OOP". La idea bsica de este tipo de programacin es agrupar los datos y los procedimientos para manejarlos en una nica entidad: el objeto. Un programa es un objeto, que a su vez est formado de objetos. La idea de la programacin estructurada no ha desaparecido, de hecho se refuerza y resulta ms evidente, como comprobars cuando veamos conceptos como la herencia. MECANISMOS BASICOS DE LA POO Los mecanismos bsicos de la programacin orientada a objetos son:
Objeto:
Un objeto es una unidad que engloba en s mismo datos y procedimientos necesarios para el tratamiento de esos datos. Hasta ahora habamos hecho programas en los que los datos y las funciones estaban perfectamente separadas, cuando se programa con objetos esto no es as, cada objeto contiene datos y funciones. Y un programa se construye como un conjunto de objetos, o incluso como un nico objeto.
QUE ES UN OBJETO?
El termino objeto surgi casi independientemente en varios campos de la informtica, simultneamente a principios de los sesenta, para referirse a nociones que eran diferentes en su apariencia, pero relacionados entre s. Todas estas nociones se inventaron para manejar la complejidad de sistemas software de tal forma que los objetos representaban componentes de un sistema descompuesto modularmente o bien unidades modulares de representacin del conocimiento.
Desde temprana edad las personas nos formamos conceptos, cada concepto es una idea particular o una comprensin de nuestro mundo, los conceptos adquiridos nos permiten sentir y razonar a cerca de las cosas en el mundo. A estas cosas a las que se aplican nuestros conceptos se llaman objetos. Un objeto puede ser real o abstracto, como: Una factura
Un objeto es cualquier cosa, real o abstracta, a cerca de la cual almacenamos datos y los mtodos que controlan dichos datos. Un objeto puede estar compuesto por otros objetos, estos ltimos a su vez, pueden estar compuestos de objetos, del mismo modo que una maquina esta formada por partes y estas, tambin, estn formadas por otras partes. Esta estructura intrincada de los objetos permite definir objetos muy complejos. Los objetos tienen una cierta integridad que no debera -de echo no puede- ser violada. Un objeto solo puede cambiar de estado, actuar, ser manipulado o permanecer en relacin con otros objetos de maneras apropiadas para ser objeto. Las tcnicas orientadas objetos permiten que el software se construya a partir de objetos de comportamiento especifico. Como lo mencionamos antes, los objetos se pueden construir a partir de otros, que a su vez pueden estar formados por otros objetos. Esto nos recuerda una maquinaria compleja, construida por partes, subpartes, sub-subpartes, etc. El anlisis de sistemas en el mundo orientado a objetos se realiza al estudiar los objetos en un ambiente.
Mensaje:
El mensaje es el modo en que se comunican los objetos entre si. En C++, un mensaje no es ms que una llamada a una funcin de un determinado objeto. Cuando llamemos a una funcin de un objeto, muy a menudo diremos que estamos enviando un mensaje a ese objeto. En este sentido, mensaje es el trmino adecuado cuando hablamos de programacin orientada a objetos en general.
Mtodo:
Se trata de otro concepto de POO, los mensajes que lleguen a un objeto se procesarn ejecutando un determinado mtodo. En C++ un mtodo no es otra cosa que una funcin o procedimiento perteneciente a un objeto.
Clase
Una clase se puede considerar como un patrn para construir objetos. En C++, un objeto es slo un tipo de variable de una clase determinada. Es importante distinguir entre objetos y clases, la clase es simplemente una declaracin, no tiene asociado ningn objeto, de modo que no puede recibir mensajes ni procesarlos, esto nicamente lo hacen los objetos.
Subclase
Una caracterstica primaria que define un sistema orientado a objetos es la manera en que trata las relaciones estructurales y semnticas entre clases de objetos y elimina la redundancia de almacenar el mismo atributo o mtodo ms veces de lo necesario. La idea clave es la de una clasificacin jerrquica en la que la clase hija o subclase hereda los atributos y mtodos de su clase
____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO
padre. Por ejemplo, supongamos una clase persona, clase persona atributos Nombre Direccin mtodos Cambi arNombre CambiarDireccin ListarDatos Podemos considerar las clases alumno y empleado en un nivel inferior. De este modo alumno y empleado heredarn los atributos y los mtodos de su clase padre persona a los que podemos aadir los atributos y mtodos propios de la clase hija. Esto es, clase alumno subclase de persona atributos Estudios Curso mtodos CambiarEstudios Cambi arCurso ListarDatos La declaracin anterior supone que la clase alumno herede los atributos y mtodos de la clase persona. Entonces un objeto de la clase alumno tendra los atributos Nombre, Direccin, Estudios y Curso y los mtodos CambiarNombre, CambiarDireccin, CambiarEstudios, CambiarCurso y ListarDatos. As mismo sucede que hemos redefnido el mtodo ListarDatos en la clase alumno para adaptarlo a las nuevas necesidades. Anlogamente podemos considerar las clases administrativo y profesor como subclases de la clase empleado. La jerarqua de clases resultante se muestra en la figura siguiente: persona
Segn lo expuesto, en una estructura jerrquica como la del ejemplo anterior, podemos establecer una relacin entre una clase y una subclase con los trminos padre e hijo, respectivamente. La clase padre se denomina tambin clase base y la clase hija clase derivada.
CARACTERISTICAS DE LA POO
Abstraccin
El trmino abstraccin significa "accin de separar mentalmente". Otra definicin podra ser: "representacin de las caractersticas esenciales de algo sin incluir antecedentes o detalles irrelevantes". Esto es, por medio de la abstraccin conseguimos no detenernos en los detalles concretos de las cosas que no interesen en cada momento, sino generalizar y centrarse en los aspectos que permitan tener una visin global del tema. Por ejemplo, el estudio de un ordenador podemos realizarlo a nivel de funcionamiento de sus circuitos electrnicos, en trminos de corriente, tensin, etc., o a nivel de transferencia entre registros, centrndose as el estudio en el flujo de informacin entre las unidades que lo componen (memoria, unidad aritmtica, unidad de control, registros, etc.), sin importarnos el comportamiento de los circuitos electrnicos que componen estas unidades. Segn lo expuesto, la abstraccin consiste en la generalizacin conceptual de los atributos y propiedades de un determinado conjunto de objetos. Precisamente la clave de la programacin orientada a objetos est en abstraer los mtodos y los datos comunes a un conjunto de objetos y almacenarlos en una clase. Desde este nivel de abstraccin, la introduccin o eliminacin de un objeto en una determinada aplicacin supondr un trabajo mnimo o nulo. Una abstraccin que describa un conjunto de objetos en trminos de una estructura de datos encapsulada u oculta y las operaciones sobre esa estructura, la denominaremos tipo abstracto de datos.
Encapsulamiento
El encapsulamiento u acultamiento de informacin se refiere a la prctica de incluir dentro de un objeto todo lo que necesita, de tal forma que ningn otro objeto necesite conocer nunca su estructura interna. Esta caracterstica permite ver unobjeto como una caja negra, en la que se ha metido de alguna manera toda la informacin relacionada con dicho objeto. Esto nos permitir manipular los objetos como unidades bsicas, permaneciendo oculta su estructura interna. En C++, la abstraccin y la encapsulacin estn representadas por la clase. La clase es una abstraccin, porque en ella se definen las propiedades y los atributos genricos de un determinado conjunto de objetos con caractersticas comunes, y es una encapsulacin, porque constituye una caja negra que encierra tanto los datos de que constan los objetos como los mtodos que permiten manipularlos. Por ejemplo, segn lo expuesto, si definimos una clase complejo, las operaciones con nmeros complejos no presentarn ninguna dificultad. Esto es, si x e y son nmeros complejos, la operacin z = x /y nos dar otro complejo. Si en lugar de operar a este nivel de abstraccin y encapsulamiento descendemos a la estructura interna del nmero complejo, entonces la operacin no es tan simple. Lasoperaciones en este nivel ms inferior son las que tienen que realizar los mtodos de la clase complejo con los datos que encierra. En el ejemplo anterior, el operador "/" representa la operacin de dividir dos variables de tipo complejo. Dicho operador es el mensaje que el objeto y enva al objeto x, siendo la respuesta a tal mensaje un mtodo implementado en la clase complejo. Anteriormente se ha expuesto que mensaje equivale a prototipo de funcin. Para que esto siga siendo vlido, considere que un operador es una funcin. Ms adelante veremos que esto es as; esto es, x / y es equivalente a llamar a una funcin operator/( x, y). En realidad, si operator/ es una funcin miembro de la clase complejo, x /y equivale a la llamada x.operator/{ y ), lo que pone de manifiesto que el objeto situado a la derecha del operador enva el mensaje al objeto situado a la izquierda. Esto mismo sucede con los tipos predefinidos en el compilador C; esto es, los tipos de datos short, int, float, etc. son realmente clases.
Herencia
La herencia es el mecanismo para compartir automticamente mtodos y atributos entre clases y subclases. Por ejemplo, como vimos anteriormente, si declaramos la clase profesor como una subclase de empleado, todos los mtodos y variables asociadas con la clase empleado son automticamente heredados por la subclase profesor. Si la clase empleado contiene mtodos inapropiados para la subclase profesor, stos pueden obviarse, escribiendo nuevos mtodos y almacenndolos como parte de la clase profesor, o tambin pueden redefinirse para que respondan de forma distinta a como lo hacen en la clase base. En C++, herencia equivale a derivacin de clases; la clase padre (empleado) recibe el nombre de clase base y la clase hija (profesor) se denomina clase derivada. Esta caracterstica de la POO est fuertemente ligada a la reutilizacin del cdigo. Esto es, el cdigo de cualquiera de las clases existentes puede ser utilizado sin ms que crear una clase derivada de ella. El concepto de herencia conduce a una estructura jerarquizada de clases, lo cual no significa que en POO todas las relaciones entre clases deban ajustarse a una estructura jerrquica. La herencia puede ser tambin mltiple; esto es, una clase puede derivarse de dos o ms clases base.
Polimorfismo
Esta caracterstica permite implementar mltiples formas de un mismo mtodo, dependiendo cada una de ellas de la clase sobre la que se realice la implementacin. Esto hace que se pueda acceder a una variedad de mtodos distintos (todos con el mismo nombre) utilizando exactamente el mismo medio de acceso. En C++ el polimorfismo se establece generalmente utilizando clases derivadas, funciones virtuales y punteros a objetos. Ms adelante veremos que una funcin declarada virtual en una clase base y redefinida en cada una de las clases derivadas puede ser accedida mediante un puntero o referencia a la clase base, Esto permite que un mismo mensaje pueda ser enviado a objetos de diferentes clases, de forma que el objeto que responda al mensaje ser en cada caso el referenciado por dicho puntero.
Relaciones jerrquicas, de herencia o de desgeneralizacin: especifican que una clase de objetos es subclase de otra mas general. El conjunto de todas las relaciones de este tipo construye una o mas jerarquas de clases. Pueden describirse con la frase es un.
Por ejemplo: Un diccionario consecutivo es un diccionario. Relaciones de pertenencia o de agregacin: indican que un objeto es parte o componente de otro, que a su vez es un agregado que contiene en su interior uno o mas objetos de clase igual o diferente a la suya. Pueden describirse con la frase es parte de. Por ejemplo: Un par clave-valor es parte de un diccionario. Relaciones de asociacin: especifican cualquier otra relacin entre dos objetos.
Metaclase
En conjunto, se llama a esas clases y objetos las abstracciones clave del problema, y se denomina a esas estructuras cooperativas los mecanismos de la implantacin. Durante estas fases del desarrollo, el inters principal del desarrollo debe estar en la vista externa de estas abstracciones clave y mecanismos. Esta vista representa el marco de referencia lgico del sistema y, por tanto, abarca la estruc tura de clases y la estructura de objetos del mismo. En las etapas finales del diseo y entrando ya en la implantacin, la tarea del desarrollador cambia: el centro de atencin est en la vista interna de estas abstracciones clave y mecanismos, involucrando a su representacin fsica. Pueden expresarse estas decisiones de diseo como parte de la arquitectura de mdulos y la arquitectura de procesos del sistema. La experiencia de algunos analistas nos lleva a aplicar en primer lugar el criterio orientado a objetos porque esta aproximacin es mejor a la hora de servir de ayuda para organizar la complejidad innata de los sistemas de software, al igual que ha servido de ayuda para describir la complejidad organizada de sistemas complejos tan diversos como los computadores, plantas, galaxias o grandes instituciones sociales. Los sistemas orientados a objetos son tambin ms resistentes al cambio y por lo tanto estn mejor preparados para evolucionar en el tiempo, porque su diseo esta basado en formas intermedias estables. El modelo de objetos ha influido incluso en las fases iniciales del ciclo de vida del desarrollo del software. El anlisis orientado a objetos (AOO) enfatiza la construccin de modelos del mundo real utilizando una visin del mundo orientado a objetos:
____________________________________________________________________________________________________ PROGRAMACION ORIENTADA A OBJETOS ING. OSORNIO
El anlisis orientado a objetos es un mtodo de anlisis que examina los requisitos desde la perspectiva de las clases y objetos que se encuentran en el vocabulario del dominio del problema. Bsicamente los productos del anlisis orientado a objetos sirven como modelos de los que se puede partir para un diseo orientado a objetos; los productos del diseo orientado a objetos pueden utilizarse entonces como anteproyectos para la implementacin completa de unos sistemas utilizando mtodos de programacin orientado a objetos, de esta forma se relacionan AOO, DOO y POO. Se insiste que se ha encontrado un gran valor en la construccin de modelos que se centran en las cosas que se encuentran en el espacio del problema formando lo que se ha llamado una descomposicin orientada a objetos. El diseo orientado a objetos es el mtodo que lleva a una descomposicin orientado a objetos. Ofrece un rico conjuntos de modelos que reflejan la importancia de plasmar explcitamente las jerarquas de clases y de objetos de los sistemas que disea. El anlisis orientado a objetos (AOO) se basa en conceptos sencillos, conocidos desde la infancia y que aplicamos continuamente: objetos y atributos, l todo y las partes, clases y miembros. Puede parecer llamativo que se haya tardado tanto tiempo en aplicar estos conceptos al desarrollo de software. Posiblemente, una de las razones es el xito de los mtodos de anlisis estructurados, basados en los conceptos de flujo de informacin, que monopolizaron el anlisis de sistemas de
UN PUNTO DE VISTA:
Desde el punto de vista de los anlisis antes mencionados hablamos del AOO y el AEO, podemos decir que el AOO concibe una abstraccin mayor que el AEO, que modela los sistemas desde un punto de vista ms prximo a su implementaron en un ordenador (entrada/proceso/salida). La ventaja del AOO es que se basa en la utilizacin de objetos como abstracciones del mundo real. Esto nos permite centrarnos en los aspectos significativos del domino del problema (en las caractersticas de los objetos y las relaciones que se establecen entre ellos) y este conocimiento se convierte en la parte fundamental del anlisis del sistema software que ser utilizado luego en el diseo y la implementacin. En el AOO los objetos encapsulan tanto atributos como procedimientos ( operaciones que se realizan sobre los objetos), e incorpora, adems, conceptos como los polimorfismos o la herencia que facilitan la reutilizacin de cdigo. Podemos concluir entonces que el AOO puede facilitar mucho la creacin de prototipos, y las tcnicas de desarrollo evolutivo de software. Los objetos don inherentemente reutilizables, y se puede crear un catalogo de objetos que podemos usar en sucesivas aplicaciones. De esta forma, podemos obtener rpidamente un prototipo del sistema, que pueda ser evaluado por el cliente, a partir de los objetos analizados, diseados e implementados en aplicaciones anteriores. Y lo que es ms importante, dada la facilidad de reutilizacin de estos objetos, el prototipo puede ir evolucionando hacia convertirse en el sistema final, segn vamos refinando los objetos de acuerdo a un proceso de especificacin incremental.
El paradigma OO es mas que una forma de programar. Es una forma de pensar acerca de un problema desde el punto de vista del mundo real en vez de desde el punto de vista del ordenador. El AOO permite analizar mejor el dominio del problema, sin pensar en trminos de implementar el sistema de un ordenador, permite, adems, pasar directamente el dominio del problema al modelo del sistema.
Comunicacin
El concepto OO es ms simple y esta menos relacionado con la informtica que el concepto de flujo de datos. Esto permite una mejor comunicacin entre el analista y el experto en el
Resistencia al cambio
Los cambios en los requisitos afectan notablemente a la funcionalidad de un sistema por lo que afectan mucho al software desarrollando con mtodos estructurados. Sin embargo, los cambios afectan en mucha menos medida a los objetos que componen o maneja el sistema, que son mucho ms estables. Las modificaciones necesarias para adaptar una aplicacin basada en objetos a un cambio de requisitos suelen estar mucho ms localizadas.
Reutilizacin
Aparte de la reutilizacin interna, basada en la expresin explcita de caractersticas comunes, el paradigma 00 desarrolla modelos mucho ms prximos al mundo real, con lo que aumentan las posibilidades de reutilizacin. Es probable que en futuras aplicaciones nos encontremos con objetos iguales o similares a los de la actual.
elementos reciben el nombre global de modelo de objetos. El modelo de objetos abarca principios fundamentales que los detallaremos mas adelante. Quede claro que el diseo orientado a objetos es fundamentalmente diferente a los enfoques de diseo estructurado tradicionales; requiere un modo distinto de pensar acerca de la descomposicin y produce arquitecturas software muy alejadas del dominio de la cultura del diseo estructurado. Adems, conviene mencionar que se observa que la mayora de los programadores trabajan en un lenguaje y utilizan solo un estilo de programacin. Programan bajo un paradigma apoyado por el lenguaje que usan. Frecuentemente, no se les han mostrado vas alternativas para pensar sobre un problema, y por lo tanto tiene dificultades para apreciar las ventajas de elegir un estilo, mas apropiado para el problema que tienen entre manos. No hay un estilo de programacin que sea el mejor para todo tipo de aplicaciones. Por ejemplo, la programacin orientada a reglas seria la mejor para el diseo de una base de conocimiento, y la programacin orientada a procedimientos seria la mas indicada parea el diseo de operaciones de calculo intensivo. Por experiencia de algunos estudiosos de la materia, el estilo orientado a objetos es l mas adecuado para l ms amplio conjunto de aplicaciones; realmente, este paradigma de programacin sirve con frecuencia como el marco de referencia arquitectnico en el que se emplean otros paradigmas. Cada uno de estos estilos de programacin se basa en su propio marco de referencia conceptual. Cada uno requiere una actitud mental diferente, una forma distinta de pensar en el problema. Para todas las cosas orientadas a objetos, el marco de referencia conceptual es el modelo de objetos.
Otros elementos que podran llamarse secundarios, que quiere decir, que cada uno de ellos es una parte til del modelo de objetos, pero no esenciales son: Tipos Persistencia A partir de los elementos antes mencionados, trataremos de mostrar, mediante una definicin en primer lugar de cada uno de ellos, cual es la asociacin con el sistema solar y el sistema celular, esto quiere decir que asociaremos estos elementos bases de la llamada teora de los objetos con el macrocosmo y el microcosmo, dictando sus caractersticas fundamentales para el entendimiento claro de este. A la vez, tambin definiremos las desigualdades u oposiciones de estos elementos con los sistemas antes mencionados. En otras palabras veremos como pasamos de un anlisis estructurado a un anlisis orientado a objetos, y viceversa. Macrocosmo v/s Microcosmo, esto incorporado al sistema de la teora de los objetos.