Anda di halaman 1dari 10

INDICE Programacin Orientada a Objetos............................................................................................... 2 Introduccin ............................................................................................................................... 2 La POO: un paradigma de la programacin.............................................................................. 3 Elementos bsicos de la POO...................................................................................................

4 Principios fundamentales de la programacin orientada a objetos........................................... 7 Ventajas de la programacin orientada a objetos ................................................................... 10

Programacin Orientada a Objetos


Introduccin
La programacin orientada a objetos (POO) no consiste en aadir caractersticas nuevas a los lenguajes de programacin tradicionales. Es una nueva forma de entender la programacin, distinta a la tradicional. Nace a finales de los 60 en Noruega, con el lenguaje SIMULA67, un lenguaje de simulacin. En el 67 tambin nace el Smalltalk, otro lenguaje de programacin orientada a objetos, pero se qued en los crculos de investigacin. En los 80 es cuando se produce el auge de la POO, con lenguajes como Object Pascal, Objetive-C y el ms importante C++. Actualmente la programacin orientada a objetos se encuentra en su momento de ms auge. Se sigue usando el C++, pero han surgido otros lenguajes importantes como Delphi y Java. La POO nos da mecanismos para crear cdigos muy fiables y reutilizables, siempre que nos esforcemos en programar bien, adems de modulares. Hay tres elementos bsicos relacionados con la programacin orientada a objetos: los objetos, las clases y los mensajes. Adems la POO sigue unos principios fundamentales que son: abstraccin, herencia y polimorfismo.

La POO: un paradigma de la programacin


Definicin de paradigma: es un conjunto de teoras y mtodos para representar, organizar y manipular el conocimiento. Los paradigmas fundamentales de programacin son: Programacin imperativa o procedural: un programa imperativo es una secuencia de instrucciones, agrupndose en subprogramas o subrutinas (mdulos) que se ejecutan secuencialmente, de acuerdo con un orden preestablecido. Fue el primer paradigma de la programacin que surgi. o Lenguajes: FORTRANT, COBOL, PASCAL, C Programacin declarativa: un programa declarativo consta de una serie de relaciones entre los datos, que especifican qu hay que computar pero no cmo hay que hacerlo. Se basa en las matemticas, usndose mucho en inteligencia artificial. Lenguajes hay de dos tipos: funcionales y lgicos. o Lenguajes funcionales: especifican las relaciones mediante funciones matemticas. LISP, MIRANDA, FP (escuela americana) o Lenguajes lgicos: especifican las relaciones mediante predicados lgicos. PROLOG (escuela europea) Programacin de bases de datos: lenguajes para manipular bases de datos. o Lenguajes: SQL Programacin concurrente: un programa concurrente est formado por una serie de procesos que se ejecutan en paralelo, interactuando entre s (procesos de sincronizacin y comunicacin) o Lenguajes: ADA, OCCAM, PROLOG CONCURRENTE Programacin orientada a objetos: un programa orientado a objetos es una coleccin de objetos (datos + operaciones) que cooperan entre si por medio del envo de mensajes. Adems todo objeto pertenece a una determinada clase. Estas estn relacionadas entre s mediante relaciones, en particular la relacin de herencia, creando un rbol de clases organizado jerrquicamente. En POO se distinguen tres tipos de lenguajes: o Lenguajes basados en objetos: nos permiten hacer relaciones mediante objetos. ADA, MODULA-2 o Lenguajes basados en clases: permiten agrupar objetos en clases. CLU o Lenguajes orientados a objetos: adems de objetos y clases, presentan relaciones de herencia, por lo que son los verdaderos lenguajes orientados a objetos. SIMULA, SMALLTALK, OBJECT PASCAL, OBJETIVE-C, C++, TURBO PASCAL, EIFFEL, DELPHI, JAVA, OBERON. Se pueden distinguir dos tipos: ! Hbridos: permiten programar de forma orientada a objetos o de forma tradicional. C++, TURBO PASCAL ! Puros: slo permiten programar de forma orientada a objetos. SMALLTALK, JAVA

