SlideShare una empresa de Scribd logo
1 de 39
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 1
Maestría en Sistemas Computacionales
Materia
TECNOLOGÍAS DE PROGRAMACIÓN
3. Herencia, Polimorfismo,3. Herencia, Polimorfismo,
Interfaces y Clases Abstractas.Interfaces y Clases Abstractas.
semestre agosto – diciembre 2012
Instituto Tecnológico de la Laguna
División de Estudios de Posgrado e Investigación
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 2
Objetivo: Descripción de conceptos
relevantes en el POO: herencia, interfaces,
clases abstractas y polimorfismo.
Contenido
3.1 Herencia.
3.2 Polimorfismo
3.3 Interfaces.
3.4 Clases abstractas.
3.3. Interfaces, Clases Abstractas yInterfaces, Clases Abstractas y
Polimorfismo.Polimorfismo.
3.1 Herencia
El concepto de Herencia nos
enseña que podemos crear una
nueva clase a partir de una
clase existente: se reutilizan (o
heredan) sus métodos y campos
y se añaden nuevos métodos y
campos para adaptar la nueva
clase a nuevas situaciones.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 3
3.1 Herencia
 La clase existente se denomina
superclase, clase base o clase padre.
 La nueva clase se denomina subclase,
clase derivada o clase hija.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 4
Empleado
Ejecutivo
Administrador Secretario Programadora
superclase
subclase
3.1 Herencia
 Ejemplo: La clase Administrador hereda de
la clase Empleado.
class Administrador extends Empleado
{ private double incentivo;
public void setIncentivo(double incent)
{
incentivo=incent;
}
}
Para indicar la herencia se emplea la
palabra reservada extends.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 5
3.1 Herencia
Note que:
 Si se tiene un objeto Empleado no se
le puede aplicar el método
setIncentivo().
 Sin embargo, si se tiene un objeto
Administrador se le pueden aplicar los
métodos getNombre() y
getFechaContrato(). Estos métodos
se heredan automáticamente de la
superclase Empleado.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 6
3.1 Herencia
 De igual manera, los campos nombre,
sueldo y fechaContrato se heredan de
la superclase. De tal forma que todo
objeto Administrador posee cuatro
campos: nombre, fechaContrato,
sueldo e incentivo.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 7
3.1 Herencia
 Ejemplo: Nuevo método de la subclase que
invalida el método de la superclase.
class Administrador extends Empleado
{ private double incentivo;
public void setIncentivo(double incent)
{
incentivo=incent;
}
public double getSueldo()
{
double sueldoBase = super.getSueldo();
return (sueldoBase + incentivo);
}
}
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 8
3.1 Herencia
 Es importante hacer notar que las
subclases pueden añadir campos y
pueden añadir o invalidar métodos de
la superclase. Sin embargo, la
herencia no tiene la posibilidad de
añadir ni eliminar campos o métodos.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 9
3.1 Herencia
 Ejemplo: Creación de un constructor en la
subclase.
class Administrador extends Empleado
{ private double incentivo;
public Administrador(String n, double s, int aa, int mm, ind dd)
{ super(n, s, aa, mm, dd);
incentivo = 0;
}
public void setIncentivo(double incent)
{ incentivo=incent;
}
public double getSueldo()
{ double sueldoBase = super.getSueldo();
return (sueldoBase + incentivo);
}
}
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 10
3.1 Herencia
 El constructor de la subclase Administrador
no tiene acceso a los campos private de la
superclase Empleado.
 La instrucción:
super(n, s, aa, mm, dd);
realiza la llamada al constructor de la
superclase Empleado.
 La llamada que usa super debe ser la
primer instrucción que aparezca en el
constructor de la subclase.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 11
3.1 Herencia
 super es una palabra reservada especial que dirige
al compilador para que invoque al método de la
superclase.
 Si el constructor de la subclase no llama
explícitamente a un constructor de la superclase,
entonces se invoca al constructor predeterminado
(sin parámetros) de la superclase.
 Si la superclase no posee un constructor
predeterminado y el constructor de la subclase no
llama explícitamente a otro constructor de la
superclase, entonces el compilador de Java nos
avisa que hubo un error.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 12
3.1 Herencia
 Ejemplo:
