Sei sulla pagina 1di 16

Zona Sur CEAD Florencia

Funcionalidades de la herencia y polimorfismo en


la programación orientada a objetos

Ing. Franklin Lizcano Celis


Director de Curso POO
CEAD Florencia
Funcionalidades de la herencia y
polimorfismo

-Que es Herencia en POO

La herencia permite la definición de una clase a partir de la definición de otra ya


existente. La herencia permite compartir automáticamente métodos y datos entre
clases, subclases y objetos.

Hay dos tipos de herencia: Herencia Simple y Herencia Múltiple. La primera indica que
se pueden definir nuevas clases solamente a partir de una clase inicial mientras que la
segunda indica que se pueden definir nuevas clases a partir de dos o más clases
iniciales. Java sólo permite herencia simple.
Funcionalidades de la herencia y
polimorfismo

Ejemplo práctico

En nuestro proyecto es posible tener varias entidades con atributos y características


similares como puede ser empleado, cliente, proveedor.
Funcionalidades de la herencia y
polimorfismo

Crear() Crear() Crear()


Actualizar() Actualizar() Actualizar()
JornadaLaboral() Promociones() Visitas()
Funcionalidades de la herencia y
polimorfismo

public class Empleado public class Cliente public class Proveedor


{ { {
private int id; private int id; private int id;
private String Nombre; private String Nombre; private String Nombre;
private String Apellidos; private String Apellidos; private String Apellidos;
private String FechaNacimiento; private String FechaNacimiento; private String FechaNacimiento;
private String Direccion; private String Direccion; private String Direccion;
private String Email; private String Email; private String Email;
private String CargoActual; private String TipoProducto;
private String DepartamentoActual; // constructor, getter y setter
// constructor, getter y setter
// constructor, getter y setter public void Crear() {
... public void Crear() {
public void Crear() { } ...
... }
} public void Actualizar() {
... public void Actualizar() {
public void Actualizar() { } ...
... }
} public void Promociones() {
... public void Visitas() {
public void JornadaLaboral() { } ...
... } }
} }
}
Funcionalidades de la herencia y
polimorfismo

Crear()
Actualizar()

JornadaLaboral() Promociones() Visitas()


Funcionalidades de la herencia y
polimorfismo

public class Usuario


{
private int id;
private String Nombre;
private String Apellidos;
private String FechaNacimiento;
private String Direccion;
private String Email;

// constructor, getter y setter

public void Crear() {


...
}

public void Actualizar() {


...
}
}

public class Empleado extends Usuario public class Cliente extends Usuario public class Proveedor extends Usuario
{ { {
private String CargoActual; public void Cliente() { private String TipoProducto;
private String DepartamentoActual; super(); public void Proveedor() {
} super();
public void Empleado() { // constructor, getter y setter }
super(); // constructor, getter y setter
} public void Promociones() {
// constructor, getter y setter ... public void Visitas() {
} ...
public void JornadaLaboral() { } }
... }
}
}
Funcionalidades de la herencia y
polimorfismo

package herencia;

import java.util.ArrayList;

public class Main {


public static ArrayList<Usuario> persona = new ArrayList<Usuario>();

public static void main(String[] args) {


// TODO Auto-generated method stub

Cliente Carlos = new Cliente(1, "Carlos Trujillo", "carlos.trujillo@email.com");


Empleado Luis = new Empleado(2, "Luis Monsalve", "luis.monsalve@email.com", "Vendedor", "Productos cárnicos");
Proveedor Lacteos = new Proveedor(3, "Esteban Lopez", "lacteos@email.com", "Productos lacteos");

persona.add(Carlos);
persona.add(Luis);
persona.add(Lacteos);

// Crear
System.out.println("Todos los usuarios ejecutan el mismo método");
for (Usuario integrante : persona) {
System.out.println(integrante.getId()+" "+integrante.getNombre()+" "+integrante.getEmail()+" -> ");
integrante.Crear();
}

System.out.println("Solamente el empleado y el proveedor tiene diferentes atributos a los heredados");


System.out.println(Luis.getId()+" "+Luis.getNombre()+" "+Luis.getEmail()+" "+Luis.getCargoActual()+" "+Luis.getDepartamentoActual());
System.out.println(Lacteos.getId()+" "+Lacteos.getNombre()+" "+Lacteos.getEmail()+" "+Lacteos.getTipoProducto());
}

}
Funcionalidades de la herencia y
polimorfismo

-Que es Polimorfismo en POO

Polimorfismo Es una característica que resulta de gran ayuda en programación pues


facilita la claridad y consistencia del código, aunque es un concepto bastante genérico
(y frecuentemente malinterpretado). Se conoce con este nombre el hecho de que un
método tiene el mismo nombre y resulta en el mismo efecto básico pero está
implementado de forma distinta en las distintas clases de una jerarquía.
Funcionalidades de la herencia y
polimorfismo

-Que es Polimorfismo en POO

Polimorfismo Es una característica que resulta de gran ayuda en


programación pues facilita la claridad y consistencia del código, aunque es un
concepto bastante genérico (y frecuentemente malinterpretado). Se conoce
con este nombre el hecho de que un método tiene el mismo nombre y
resulta en el mismo efecto básico pero está implementado de forma distinta
en las distintas clases de una jerarquía.
Funcionalidades de la herencia y
polimorfismo
public abstract class Usuario
{
private int id;
private String Nombre;
private String Apellidos;
private String FechaNacimiento;
private String Direccion;
private String Email;

// constructor, getter y setter

public void Crear() {


...
}

public void Actualizar() {


...
}
public abstract void Listar();
public class Empleado extends Usuario } public class Proveedor extends Usuario
{ {
private String CargoActual; private String TipoProducto;
private String DepartamentoActual; public class Cliente extends Usuario public void Proveedor() {
{ super();
public void Empleado() { public void Cliente() { }
super(); super(); // constructor, getter y setter
} }
// constructor, getter y setter // constructor, getter y setter public void Visitas() {
...
public void JornadaLaboral() { public void Promociones() { }
... ... public void Listar() {
} }
public void Listar() { public void Listar() { }
}
} }
}
}
Funcionalidades de la herencia y
polimorfismo

public class Main {


public static ArrayList<Usuario> polimorfismo = new ArrayList<Usuario>();

public static void main(String[] args) {


// TODO Auto-generated method stub
Cliente Carlos = new Cliente(1, "Carlos Trujillo", "carlos.trujillo@email.com");
Empleado Luis = new Empleado(2, "Luis Monsalve", "luis.monsalve@email.com", "Vendedor", "Productos cárnicos");
Proveedor Lacteos = new Proveedor(3, "Esteban Lopez", "lacteos@email.com", "Productos lacteos");

polimorfismo.add(Carlos);
polimorfismo.add(Luis);
polimorfismo.add(Lacteos);

// Crear
System.out.println("Todos los usuarios ejecutan el mismo método");
for (Usuario integrante : polimorfismo) {
System.out.println(integrante.getId()+" "+integrante.getNombre()+" "+integrante.getEmail()+" -> ");
integrante.Crear();
}

System.out.println("Listar: Todos los usuarios creados tienen su método diferente");


for (Usuario objeto : polimorfismo) {
System.out.print(objeto.getNombre() + " " + objeto.getEmail() + " -> ");
objeto.Listar();
}

}
Funcionalidades de la herencia y
polimorfismo

Resumen de la Herencia en POO

Ventajas de la utilización de herencia en la POO

Evitar duplicidad y favorecer la reutilización de


código (las subclases utilizan el código de
superclases).

Facilitar el mantenimiento de aplicaciones.


Podemos cambiar las clases que usamos
fácilmente.

Facilitar la extensión de las aplicaciones.


Podemos crear nuevas clases a partir de otras
existentes.
Funcionalidades de la herencia y
polimorfismo

La herencia tiene dos implicaciones importantes: la primera, la


reutilización de código (herencia de código) y la segunda el permitir el
polimorfismo (herencia del tipo). La herencia admite tres variantes:

a) Herencia a partir de clases concretas (extends o


herencia simple): heredamos el tipo y la
implementación. Opcionalmente en la clase que
extiende agregaremos nuevos métodos o
sobrescribiremos otros ya existentes.

b) Herencia a partir de interfaces (implements o forma


de herencia múltiple): heredamos el tipo sin
implementación. Para poder instanciar, todos los
métodos deben ser sobrescritos.
Funcionalidades de la herencia y
polimorfismo

La herencia tiene dos implicaciones importantes: la primera, la


reutilización de código (herencia de código) y la segunda el permitir el
polimorfismo (herencia del tipo). La herencia admite tres variantes:

c) Herencia a partir de clases abstractas (extends sobre


una clase abstracta, variante de herencia simple):
heredamos el tipo y posiblemente un fragmento de
implementación. Para poder instanciar, aquellos
métodos abstractos han de ser sobreescritos, y la
subclase pasaría a ser concreta. Si no se implementan
todos los métodos abstractos, la subclase sigue siendo
abstracta.
GRACIAS POR SU
ATENCIÓN