Está en la página 1de 18

INTRODUCCIN A LA POO

Un lenguaje orientado a objetos tiene las siguientes caractersticas:

Basado en objetos Basado en clases Permite la herencia

La gran mayora de los lenguajes de los que se dice que son orientados a objetos slo cumplen con las dos primeras caractersticas, por lo tanto son nicamente lenguajes basados en objetos y no orientados a objetos. La herencia es lo que hace la diferencia entre uno y otro. La Programacin Orientada a Objetos se basa en la idea natural de la existencia de un mundo de objetos y que la resolucin del problema se realiza en sus trminos, un lenguaje se dice que est basado en objetos si soporta objetos como una caracterstica fundamental del mismo. Este tipo de programacin considera como unidad central a los objetos. Entendiendo que un objeto es una encapsulacin (agrupacin) de un conjunto de datos y de mtodos para manipular stos. Por ejemplo, una ventana Windows es un objeto. Este objeto posee caractersticas y datos, como son tamao, color, barras de desplazamiento, titulo, etc., y mtodos que permiten manipular esos datos. Por ejemplo, cuando el usuario apunta con el cursor del ratn al botn de maximizar de la ventana y hace clic sobre l, se produce un mensaje dirigido a la propia ventana que provoca la ejecucin del mtodo que produce su maximizacin.

La POO es una forma de programacin que utiliza objetos que responden a sucesos. Estos sucesos producen un flujo de mensajes entre los objetos, lo que origina cambios en el estado del objeto que recibe el mensaje. Como ejemplo, piense en el problema de

que un objeto caja de texto visualice un mensaje cuando se haga clic en otro objeto botn de pulsacin. La estructura del programa bsicamente estar formada por dos objetos y un mapa de mensajes; uno de los mensajes relacionar el clic sobre el botn con el mtodo que tiene que ejecutarse para poner el comunicado en la caja de texto. As, la POO es un enfoque sumamente natural, puesto que la estructura de los programas refleja directamente la estructura del problema.

Podemos concluir que la Programacin Orientada a Objetos es un mtodo de implementacin en el cual los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa un ejemplo de alguna clase, y cuyas clases son todas miembros de una jerarqua de clases unidas por relaciones.

VENTAJAS DE LOS LENGUAJES ORIENTADOS A OBJETOS Un lenguaje de programacin que soporte programacin orientada a objetos beneficia el desarrollo de software. Esto es as, porque:

Los objetos bien diseados son la base para sistemas que se construyen a partir de mdulos reutilizables, dando lugar a una mayor productividad. La reutilizacin de las clases que han sido probadas en circunstancias reales, en proyectos anteriores, dan lugar a sistemas de mayor calidad y con menos errores.

La herencia hace posible definir sistemas ms fiables, ms fciles de ampliar y menos costosos de mantener. Un diseo orientado a objetos es una herramienta clave para enfrentarse a problemas complejos porque favorece el paso de pequeos a grandes sistemas. Las aplicaciones requieren escribir menos lneas de cdigo, menos sentencias de bifurcacin y por lo tanto, los mdulos son ms comprensibles. La encapsulacin ayuda a construir sistemas ms seguros. En contraste con la programacin tradicional, donde siempre existe la posibilidad de que una modificacin de un procedimiento o de una estructura de datos afecte

a otros procedimientos, la programacin orientada a objetos no necesita examinar todo el cdigo fuente para ver si un cambio local afecta a otras partes.

Segn lo expuesto, las ventajas de la programacin orientada a objetos son sustanciales. Sin embargo, tambin presenta algunas desventajas que citamos a continuacin:

La ejecucin de una aplicacin orientada a objetos resulta ms lenta. Es preciso desarrollar bibliotecas de clases, lo que obliga al usuario a tomar conocimientos de las mismas, al mismo tiempo su administracin es difcil y costosa.

Hay costos inevitables, asociados al entrenamiento y aprendizaje.

CARACTERSTICAS DE LA POO

Las caractersticas fundamentales de la POO son: abstraccin, encapsulamiento, herencia y polimorfismo.

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". 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 comente, 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 importamos el comportamiento de los circuitos electrnicos que componen estas unidades.

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 almacenados 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.

La Abstraccin se puede resumir en lo siguiente: Denota las caractersticas esenciales que distinguen a un objeto de otros tipos de objetos, definiendo precisas fronteras conceptuales, relativas al observador. Surge del reconocimiento de caractersticas similares entre ciertos objetos, situaciones o procesos en el mundo real, decide concentrarse en ellas e ignorar las diferencias. Enfatiza detalles con significado para el