public class Bicicleta{
// la clase Bicicleta tiene tres campos
public int cambios;
public int rodada;
public int velocidad;
// la clase Bicicleta tiene un constructor
public Bicicleta(int iniciaCambios, int iniciaRodada, int iniciaVelocidad)
{
cambios = iniciaCambios;
rodada = iniciaRodada;
velocidad = iniciaVelocidad;
}
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 13
3.1 Herencia
// la clase Bicicleta tiene cuatro metodos
public void setCambios(int newValue) {
cambios = newValue;
}
public void setRodada(int newValue) {
rodada = newValue;
}
public void aplicaFreno(int decremento) {
velocidad -= decremento;
}
public void aumentaVelocidad(int incremento) {
velocidad += incremento;
}
}
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 14
3.1 Herencia
public class BiciDeMontana extends Bicicleta{
// la subclase BiciDeMontana agrega un campo
public int alturaAsiento;
// la subclase BiciDeMontana tiene un constructor
public BiciDeMontana (int iniciaAlturaAsiento, int iniciaCambios,
int iniciaRodada, int iniciaVelocidad)
{
super(iniciaCambios, iniciaRodada, iniciaVelocidad) ;
alturaAsiento = iniciaAlturaAsiento;
}
// la subclase BiciDeMontana agrega un método
public void setAlturaAsiento(int newValue) {
alturaAsiento = newValue;
}
}
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 15
3.2 Polimorfismo
 El hecho de que una variable de
objeto pueda en realidad hacer
referencia a múltiples tipos
distintos se denomina
polimorfismo.
 La selección automática del método
correcto durante la ejecución se
denomina enlace dinámico.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 16
3.2 Polimorfismo
 Ejemplo: Creación de un nuevo Administrador y
dos Empleados.
Administrador jefe = new Administrador(“José López”, 50000, 1987,
12, 15);
jefe.setIncentivo(5000);
Empleado [] personal = new Empleado[3];
personal[0] = jefe;
personal[1] = new Empleado (“María Pérez”, 30000, 1989, 10, 1);
personal[2] = new Empleado (“Miguel Ríos”, 20000, 1990, 3, 15);
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 17
3.2 Polimorfismo
Para imprimir el sueldo de todos:
for(Empleado e : personal)
System.out.println(e.getNombre() + ” ” + e.getSueldo());
Este bucle imprime:
José López 55000.0
María Pérez 30000.0
Miguel Ríos 20000.0
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 18
3.2 Polimorfismo
 personal[1] y personal[2] imprimen su sueldo base
porque son objetos de tipo Empleado.
 personal[0] es un objeto de tipo Administrador y su
método getSueldo añade el incentivo al sueldo base.
 La llamada
e.getSueldo());
invoca al método de la clase Empleado cuando e se
refiere a un objeto de tipo Empleado. Cuando e se
refiere a un objeto de tipo Administrador se invoca al
método getSueldo de la clase Administrador. Esto es
polimorfismo.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 19
3.2 Polimorfismo
 La llamada al método adecuado se realiza en tiempo de
ejecución (enlazado dinámico).
 En el momento de ejecución, la llamada a e.getSueldo()
se resuelve de la siguiente manera:
1. La máquina virtual examina la tabla de métodos en busca del
tipo de e. Puede tratarse se la tabla de métodos de Empleado,
Administrador, u otra subclase de Empleado.
2. Entonces, la máquina virtual examina la clase en que se define,
en busca de la signatura de getSueldo(). Ahora ya sabe el
método al que debe llamar.
3. Por último, la máquina virtual llama al método.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 20
Clases y métodos finales
 Cuando se desea evitar que alguien
construya una subclase a partir de una
de nuestras clases podemos utilizar el
modificador final en la definición de la
clase.
 Por ejemplo, deseamos evitar que otros
construyan subclases de la clase
Ejecutivo, declaramos la clase:
final class Ejecutivo extends administrador
{
…
}
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 21
 Si se desea que ninguna subclase
pueda invalidar un método, el método
se debe declarar usando el
modificador final:
Class Empleado
{ . . .
public final String getNombre()
{
return nombre;
}
. . .
}
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 22
 Todos los métodos de una clase final son final
automáticamente.
 Solo hay una buena razón para hacer final un
método o una clase: asegurarse de que su
semántica no se pueda modificar en una
subclase.
 Por ejemplo los métodos getTime y setTime de
la clase Calendar son final. La clase Calendar se
hace cargo de la responsabilidad de efectuar
conversiones entre la clase Date y el estado del
calendario.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 23
Conversión de referencia de un
objeto de una clase a otra.
 Se le llama typecasting o refundición.
 Este proceso consiste en forzar la
conversión de un tipo a otro.
 Podemos transformar un número de
punto flotante en un entero:
double x = 3.405;
int nx = (int) x;
transforma el valor de la expresión x
en un entero, descartando su parte
fraccionaria.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 24
Conversión de referencia de un
objeto de una clase a otra.
 También podemos convertir una
referencia de objeto de una clase a
otra. Por ejemplo:
Administrador jefe = (Administrador) personal[0]; // correcto
Administrador jefe = (Administrador) personal[1]; // error
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 25
Conversión de referencia de un
objeto de una clase a otra.
 instanceof se puede utilizar para