Un programa imperativo se organiza completamente en funcin de los algoritmos. Es una secuencia de instrucciones que se organizan en subprogramas de acuerdo a su funcionalidad. Programa imperativo = algoritmos + estructuras de datos Un programa orientado a objetos se organiza en funcin de los datos. Es una coleccin de objetos donde cada objeto engloba datos y operaciones para manipularlos. Programa orientado a objetos = mecanismo de abstraccin + herencia + polimorfismo

Elementos bsicos de la POO


Son los objetos, las clases y los mensajes.

Objetos Un objeto es una estructura compleja que consta de datos y operaciones. Los datos son valores concretos que toma el objeto respecto de unas propiedades o caractersticas llamadas atributos. Por ejemplo un atributo podra ser el color y el dato un valor concreto como el rojo (color = rojo). Las operaciones permiten manipular los datos del objeto. A estas operaciones se las llama mtodos. Estos mtodos sern ejecutados por los objetos cuando reciban un mensaje que lo solicite. Por ejemplo el mtodo cambiarColor, mediante el cual es posible cambiar el dato del atributo color. El hecho de que un objeto englobe datos y operaciones se conoce como encapsulacin. Podemos definir tambin un objeto diciendo que es una entidad que exhibe tres caractersticas distintas: Tiene un estado, que viene dado por los datos del objeto para cada uno de sus atributos. Tiene un comportamiento, que es la forma a la cual responde a mensajes recibidos del exterior. El comportamiento viene dado por sus operaciones o mtodos. Tiene una identidad, que es una caracterstica que permite distinguir al objeto de cualquier otro, incluso de aquellos que tienen los mismos datos, comportamiento y estado.

Clases Una clase es un modelo que abstrae y define una serie de caractersticas comunes a toda una serie de objetos, que son: Una serie de propiedades comunes (atributos) Un comportamiento similar (mtodos) Una forma de relacionarse con objetos de otras clases (relaciones entre clases)

Se podra decir que una clase es como un tipo de datos, pudindose definir variables de ese tipo que son los objetos o instancias de la clase. Todo objeto es miembro de una clase (es una instancia de una determinada clase). Toda clase define una serie de atributos, que son las propiedades que pueden tener los objetos de la clase. Los atributos vienen dados por un nombre o identificador y un tipo de datos que indica cuales son los valores posibles del atributo. En una clase los nombres de los atributos tienen que ser distintos, aunque se puede usar un mismo atributo en distintas clases. Toda clase define tambin una serie de mtodos, que son las operaciones disponibles para manipular los datos de los objetos de la clase. Para ejecutar un mtodo, un objeto debe recibir un mensaje.

Hay varios tipos de mtodos de acuerdo al tipo de accin que realizan. Mtodos de construccin (constructores): construyen objetos y generalmente inicializan los valores de los atributos de los objetos. Mtodos de destruccin (destructores): destruyen los objetos, ocupndose de liberar la memoria ocupada anteriormente por los objetos. Mtodos de modificacin: modifican el estado del objeto, es decir, modifican el valor de alguno de los atributos. Mtodos de acceso o de seleccin: comprueban el estado de un objeto.

Los mtodos tambin se pueden clasificar desde el punto de vista externo. Existen mtodos pblicos que pueden ser accesibles desde fuera de la clase y existen mtodos privados que slo pueden ser usados desde dentro de la propia clase. Existen tres tipos fundamentales de relaciones entre clases. Relacin de especializacin o herencia, relacin de agregacin y relacin de asociacin. La relacin de especializacin o herencia es la ms importante de todas. Se dice que dos clases estn relacionadas mediante una relacin de especializacin o de herencia cuando una clase es especializacin o extensin de otra clase. La clase que extiende a la otra se suele denominar subclase y la clase de la cual se extiende superclase. En este tipo de relacin la subclase hereda todas las caractersticas de la superclase. Cualquier objeto del tipo de la subclase puede acceder directamente a cualquier mtodo o atributo de la superclase. Una subclase puede aadir nuevos atributos, puede aadir nuevos mtodos y puede modificar los mtodos heredados de la superclase. Esta relacin permite crear una jerarqua de clases que es una de las propiedades fundamentales de la programacin orientada a objetos (herencia). La relacin de agregacin se produce cuando una clase es un componente de otra, pero no son en ningn sentido similares. Por ejemplo podramos tener la clase motor en la que se definiera cmo es un motor y por otro lado la clase vehiculo en la que estaran definidos los atributos y mtodos de los vehculos, incluido un atributo que fuera del tipo de la clase motor para especificar qu motor tiene ese vehculo. El motor es un atributo de un vehculo. La relacin de asociacin se produce cuando dos clases estn relacionadas mediante una relacin semntica. Este tipo de relacin suele implementarse mediante clases. Por ejemplo podramos tener las clases empleado y empresa. Las podramos relacionar a travs de otra clase, la clase trabajo, de tal forma que en esa clase hubiera dos atributos que fueran uno del tipo empleado y otro del tipo empresa. De esta forma podemos asociar un empleado con una empresa.