usuario, suprimiendo aquellos detalles que, por el momento, son irrelevantes o distraen de lo esencial.

Encapsulamiento

El encapsulamiento u ocultamiento 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 un objeto 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.

La encapsulacin sirve para separar la interface de una abstraccin y su implementacin. El encapsulamiento esconde la implementacin del objeto que no contribuye a sus caractersticas esenciales. La encapsulacin da lugar a que las clases se dividan en dos partes:

Interface. Captura la visin externa de una clase, abarcando la abstraccin del comportamiento comn a los ejemplos de esa clase. Implementacin. Comprende la representacin de la abstraccin, as como los mecanismos que conducen al comportamiento deseado.

En Java 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. Ahora, el ocultamiento de informacin se refiere a la propiedad que tienen las clases de restringir el acceso a los atributos que la conforman, es decir, cuando se define un atributo se le puede asignar el tipo de acceso que tendr, pudiendo declararse como private protected.

Herencia

La herencia es el mecanismo para compartir automticamente mtodos y atributos entre clases y subclases. Por ejemplo, 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 Java, 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. (Java no lo contempla).

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. El polimorfismo puede presentarse a travs de la sobrecarga o sobreescritura.

Sobrecarga de mtodos: Permite la reescritura de mtodos dentro de la misma clase, siempre y cuando estos difieran en los siguientes aspectos: Nmero de parmetros. Tipo de los parmetros. Tipo del valor de retorno. public class Sobrecarga { public void Numeros(int x, int y){ System.out.println("Mtodo que recibe enteros."); } public void Numeros(double x, double y){ System.out.println("Mtodo que recibe flotantes."); } public void Numeros(String cadena){ System.out.println("Mtodo que recibe una cadena: "+ cadena); } public static void main (String... args){ Sobrecarga s = new Sobrecarga(); int a = 1; int b = 2; s.Numeros(a,b); s.Numeros(3.2,5.7); s.Numeros("Monillo007"); } } Sobreescritura de mtodos: Permite que los mtodos declarados en una superclase puedan ser reescritos en una de las subclases de sta.

RELACIONES ENTRE CLASES Al realizar abstracciones, uno se da cuenta de que muy pocas clases se encuentran aisladas. En vez de ello, la mayora colaboran con otras de varias maneras. Al disear un sistema no slo deben identificarse los elementos que lo integran, sino tambin como estos estn relacionados. En la Programacin Orientada a Objetos existen diferentes tipos de relaciones, tal como se muestra a continuacin: a) Dependencias. Representan relaciones de uso entre clases, por ejemplo, las tuberas dependen del calentador para transportar el agua caliente. b) Generalizaciones. Conectan clases generales con sus especializaciones, por ejemplo, un mirador es un tipo de ventana con grandes hojas de cristal fijas, una ventana de patio es un tipo de ventana con hojas de cristal que se abren de lado a lado. c) Asociaciones. Representan relaciones estructurales entre objetos, por ejemplo, un cliente compra en una mueblera. d) Realizaciones. es una relacin semntica entre clasificadores, en donde un clasificador especifica un contrato que otro clasificador garantiza que cumplir e) Agregaciones y Composiciones. Tipo especial de asociacin.

Al construir una casa, cosas como paredes, puertas, ventanas, armarios y luces formarn parte de nuestro vocabulario. Sin embargo, ninguna de esas cosas se encuentra aislada. Las paredes limitan con otras paredes. Las puertas y las ventanas se colocan en las paredes para hacer aberturas para la gente y la luz. Los muebles y las luces estn fsicamente adyacentes a las paredes y techos. Las paredes, las puertas, los armarios y las luces se pueden agrupar para formar cosas ms complejas, como las habitaciones. Entonces, una Relacin es una conexin entre elementos, cualquier relacin se representa con una lnea, usando diferentes tipos de lneas para diferenciarlas.

ASOCIACIN Una asociacin es una relacin estructural que especifica que los objetos de un elemento estn conectados con los objetos de otro. Dada una asociacin entre dos clases, se puede establecer una relacin desde un objeto de una clase hasta algunos objetos de la otra clase.

DEPENDENCIA Una dependencia es una relacin de uso que declara que un elemento (por ejemplo, la clase Ventana) utiliza informacin y los servicios de otro elemento (por ejemplo, la clase Evento)

