Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir...

17
Programación y estructura de datos Ing. Roberto Martínez Román - [email protected] 1 Relaciones entre clases Herencia, polimorfismo, interfaces, clases abstractas Ing. Roberto Martínez Román - [email protected] Ejemplo (videojuego) Ing. Roberto Martínez Román - [email protected]

Transcript of Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir...

Page 1: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 1

Relaciones entre clases

Herencia, polimorfismo, interfaces, clases abstractas

Ing. Roberto M artínez Román - [email protected]

Ejemplo (videojuego)

Ing. Roberto M artínez Román - [email protected]

Page 2: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 2

Diagrama de clases de un videojuego

Ing. Roberto M artínez Román - [email protected]

Héroe

+ correr()+ atacar()+ getEnergia() : int+ incrementar(poder:int)

Poder

Composición

Composición de objetosCuando una clase tiene como variables de instancia objetos, se da una relación de composición. Aquí se crea una relación "has-a", tiene-un.

Ing. Roberto M artínez Román - [email protected]

Page 3: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 3

Composición

public class Héroe

{

private Poder poder;

...

}

Ing. Roberto M artínez Román - [email protected]

Héroe

+ correr()+ atacar()+ getEnergia() : int+ incrementar(poder:int)

Poder

Composición

public class Alumno{

private String nombre;private Direccion direccion;private Carrera carrera;private Horario horario;private Mascota mascota;

}

Ing. Roberto M artínez Román - [email protected]

Page 4: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 4

Herencia

Ing. Roberto Martínez Román - [email protected]

La Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas.

Una Superclase define atributos y métodos comunes a las subclases.

Una Subclase extiende los recursos de la superclase agregando sus propios atributos y métodos.

La herencia crea una relación "is-a", es-un.

Jerarquía de clases (figuras)

Ing. Roberto M artínez Román - [email protected]

Superclase

Subclase

Page 5: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 5

Jerarquía de clases (seguros)

Ing. Roberto M artínez Román - [email protected]

Jerarquía de clases (empleados)

Ing. Roberto M artínez Román - [email protected]

Page 6: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 6

Visibilidad de miembros en una relación de herencia

Superclase Subclasepublic

protectedprivate

publicprotected

oculto

Ing. Roberto M artínez Román - [email protected]

Visibilidad de miembros en una relación de herencia

Especificador de acceso Clase Subclase Paquete Mundo

private

protected

public

default(paquete)

Ing. Roberto M artínez Román - [email protected]

Page 7: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 7

Sobrescritura de métodos

Ing. Roberto M artínez Román - [email protected]

Si la subclase requiere modificar el comportamiento de un método de la superclase, entonces deberá sobrescribir el método.

El método sobrescrito debe respetar la firma del método en la superclase.

La visibilidad no se puede disminuir.

Modificadores

final.• Clase. No puede ser heredada.• Método. No puede ser sobrescrito.• Variable de instancia. No puede ser modificado.

abstract.• Clase. No puede ser instanciada.• Método. No puede tener comportamiento.

Ing. Roberto M artínez Román - [email protected]

Page 8: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 8

Ejercicio. Implementar el siguiente diagrama de clases.

Ing. Roberto M artínez Román - [email protected]

Clase Empleado

Ing. Roberto M artínez Román - [email protected]

