Vous êtes sur la page 1sur 6

1.

Introduccin a la POO

Libre Configuracin

Unidad 1 - Introduccin a la POO


Qu es la POO?
Las siglas POO se corresponden con Programacin Orientada a Objetos, aunque muchas veces las
podemos encontrar escritas en ingls OOP (Object Oriented Programming).
La Programacin Orientada a Objetos trata de utilizar una visin real del mundo dentro de nuestros
programas. La visin que se tiene del mundo dentro de la POO es que se encuentra formado por
objetos, si queremos resolver un problema determinado, debemos identificar cada una de las partes
del problema con objetos presentes en el mundo real.

Objetos
Un objeto es la pieza bsica de la POO, es una representacin o modelizacin de un objeto real
perteneciente a nuestro mundo, por ejemplo, podemos tener un objeto perro que represente a un perro
dentro de nuestra realidad, o bien un objeto factura, cliente o pedido.
Los objetos en la vida real tienen todos, dos caractersticas: estado y comportamiento. El estado de un
objeto viene definido por una serie de parmetros que lo definen y que lo diferencian de objetos del
mismo tipo. En el caso de tener un objeto perro, su estado estara definido por su raza, color de pelo,
tamao, etc. Y el comportamiento viene definido por las acciones que pueden realizar los objetos, por
ejemplo, en el caso del perro su comportamiento sera: saltar, correr, ladrar, etc. El comportamiento
permite distinguir a objetos de distinto tipo, as por ejemplo el objeto perro tendr un comportamiento
distinto a un objeto gato.
Los parmetros o variables que definen el estado de un objeto se denominan atributos o variables
miembro y las acciones que pueden realizar los objetos se denominan mtodos o funciones miembro, y
para indicar variables miembro y funciones miembro se utiliza el trmino general miembro.
Los atributos de un objeto deben encontrarse ocultos al resto de los objetos, es decir, no se va a poder
acceder directamente a los atributos de un objeto para modificar su estado o consultarlo. Para acceder
a los atributos de un objeto se deben utilizar mtodos. Es decir, los mtodos exponen toda la
funcionalidad del objeto, mientras que los detalles del estado interno del objeto permanecen ocultos.
Incluso algunos mtodos tambin pueden permanecer ocultos. El hecho de ocultar la implementacin
interna de un objeto, es decir, como est construido y de que se compone se denomina encapsulacin.
La encapsulacin es uno de los beneficios y particularidades del paradigma de la Programacin
Orientada a Objetos.
Normalmente un objeto ofrece una parte pblica que ser utilizada por otros objetos para interactuar
entre s, pero tambin permanece una parte oculta para encapsular los detalles de la implementacin
del objeto. De este modo es mucho ms sencillo localizar errores en los programas puesto que cada
objeto est altamente especializado, y slo se encarga de su tarea. Como se puede observar, esto
consigue una mayor modularidad, que facilita adems el diseo en equipo de programas y la
reutilizacin de clases (componentes) creados por otros desarrolladores.
La abstraccin indica la capacidad de ignorar determinados aspectos de la realidad con el fin de
facilitar la realizacin de una tarea. Nos permite ignorar aquellos aspectos de la realidad que no
intervienen en el problema que deseamos abordar, con lo cual slo necesitamos conocer qu es lo que
hace un objeto, y no cmo lo hace, para definir un objeto y establecer las relaciones de ste con otros
objetos.

-1-

1. Introduccin a la POO

Libre Configuracin

La encapsulacin ofrecida a travs de objetos tienen varios beneficios, entre los que destacan la
modularidad y la ocultacin de la informacin.

Figura 1

Mensajes
Los mensajes son la forma que tienen de comunicarse distintos objetos entre s. Un objeto por s slo
no es demasiado til, sino que se suele utilizar dentro de una aplicacin o programa que utiliza otros
objetos. Un mensaje enviado a un objeto representa la invocacin de un determinado mtodo sobre
dicho objeto, es decir, la ejecucin de una operacin sobre el objeto. Es la manera en la que un objeto
utiliza a otro, el modo en el que dos objetos se comunican, ya que la ejecucin de ese mtodo
retornar el estado del objeto invocado o lo modificar.
Para enviar un mensaje se necesitan tres elementos: el objeto al que se le va a enviar el mensaje, el
nombre del mtodo que se debe ejecutar y los parmetros necesarios para el mtodo en cuestin.

