37
INACAP Universidad Tecnológica de Chile Sede Santiago Centro Tema 10: Herencia en Java Ing. Manuel López Ramos (versión 1) Taller de Programación I Curso Java J2SE

Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

  • Upload
    doananh

  • View
    272

  • Download
    10

Embed Size (px)

Citation preview

Page 1: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

INACAPUniversidad Tecnológica de Chile

Sede Santiago Centro

Tema 10:Herencia en Java

Ing. Manuel López Ramos(versión 1)

Taller de Programación I

Curso Java J2SE

Page 2: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Parte I

¿Qué es la herencia entre clases?

Page 3: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Herencia entre clases

● La herencia entre clases consiste en una relación especial que conecta dos o más conceptos muy parecidos o similares entre sí, dentro de un problema.

● Permite que una clase tome todos los atributos y métodos de otra automáticamente.

● Con esto, la herencia evita tener que redefinir atributos y métodos similares en varias clases parecidas.

Page 4: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Herencia entre clases

● La herencia se conoce con el nombre de relación de generalización.

● Se indica en el diagrama de clases de UML utilizando una línea más una punta de flecha blanca.

● La clase que tiene la punta de flecha se conoce con el nombre de clase padre, superclase o clase base.

● La clase al lado opuesto de la flecha se conoce con el nombre de clase hija, subclase o clase derivada.

Clase padreo

superclase

Clase hijao

subclase

Page 5: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Herencia entre clases

● La herencia, o relación de generalización, puede clasificarse según la cantidad de clases padres que posee cierta clase, en los siguientes grupos:

a) herencia simple: aquella donde una clase hija sólo tiene una clase padre directa.

b) herencia múltiple: aquella donde una clase hija puede tener dos ó más clases padres.

Page 6: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Herencia entre clases

● Debido a la relación de generalización, una clase base entregará automáticamente todos sus atributos y métodos a sus clases hijas, como se puede observar en el siguiente diagrama de clases de UML.

● En este caso, la clase Tiburón recibirá todos los atributos y métodos (públicos y privados) de la clase base y agregará 3 atributos nuevos y 2 métodos nuevos.

Page 7: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Herencia entre clases

● La relación de generalización puede leerse utilizando la palabra "es".

● Las relaciones del ejemplo entonces podrían leerse como:

"Un Mineral es un Objeto""Un Animal es un Objeto""Un Ave es un Animal""Un SerHumano es un Animal", etc.

Page 8: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Herencia entre clases

● Las relaciones entre clases pueden efectuarse en Java, utilizando la palabra clave extends.

public class Animal{

public char sexo;......public Animal() { }...

}

public class Tiburon extends Animal{

private int numAletas;......public Tiburon() { }...

}

● La palabra clave extends puede leerse como "es". La relación entonces podría leerse como "Un tiburón es un Animal".

Page 9: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Herencia entre clases

● Ejercicio: desarrollar el diagrama de clases siguiente:

Page 10: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Parte II

Acceso a atributos en herencia

Page 11: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Acceso a atributos

● En la herencia en Java, el acceso a atributos sigue reglas específicas:

● La clase hija puede acceder y usar cualquier atributo público de la clase padre.

● La clase hija no puede acceder ni usar atributos privados de la clase padre.

● Las reglas anteriores causan un problema, ya que no se pueden crear atributos no visibles por el programa que puedan ser usados por la clase hija -> problema del encapsulamiento en herencia.

● Para crear atributos privados en la clase padre que sí puedan ser utilizados por las clases hijas se define un nuevo tipo de acceso a datos, denominado como acceso protegido (protected).

● En el diagrama de clases de UML, el acceso protegido se simboliza con un símbolo de gato (#).

Page 12: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Acceso a atributos

● En el diagrama de clases de UML, el acceso protegido se simboliza con un símbolo de gato (#).

Page 13: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Acceso a atributos

● En el diagrama de clases de UML, el acceso protegido se simboliza con un símbolo de gato (#).

public class SerVivo{

protected byte edad;private String nombre;

public SerVivo() { }...

}

Page 14: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Acceso a atributos

● En el diagrama de clases de UML, el acceso protegido se simboliza con un símbolo de gato (#).

public class Mamifero extends SerVivo{

protected short numPatas;protected boolean usaPelaje;private String especie;

public Mamifero() { }...

}

public class SerVivo{

protected byte edad;private String nombre;

public SerVivo() { }...

}

Page 15: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Acceso a atributos

● Ejercicio: implementar el diagrama de UML mostrado en la diapositiva anterior.

public class Mamifero extends SerVivo{

protected short numPatas;protected boolean usaPelaje;private String especie;

public Mamifero() { }...

}

public class SerVivo{

protected byte edad;private String nombre;

public SerVivo() { }...

}

Page 16: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Parte III

Conceptos adicionales

Page 17: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Conceptos adicionales

● La generalización entre clases presenta una serie de conceptos adicionales:

a) sobrecarga de métodos (method overloading)

b) sobreescritura de métodos (overriding)

c) métodos y clases abstractas (abstract methods/classes)

d) polimorfismo (polymorphism)

e) interfaces (interfaces)

f) implementación de interfaces sobre clases (interface implementation)

g) uso directo de métodos de la clase padre (mediante el uso de super)

Page 18: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Sobrecarga de métodos

● La sobrecarga (overloading) consiste en utilizar varias veces el mismo nombre para diferentes métodos de una misma clase.

