EXES
CRÉDITOS
ÍNDICE DEL MANUAL
PRÓLOGO
EL LENGUAJE JAVA
BIBLIOGRAFÍA
EXES. LA COMPAÑÍA
 
Área de Programación y Desarrollo
  Curso de Introducción a Java
www.exes.es
Tel: 902 360 417
 Exes   Contactar 

4.2 Introducción a la programación orientada a objetos

Si nos fijamos en la vida real podremos apreciar que casi todo se compone de objetos ( coche, lapicero, casa y, por que no, personas). Todos entendemos que tanto un BMW verde como un SEAT rojo son coches, pero son distintos en su aspecto físico. Pero a pesar de esa diferencia de aspecto entendemos que ambos tienen unas características comunes como son poseer ruedas, un volante, asientos, Esas características comunes son las que hacen pensar en el concepto coche en ambos casos. A partir de ahora podemos interpretar que el BMW y el SEAT son objetos, y el tipo o clase, de esos objetos es coche.

Además podemos suponer que la clase de un objeto describe como es dicho objeto.

Por ejemplo:

	         clase Coche:
		         4 ruedas
		         1 volante
		         5 asientos
		         acelerar
		         frenar
		         girar
		   

Como podemos ver esta clase no sólo describe que cosas posee un coche, sino que también describe que acciones puede realizar un coche (acelerar, frenar y girar). Es decir, una clase define los atributos y las acciones(o métodos) que puede realizar un objeto de la clase.

Además podemos comprobar que un objeto puede estar formado por otros objetos, por ejemplo el coche posee 4 objetos de la clase Rueda.

En el mundo real los objetos se relacionan entre sí, un objeto puede pedir a otro que realice alguna acción por él. En la vida real una persona acelera, pero lo hace pidiéndoselo al coche, que es quien realmente sabe acelerar, no la persona. El hecho de que un objeto llame a un método de otro objeto se indica diciendo que el primer objeto ha enviado un mensaje al segundo objeto, el nombre del mensaje es el nombre de la función llamada.

Podemos interpretar que una clase es el plano que describe como es un objeto de la clase, por tanto podemos entender que a partir de la clase podemos fabricar objetos. Ese objeto construido se le denomina instancia, y al proceso de construir un objeto se le llama instanciación.

Cuando se construye un objeto es necesario dar un valor inicial a sus atributos, es por ello que existe un método especial en cada clase llamado constructor, el cuál es ejecutado de forma automática cada vez que es instanciada una variable. Generalmente el constructor se llama igual que la clase y no devuelve ningún valor. Análogamente destructor es un método perteneciente a una clase que es ejecutado de forma automática cuando un objeto es destruido. Java no soporta los destructores. Es posible que exista más de un constructor en una clase, diferenciados sólo en los parámetros que recibe, pero en la instanciación sólo será utilizado uno de los constructores.

Es recomendable emplear el constructor para inicializar las variables internas del objeto, o para obtener recursos, mientras que el destructor se suele emplear para liberar esos recursos obtenidos en el constructor.

Imaginemos ahora un televisor, nosotros que poseemos el mando A distancia/Online podemos manejar el volumen del televisor, pero no nos haría gracia que otra persona pudiese manejar el volumen a su antojo. Lo mismo sucede con objetos: un objeto que no quiere que otro objeto llame a un método o acceda a un atributo debe de definir a dichos atributos y métodos como privados. En cambio si los definimos como públicos cualquier objeto podrá utilizarlos.

Pensemos ahora en un coche deportivo y en un coche utilitario, ambos son coches, pero hacemos la distinción deportivo y utilitario porque son diferencias lo suficientemente importantes para ser tenidas en cuenta, pero no tanto como para pensar que uno es un coche, pero el otro no. Esta situación se interpreta pensando en que existen dos clases: Deportivo y Utilitario, pero que ambas, además de sus propias características (atributos y métodos) poseen las de la clase coche, esto es la herencia. Denominaremos clase base a la clase de la cuál heredamos y derivada a la clase que hereda de la clase base.

Existen dos tipos de herencia sencilla y múltiple. Sencilla significa que sólo heredamos de una clase base, mientras que múltiple indica que tenemos varias clases base (por ejemplo un hidroavión hereda de barco y de avión). Java sólo soporta herencia simple.

Al utilizar la herencia aparecen dos conceptos: super y this, this representa al objeto completo, en cambio super sólo representa la parte heredada de la clase base.

Cuando se hereda nos encontramos frente a un pequeño problema: ¿Qué sucede cuando se hereda un método de la clase base, el cuál estamos redefiniendo en la clase derivada? Esto es un caso de sobrescritura de métodos. La solución es simple, cuando estemos ejecutando el método de un objeto derivado se llamará al método de su propia clase, es decir el redefinido. Si lo que se quiere es emplear el método de la clase base hay que emplear una técnica que consiste en usar: super.método().

Los constructores no son heredados, pero sí llamados. Es decir, cuando se construye un objeto de la clase derivada se llama al constructor de la clase derivada, pero antes de comenzar a ejecutarse se llama al constructor de la clase base, que tras ejecutarse continua la ejecución del constructor de la clase derivada.

Se puede elegir que constructor de la clase base es llamado, generalmente llamando al método super(), que representa al constructor de la clase base, pero al pasar parámetros distintos seleccionamos que constructor de la clase base queremos llamar.

Supongamos ahora que tenemos algo que es capaz de encenderse, de apagarse, de iniciar una reproducción, de parar una reproducción, sin duda todos pensamos en un reproductor, pero por esa descripción encajan objetos como reproductor de cassete, reproductor de CD, el vídeo,

Llamaremos a la descripción interfaz, y los objetos que cumplen ese interfaz (es decir, tienen todas las funciones que definen el interfaz) diremos que implementan el interfaz. Pensemos ahora en el hecho que una persona que sabe iniciar una reproducción de un CD también sabe iniciar una reproducción de video, en ambos casos debe de encender el objeto, iniciar la reproducción, parar la reproducción y apagar el reproductor. Eso significa que para la persona es transparente el tipo (clase) real del objeto reproductor que posea, ya que la persona sabe que puede ponerlo en marcha, apagarlo, sin necesidad de conocer la clase real, tan sólo debe de saber que es un objeto del tipo reproductor.

Este hecho de que un objeto pertenezca a una clase, pero que pueda cumplir uno o más interfaces es muy similar al hecho de que una persona (un objeto) es hija (un interfaz), posiblemente tía (otro interfaz) o incluso abuela (otro interfaz). Con esto lo que se indica es que un interfaz sólo tiene interés para quien lo necesite usar, es decir el interfaz tío sólo lo necesitan los objetos sobrinos, no un objeto de tipo policía.

Esta característica de que varios objetos de distintas clases puedan recibir el mismo mensaje y son capaces de responderlo, es conocido como polimorfismo.

··> Ver todos los cursos
··> Si necesitas más información, contáctanos aquí
 
 
 
Sello de Calidad   Sello de Calidad
  EXES - C/ Albasanz, 14 Bis, 1-C. 28037 Madrid - Tel: 902 360 417 Fax: 902 931 305 - exes@exes.es