Mensajes La ejecucin de programas orientados a objetos est gobernada por un mecanismo denominado paso de mensajes. Un mensaje es una peticin a un determinado objeto para que realice cierta accin. Un mensaje est compuesto por tres partes: Receptor o destinatario (al cual se enva el mensaje) Selector, que especifica la accin a realizar (mtodo que se quiere ejecutar) Parmetros adicionales, que sirven para especificar la informacin adicional que necesita el receptor para poder ejecutar el mtodo.

El envo de un mensaje es un proceso equivalente a la llamada a una subrutina en programacin tradicional, pero se diferencia en que los mensajes tienen un receptor y en que un mismo mensaje enviado a objetos distintos puede producir respuestas distintas. Existen en programacin orientada a objetos dos tipos especiales de receptores. Estos son super y this. El primero, super, hace referencia a elementos que estn definidos en la superclase, y el segundo, this, hace referencia a elementos que estn definidos en la propia clase.

Cuando un objeto recibe un mensaje se ejecuta un mtodo como respuesta a ese mensaje, pero cul es el cdigo concreto a ejecutar? La respuesta a esta pregunta est condicionada por dos factores, el mecanismo de herencia y qu se entiende por clase de un objeto. La regla de enlace consiste en que si la clase del objeto receptor dispone de un mtodo adecuado (mismo nombre y nmero y tipo de parmetros), entonces ese mtodo se ejecuta. En caso distinto, la bsqueda del mtodo adecuado contina en la superclase de la clase del objeto receptor, siguiendo hacia arriba en la jerarqua de clases definida por la herencia hasta que se encuentre un mtodo adecuado en alguna de las superclases. En caso de que se llegue al final de la jerarqua y no se encuentre un mtodo adecuado se producira un error. La interpretacin de esta regla depende de qu se entiende por clase de un objeto. En programacin orientada a objetos, la regla de compatibilidad hace que un mismo objeto pueda tener asociadas dos clases denominadas esttica y dinmica. La regla de compatibilidad entre objetos establece que un objeto de una clase hija es, en todos los aspectos importantes, un objeto de la clase madre. A una variable o parmetro declarado como perteneciente a una cierta clase se le puede asignar cualquier objeto de esa clase o cualquier objeto de una clase descendiente. Por ejemplo, si tenemos dos clases ClaseHija y ClaseMadre, donde la primera es descendiente de la segunda y tenemos definidas dos variables, m del tipo ClaseMadre y h del tipo ClaseHija, por la regla de compatibilidad se puede asignar a m el valor de h ya que h es del tipo ClaseHija y por lo tanto tambin es del tipo ClaseMadre. As la variable m tiene dos clases asociadas, ClaseMadre que se denomina clase esttica por ser la clase asignada en tiempo de compilacin y ClaseHija denominada clase dinmica que es la clase asignada en tiempo de ejecucin. Por esto la interpretacin de la regla de enlace depende de si se empieza a buscar en la clase esttica o en la clase dinmica, que a su vez depende del tiempo de enlace del mtodo. El tiempo de enlace del mtodo es el momento en el que se decide cul es el significado real de una determinada construccin en un programa. Existen tres tipos de tiempos posibles: tiempo de compilacin, tiempo de ligado y tiempo de ejecucin. El tiempo de compilacin es cuando se traduce el cdigo fuente a cdigo objeto, el tiempo de ligado es cuando se combinan distintas compilaciones y el tiempo de ejecucin es durante la ejecucin del programa. A los dos primeros se les denomina enlaces tempranos o estticos mientras que al de ejecucin se le denomina enlace tardo o dinmico. En programacin orientada a objetos la regla de enlace se puede interpretar de dos formas. Como enlace esttico en cuyo caso la bsqueda del mtodo adecuado se realiza a partir de la clase esttica del objeto receptor en tiempo de compilacin, o como enlace dinmico en cuyo caso la bsqueda del mtodo adecuado se realiza a partir de la clase dinmica del objeto receptor en tiempo de ejecucin. El enlace esttico es mucho ms eficiente, pero mucho menos flexible que el dinmico. El enlace dinmico es fundamental en POO para conseguir lo que se denomina polimorfismo. El tipo de enlace depende de los lenguajes concretos que se estn utilizando. Algunos como SMALLTALK, OBJETIVE-C, JAVA, etc. tienen siempre enlace dinmico, mientras que otros como C++, TURBO PASCAL, etc. tienen enlace esttico por defecto aunque ofrecen mecanismos para conseguir enlaces dinmicos.