public class Empleado {

protected String nombre;protected String numeroSS;

Modificador de acceso, las variables se podrán

acceder desde las subclases

En esta clase se comportan como variables privadas

Page 9: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 9

Constructor de la clase Empleado

Ing. Roberto M artínez Román - [email protected]

public Empleado(String nombre, String numeroSS) {

this.nombre = nombre;this.numeroSS = numeroSS;

}

Usamos this para referirnos a la variable de

instancia y no al parámetro

Parámetro (variable local)

public String generarPago() {

return "";}

public void setNombre(String nombre) {

this.nombre = nombre;}

public String toString() {

return "Nombre:\t" + nombre + "\n#SS:\t" + numeroSS;}

Otros métodos de la clase Empleado

Puedo aceder a numeroSS, porque estoy

dentro de la clase

Ing. Roberto M artínez Román - [email protected]

No sabemos cómo pagarle a un 'empleado'

Page 10: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 10

Primera prueba

• Crea la clase PruebaEmpleado con el método main.• Agrega código para:

• Crear un objeto de tipo Empleado y mostrar su información en pantalla.• Genera el pago con este objeto.

Ing. Roberto M artínez Román - [email protected]

Clase EmpleadoSalario

Ing. Roberto M artínez Román - [email protected]

public class EmpleadoSalario extends Empleado {

private double salario;Indica que

heredamos de otra clase

salario sólo se podrá acceder dentro de la clase

EmpleadoSalario

Page 11: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 11

Constructor de EmpleadoSalario

Ing. Roberto M artínez Román - [email protected]

public EmpleadoSalario(String nombre, String numeroSS, double salario) {

super(nombre, numeroSS);

this.salario = salario;}

super se usa para llamar al constructor de la superclase, en este caso al constructor

de la clase Empleado

Accesor y modificador de la clase EmpleadoSalario

Ing. Roberto M artínez Román - [email protected]

public double getSalario() {

return salario;}

public void setSalario(double salario) {

this.salario = salario;}

Page 12: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 12

Son de la superclase, pero se pueden acceder porque

fueron declaradas protected

Otros métodos de la clase EmpleadoSalario

Ing. Roberto M artínez Román - [email protected]

public String generarPago() {

return "Pago a " + nombre + " (" + numeroSS + ") $" + salario;}

Sobrescritura del método.

Llamada a un método de la superclase.

public String toString() {

return super.toString() + "\nTipo:\tSalario" + "\nSalario: $" + salario;

}

Otros métodos de la clase EmpleadoSalario

Ing. Roberto M artínez Román - [email protected]

Page 13: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 13

Segunda prueba

• Agrega código en la clase PruebaEmpleado para:• Crear un objeto de tipo EmpleadoSalario y mostrar su

información en pantalla.• Genera el pago para este objeto.

Ing. Roberto M artínez Román - [email protected]

Clase EmpleadoHora

Ing. Roberto M artínez Román - [email protected]

public class EmpleadoHora extends Empleado {

private double pagoHora;private double horasTrabajadas; Indica que

heredamos de otra clase

Page 14: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 14

Constructor de la clase EmpleadoHora

Ing. Roberto M artínez Román - [email protected]

public EmpleadoHora(String nombre, String numeroSS, double pagoHora, double horasTrabajadas) {

super(nombre, numeroSS); // Constructor de la Superclase

this.pagoHora = pagoHora;this.horasTrabajadas = horasTrabajadas;

}

public double getHorasTrabajadas() {return horasTrabajadas;

}

public void setHorasTrabajadas(double horasTrabajadas) {this.horasTrabajadas = horasTrabajadas;

}

public double getPagoHora() {return pagoHora;

}

public void setPagoHora(double pagoHora) {this.pagoHora = pagoHora;

}

Accesores y modificadores de la clase EmpleadoHora

Ing. Roberto M artínez Román - [email protected]

Page 15: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 15

public String generarPago() {

return "Pago a " + nombre+ " (" + numeroSS + ") $" + (pagoHora * horasTrabajadas);

}

Otros métodos de la clase EmpleadoHora

Ing. Roberto M artínez Román - [email protected]

public String toString() {

return super.toString() + "\nTipo:\tHoras"+ "\nPagoHr:\t$" + pagoHora+ "\nHoras:\t" + horasTrabajadas;

}

Otros métodos de la clase EmpleadoHora

Ing. Roberto M artínez Román - [email protected]

Page 16: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 16

Diagrama final

Ing. Roberto M artínez Román - [email protected]

EmpleadoHora hEmp = new EmpleadoHora("Esteban López", "896-54-3217", 10.50, 40);EmpleadoSalario sEmp = new EmpleadoSalario("María Dunas", "456-14-3787", 800.0);

System.out.println(hEmp+"\n");System.out.println(sEmp+"\n");

System.out.println(hEmp.generarPago() + "\n");System.out.println(sEmp.generarPago() + "\n");

sEmp.setSalario(sEmp.getSalario() * 1.10); // Aumento de 10%System.out.println("Nuevo salario de María Dunas\n" + sEmp);

Prueba tus clases con el siguiente código

Ing. Roberto M artínez Román - [email protected]

Page 17: Relaciones entre clasesLa Herencia es otro tipo de relación entre clases. Esto incluye compartir atributos y métodos entre ellas. Una Superclasedefine atributos y métodos comunes

Programación y estructura de datos

Ing. Roberto Martínez Román [email protected] 17

Verifica tus resultados

Ing. Roberto M artínez Román - [email protected]

Nombre: Esteban López#SS: 896-54-3217Tipo: HorasPagoHr: $10.5Horas: 40.0

Nombre: María Dunas#SS: 456-14-3787Tipo: SalarioSalario: $800.0

Pago a Esteban López (896-54-3217) $420.0

Pago a María Dunas (456-14-3787) $800.0

Nuevo salario de María DunasNombre: María Dunas#SS: 456-14-3787Tipo: SalarioSalario: $880.0