GENERALIZACION Una generalizacin es una relacin de especializacin/generalizacin en la cual el elemento especializado (el hijo) se basa en la especificacin del elemento generalizado (el padre). El hijo comparte la estructura y el comportamiento del padre. Grficamente, una relacin de generalizacin se representa como una lnea continua con una punta de flecha vaca apuntando al padre.

AGREGACIN Agregacin. Una asociacin normal entre dos clases representa una relacin estructural entre iguales, es decir, ambas clases estn conceptualmente en el mismo nivel, sin ser ninguna ms importante que la otra. A veces, se desea modelar una relacin "todo/parte", en la cual una clase representa una cosa grande (el "todo"), que consta de elementos ms pequeos (las "partes"). Este tipo de relacin se denomina agregacin, la cual representa una relacin del tipo "tiene un", o sea, un objeto del todo tiene objetos de la parte. En realidad, la agregacin es slo un tipo especial de asociacin y se especifica aadiendo a una asociacin normal un rombo vaco en la parte del todo

COMPOSICIN La agregacin resulta ser un concepto simple con una semntica bastante profunda. La agregacin simple es puramente conceptual y no hace ms que distinguir un "todo" de una "parte". La agregacin simple no cambia el significado de la navegacin a travs de la asociacin entre el todo y sus partes, ni liga las vidas del todo y las partes. Sin embargo, existe una variacin de la agregacin simple (la composicin) que aade una semntica importante. La composicin es una forma de agregacin, con una fuerte relacin de pertenencia y vidas coincidentes de la parte con el todo. Las partes con una multiplicidad no fijada pueden crearse despus de la parte compuesta a la que pertenecen, pero una vez creadas viven y mueren con ella. Tales partes tambin se pueden eliminar explcitamente antes de la eliminacin de la parte compuesta. Esto significa que, en una agregacin compuesta, un objeto puede formar parte de slo una parte compuesta a la vez. Por ejemplo, en un sistema de ventanas, un Marco pertenece exactamente a una Ventana. Esto contrasta con la agregacin simple, en la que una parte se puede compartir por varios agregados. Por ejemplo, en el modelo de una casa, una Pared puede ser parte de uno o ms objetos Habitacion.

REALIZACIN En cuarto lugar, una realizacin es una relacin semntica entre clasificadores, en donde un clasificador especifica un contrato que otro clasificador garantiza que cumplir. Se pueden encontrar relaciones de realizacin en dos sitios: entre interfaces y las clases y componentes que las realizan, y entre los casos de uso y las colaboraciones que los realizan. Grficamente, una relacin de realizacin se representa como una mezcla entre una generalizacin y una relacin de dependencia.

CONCEPTOS BSICOS DE LA PROGRAMACIN ORIENTADA A OBJETOS

Objetos

Un objeto es una encapsulacin (agrupacin)

de datos y de los mtodos para

manipularlos, es una entidad que tiene unos atributos particulares, los datos, y unas formas de operar sobre ellos, los mtodos. Por lo tanto, un objeto contiene por una parte, operaciones que definen su comportamiento y por otra, variables, manipuladas por esas operaciones, que definen su estado. Por ejemplo, una ventana Windows contiene operaciones como maximizar y minimizar (los mtodos) y variables como ancho y alto (los atributos).

Mtodos

Un mtodo (que en otros lenguajes se denomina funcin miembro) se implementa en una clase, y determina cmo tiene que actuar el objeto cuando recibe un mensaje. En adicin, las variables asociadas o atributos permitirn almacenar informacin para dicho objeto. Un mtodo puede tambin enviar mensajes a otros objetos solicitando una accin o informacin. La descripcin o signatura de un mtodo se denomina operacin.
Objeto

mensajes

atributos Mtodos

La estructura interna de un objeto est oculta para otros usuarios y la nica conexin que tiene con el exterior son los mensajes. Los atributos (datos) que oculta un objeto, solamente pueden ser manipulados por los mtodos asociados al propio objeto. Los mensajes son la especificacin de una comunicacin entre objetos que transmiten informacin, con la expectativa de que se desencadenara una actividad. Ahora una Interaccin es un comportamiento que incluye un conjunto de mensajes

intercambiados por un conjunto de objetos dentro de un contexto para lograr un propsito.

La ejecucin de un programa orientado a objetos realizar fundamentalmente tres cosas:

1. Crear los objetos necesarios. 2. Los mensajes enviados a unos y otros objetos darn lugar a que se procese internamente la informacin. 3. Finalmente, cuando los objetos no son necesarios, sern borrados, liberndose la memoria ocupada por los mismos.