Clases
Una clase es un molde o prototipo que define un tipo de objeto determinado. Una clase define los
atributos y mtodos que va a poseer un objeto. Mediante las clases podremos crear o instanciar objetos
de un mismo tipo, estos objetos se distinguirn unos de otros a travs de su estado, es decir, el valor de
sus atributos.
La clase la vamos a utilizar para definir la estructura de un objeto, es decir, estado (atributos) y
comportamiento (mtodos). La clase es un concepto abstracto que generalmente no se va a utilizar
directamente en nuestros programas o aplicaciones. Lo que vamos a utilizar van a ser objetos
concretos que son instancias de una clase determinada.
La clase es algo genrico y abstracto, es similar a una idea. Cuando decimos piensa en un coche todos
tenemos en mente la idea general de un coche, con puertas, ruedas, un volante, etc., sin embargo
cuando decimos "ese coche que est aparcado ah fuera", ya se trata de un coche determinado, con una
matrcula, de un color, con un determinado nmero de puertas, y que podemos tocar y utilizar si es
necesario. Sin embargo como ya hemos dicho la clase es la idea que define al objeto concreto.

Herencia
La herencia es un mecanismo mediante el cual podemos reutilizar clases ya definidas. Es decir, si
tenemos una clase botn que define un tipo de objeto que se corresponde con un botn que tiene un
texto, que se puede pulsar, etc., si queremos definir una nueva clase llamada botn de color, no
tenemos que rescribir todo el cdigo y crear una clase completamente nueva, sino lo que haremos ser
heredar de la clase botn, utilizar lo que nos ofrezca esta clase y aadirle lo que sea necesario para la
nueva funcionalidad deseada.
-2-

1. Introduccin a la POO

Libre Configuracin

La herencia dentro de la POO es un mecanismo fundamental que se puede definir tambin como una
transmisin de las caractersticas de padres a hijos. Entendiendo aqu caractersticas como mtodos y
atributos de una clase. La clase hija puede aadir atributos, mtodos y redefinir los mtodos de la clase
padre. Podemos ver la herencia como una sucesiva especializacin de las clases. La clase de la que se
hereda se suele denominar clase padre o superclase, y la clase que hereda se denomina clase hija o
subclase. En las clases hijas podemos redefinir el comportamiento de la clase padre.
Mediante el mecanismo de herencia podemos definir superclases denominadas clases abstractas que
definen comportamientos genricos. De esta clase pueden heredar otras clases que ya implementan de
forma ms concreta estos comportamientos. De esta forma podremos crear jerarquas de clases.

Mtodos
Los mtodos son las acciones que se pueden realizar con los objetos. Tambin se podra definir un
mtodo como la implementacin de un mensaje, al fin y al cabo, un mensaje es la llamada o invocacin
de un mtodo de un objeto. Existen dos mtodos especiales dentro de la POO que se denominan
constructor y destructor.
El mtodo constructor se ejecuta automticamente cada vez que se crea un objeto de la clase en
cuestin, sobre el objeto que acaba de crearse, inmediatamente despus de haberse asignado memoria
a dicho objeto. Algunos lenguajes proporcionan un constructor por defecto, pero generalmente lo
correcto es que lo defina el diseador de la clase y que en l se lleven a cabo las inicializaciones y
todas aquellas operaciones que se necesiten para poder usar el objeto.
El mtodo destructor se invoca automticamente inmediatamente antes de liberar la memoria del
objeto en cuestin, o lo que es lo mismo, antes de que se salga del mbito de la declaracin del objeto,
por lo que se ha de emplear para que la destruccin del objeto se efecte correctamente y contendr
operaciones tales como liberacin de memoria asignada dinmicamente dependiente del objeto,
grabacin de todos o parte de los atributos del objeto en un fichero o base de datos y operaciones
similares.