verificar si una refundición va a tener
éxito antes de intentar realizarla.
if (personal[1] instaceof Administrador)
{
Administrador jefe = (Administrador) personal[1];
}
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 26
Conversión de referencia de un
objeto de una clase a otra.
 En resumen:
 Solo se puede refundir dentro de una
jerarquía de herencia.
 Utilice instanceof para probar antes
de hacer una refundición de una
superclase a una subclase.
 Puede emplear try y catch con
ClassCastException para manejar el
error de refundición de clases.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 27
EJEMPLO. FUENTE:
http://www.javabeginner.com/learn-java/java-object-typecasting
class Vehicle
{ String name;
Vehicle() { name = "Vehicle"; }
}
class HeavyVehicle extends Vehicle
{ HeavyVehicle() { name = "HeavyVehicle"; }
}
class Truck extends HeavyVehicle
{ Truck() { name = "Truck"; }
}
class LightVehicle extends Vehicle
{ LightVehicle() { name = "LightVehicle"; }
}
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 28
FUENTE:
http://www.javabeginner.com/learn-java/java-object-typecasting
public class InstanceOfExample
{ static boolean result;
static HeavyVehicle hV = new HeavyVehicle();
static Truck T = new Truck();
static HeavyVehicle hv2 = null;
public static void main(String[] args)
{ result = hV instanceof HeavyVehicle;
System.out.print("hV is an HeavyVehicle: " + result + "n");
result = T instanceof HeavyVehicle;
System.out.print("T is an HeavyVehicle: " + result + "n");
result = hV instanceof Truck;
System.out.print("hV is a Truck: " + result + "n");
result = hv2 instanceof HeavyVehicle;
System.out.print("hv2 is an HeavyVehicle: " + result + "n");
hV = T; //Sucessful Cast form child to parent
T = (Truck) hV; //Sucessful Explicit Cast form parent to child
}
}
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 29
FUENTE:
http://www.javabeginner.com/learn-java/java-object-typecasting
SALIDA:
hV is an HeavyVehicle: true
T is an HeavyVehicle: true
hV is a Truck: false
hv2 is an HeavyVehicle: false
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 30
3.3 Interfaces
fuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
Una interfaz es una forma
de describir lo que deberían
hacer las clases, sin
especificar cómo deben
hacerlo.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 31
3.3 Interfaces
fuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
 En Java, una interfaz es un tipo de
referencia, similar a una clase, que
puede contener solo constantes, y
firmas de métodos. Los métodos no
tienen cuerpo.
 Las interfaces no pueden ser
instanciadas, sólo se pueden
implementar en las clases o ser
extendidas por otras interfaces.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 32
3.3 Interfaces
fuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
 Una declaración de una interfaz consiste de
modificadores de acceso, la palabra reservada
interface, el nombre de la interfaz, una lista de
interfaces padre (sí las hay) y el cuerpo de la
interfaz:
public interface GroupedInterface extends Interface1, Interface2,
Interface3 {
// constant declarations
// base of natural logarithms
double E = 2.718282;
// method signatures
void doSomething (int i, double x);
int doSomethingElse(String s);
}
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 33
3.3 Interfaces
fuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
 El especificador de acceso public nos
indica que la interfaz puede ser usada
por cualquier clase en cualquier
paquete. Si no se especifica que la
interfaz es pública, la interfaz sólo será
accesible por las clases que están
definidas en el mismo paquete que la
interfaz.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 34
3.3 Interfaces
fuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
 Una interfaz puede extender de otras
interfaces, al igual que una clase puede
extender o ser subclase de otra clase.
 Sin embargo, mientras que una clase
sólo puede extender otra clase, una
interfaz puede extender cualquier
número de interfaces. La declaración de
interfaz incluye una lista separada por
comas de todas las interfaces que se
extiende.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 35
 El cuerpo de la interfaz contiene
declaraciones de métodos para todos
los métodos incluidos en la interfaz.
Una declaración de método dentro de
una interfaz es seguido por un punto
y coma, pero sin paréntesis, porque
una interfaz no proporciona
implementaciones para los métodos
declarados dentro de ella.
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 36
 Todos los métodos declarados en una
interfaz son implícitamente públicos, por
lo que el modificador public puede ser
omitido.
 Una interfaz puede contener
declaraciones constantes además de
declaraciones de métodos. Todos los
valores constantes definidos en una
interfaz son implícitamente públicos,
estáticos y finales (public, static y final).
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 37
3.4 Clases abstractas
 Un empleado es una persona, y
también lo es un alumno.
Extendiendo nuestra jerarquía de
clases para incluir las clases Persona
y Alumno tenemos:
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 38
Persona
Empleado Alumno
 Tanto los alumnos como los empleados
tienen nombres, y al introducir una
superclase común se nos permite sacar
el método getNombre a un nivel
superior en la jerarquía de herencia.
 Añadimos otro método: getDescripcion