Clases

Una clase se puede considerar como una plantilla para crear objetos de esa clase o tipo. Una clase describe los mtodos y atributos que definen las caractersticas comunes a todos los objetos de esa clase. Precisamente la clave de la programacin orientada a objetos est en abstraer los mtodos y atributos de objetos y encapsularlos en una clase. comunes a un conjunto

Una clase es un tipo de objeto definido por el usuario. En otras palabras, una clase equivale a la generalizacin de un tipo especfico de objeto. Un objeto es la concrecin de una clase (algunos autores utilizan el trmino instancia, traduccin directa de instance). Por ejemplo, un objeto de la clase C sera un ejemplar O de esa clase. Entonces, para disponer de un objeto, primero se abstraen las caractersticas comunes de ese grupo de objetos, despus se delimitan esas caractersticas comunes (clase) y por ltimo se pone nombre a uno o ms ejemplares de la clase (objetos).

Aunque en las definiciones anteriores hemos utilizado el trmino objeto como sinnimo de instancia, en general, cuando hablamos de objetos nos referimos, dependiendo del contexto, a clases o a instancias. Esto es as, porque un objeto es, por una parte, un

principio de organizacin, y por otra, una regin de almacenamiento que contiene una copia del elemento especificado por una clase. Desde este segundo punto de vista, los trminos objeto e instancia son sinnimos; no sucediendo lo mismo desde el primer punto de vista, por lo que no conviene popularizar el trmino instancia. Como ejemplo, consideremos el diseo de un procesador de textos utilizando la programacin orientada a objetos. Primeramente, identificamos entidades de inters, como son prrafos, cabeceras, pies, etc., las cuales pueden ser objetos potenciales. A continuacin analizamos estas entidades; por ejemplo, un prrafo normalmente est justificado, lo que quiere decir que podemos pensar en un mtodo, que podemos llamar justificacin, comn a todos los prrafos. Normalmente, en un documento, todos los prrafos se escriben con el mismo tipo de letra, entonces fuente es un atributo comn para todos los prrafos. Un prrafo est formado por su propio texto, entonces texto es un atributo que tendr un valor especfico para cada prrafo. Podemos agrupar la descripcin comn a los prrafos, formando as la clase prrafo, la cual nos permitir construir objetos de esta clase; esto es, prrafos.

Un atributo asociado con una clase representa un valor que es compartido por todos los objetos de esa clase; esto es, slo existe una copia de ese atributo (en Java este tipo de atributo es static). En cambio, un atributo asociado a un objeto de una clase representa un valor particular a ese objeto; esto es, cada objeto tiene su propio copia.

Para crear un objeto de una determinada clase simplemente hay que declarar una variable de dicha clase. Por ejemplo, la siguiente declaracin en Java crea un objeto de la clase prrafo: el objeto prrafo1.

Parrafo parrafo1;

Si ms adelante quisiramos justificar el texto de parrafo1, tendramos que enviarle el mensaje justificacin.

Parrafo1.justificacin();

SUBCLASES 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 padre. Por ejemplo, supongamos una clase persona, clase persona atributos Nombre Direccin mtodos CambiarNombre 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 CambiarCurso 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, CambiarDireccn, Cambiar Estudios, CambiarCurso y ListarDatos. As mismo sucede que hemos redefinido 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

Alumno

Empleado

Administrativo

Profesor

MENSAJES

Para poder crear una aplicacin necesitars ms de un objeto, y estos objetos no pueden estar aislados unos de otros, pues bien, para comunicarse esos objetos se envan mensajes. Los mensajes son simples llamadas a las funciones o mtodos del objeto con l que se quiere comunicar para decirle que haga cualquier cosa.

RECOLECTOR DE BASURA El entorno de ejecucin de Java tiene un recolector de basura que peridicamente libera la memoria ocupada por los objetos que no se van a necesitar ms. El recolector de basura de Java es un barredor de marcas que escanea dinmicamente la memoria de Java buscando objetos, marcando aquellos que han sido referenciados.

Despus de investigar todos los posibles paths de los objetos, los que no estn marcados (esto es, no han sido referenciados) se les conoce como basura y son eliminados. El recolector de basura se ejecuta sncronamente cuando el sistema funciona fuera de memoria o en respuesta a una peticin de un programa Java. Un programa Java le puede pedir al recolector de basura que se ejecute en cualquier momento mediante una llamada a System.gc().

También podría gustarte