Principios fundamentales de la programacin orientada a objetos


Son tres los principios fundamentales de la programacin orientada a objetos. Abstraccin, herencia y polimorfismo.

Abstraccin: encapsulacin + ocultacin La encapsulacin en programacin orientada a objetos es el principio que establece que un objeto es una estructura compleja que alberga tanto datos como operaciones para manipularlos (mtodos). La ocultacin es el principio que establece que un objeto visto desde el exterior es como una caja negra que impide el acceso a su interior. Permite ver cules son los servicios que ofrece el objeto mediante los nombres de los mtodos pblicos, pero impide ver tanto los datos del objeto como la forma concreta de implementacin de los mtodos. De todo esto se deduce la regla general de la programacin orientada a objetos y que no es otra que nunca se debe acceder de forma directa a los datos de un objeto, lo que implica que toda comunicacin con un objeto se debe realizar a travs del paso de mensajes y que los nicos que pueden visitar o modificar los datos de un objeto son los propios objetos mediante sus mtodos. El cumplimiento de la regla anterior es responsabilidad del programador, que deber utilizar los mecanismos que le ofrezca el lenguaje concreto para proteger los datos del objeto.

Herencia La herencia es una herramienta para la reutilizacin de cdigo, es decir, construir, manipular y organizar clases reutilizables. Permite construir clases nuevas a partir de otras existentes de forma que la nueva clase tiene acceso a todas las caractersticas de la clase existente. Es decir, hereda los atributos y los mtodos de la clase existente. La herencia es una propiedad transitiva. Una subclase no slo hereda de la superclase, sino que tambin hereda de cualquier otra clase ascendiente. Esto nos permite construir jerarquas.

Algunas clases se denominan abstractas. Son aquellas que se construyen no con la idea de crear instancias, sino para definir unas caractersticas y un comportamiento comn a una serie de clases descendientes.

Una subclase puede aadir nuevos atributos, aadir nuevos mtodos o modificar mtodos heredados. Si una subclase hereda un mtodo que no es del todo adecuado lo anula, siendo la anulacin de dos tipos: Anulacin por refinamiento que ocurre cuando el mtodo heredado es adecuado pero insuficiente. En este caso la subclase ejecuta el cdigo heredado aadiendo adems nueva funcionalidad. Anulacin por reemplazo que ocurre cuando el mtodo heredado no es en absoluto adecuado para la subclase. En este caso la subclase lo redefine totalmente.

En algunos lenguajes se permite la herencia mltiple lo que significa que una subclase puede tener varias superclases. Esto ofrece la ventaja de una mayor flexibilidad pero reduce la eficiencia debido a que se multiplica el tiempo para enlazar mtodos y se pueden producir conflictos de nombres ya que puede ocurrir que varias superclases tengan mtodos con el mismo nombre.