con el propósito de proporcionar una
breve descripción de la persona, como:
un empleado con un sueldo de $50,000.00
un alumno que estudia informática
Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 39

Más contenido relacionado

Destacado

Mcts self paced training kit exam 432 sql server 2008 - implementation and ...
Mcts self paced training kit exam 432   sql server 2008 - implementation and ...Mcts self paced training kit exam 432   sql server 2008 - implementation and ...
Mcts self paced training kit exam 432 sql server 2008 - implementation and ...
Portal_do_Estudante_SQL
 
Aho hopcroft - estructura de datos y algoritmos p1
Aho   hopcroft - estructura de datos y algoritmos p1Aho   hopcroft - estructura de datos y algoritmos p1
Aho hopcroft - estructura de datos y algoritmos p1
Emiliano Andres Abadi
 
Polimorfismo en java
Polimorfismo en javaPolimorfismo en java
Polimorfismo en java
Sa_Van
 
Sql server 2012_licensing_reference_guide
Sql server 2012_licensing_reference_guideSql server 2012_licensing_reference_guide
Sql server 2012_licensing_reference_guide
amenus006
 
Programación III (Java) - 03 Interfaces
Programación III (Java) - 03 InterfacesProgramación III (Java) - 03 Interfaces
Programación III (Java) - 03 Interfaces
Andoni Eguíluz Morán
 
Clases abstractas e interfaces
Clases abstractas e interfacesClases abstractas e interfaces
Clases abstractas e interfaces
lopezcortes
 
Sql server 2012 transact sql dml reference
Sql server 2012 transact sql dml referenceSql server 2012 transact sql dml reference
Sql server 2012 transact sql dml reference
U.N.S.C
 
Recovery, logging and the transaction log
Recovery, logging and the transaction logRecovery, logging and the transaction log
Recovery, logging and the transaction log
Miroslav Dimitrov
 

Destacado (20)

Mcts self paced training kit exam 432 sql server 2008 - implementation and ...
Mcts self paced training kit exam 432   sql server 2008 - implementation and ...Mcts self paced training kit exam 432   sql server 2008 - implementation and ...
Mcts self paced training kit exam 432 sql server 2008 - implementation and ...
 
Aho hopcroft - estructura de datos y algoritmos p1
Aho   hopcroft - estructura de datos y algoritmos p1Aho   hopcroft - estructura de datos y algoritmos p1
Aho hopcroft - estructura de datos y algoritmos p1
 
delegacion_herencia_polimorfismo
delegacion_herencia_polimorfismodelegacion_herencia_polimorfismo
delegacion_herencia_polimorfismo
 
Polimorfismo en java
Polimorfismo en javaPolimorfismo en java
Polimorfismo en java
 
Clases abstractas
Clases abstractasClases abstractas
Clases abstractas
 
Informes+con+ireport (2)
Informes+con+ireport (2)Informes+con+ireport (2)
Informes+con+ireport (2)
 
Clases abstractas
Clases abstractasClases abstractas
Clases abstractas
 
Sql server 2012_licensing_reference_guide
Sql server 2012_licensing_reference_guideSql server 2012_licensing_reference_guide
Sql server 2012_licensing_reference_guide
 
Programación III (Java) - 03 Interfaces
Programación III (Java) - 03 InterfacesProgramación III (Java) - 03 Interfaces
Programación III (Java) - 03 Interfaces
 
Interface Design Getting Real
Interface Design Getting RealInterface Design Getting Real
Interface Design Getting Real
 
Estructuras de datos osvaldo cairo
Estructuras de datos   osvaldo cairoEstructuras de datos   osvaldo cairo
Estructuras de datos osvaldo cairo
 
Windows Server 2012 Exam Paper 70-411 PDF
Windows Server 2012 Exam Paper 70-411 PDFWindows Server 2012 Exam Paper 70-411 PDF
Windows Server 2012 Exam Paper 70-411 PDF
 
Clases abstractas e interfaces
Clases abstractas e interfacesClases abstractas e interfaces
Clases abstractas e interfaces
 
09 Clases Abstractas E Interfaces
09   Clases Abstractas E Interfaces09   Clases Abstractas E Interfaces
09 Clases Abstractas E Interfaces
 
MCSA Exam paper 70-412 PDF
MCSA Exam paper 70-412 PDFMCSA Exam paper 70-412 PDF
MCSA Exam paper 70-412 PDF
 
Sql server 2012 transact sql dml reference
Sql server 2012 transact sql dml referenceSql server 2012 transact sql dml reference
Sql server 2012 transact sql dml reference
 
SQL Server Backup and Restore
SQL Server Backup and RestoreSQL Server Backup and Restore
SQL Server Backup and Restore
 
Alta Disponibilidad con SQL Server 2012
Alta Disponibilidad con SQL Server 2012Alta Disponibilidad con SQL Server 2012
Alta Disponibilidad con SQL Server 2012
 
