RSS

Orientación a objetos (I)

04 May

Encapsulación

La encapsulación es la forma de ocultar ciertos elementos de la implementación de una clase y, al mismo tiempo, proporcionar una interfaz pública para el software cliente.

Es una forma más de ocultar los datos, ya que la información de los atributos es un elemento significativo de la implementación de las clases. Forzamos a que el código llamante que usa nuestras clases utilicen métodos para acceder a los atributos en lugar de usar los atributos directamente.

¿Cómo hacemos esto?

  • Protegiendo los atributos de nuestras clases (usando el modificador private)
  • Suministrando métodos públicos para acceder a nuestros atributos privados.
  • Nombrando estos métodos como se nos indica en las reglas de convención para JavaBeans (getNombreAtributo, isNombreAtributo, setNombreAtributo)

Herencia

Toda clase en Java hereda de la clase Object. De modo que toda clase que creemos heredará los métodos de Object (equals, clone, notify…)

Los motivos más usuales para utilizar la herencia son:

  • Reutilizar código
  • Poder hacer uso del Polimorfismo

¿Cómo reutilizamos código en la herencia?
En la herencia, al poner los atributos y comportamiento común en la clase padre estamos evitando repetir este código en cada clase hija.
Cada subclase definirá solo los atributos y métodos que la hacen una clase más especializada y de forma automática heredará los atributos y métodos de la clase padre.

¿Cómo hacemos uso del polimorfismo en la herencia?
Un objeto sólo tiene una forma (aquella que se le asigna cuando se construye). Sin embargo, una variable es polimórfica porque puede hacer referencia a objetos de distintas formas.

Java, como la mayoría de los lenguajes de programación orientado a objetos, permite hacer referencia a un objeto con una variable que es uno de los tipos de una superclase. Por lo tanto sería posible:

Superclase variable = new Subclase();

Empleado e1 = new Tecnico();

Las variable e1, puede acceder únicamente a las partes del objeto que son componentes de Empleado; las partes específicas de Tecnico están ocultas.
Esto es porque, por lo que respecta al compilador, e1 es un Empleado, no un Gerente.

Usamos el polimorfismo en la herencia cuando en el código no nos importa qué subclase es, sino que lo que nos importa es que es una subclase de la clase padre que nos interesa.
Por ejemplo, supongamos un array con objetos de las distintas subclases de Empleado.
Podríamos recorrer este array volcando cada objeto en una variable de la superclase y acceder a un método común, getNombreEmpleado().

Empleado[] empleados = new Empleado[4];
empleados[0]=new Tecnico();
empleados[1]=new Secretario();
empleados[2]=new Contable();
empleados[3]=new Tecnico();

for (int i=0; i<4; i++){
Empleado e = empleados[i];
System.out.println(e.getNombre());
System.out.println(e.getAntiguedad());
System.out.println(e.getSueldo());

}

Relación “es-un”

El concepto es-un se basa en la herencia o en la implementación de interfaces. Es una forma de decir que “una cosa es un tipo de otra cosa”.
En Java estas relaciones se expresan mediante las palabras claves extends o implements.

En el ejemplo anterior cuando Tecnico hereda de Empleado podemos decir que el “Tecnico es un Empleado”.

Relación “tiene-un”

El concepto tiene-un se basa en la composición. Es decir se produce cuando para definir una clase estamos usando otra clase.

Por ejemplo, la clase Tecnico podría tener como atributo proyectoActual de tipo Proyecto. Podemos decir que el “Tecnico tiene-un Proyecto”.

Sobrescritura de métodos

En las subclases además de poder añadir nuevos atributos para ampliar la clase padre, es posible modificar un método de la clase original.

Si se define un método en una subclase de tal forma que su nombre, el tipo de retorno y  la lista de argumentos son idénticos a los de la clase padre, se dice que el nuevo método sobrescribe al antiguo.

A partir de la versión J2SE 5.0, también se permite que el tipo de retorno pueda ser una subclase del tipo de retorno del método original.

Los métodos sobrescritos no pueden ser menos accesibles

El nuevo método no puede ser menos accesible que el método original. Por ejemplo, si en la clase padre el método que queremos sobrescribir era public, el método en la clase hija no puede ser private.

Llamada a métodos sobrescritos

Un método de una subclase puede llamar a un método de una superclase usando la palabra clave super.
La palabra super se refiere a la superclase de la clase en la que estamos haciendo uso de ella.

Se usa para hacer referencia a las variables miembro o a los métodos de la superclase.

Una llamada a super.metodo() llama al comportamiento completo del método como si hubiera sido llamado en una clase de nivel superior. El método no tiene que estar definido en la clase inmediatamente superior, puede heredarse de alguna clase situada más arriba en la jerarquía.

Sobrescritura de métodos y excepciones

Cuando se sobrescribe un método que genera excepciones, el método que sobrescribe puede declarar sólo excepciones que sean la misma clase o una subclase de las excepciones.

Está permitido declarar métodos de sobrescritura que generen menos excepciones que el método de la superclase, incluso que no generen ninguna excepción.

Anuncios
 
1 comentario

Publicado por en 4 mayo, 2011 en Estudio, Tema 2

 

Etiquetas: , , ,

Una respuesta a “Orientación a objetos (I)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: