Jerarquía de Clases

3

Click here to load reader

description

Un pequeño escrito acerca de cómo implementar superclases y subclases en Java

Transcript of Jerarquía de Clases

Page 1: Jerarquía de Clases

Jerarquía de Clases

Ing. Diego Enrique Hernández González

6 de octubre de 2010

Conceptos básicosEl propósito de la herencia en la POO es el ahorro de esfuerzo al elaborar el código. A partir de clases

que generalicen el mayor número de características posibles, se pueden declarar otras que tomen esas mismascaracterísticas y que además sirvan para tratar casos particulares. Para ello se necesita plantear una jerarquía declases.

La jerarquía de clases es un conjunto de clases que describen un concepto ampliamente, desde su caso másgeneral a sus casos más particulares; se puede ver también como un árbol, donde las clases que están en losniveles superiores heredan sus atributos y métodos a las que están en los níveles inferiores. Mientras se asciendaen la jerarquía, aumenta el nivel de abstracción en las clases.

La clase que hereda sus atributos y métodos a otra se le denomina clase padre, clase base o superclase. A laclase que recibe esa herencia se le llama clase derivada o subclase. Esta herencia puede ser directa, cuando unasuperclase hereda sus atributos a una subclase del nivel inmediatamente inferior, o indirecta, cuando hereda susatributos a otra que se encuentra 2 o más niveles más abajo en la jerarquía.

Un detalle que no hay que perder de vista: todas las clases en Java, incluso aquellas declaradas por el usuario,son implícitamente subclases de la clase Object; esta hereda métodos para el manejo de los objetos.

Diseño de una jerarquía de clasesSupongamos que en un proyecto tenemos 3 clases: Auto, Bicicleta y Avión. Podríamos programar cada

clase por separado, pero también podríamos colocar sus atributos y método en común en una clase denominadaTransporte (ejemplos: atributos velocidad y cantidad de pasajeros; métodos acelerar y desacelerar). Tambiénpodríamos, si es necesario, manejar casos particulares de cada clase. Desde la clase Auto podríamos derivarotras como AutoDeportivo, AutoCompacto o Camioneta; al igual que con la clase Transporte, en la clase Autose reunirían atributos y métodos que tuvieran en común esas clases derivadas (atributos: número de puertas,kilometraje; métodos: rellenar el tanque, activar los limpiaparabrisas). Para representar una herencia en eldiagrama de clases ésto se usa una flecha con la punta vacía, tal como en la figura 1.

Implementación de una jerarquía de clasesSupongamos que tenemos una clase llamada ObjetoPadre, con sus atributos y métodos particulares. Si

queremos que otra clase llamada ObjetoHijo herede esos atributos, en el momento de declararla lo indicamoscon la palabra reservada extends:

class ObjetoHijo extends ObjetoPadre {// Se declaran atributos y métodos que son para esta// esta clase en particular

}

Para algunas clases del ejemplo, podríamos hacer lo siguiente:

class Avion extends Transporte {// Se declaran atributos y métodos que son de esta// clase en particular// ...

1

Page 2: Jerarquía de Clases

Figura 1: Jerarquía de clases. La clase Transporte del diagrama es la superclase de mayor jerarquía.

}

class Automovil extends Transporte {// Se declaran atributos y métodos que son de esta// clase en particular, recuerda que cada clase// está en un archivo diferente

}

class AutomovilDeLujo extends Automovil {// ...

}

Al momento de usar de instanciar los objetos de clases que heredan métodos y atributos de clases superiores,podemos usar de esos métodos y atributos de manera indiscriminada:

class Avion extends Transporte {// ...

public static void main (String[] args) {// Declaro 3 objetos de 3 clases distintas, entre estas clases// se heredan atributos y métodosTransporte ejemploTransporte = new Transporte();Automovil ejemploAutomovil = new Automovil();AutomovilDeportivo ejemploAutoDeportivo = new AutomovilDeportivo();

// en la clase superior solo se puede acceder a los métodos// que tiene de por sí declaradosejemploTransporte.acelerar();

// podemos usar los métodos de la clase de orden superior// tal como si fueran propios, sin necesidad de referirse// a esa claseejemploAutomovil.desacelerar();int numeroPasajeros = ejemploAutomovil.getNumeroPasajeros();

// y cuando sea necesario podemos hacer uso de los métodos de clase

2

Page 3: Jerarquía de Clases

ejemploAutomovil.rellenarTanque(45.67);

// la herencia también cuenta con clases de las cuales no se// hereda directamente nada. En este caso, estamos haciendo// uso de los métodos de la clase que esta hasta arriba en// la jerarquíaejemploAutoDeportivo.desacelerar();ejemploAutoDeportivo.setNumeroPasajeros(2);

// en los casos particulares podemos hacer uso de toda la// gama de atributos y métodos definidos en buena parte de// la jerarquíaejemploAutoDeportivo.activarLimpiaParabrisas();ejemploAutoDeportivo.setCambioManual(true);ejemploAutoDeportivo.abrirQuemacocos();ejemploAutoDeportivo.cerrarQuemacocos();

}}

Para referirnos a la superclase dentro de la subclase, usamos la referencia super, esta nos sirve para accedera los elementos de la superclase en cualquier momento.

class Camioneta extends Automovil {public void setDatoCualquiera() {

...super.rellenarTanque(); // Estoy llamando dentro

// de este método a uno// de la clase inmediatamente// superior

super.acelerar(); // Aplica también para los// métodos y atributos de clases más// elevadas en la jerarquía

}}

3