Polimorfismo
El trmino polimorfismo expresa la posibilidad de que el mismo mensaje, enviado a objetos distintos,
ejecute mtodos distintos. Esto significa que podemos definir dentro de dos clases distintas dos
operaciones con el mismo nombre y aspecto externo, pero con distintas implementaciones para cada
clase.
En el momento de emplear estas operaciones, el lenguaje es capaz de ejecutar el cdigo
correspondiente dependiendo de la clase del objeto sobre el que se ejecuta la operacin. Esto permite
definir un interfaz comn, un aspecto externo idntico, para una serie de clases.
De esta forma podemos definir un mtodo suma() para la clase Enteros y otro mtodo suma() para la
clase Matrices. El mensaje ser el mismo, pero la implementacin de los mtodos ser distinta ya que
no es lo mismo sumar enteros que matrices.

Sobrecarga
La sobrecarga de mtodos se produce cuando una clase tiene mtodos con el mismo nombre pero que
difieren o bien en el nmero o en el tipo de los parmetros que reciben dichos mtodos.
Un ejemplo de sobrecarga los podemos tener en el mtodo imprimir(), mediante este mtodo vamos a
imprimir en pantalla y realizar un salto de lnea. Este mtodo acepta como parmetro una variable de
-3-

1. Introduccin a la POO

Libre Configuracin

tipo entero o una variable de tipo cadena de caracteres, incluso si no indicamos ningn parmetro
realizara un salto de lnea.

Modelo de objetos
El modelo de objetos es un conjunto de principios que se deben dar para que se puedan modelar
objetos computacionales (objetos dentro de nuestro cdigo y programas) a partir de objetos de la
realidad de manera que stos reflejen los posibles comportamientos presentes en la realidad y
compongan un modelo computacional vlido.
Es decir, definido e identificado un problema se trata de realizar una representacin lgica de los
objetos que forman parte del problema en el mundo real, de esta forma podremos utilizar en nuestro
programa estos objetos para dar la solucin a travs de nuestro cdigo. Por lo tanto antes de empezar a
construir un programa para una tarea especfica, es necesario construir y disear su modelo de objetos.

Relaciones entre clases


Una clase por s sola no ofrece una funcionalidad demasiado interesante, el lenguaje Java se encuentra
formado por un gran nmero de clases que forman parte de una compleja y completa jerarqua. Cada
una de las clases est especializada en una funcin o tarea especfica, es decir, se da una gran
modularidad, cada clase tiene su cometido.
Por lo tanto para ofrecer una mayor funcionalidad y realizar tareas ms complejas es necesario que
exista una relacin entre distintas clases. Un ejemplo podra ser las piezas del motor de un coche. Las
piezas por si solas no realizan ninguna tarea de importancia, cuando realmente se saca provecho de
ellas es cuando se relacionan entre s y se construye con ellas un motor. A su vez este motor puede ser
incorporado dentro de un coche, que estar compuesto a su vez de ms objetos o piezas.
Bsicamente una clase se puede relacionar con otra de tres formas diferentes. Las relaciones que
podemos distinguir son:

Relacin de composicin: una clase puede estar compuesta de otras clases. Esto se
consigue implementando los atributos de la clase como objetos de otra clase. Una clase hace
uso de otra a travs de sus atributos, una clase se encuentra formada por varias clases. Por
ejemplo la clase Coche tiene atributos que son de la clase Puerta, Rueda, Motor, etc.

Relacin de uso: una clase se relaciona con otra a travs de los mensajes que le enva. Esto se
consigue pasndose una instancia de la clase como uno de los parmetros del mtodo
invocado por el mensaje. Es decir, si tenemos la clase Pantalla con el mtodo dibujar() y
queremos dibujar un objeto de la clase Rectngulo, deberamos realizar lo siguiente
objPantalla.dibujar(Rectangulo), es decir, el parmetro que se le pasa al mtodo dibujar() de la
clase Pantalla es un objeto de la clase Rectngulo.

Relacin de herencia: este tipo de relacin entre clases ya la conocemos y consiste en que
una clase hija hereda de una clase padre o superclase pudiendo utilizar as toda la
funcionalidad ofrecida por la clase padre y aadir nuevas funcionalidades. En esta forma
de relacin se consigue la reutilizacin del cdigo y una progresiva especializacin a travs
de una jerarqua de clases.

Ventajas e inconvenientes de la POO


Como ventajas o aportaciones podemos destacar las siguientes:
-4-

1. Introduccin a la POO

Libre Configuracin

Facilita la reutilizacin del software. A travs de la herencia. Por otro lado la


encapsulacin nos facilita el uso de objetos que no hemos definido ni implementado.

Facilita la construccin de programas portables. Es posible disear una capa de objetos que se
comunique con la mquina o el sistema operativo, y sobre sta los objetos que dan
funcionalidad a la aplicacin. Java refuerza ms esta caracterstica de la portabilidad, ya que,
el lenguaje Java es independiente de la plataforma en la que se ejecuta.

Facilita el mantenimiento. El encapsulamiento nos garantiza que las modificaciones realizadas


en un objeto tendrn un efecto limitado.

Provoca que las tareas de anlisis, diseo e implementacin sean ms intuitivas, ya que se
manejan objetos, concepto con el que todos estamos familiarizados

La POO ofrece tambin una serie de desventajas, aunque ms que desventajas o inconvenientes
podemos decir que presenta una serie de dificultades:

Curvas de aprendizaje largas, debido principalmente a que implica un cambio mentalidad, y


no slo el aprender un nuevo lenguaje.

Dificultad en determinar las caractersticas de un objeto.

Jerarquas de herencia complejas: en muchos casos se tiende a utilizar de forma desmedida el


mecanismo de herencia

Un ejemplo sencillo
En nuestro ejemplo vamos a tener la clase Video Juego, es decir, vamos a crear el juego de
matamarcianos. No vamos a profundizar demasiado en todos los atributos y mtodos de las clases,
sino que vamos a mostrar nicamente los ms relevantes.
En el primer paso vamos a identificar las clases necesarias para abordar nuestro problema, las
espcificaciones seran:
En el juego tenemos dos tipos de enemigos: marcianos y venusianos.
El protagonista del juego es un terrcola.
El terrcola dispone de un arma para defenderse de los enemigos, un lanza cohetes.
Se pueden distinguir seis clases: VideoJuego, Enemigo, Marciano, Venusiano, Terrcola y
Lanzacohetes.
La clase VideoJuego sera la clase principal y contendra al resto de las clases. Por lo tanto entre la
clase VideoJuego y el resto de las clases existe una relacin de composicin. Esta clase tendra como
atributos posibles: Enemigos, Hroes y Armas; y como mtodos: comenzarPartida(),
interrumpirPartida(), reanudarPartida() y finalizarPartida().
La clase Enemigo en realidad va a ser una clase abstracta, ya que no vamos a instanciar objetos de esta
clase. La clase Enemigo va a ser la clase padre de la clase Marciano y Venusiano, y lo que se consigue
con esta clase es agrupar todo el comportamiento que es comn a los enemigos que aparecen en el
juego. Esta clase tiene los siguientes atributos: Color, NumeroOjos y NumeroPiernas. Estos atributos
sern comunes a las clases Marciano y Venusiano. Existe una relacin de herencia entre la clase
Enemigo y las clases Marciano y Venusiano.
La clase Enemigo podra tener los siguientes mtodos: mover(), atacar() y disparar(). Estos mtodos
tambin sern heredados por la clase hijas mencionadas.

-5-

1. Introduccin a la POO

Libre Configuracin

Las clases Marciano y Venusiano pueden adems de sobrescribir los mtodos heredados de la clase
Enemigo, aportar nuevos mtodos y nuevos atributos. La clase Marciano aade el atributo Visible, es
decir, nuestro amigo tiene la capacidad de hacerse invisible, y la clase Venusiano aade el atributo
NumeroCabezas.
La clase Terrcola representa al hroe de nuestro juego y tiene los atributos: NumeroVidas y
Municin, ambos requieren poca explicacin. Esta clase implementa el mtodo disparar(), que recibe
como parmetro un objeto de la clase LanzaCohetes, la relacin entre ambas clases es una relacin de
uso.
La clase LanzaCohetes que representa el arma que va a utilizar la clase Terrcola y tienen el atributo
NumeroCohetes, y posee el mtodo lanzarCohete().
En la Figura 2 se trata de mostrar un esquema de todas las clases que implementan el problema
propuesto y la relacin existente entre cada una de ellas. Cada clase se representa por una
circunferencia y las relaciones existentes mediante flechas.

Figura 2

-6-

Vous aimerez peut-être aussi