NoSQL databases pros and cons
NoSQL databases pros and consNoSQL databases pros and cons
NoSQL databases pros and cons
 
Recovery, logging and the transaction log
Recovery, logging and the transaction logRecovery, logging and the transaction log
Recovery, logging and the transaction log
 

Similar a 3 interfaces clases_abstractas_herencia_polimorfismo

5 Mecanismos Reuntilizacion Abstraccion
5 Mecanismos Reuntilizacion Abstraccion5 Mecanismos Reuntilizacion Abstraccion
5 Mecanismos Reuntilizacion Abstraccion
UVM
 
PROGRAMACIÓN ESTRUCTURADA-Evelyn Suquillo-2C-003
PROGRAMACIÓN ESTRUCTURADA-Evelyn Suquillo-2C-003PROGRAMACIÓN ESTRUCTURADA-Evelyn Suquillo-2C-003
PROGRAMACIÓN ESTRUCTURADA-Evelyn Suquillo-2C-003
Evelynsuquillo1
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
Irving Trigo
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
FamiliaAyluardo
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
ale8819
 

Similar a 3 interfaces clases_abstractas_herencia_polimorfismo (20)

03 java poo_parte_2
03 java poo_parte_203 java poo_parte_2
03 java poo_parte_2
 
9.herencia en java
9.herencia en java9.herencia en java
9.herencia en java
 
5 Mecanismos Reuntilizacion Abstraccion
5 Mecanismos Reuntilizacion Abstraccion5 Mecanismos Reuntilizacion Abstraccion
5 Mecanismos Reuntilizacion Abstraccion
 
Poo
PooPoo
Poo
 
10.herencia en c++
10.herencia en c++10.herencia en c++
10.herencia en c++
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con php
 
Investigacion sobre carga de metodos
Investigacion sobre carga de metodosInvestigacion sobre carga de metodos
Investigacion sobre carga de metodos
 
Herencia clase
Herencia claseHerencia clase
Herencia clase
 
Herencia
HerenciaHerencia
Herencia
 
Abstral herencias
Abstral herenciasAbstral herencias
Abstral herencias
 
Certificado (1)
Certificado (1)Certificado (1)
Certificado (1)
 
PROGRAMACIÓN ESTRUCTURADA-Evelyn Suquillo-2C-003
PROGRAMACIÓN ESTRUCTURADA-Evelyn Suquillo-2C-003PROGRAMACIÓN ESTRUCTURADA-Evelyn Suquillo-2C-003
PROGRAMACIÓN ESTRUCTURADA-Evelyn Suquillo-2C-003
 
Abstral herencias
Abstral herenciasAbstral herencias
Abstral herencias
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
 
Programación orientada a objetos (Herencia)
Programación orientada a objetos (Herencia)Programación orientada a objetos (Herencia)
Programación orientada a objetos (Herencia)
 
Clase 2 Poo
Clase 2 PooClase 2 Poo
Clase 2 Poo
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Clases y objetos
Clases y objetosClases y objetos
Clases y objetos
 

Más de Jesus Alberto Iribe Gonzalez (20)

1 introduccion a_java_2da_parte
1 introduccion a_java_2da_parte1 introduccion a_java_2da_parte
1 introduccion a_java_2da_parte
 
1 introduccion a_java_1er_parte
1 introduccion a_java_1er_parte1 introduccion a_java_1er_parte
1 introduccion a_java_1er_parte
 
2 programación orientada_a_objetos
2 programación orientada_a_objetos2 programación orientada_a_objetos
2 programación orientada_a_objetos
 
Metodologia de investigacion itl
Metodologia de investigacion itlMetodologia de investigacion itl
Metodologia de investigacion itl
 
U3 interfaces, clases abstractas, heencia y polimorfismo
U3 interfaces, clases abstractas, heencia y polimorfismoU3 interfaces, clases abstractas, heencia y polimorfismo
U3 interfaces, clases abstractas, heencia y polimorfismo
 
Matematicas discretas1
Matematicas discretas1Matematicas discretas1
Matematicas discretas1
 
Infore de proyecto v1
Infore de proyecto v1Infore de proyecto v1
Infore de proyecto v1
 
Conjuntos
ConjuntosConjuntos
Conjuntos
 
Trayectorias
TrayectoriasTrayectorias
Trayectorias
 
Id sw13
Id sw13Id sw13
Id sw13
 
Id sw12
Id sw12Id sw12
Id sw12
 
Id sw11
Id sw11Id sw11
Id sw11
 
Id sw10
Id sw10Id sw10
Id sw10
 
Id sw09
Id sw09Id sw09
Id sw09
 
Id sw08
Id sw08Id sw08
Id sw08
 
