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]
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]
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]
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
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]
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]
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]
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
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'
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
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;}
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]
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
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]
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]
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]
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
Top Related