● No se aplica en herencia, sino que sólo dentro de una misma clase.

● Los métodos sobrecargados (overloaded methods) deben tener el mismo nombre, pero diferente cantidad y/o tipos de parámetros de entrada.

Page 19: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Sobrecarga de métodos

● Ejercicio: implementar la clase de Java con sus métodos sobrecargados. Luego, pruebe los métodos llamándolos e imprimiendo los resultados.

Page 20: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Sobreescritura de métodos

● La sobreescritura (overriding) consiste en la reimplementación de un método de la clase padre en alguna de las clases hijas.

● "Reimplementar" significa que el método conserva su nombre, parámetros de entrada y tipo de retorno, pero que su código interno será diferente.

● Debe ser aplicado en herencia y en implementación de interfaces.

Page 21: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Sobreescritura de métodos

● Ejercicio: implementar la jerarquía de clases mostrada en el diagrama de UML. Nótese que el método comer(), de la clase Animal, se reimplementa (sobreescribe) en las clases hijas Gato y Jirafa.

Page 22: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Métodos y clases abstractas

● Los métodos abstractos (abstract) son aquellos métodos que sólo declaran su nombre, tipo de retorno y parámetros, pero que no presentan un bloque definido de código a ejecutar.

● Se utilizan para definir métodos que deberán implementarse obligatoriamente dentro de las clases hijas en una jerarquía de herencia, pero donde el diseñador no sabe a ciencia cierta cuál debería ser el código correcto para dicho método.

● Al extender una clase con métodos abstractos, éstos deberán definirse completamente dentro de las clases hijas.

Page 23: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Métodos y clases abstractas

● Por extensión, una clase abstracta es aquella que posee uno o varios métodos abstractos.

● Debido a que una clase abstracta no tiene definidos todos sus métodos, no se puede instanciar una clase abstracta directamente. Si se quiere instanciar una clase abstracta, se deberá crear una nueva clase que herede las propiedades de la clase abstracta y que implemente todos sus métodos. Esta última clase sí se podrá utilizar para crear objetos para el programa.

● Se define como:

public abstract class <nombreClase>{ <métodos_abstractos>}

Page 24: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Métodos y clases abstractas

● Ejercicio: implementar la jerarquía de clases mostrada en el diagrama de UML. Nótese que el método comer(), de la clase Animal, está declarado como abstract, al igual que la clase Animal.

Page 25: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Polimorfismo

● El polimorfismo es uno de los mecanismos más potentes que ofrece un lenguaje orientado a objetos.

● Consiste en que un método sobreescrito varias veces en las clases hijas aplica automáticamente la rutina correcta sobre un objeto proveniente de una de las clases hijas, cuando éste objeto se almacena bajo la identidad de una variable de la clase padre.

● Permite implementar rutinas con código reducido sobre una gran cantidad de objetos almacenados como objetos genéricos.

Page 26: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Polimorfismo

● Ejercicio: implementar la jerarquía de clases mostrada en el diagrama de UML. Aplique polimorfismo sobre el código de cálculo de sueldos solicitado.

Page 27: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Interfaces

● Una interfaz es una clase especial que sólo posee métodos abstractos.

● Es un caso especial de clase abstracta, que tampoco puede ser instanciada.

● Para definir una interfaz, se utiliza el siguiente modelo:

public interface <nombreInterfaz>{ <método_abstracto1>(); <método_abstracto2>(); ... ...}

Page 28: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Aplicación de interfaces a clases de Java

● Una interfaz se aplica a otra clase, mediante la palabra clave implements, como se muestra a continuación:

public class A implements <nombreInterfaz>{ ... ...}

● A una clase de Java se le pueden aplicar una o varias interfaces, separadas por coma. Con esto se puede aplicar una forma de herencia múltiple.

public class A implements <interfaz1>, <interfaz2>, ...{ ... ...}

Page 29: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Polimorfismo

● Ejercicio: implementar la jerarquía de clases mostrada en el diagrama de UML. Aplique implementación de interfaces.

Page 30: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Parte IV

Ejercicios adicionales

Page 31: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Ejercicios adicionales

● Ejercicio 1: implementar la jerarquía de clases mostrada en el diagrama de UML. Aplique los conceptos vistos en la clase.

Page 32: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Ejercicios adicionales

● Ejercicio 2: implementar la jerarquía de clases mostrada en el diagrama de UML. Aplique los conceptos vistos en la clase.

Page 33: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Ejercicios adicionales

● Ejercicio 3: implementar la jerarquía de clases mostrada en el diagrama de UML.

Page 34: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Ejercicios adicionales

● Ejercicio 4: implementar la jerarquía de clases mostrada en el diagrama de UML.

Page 35: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Ejercicios adicionales

● Ejercicio 5: implementar la jerarquía de clases mostrada en el diagrama de UML.

Page 36: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Ejercicios adicionales

● Ejercicio 6: implementar la jerarquía de clases mostrada en el diagrama de UML.

Page 37: Taller de Programación I - inacap.6502.clinacap.6502.cl/tp1/teoria/10.pdf · La clase que tiene la punta de flecha se conoce ... pueden efectuarse en Java, utilizando la palabra

Ejercicios adicionales

● Ejercicio 7: implementar la jerarquía de clases mostrada en el diagrama de UML. Nótese que aquí se solicita crear una interfaz gráfica de ventanas basada en Java Swing.