Id sw07
Id sw07Id sw07
Id sw07
 
Id sw06
Id sw06Id sw06
Id sw06
 
Id sw05
Id sw05Id sw05
Id sw05
 
Id sw04
Id sw04Id sw04
Id sw04
 
Id sw02
Id sw02Id sw02
Id sw02
 

3 interfaces clases_abstractas_herencia_polimorfismo

  • 1. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 1 Maestría en Sistemas Computacionales Materia TECNOLOGÍAS DE PROGRAMACIÓN 3. Herencia, Polimorfismo,3. Herencia, Polimorfismo, Interfaces y Clases Abstractas.Interfaces y Clases Abstractas. semestre agosto – diciembre 2012 Instituto Tecnológico de la Laguna División de Estudios de Posgrado e Investigación
  • 2. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 2 Objetivo: Descripción de conceptos relevantes en el POO: herencia, interfaces, clases abstractas y polimorfismo. Contenido 3.1 Herencia. 3.2 Polimorfismo 3.3 Interfaces. 3.4 Clases abstractas. 3.3. Interfaces, Clases Abstractas yInterfaces, Clases Abstractas y Polimorfismo.Polimorfismo.
  • 3. 3.1 Herencia El concepto de Herencia nos enseña que podemos crear una nueva clase a partir de una clase existente: se reutilizan (o heredan) sus métodos y campos y se añaden nuevos métodos y campos para adaptar la nueva clase a nuevas situaciones. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 3
  • 4. 3.1 Herencia  La clase existente se denomina superclase, clase base o clase padre.  La nueva clase se denomina subclase, clase derivada o clase hija. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 4 Empleado Ejecutivo Administrador Secretario Programadora superclase subclase
  • 5. 3.1 Herencia  Ejemplo: La clase Administrador hereda de la clase Empleado. class Administrador extends Empleado { private double incentivo; public void setIncentivo(double incent) { incentivo=incent; } } Para indicar la herencia se emplea la palabra reservada extends. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 5
  • 6. 3.1 Herencia Note que:  Si se tiene un objeto Empleado no se le puede aplicar el método setIncentivo().  Sin embargo, si se tiene un objeto Administrador se le pueden aplicar los métodos getNombre() y getFechaContrato(). Estos métodos se heredan automáticamente de la superclase Empleado. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 6
  • 7. 3.1 Herencia  De igual manera, los campos nombre, sueldo y fechaContrato se heredan de la superclase. De tal forma que todo objeto Administrador posee cuatro campos: nombre, fechaContrato, sueldo e incentivo. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 7
  • 8. 3.1 Herencia  Ejemplo: Nuevo método de la subclase que invalida el método de la superclase. class Administrador extends Empleado { private double incentivo; public void setIncentivo(double incent) { incentivo=incent; } public double getSueldo() { double sueldoBase = super.getSueldo(); return (sueldoBase + incentivo); } } Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 8
  • 9. 3.1 Herencia  Es importante hacer notar que las subclases pueden añadir campos y pueden añadir o invalidar métodos de la superclase. Sin embargo, la herencia no tiene la posibilidad de añadir ni eliminar campos o métodos. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 9
  • 10. 3.1 Herencia  Ejemplo: Creación de un constructor en la subclase. class Administrador extends Empleado { private double incentivo; public Administrador(String n, double s, int aa, int mm, ind dd) { super(n, s, aa, mm, dd); incentivo = 0; } public void setIncentivo(double incent) { incentivo=incent; } public double getSueldo() { double sueldoBase = super.getSueldo(); return (sueldoBase + incentivo); } } Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 10
  • 11. 3.1 Herencia  El constructor de la subclase Administrador no tiene acceso a los campos private de la superclase Empleado.  La instrucción: super(n, s, aa, mm, dd); realiza la llamada al constructor de la superclase Empleado.  La llamada que usa super debe ser la primer instrucción que aparezca en el constructor de la subclase. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 11
  • 12. 3.1 Herencia  super es una palabra reservada especial que dirige al compilador para que invoque al método de la superclase.  Si el constructor de la subclase no llama explícitamente a un constructor de la superclase, entonces se invoca al constructor predeterminado (sin parámetros) de la superclase.  Si la superclase no posee un constructor predeterminado y el constructor de la subclase no llama explícitamente a otro constructor de la superclase, entonces el compilador de Java nos avisa que hubo un error. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 12
  • 13. 3.1 Herencia  Ejemplo: public class Bicicleta{ // la clase Bicicleta tiene tres campos public int cambios; public int rodada; public int velocidad; // la clase Bicicleta tiene un constructor public Bicicleta(int iniciaCambios, int iniciaRodada, int iniciaVelocidad) { cambios = iniciaCambios; rodada = iniciaRodada; velocidad = iniciaVelocidad; } Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 13
  • 14. 3.1 Herencia // la clase Bicicleta tiene cuatro metodos public void setCambios(int newValue) { cambios = newValue; } public void setRodada(int newValue) { rodada = newValue; } public void aplicaFreno(int decremento) { velocidad -= decremento; } public void aumentaVelocidad(int incremento) { velocidad += incremento; } } Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 14
  • 15. 3.1 Herencia public class BiciDeMontana extends Bicicleta{ // la subclase BiciDeMontana agrega un campo public int alturaAsiento; // la subclase BiciDeMontana tiene un constructor public BiciDeMontana (int iniciaAlturaAsiento, int iniciaCambios, int iniciaRodada, int iniciaVelocidad) { super(iniciaCambios, iniciaRodada, iniciaVelocidad) ; alturaAsiento = iniciaAlturaAsiento; } // la subclase BiciDeMontana agrega un método public void setAlturaAsiento(int newValue) { alturaAsiento = newValue; } } Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 15
  • 16. 3.2 Polimorfismo  El hecho de que una variable de objeto pueda en realidad hacer referencia a múltiples tipos distintos se denomina polimorfismo.  La selección automática del método correcto durante la ejecución se denomina enlace dinámico. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 16
  • 17. 3.2 Polimorfismo  Ejemplo: Creación de un nuevo Administrador y dos Empleados. Administrador jefe = new Administrador(“José López”, 50000, 1987, 12, 15); jefe.setIncentivo(5000); Empleado [] personal = new Empleado[3]; personal[0] = jefe; personal[1] = new Empleado (“María Pérez”, 30000, 1989, 10, 1); personal[2] = new Empleado (“Miguel Ríos”, 20000, 1990, 3, 15); Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 17
  • 18. 3.2 Polimorfismo Para imprimir el sueldo de todos: for(Empleado e : personal) System.out.println(e.getNombre() + ” ” + e.getSueldo()); Este bucle imprime: José López 55000.0 María Pérez 30000.0 Miguel Ríos 20000.0 Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 18
  • 19. 3.2 Polimorfismo  personal[1] y personal[2] imprimen su sueldo base porque son objetos de tipo Empleado.  personal[0] es un objeto de tipo Administrador y su método getSueldo añade el incentivo al sueldo base.  La llamada e.getSueldo()); invoca al método de la clase Empleado cuando e se refiere a un objeto de tipo Empleado. Cuando e se refiere a un objeto de tipo Administrador se invoca al método getSueldo de la clase Administrador. Esto es polimorfismo. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 19
  • 20. 3.2 Polimorfismo  La llamada al método adecuado se realiza en tiempo de ejecución (enlazado dinámico).  En el momento de ejecución, la llamada a e.getSueldo() se resuelve de la siguiente manera: 1. La máquina virtual examina la tabla de métodos en busca del tipo de e. Puede tratarse se la tabla de métodos de Empleado, Administrador, u otra subclase de Empleado. 2. Entonces, la máquina virtual examina la clase en que se define, en busca de la signatura de getSueldo(). Ahora ya sabe el método al que debe llamar. 3. Por último, la máquina virtual llama al método. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 20
  • 21. Clases y métodos finales  Cuando se desea evitar que alguien construya una subclase a partir de una de nuestras clases podemos utilizar el modificador final en la definición de la clase.  Por ejemplo, deseamos evitar que otros construyan subclases de la clase Ejecutivo, declaramos la clase: final class Ejecutivo extends administrador { … } Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 21
  • 22.  Si se desea que ninguna subclase pueda invalidar un método, el método se debe declarar usando el modificador final: Class Empleado { . . . public final String getNombre() { return nombre; } . . . } Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 22
  • 23.  Todos los métodos de una clase final son final automáticamente.  Solo hay una buena razón para hacer final un método o una clase: asegurarse de que su semántica no se pueda modificar en una subclase.  Por ejemplo los métodos getTime y setTime de la clase Calendar son final. La clase Calendar se hace cargo de la responsabilidad de efectuar conversiones entre la clase Date y el estado del calendario. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 23
  • 24. Conversión de referencia de un objeto de una clase a otra.  Se le llama typecasting o refundición.  Este proceso consiste en forzar la conversión de un tipo a otro.  Podemos transformar un número de punto flotante en un entero: double x = 3.405; int nx = (int) x; transforma el valor de la expresión x en un entero, descartando su parte fraccionaria. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 24
  • 25. Conversión de referencia de un objeto de una clase a otra.  También podemos convertir una referencia de objeto de una clase a otra. Por ejemplo: Administrador jefe = (Administrador) personal[0]; // correcto Administrador jefe = (Administrador) personal[1]; // error Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 25
  • 26. Conversión de referencia de un objeto de una clase a otra.  instanceof se puede utilizar para verificar si una refundición va a tener éxito antes de intentar realizarla. if (personal[1] instaceof Administrador) { Administrador jefe = (Administrador) personal[1]; } Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 26
  • 27. Conversión de referencia de un objeto de una clase a otra.  En resumen:  Solo se puede refundir dentro de una jerarquía de herencia.  Utilice instanceof para probar antes de hacer una refundición de una superclase a una subclase.  Puede emplear try y catch con ClassCastException para manejar el error de refundición de clases. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 27
  • 28. EJEMPLO. FUENTE: http://www.javabeginner.com/learn-java/java-object-typecasting class Vehicle { String name; Vehicle() { name = "Vehicle"; } } class HeavyVehicle extends Vehicle { HeavyVehicle() { name = "HeavyVehicle"; } } class Truck extends HeavyVehicle { Truck() { name = "Truck"; } } class LightVehicle extends Vehicle { LightVehicle() { name = "LightVehicle"; } } Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 28
  • 29. FUENTE: http://www.javabeginner.com/learn-java/java-object-typecasting public class InstanceOfExample { static boolean result; static HeavyVehicle hV = new HeavyVehicle(); static Truck T = new Truck(); static HeavyVehicle hv2 = null; public static void main(String[] args) { result = hV instanceof HeavyVehicle; System.out.print("hV is an HeavyVehicle: " + result + "n"); result = T instanceof HeavyVehicle; System.out.print("T is an HeavyVehicle: " + result + "n"); result = hV instanceof Truck; System.out.print("hV is a Truck: " + result + "n"); result = hv2 instanceof HeavyVehicle; System.out.print("hv2 is an HeavyVehicle: " + result + "n"); hV = T; //Sucessful Cast form child to parent T = (Truck) hV; //Sucessful Explicit Cast form parent to child } } Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 29
  • 30. FUENTE: http://www.javabeginner.com/learn-java/java-object-typecasting SALIDA: hV is an HeavyVehicle: true T is an HeavyVehicle: true hV is a Truck: false hv2 is an HeavyVehicle: false Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 30
  • 31. 3.3 Interfaces fuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html Una interfaz es una forma de describir lo que deberían hacer las clases, sin especificar cómo deben hacerlo. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 31
  • 32. 3.3 Interfaces fuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html  En Java, una interfaz es un tipo de referencia, similar a una clase, que puede contener solo constantes, y firmas de métodos. Los métodos no tienen cuerpo.  Las interfaces no pueden ser instanciadas, sólo se pueden implementar en las clases o ser extendidas por otras interfaces. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 32
  • 33. 3.3 Interfaces fuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html  Una declaración de una interfaz consiste de modificadores de acceso, la palabra reservada interface, el nombre de la interfaz, una lista de interfaces padre (sí las hay) y el cuerpo de la interfaz: public interface GroupedInterface extends Interface1, Interface2, Interface3 { // constant declarations // base of natural logarithms double E = 2.718282; // method signatures void doSomething (int i, double x); int doSomethingElse(String s); } Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 33
  • 34. 3.3 Interfaces fuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html  El especificador de acceso public nos indica que la interfaz puede ser usada por cualquier clase en cualquier paquete. Si no se especifica que la interfaz es pública, la interfaz sólo será accesible por las clases que están definidas en el mismo paquete que la interfaz. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 34
  • 35. 3.3 Interfaces fuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html  Una interfaz puede extender de otras interfaces, al igual que una clase puede extender o ser subclase de otra clase.  Sin embargo, mientras que una clase sólo puede extender otra clase, una interfaz puede extender cualquier número de interfaces. La declaración de interfaz incluye una lista separada por comas de todas las interfaces que se extiende. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 35
  • 36.  El cuerpo de la interfaz contiene declaraciones de métodos para todos los métodos incluidos en la interfaz. Una declaración de método dentro de una interfaz es seguido por un punto y coma, pero sin paréntesis, porque una interfaz no proporciona implementaciones para los métodos declarados dentro de ella. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 36
  • 37.  Todos los métodos declarados en una interfaz son implícitamente públicos, por lo que el modificador public puede ser omitido.  Una interfaz puede contener declaraciones constantes además de declaraciones de métodos. Todos los valores constantes definidos en una interfaz son implícitamente públicos, estáticos y finales (public, static y final). Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 37
  • 38. 3.4 Clases abstractas  Un empleado es una persona, y también lo es un alumno. Extendiendo nuestra jerarquía de clases para incluir las clases Persona y Alumno tenemos: Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 38 Persona Empleado Alumno
  • 39.  Tanto los alumnos como los empleados tienen nombres, y al introducir una superclase común se nos permite sacar el método getNombre a un nivel superior en la jerarquía de herencia.  Añadimos otro método: getDescripcion con el propósito de proporcionar una breve descripción de la persona, como: un empleado con un sueldo de $50,000.00 un alumno que estudia informática Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 39