Polimorfismo En programacin, el polimorfismo es la propiedad sobre la cual un nombre se puede referir a varias entidades diferentes. La palabra viene del griego y significa muchas formas. En programacin orientada a objetos el polimorfismo aparece de forma natural debido sobre todo a la encapsulacin y la herencia. En particular, una variable cuyo tipo sea una clase es potencialmente polimrfica. A esa variable se le pueden asignar no slo objetos de esa clase sino de cualquier subclase (regla de compatibilidad). Hay tres tipos fundamentales de polimorfismo: polimorfismo por sobrecarga o ad-hoc, polimorfismo puro y polimorfismo paramtrico. El polimorfismo por sobrecarga ocurre cuando un mismo nombre de rutina tiene asociadas distintas implementaciones. Es el nombre de la rutina el que es polimrfico. Esto tambin ocurre en programacin convencional, por ejemplo con el operador + que sirve para sumar nmeros enteros, reales, concatenar cadenas, unir conjuntos, etc En programacin orientada a objetos los mtodos se pueden sobrecargar en virtud de la encapsulacin. Hay tres formas distintas para sobrecargar mtodos: Sobrecarga paramtrica: un mismo mtodo se define varias veces dentro de una misma clase. Algunos lenguajes como por ejemplo C++ y Java permiten definir en una misma clase varios mtodos con un mismo nombre, pero con distintas implementaciones. En estos casos, el mtodo adecuado se determina dependiendo del nmero y del tipo de los argumentos del mensaje. Mtodos sobrecargados en clases distintas pero no relacionados mediante la herencia: No hay ningn tipo de problema, ya que cada mtodo va asociado con su clase. Mtodos sobrecargados en clases distintas pero relacionados mediante la herencia: Ocurre cuando una subclase anula un mtodo heredado. Si, usando la regla de compatibilidad, se le asigna un objeto de tipo ClaseHija a una variable de tipo ClaseMadre, es necesario que el mtodo anulado se enlace de forma dinmica.

El polimorfismo puro se presenta cuando tenemos una rutina con una nica implementacin que recibe argumentos polimrficos, por lo que su interpretacin depende de los tipos reales de los argumentos. El cdigo concreto que se asocia a una rutina de este tipo (rutina polimrfica) no se conoce hasta el tiempo de ejecucin, que es cuando se conoce el tipo real de los argumentos que le llegan. La diferencia con el polimorfismo por sobrecarga est en que en el polimorfismo por sobrecarga tenemos un mismo nombre con distintas implementaciones, mientras que en el polimorfismo puro hay una nica implementacin, pero con distintos cdigos asociados y argumentos polimrficos dependiendo de lo que se reciba como argumento. En programacin orientada a objetos todos los mtodos son potencialmente polimrficos ya que cualquier variable de una clase es polimrfica. El polimorfismo paramtrico se obtiene mediante la construccin de clases parametrizadas o plantillas, que son clases con parmetros donde stos son tipos de datos, en algunos lenguajes como C++. Estas clases son muy tiles para implementar abstracciones en las que las operaciones son independientes del tipo de datos, como por ejemplo las clases contenedoras como pueden ser vectores, listas, rboles, etc El polimorfismo permite reutilizar las abstracciones de alto nivel. Permite, en un algoritmo, separar las componentes de alto nivel de las de bajo nivel, lo que permite reutilizarlas. Las componentes de alto nivel son estructuras globales del algoritmo, sin detalles. Las componentes de bajo nivel son los detalles de las estructuras de datos.

Ventajas de la programacin orientada a objetos


La programacin orientada a objetos ofrece muchas ventajas con respecto a los lenguajes de programacin tradicionales. En primer lugar permite la reutilizacin de cdigo. Mediante la herencia se nos brinda la posibilidad de utilizar en un objeto las operaciones implementadas en otro de forma sencilla. Tambin gracias a la encapsulacin podemos usar fcilmente objetos que no hemos definido ni implementado. Facilita la programacin de aplicaciones portables. Es posible disear una capa de objetos que se comuniquen directamente con el sistema y otra capa de objetos que se encarguen de realizar las operaciones y funcionar de forma independiente del sistema. Simplemente modificando las clases de bajo nivel podremos portar un programa de un sistema a otro y gracias a la encapsulacin el trabajo ser sencillo. Esta caracterstica se ve ms reforzada en Java, que est totalmente diseado para ser portable. Facilita el mantenimiento. La encapsulacin nos garantiza que las modificaciones realizadas en un objeto tienen un alcance limitado. Lo ideal al disear un objeto es hacerlo basndose en una caja negra. Slo se ven las operaciones que se pueden realizar, no importa cmo se realicen internamente. Las tareas de anlisis, diseo e implementacin son ms intuitivas, ya que las clases se basan en la abstraccin de objetos reales, concepto con el que todos estamos familiarizados.

Anda mungkin juga menyukai