Está en la página 1de 21

Programación

orientada a objetos

LICENCIATURA EN SISTEMAS

FCAD - UNER
Unidad 5
Herencia y Polimorfismo.
Herencia.
Fundamentos de la herencia.
Superclases: acceso a miembros.
Referencia a la superclase: super.
Creación de una jerarquía multinivel.
Sobrescritura de métodos.
Selección de métodos en forma dinámica.
Utilización de final con la herencia.
Control de acceso.
Clases abstractas.
La clase Object.
Uso de InstanceOf.
Interfaces.
Definición de interfaces.
Implementación de una interfaz.
Implementación parcial.
Utilización de las interfaces.
Herencia en interfaces.

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Herencia
Cada vez que encontremos la relación "es-un" entre
dos clases, estamos ante la presencia de herencia.

Clase
Base

Clases
Derivadas

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


public class Medico {
Unidad 5 Herencia. private boolean trabajaEnHospital;

Herencia public Medico () { }

public boolean getTrabajaEnHospital () {


return trabajaEnHospital; }

public void setTrabajaEnHospital (boolean val) {


this.trabajaEnHospital = val; }

public void trataAPaciente () {


// atiende un paciente
}
}

public class MedicoFamilia extends Medico {


private boolean realizaLlamadas;

public MedicoFamilia () { }

public class Cirujano extends Medico { public boolean getRealizaLlamadas () {


return realizaLlamadas;
public Cirujano () { } }

public void trataAPaciente () { public void setRealizaLlamadas(boolean val) {


// realiza cirugía this.realizaLlamadas = val;
} }

public void realizaIncision () { public void VisitaADomicilio () {


// practica incisión // visita al paciente en domicilio
} }
} }

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Herencia
Acceso a miembros de la superclase
public class Medico {
private boolean trabajaEnHospital;

public Medico () { }

public boolean getTrabajaEnHospital () {


return trabajaEnHospital; }

public void setTrabajaEnHospital (boolean


val) {
this.trabajaEnHospital = val; }

public void trataAPaciente () {


// atiende un paciente
public class Cirujano extends Medico { }
}
public Cirujano () { }

public void trataAPaciente () { } El atributo


public void realizaIncision () { }
trabajaEnHospital es
privado por lo que
public void consultaAmbulatoria() {
if (getTrabajaEnHospital()) { }
solamente puede acceder al
} mismo a través de un
}
método.
Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018
Unidad 5 Herencia.

