1. Proporcionar al futuro docente las
herramientas básicas que le permitan
diseñar programas, propiedades y
conceptos de programación orientada a
objeto y de programación por eventos.
ESTRUCTURA DE DATOS Y
PROGRAMACIÓN III
2. Implementar los conceptos de herencia y polimorfismo
en la programación de aplicaciones informáticas en el
lenguaje seleccionado.
OBJETIVO GENERAL
OBJETIVOS ESPECÍFICOS
Conocer y estudiar concepto de Herencia en la POO
Definir y usar clases abstractas.
Conocer el uso de las interfaces en la POO.
Conocer y analizar la Sobrecarga de Métodos.
Conocer y estudiar concepto de Polimorfismo en la POO
3. La herencia, uno de los pilares que fundamentan la POO,
es un mecanismo de la programación orientada a objetos que
permite que una clase herede propiedades y características de una
clase padre.
En otras palabras, se pueden crear nuevas clases a partir
de clases existentes, definiendo así, nuevas propiedades y
características propias que sean más específicas para la clase hija.
HERENCIA
5. Del mismo modo, la herencia hace referencia a la relación
que existe entre lo general y lo específico, es decir:
Generalización Especialización
Las clases padres,
representan lo
mas general de la
implementación
Las clases hijas,
representan lo
mas especifico de
la implementación
heredada de la
clase padre
Herencia
HERENCIA
6. Clase Padre
Atributos clase
padre
Métodos clase padre
Clase Hija1
Atributos Propios de
Clase Hija 1
Métodos Propios de
Clase Hija 1
Clase Hija2
Atributos Propios de
Clase Hija 2
Métodos Propios de
Clase Hija 2
Los atributos y
métodos de las
clases hijas,
especifican sus
características y
comportamiento
HERENCIA
7. Tipos de Herencia
Herencia Simple Herencia Múltiple
La clase hija, hereda los
atributos y operaciones de
la clase padre o super
clase
La clase hija puede
heredar atributos y
operaciones de dos o mas
clases padres.
La herencia múltiple, no es soportado por todos los
lenguajes de programación debido a inconvenientes y malas
prácticas. (Sólo es soportada por C++).
Java y C# no soportan la herencia múltiple.
HERENCIA - TIPOS
8. HERENCIA - VENTAJAS
Ventajas de la Herencia
Reutilización de Código
Las clases heredadas reutilizan el código
de las clases padres.
Evita la Duplicidad
Evita que las clases similares tengan que
implementar el mismo código en común.
Mayor fiabilidad
La fiabilidad posibilita encontrar errores
más fácilmente. Mejora el
mantenimiento.
Ocultación de Información
Los modificadores de acceso permiten
establecer la visibilidad de los elementos.
Mejora el Desarrollo
El ahorro de código permite ganar
tiempo y esfuerzo en el desarrollo.
9. MODIFICADORES DE ACCESO
Tipo de
Elemento
Accesible a
Clases Hijas
Accesible a
otras Clases
Acceso a
Paquetes
publico Si Si Si
protegido Si No Si
privado No No No
default Si Si No
Los modificadores de la accesibilidad permite determinar el
acceso a los elementos de una clase, si son visibles o no, hacia
otras clases.
Van resumidas en la siguiente tabla:
Resumen:
1. Los elementos públicos puden ser visibles de cualquier parte.
2. Los elementos protegidos solo por la misma clase y sus clases hijas.
3. Los elementos privados solo pueden ser vistos desde la misma clase.
4. Los elementos por defecto son visibles por las clases del mismo paquete.
10. Animal
Oso
León Tiburón
Mono
-Clases derivadas de la clase
Animal
-Especialización
-Clases Base
-Generalización
En POO, la herencia es una relación
“Es un” o “Es de tipo”:
-Oso es un Animal
-León es de tipo Animal
-Tiburón es un Animal
-Mono es de tipo Animal
HERENCIA - EJEMPLO
12. Animal
- nombre
- peso
- tamaño
+ caminar
+ dormir
+ comer
Perro
- raza
- pelaje
+ ladrar( )
Tiburón
- tipo
-Habitad
+ nadar( )
+ cazar ( )
Se pueden añadir todos los atributos y
métodos necesarios para especificar la clase
derivada.
HERENCIA - EJEMPLO
13. public class Perro extends Animal{
//Declaraciones publicas
//Declaraciones privadas
public Perro(){
super();
}
}
En java, la declaración sería así: la palabra
reservada extends, indica que la clase es
extensión o es de tipo la clase base.
La palabra reservada super(); indica el
llamado al método constructor de la clase
padre o super clase.
HERENCIA - DECLARACIÓN
14. public class Animal{
//Declaraciones publicas
//Declaraciones privadas
public Animal(){
}
}
public class Perro extends Animal{
//Declaraciones publicas
//Declaraciones privadas
public Perro(){
super();
}
}
Clase Animal,
clase padre o
super clase
Clase Perro, clase
hija de la clase
Animal
Llamada al método
constructor de la
clase Padre
HERENCIA - DECLARACIÓN
15. public class Motor{
int caballos;
int peso
int tamaño
public Motor(int caballos, int peso, int tamaño){
this.caballos = caballos;
this.peso = peso;
this.tamaño = tamaño;
}
public String encender(){
return “El motor ha sido encendido!”;
}
public String apagar(){
return “El motor ha sido apagado”;
}
}
Motor
caballosFuerza
peso
tamaño
+ encender
+ apagar
El constructor de
la clase padre con
parámetros
Nota: los atributos y métodos declarados de forma
private, no son heredados por las clases derivadas
HERENCIA – EJEMPLO 1
16. public class MotorElectrico extends Motor{
private int consumo;
public MotorElectrico(int caballos, int peso,
int tamaño, int consumo){
this.consumo = consumo;
super(caballos,peso,tamaño);
}
public int mostrarConsumo (){
return consumo;
}
} MotorElectrico
- consumo
+ mostrarConsumo
Llamado al
constructor del
padre con sus
respectivos
parámetros.
HERENCIA – EJEMPLO 1
17. public class MotorCombustion extends Motor{
private int presion;
public MotorElectrico(int caballos, int peso,
int tamaño, int presion){
this.presion = presion;
super(caballos,peso,tamaño);
}
public int mostrarPresion (){
return presion;
}
}
MotorCombustion
- presion
+ mostrarPresion
Llamado al
constructor del
padre con sus
respectivos
parámetros.
HERENCIA – EJEMPLO 1
18. public class Programa{
public static void main(String [] args){
Motor motor1 = new MotorElectrico(30,50,20,5);
Motor motor2 = new MotorCombustion(200,300,150,45);
System.out.prinln(“Encendiendo el Motor
”+motor1.encender());
System.out.prinln(“Encendiendo el Motor
”+motor2.encender());
System.out.prinln(“El consumo del motor eléctrico
es: ”+motor1.mostrarConsumo());
System.out.prinln(“La presión del motor a combustion
es: ”+motor2.mostrarPresion());
System.out.prinln(“Apagando motor1: ” +motor1.apagar());
System.out.prinln(“Apagando motor2: ” +motor2.apagar());
}//Fin del método main
}//Fin del programa
HERENCIA – EJEMPLO 1
19. Realice una aplicación en Java, que permita crear objetos de tipo
Persona y objetos de tipo Obrero, Ingeniero, Docente y Estudiante
que hereden de la clase Persona.
HERENCIA – EJERCICIO PROPUESTO
20. Una clase abstracta, es aquella que representa una clase que
define los atributos y el comportamiento básico para otras clases.
Una clase abstracta, no se puede instanciar, es decir, que no se
pueden crear objetos de una clase abstracta.
Una clase que abstracta debe poseer operaciones o métodos
abstractos.
Una clase que posea un método abstracto, se considera una
clase abstracta.
Las métodos abstractos no poseen implementación, es decir
solo se declaran.
Las clases abstractas son ideales para definir Super clases o
clases Padres.
CLASE ABSTRACTA
21. Imaginemos que tenemos la clase abstracta Profesor, de la
cual se crearan otras clases como ProfesorInstructor y Profesor Titular.
Para ello la sintaxis sería la siguiente:
CLASE ABSTRACTA - EJEMPLO
Public abstract class Profesor{
protected String nombre;
protected int edad;
public Profesor(String nombre, int edad){
this.nombre = nombre;
this.edad = edad;
}
public String getNombre(){
return nombre;
}
abstract public calcularSueldo(){
}
}
22. Una interfaz es una colección de propiedades y
métodos abstractos donde se especifica el qué debe hacer pero
no el cómo lo debe hacer, es decir, no se hace la
implementación.
En otras palabras, se podría describir como una lista
de acciones que deben ser implementadas en un objeto.
Las clases que implementen la interfaz, son las que
describirán e implementaran el código de los métodos
abstractos de la misma.
INTERFACES
23. Las interfaces son muy similares a las clases, con la
diferencia que no se usa la clausula class, sino interface.
Las interfaces no tienen ni constructor ni métodos
implementados, solo declaraciones.
La sintaxis es la siguiente:
INTERFACES
public interface AccionesDocentes{
public final int canEstudiantes = 50;
public String darClases();
public String corregirExamenes();
public String darNotas();
}
24. Existe diversas diferencias entre las interfaces y las
clases abstractas, se presentan a continuación.
INTERFACES Y LAS CLASES
ABSTRACTAS
Clase Abstracta Interfaz
Una clase puede heredar solo una clase
abstracta.
Una clase puede implementar una o
varias interfaces.
Una clase hereda los métodos
implementados por la clase abstracta.
Una clase no hereda los métodos
implementados en la interfaz.
Requiere de la herencia para que un
objeto pueda implementar sus
elementos.
Proporciona la encapsulación de los
métodos sin necesidad de la herencia.
25. El polimorfismo permite básicamente distintos comportamientos
para un método dependiendo de la clase donde estén definidos.
“La propiedad de polimorfismo es aquella en que una operación
tiene el mismo nombre en diferentes clases, pero se ejecuta de diferentes
formas en cada clase”
Joyanes Aquilar
Por ejemplo la operación “abrir” tiene una acción distinta si se
trata de abrir una puerta, abrir un libro o abrir una cuenta.
POLIMORFISMO
26. Figura
- color
+ calcularArea
Cuadrado
- lado
+ calcularArea
Circulo
- radio
+ calcularArea
Para el cálculo del área de una figura
cuadrada, es necesario implementar la
siguiente fórmula: Area = L2.
Para el cálculo del área de un circulo, es
necesario implementar la siguiente
fórmula: Area = Pi * R2.
POLIMORFISMO - EJEMPLO
27. POLIMORFISMO - EJEMPLO
public class Programa{
public static void main (String [] args){
Figura redonda;
Figura cuadrada;
int radio = 5;
int lado = 10;
redonda = new Circulo(radio);
cuadrada = new Cuadrado(lado);
int areaCirculo = redonda.calcularArea();
int areaCuadrado = cuadrada.calcularArea();
System.out.println(“El área del circulo es: “+areaCirculo);
System.out.println(“El área del cuadrado es: “+areaCirculo);
}
}
Declaración de variables
de la clase figura.
Creación de los Objetos
según sus características
Llamado al
método calcular
área
28. SOBRE-ESCRIBIR O REDEFINIR UN
MÉTODO
public class Esfera {
double radio;
void mostrarValores() {
System.out.println("R=" + radio);
}
}
class Planeta extends Esfera {
int numSatelites;
void mostrarValores() {
System.out.println("R=" + radio + "Num.
Sat.=" + numSatelites);
}
}
Redefinición o sobre-
escritura del método
mostrarValores()
Cuando se habla de sobre-escritura o redefinición de un método, se
habla de modificar la implementación del mismo de ser necesario en la clase
hija, por ejemplo:
29. SOBRE-ESCRIBIR O REDEFINIR UN
MÉTODO
public class Esfera {
double radio;
void mostrarValores() {
System.out.println("R=" + radio);
}
}
class Planeta extends Esfera {
int numSatelites;
void mostrarValores() {
System.out.println("R=" + radio + "Num.
Sat.=" + numSatelites);
}
}
Redefinición o sobre-
escritura del método
mostrarValores()
Cuando se habla de sobre-escritura o redefinición de un método, se
habla de modificar la implementación del mismo de ser necesario en la clase
hija, por ejemplo:
30. SOBRECARGA DE UN MÉTODO
public class Articulo{
private float precio;
public void setPrecio(){
precio = 3.50;
}
public void setPrecio(float nuevoPrecio){
precio = nuevoPrecio;
}
}
Sobrecarga del Método
setPrecio en la clase
Articulo
Cuando se habla de sobrecarga de un método, se habla de
implementar mas de un método con el mismo nombre dentro de la misma
clase pero con parámetros e implementaciones diferentes entre sí.
31. SOBRECARGA DE UN CONSTRUCTOR
public class Articulo{
private String nombre;
private float precio;
public Articulo(String nombre){
this.nombre = nombre;
precio = 3.50;
}
public Articulo(float nuevoPrecio, String nombre){
precio = nuevoPrecio;
this.nombre = nombre;
}
public Articulo(){
precio = 3.50;
nombre = “Sin Nombre”;
}
}
Sobrecarga del Método
constructor en la clase
Articulo
Cuando se habla de sobrecarga de un constructor, se habla de
implementar mas de un método constructor dentro de la misma clase pero
con parámetros e implementaciones diferentes entre sí.
32. Realice una aplicación en Java, que permita crear una clase abstracta
de tipo Figura y objetos de tipo Circulo, Cuadrado y Triángulo que
hereden de la clase Figura e implementar métodos abstractos
calcular área y mostrar figura.
HERENCIA – EJERCICIO PROPUESTO
33. REFERENCIAS
JOYANES A. Luis (2008). FUNDAMENTOS DE PROGRAMACIÓN.
Algoritmos, Estructura de Datos y Objetos.
Cuarta Edición. Madrid España: McGRAW-HILL
Llobet A. Rafael (2009). INTRODUCCIÓN A LA PROGRAMACIÓN
ORIENTADA A OBJETOS CON JAVA.
Primera Edición. Valencia España: Departamento de Sistemas Informáticos
y Computación Universidad Politécnica de Valencia