Herencia
Referencia a la clase base: super
Constructores en clases derivadas
El constructor de una clase derivada puede llamar al constructor de
su superclase por medio de la palabra super:
super(lista de parámetros);
public class Medico { public class Cirujano extends Medico {
private boolean trabajaEnHospital;
public Cirujano () { super(true); }
public Medico () { }
public void trataAPaciente () {
public Medico (boolean trabaja) { // realiza cirujía }
this.trabajaEnHospital=trabaja; }
public void realizaIncision () {
public boolean getTrabajaEnHospital () { // practica incisión
return trabajaEnHospital; } }

public void setTrabajaEnHospital (boolean public void consultaAmbulatoria() {


val) { if (getTrabajaEnHospital()) {
this.trabajaEnHospital = val; } // puede programar cirugía
Ambulatoria
public void trataAPaciente () { }
// atiende un paciente }
} }
}
Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018
Unidad 5 Herencia.

Herencia
Referencia a la clase base: super
Otro uso de super
super.miembro
dónde miembro puede ser un método o una variable de instancia.

public class Medico { public class Cirujano extends Medico {


private boolean trabajaEnHospital;
public Cirujano () { }
public Medico () { }
public void trataAPaciente () {
public boolean getTrabajaEnHospital () { // realiza cirugía
return trabajaEnHospital; } }

public void setTrabajaEnHospital (boolean public void realizaIncision () {


val) { // practica incisión
this.trabajaEnHospital = val; } }

public void trataAPaciente () { public void consultaAmbulatoria() {


// atiende un paciente if (getTrabajaEnHospital()) {
} super.trataAPaciente();
} }
}
}
Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018
Unidad 5
Herencia y Polimorfismo.
Herencia.
Fundamentos de la herencia.
Superclases: acceso a miembros.
Referencia a la superclase: super.
Creación de una jerarquía multinivel.
Sobrescritura de métodos.
Selección de métodos en forma dinámica.
Utilización de final con la herencia.
Control de acceso.
Clases abstractas.
La clase Object.
Uso de InstanceOf.
Interfaces.
Definición de interfaces.
Implementación de una interfaz.
Implementación parcial.
Utilización de las interfaces.
Herencia en interfaces.

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Herencia
Creación de jerarquía multinivel
Podemos construir jerarquías que contengas varios niveles
de herencia
public class Caja {
private double ancho; Caja() {
private double largo; ancho = -1;
private double profundidad; largo = -1;
profundidad = -1;
Caja(Caja objeto) { }
ancho = objeto.ancho; Caja(double valor) {
largo = objeto.largo; ancho = valor;
profundidad = objeto.profundidad; largo = valor;
} profundidad = valor;
}
Caja(double ancho, double largo, double
profundidad) { double getVolumen() {
this.ancho = ancho; return ancho * largo *
this.largo = largo; profundidad;
this.profundidad = profundidad; }
} }

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Herencia
Creación de jerarquía multinivel
public class CajaPeso extends Caja{
private double peso;
public double getPeso() {
CajaPeso(CajaPeso objeto) { return peso;
super(objeto); }
peso = objeto.peso; }
}

CajaPeso(double ancho, double largo, double


profundidad, double peso) {
super(ancho, largo, profundidad);
this.peso = peso;
}

CajaPeso() {
super();
peso = -1;
}

CajaPeso(double valor, double peso) {


super(valor);
this.peso = peso;
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Herencia
Creación de jerarquía multinivel
public class CajaCosto extends CajaPeso{
private double costo;
CajaCosto(double valor, double peso,
double costo) {
CajaCosto(CajaCosto objeto) {
super(valor, peso);
super(objeto);
this.costo = costo;
costo = objeto.costo;
}
}
double getCosto() {
CajaCosto(double ancho, double largo,
return costo;
double profundidad, double peso, double costo)
}
{
}
super(ancho, largo, profundidad, peso);
this.costo = costo;
}

CajaCosto() {
super();
this.costo = -1;
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia.

Herencia
Creación de jerarquía multinivel
public class DemoNiveles {
public static void main(String args[]) {
CajaCosto caja1 = new CajaCosto(10, 20, 15, 10, 3.41);
CajaCosto caja2 = new CajaCosto(2, 3, 4, 0.76, 1.28);
double volumen;
volumen = caja1.getVolumen();
System.out.println("Volumen de caja1 es " + volumen);
System.out.println("Peso de caja1 es "+ caja1.getPeso());
System.out.println("Costo de envio: $" + caja1.getCosto());
System.out.println();
volumen = caja2.getVolumen();
System.out.println("Volumen de caja2 es " + volumen);
System.out.println("Peso de caja2 es "+ caja2.getPeso());
System.out.println("Costo caja2: $" + caja2.getCosto());
}
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5
Herencia y Polimorfismo.
Herencia.
Fundamentos de la herencia.
Superclases: acceso a miembros.
Referencia a la superclase: super.
Creación de una jerarquía multinivel.
Sobrescritura de métodos.
Selección de métodos en forma dinámica.
Utilización de final con la herencia.
Control de acceso.
Clases abstractas.
La clase Object.
Uso de InstanceOf.
Interfaces.
Definición de interfaces.
Implementación de una interfaz.
Implementación parcial.
Utilización de las interfaces.
Herencia en interfaces.

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Polimorfismo. Sobrescritura de métodos.

Herencia y Polimorfismo
Sobrescritura de métodos
Una clase puede redefinir (volver a definir) cualquiera de
los métodos heredados de su superclase que no sean final.
El nuevo método sustituye al heredado para todos los
efectos en la clase que lo ha redefinido.

Los métodos de la superclase que han sido redefinidos


pueden ser todavía accedidos por medio de la palabra
super desde los métodos de la clase derivada, aunque con
este sistema sólo se puede subir un nivel en la jerarquía de
clases.
Los métodos de clase o static no pueden ser redefinidos
en las clases derivadas.
Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018
Unidad 5 Herencia. Sobrescritura de métodos.

Herencia y Polimorfismo

Sobrescritura de métodos
public class Personal {
private String nombre;
private String apellido;
private double sueldoBase; public void setSueldoBase(double sueldo) {
private double porcentajeDescuento; this.sueldoBase=sueldo;
}
Personal() {
nombre=""; public double getPorcentajeDescuento() {
apellido=""; return porcentajeDescuento;
sueldoBase=0.0; }
porcentajeDescuento=0.0;
} public void
setPorcentajeDescuento(double descuento) {
Personal(String nombre, String apellido, porcentajeDescuento=descuento;
double sueldo, double descuento) { }
this.nombre=nombre;
this.apellido=apellido; public double calcularSueldo() {
this.sueldoBase=sueldo; return sueldoBase-
this.porcentajeDescuento=descuento; (sueldoBase*porcentajeDescuento/100);
} }
}
public double getSueldoBase() {
return sueldoBase;
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Sobrescritura de métodos.

Herencia y Polimorfismo

Sobrescritura de métodos
public class Administrativo extends Personal{
private double importeVentas;
private double porcentajeComision; public double calcularSueldo() {
double sueldoSinDescuentos;
Administrativo() { sueldoSinDescuentos= getSueldoBase()
super(); + (importeVentas*porcentajeComision/100);
importeVentas=0;
} return sueldoSinDescuentos -
(sueldoSinDescuentos*getPorcentajeDescuento(
Administrativo(String nombre, String )/100);
apellido, double sueldo, double descuento, }
double comision, double importeVentas) { }
super(nombre, apellido, sueldo,
descuento);
this.importeVentas=importeVentas;
this.porcentajeComision=comision;
}

public void setImporteVentas(double


importe) {
importeVentas=importe;
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Sobrescritura de métodos.

Herencia y Polimorfismo

Sobrescritura de métodos
public class UsoHerencia {
public static void main(String args[]) {
Personal p1 = new Personal("Maria","Martinez",2000,15);
Administrativo a1 = new
Administrativo("Juan","Rodriguez",1800,15,10,5000);
System.out.println("Sueldo de p1 es "+p1.calcularSueldo());
System.out.println("Sueldo de a1 es "+a1.calcularSueldo());
}
}

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia. Sobrescritura de métodos.

Herencia y Polimorfismo
¿Qué método es llamado?
Animal
imagen Lobo l = new Lobo();
comida l.hacerRuido();
habitat l.roam();
hacerRuido() l.comer();
comer()
dormir() l.dormir()
roam()

Felino Canino

roam() Hipopótamo roam()

hacerRuido()
comer()
Leon Gato Tigre Lobo Perro

hacerRuido() hacerRuido() hacerRuido() hacerRuido() hacerRuido()


comer() comer() comer() comer() comer()

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidad 5 Herencia y Polimorfismo.

Ejercicio
Una empresa agroalimentaria trabaja con tres tipos de productos: productos
frescos, productos refrigerados y productos congelados.Todos los productos
tienen fecha de vencimiento y número de lote. A su vez, los productos frescos
deben llevar la fecha de envasado; los productos refrigerados deben llevar el
código del organismo de supervisión alimentaria, la fecha de envasado y la
temperatura de mantenimiento recomendada; mientras que los productos
congelados deben llevar la fecha de envasado y la temperatura de
mantenimiento recomendada.
Hay tres tipos de productos congelados: congelados por aire, congelados por
agua y congelados por nitrógeno. Los productos congelados por aire deben
llevar la información de la composición del aire con que fue congelado. Los
productos congelados por agua deben llevar la información de la salinidad del
agua (gramos de sal por litro) con que se realizó la congelación. Los productos
congelados por nitrógeno deben llevar la información del método de
congelación empleado y del tiempo de exposición al nitrógeno expresada en
segundos.
Construir la jerarquía de clases, según la descripción anterior y luego
implementarlas en Java.
Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018
Unidad 5 Herencia y Polimorfismo.

Ejercicios
1. Dado el siguiente diagrama de clases en UML, transcribirlo a Java.

Automovil
Motor
+NroChasis: String
+Marca: String 1 1 +Cilindrada: Integer
+Modelo: String +NroMotor: String
+Anio: Integer tiene +Combustible: Integer
+Segmento: String +Torque: Integer
+Consumo: Integer

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018


Unidades 5

Bibliografía complementaria

Herbert Schildt. Java: Manual de Referencia – Séptima


Edición. McGrawHill, 2007.
 Harvey Deitel y Paul Deitel. Como programar en Java -
Octava Edición. Prentice-Hall, 2009
 Bruce Eckel. Thinking in Java - Cuarta Edición. Prentice
Hall, 2006.
 Holzner Steven. La Biblia de Java 2. Anaya Multimedia,
2005
 Y. Daniel Liang. Introduction to Java Programming,
Comprehensive Version – Séptima Edición. Prentice Hall,
2008

Programación Orientada a Objetos - Fac. Cs. de la Adm. - UNER - 2018

También podría gustarte