Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos...

39
Programación Orientada a Objetos Temario • Interfaces • Clase Object • Casting o Conversión de Objetos • Clases Abstractas • Métodos Abstractos • Clases Finales • Métodos Finales • Polimorfismo • Polimorfismo, enlace dinámico

Transcript of Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos...

Page 1: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Programación Orientada a Objetos

Temario• Interfaces• Clase Object• Casting o Conversión de Objetos• Clases Abstractas• Métodos Abstractos• Clases Finales• Métodos Finales• Polimorfismo• Polimorfismo, enlace dinámico

Page 2: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Interfaces• Concepto– Una interfaz en Java es una colección de métodos

abstractos y propiedades. En ellas se especifica qué se debe hacer pero no su implementación. Serán las clases que implementen estas interfaces las que describan la lógica del comportamiento de los métodos.

– Otra forma de llamarle es una clase totalmente abstracta.

Page 3: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Interfaces• Uso de implements– La palabra reservada implements permite el uso

de interfaces– Si es mas de una interfaz las interfaces son

separadas por comas– Toda clase puede implementar una interfaz

Page 4: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Interfaces•Sintaxis de creación

package interfaz01;public interface MiInterfaz { // Constantes public final int miConstante=0; // Metodos Abstractos public int miMetodo();}

Page 5: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Interfaces• Sintaxis de Implementación

package interfaz01;public class MiClase implements MiInterfaz{ public int miMetodo() { // Aqui se implementa el metodo y constante int valor = miConstante * 10; return valor; }}

Page 6: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Interfaces• Uso en el Mainpackage interfaz01;public class Main { public static void main(String[] args) { MiClase mc = new MiClase(); System.out.println(mc.miMetodo()); }}

Page 7: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Interfaces• El uso es el mismo que una clase normal, la

diferencia la establece el contrato que tiene la clase con la interfaz, debe implementar el método y tiene que ser con los mismos parámetros de entrada y salida, además del mismo nombre.

Page 8: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Ejercicios Resueltos• Crear una interfaz para las operaciones

matemáticas de una calculadora básica,• Sumar, restar, multiplicar y dividir (Con y Sin

decimales), implementandola en una clase llamada calculadora que contiene los atributos primerNumero, SegundoNumero y resultado.

Page 9: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Ejercicios Resueltos• Creación de Interfazpackage interfaz02;public interface OperacionesMatematicas { public double sumar(double sumando1, double sumando2); public double restar(double minuendo, double sustraendo); public double multiplicar(double producto1, double producto2); public double dividir(double dividendo, double divisor);}

Page 10: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

InterfacesEjercicios Resueltos• Creación de la clase Calculadorapackage interfaz02;public class Calculadora implements OperacionesMatematicas { private double primerNumero; private double segundoNumero; private double resultado;

public Calculadora() {} public Calculadora(double primerNumero, double segundoNumero) { this.primerNumero = primerNumero; this.segundoNumero = segundoNumero; } public double getPrimerNumero() { return primerNumero; } public void setPrimerNumero(double primerNumero) { this.primerNumero = primerNumero; } public double getSegundoNumero() { return segundoNumero; }

public void setSegundoNumero(double segundoNumero) { this.segundoNumero = segundoNumero; } public double getResultado() { return resultado; } public void setResultado(double resultado) { this.resultado = resultado; } public double sumar(double sumando1, double sumando2) { return sumando1 + sumando2; } public double restar(double minuendo, double sustraendo) { return minuendo - sustraendo; } public double multiplicar(double producto1, double producto2) { return producto1*producto2; } public double dividir(double dividendo, double divisor) { return dividendo/divisor; }

}

Page 11: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Ejercicios Resueltos• Conclusiones– La clase calculadora tubo que implementar el

código de todos los métodos declarados en la interfaz.

– En la interfaz solamente se declaran los métodos no se codifica en su ámbito.

Interfaz02.rar

Page 12: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Ejercicios Resueltos• Crear una interfaz de transporteMaritimo con

el metodo nadar y otra que es trasporteTerrestre andar sobre la clase AutoAnfibio donde sus atributos sean marca y modelo.

Page 13: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Ejercicios Resueltos• Crear la interfaz TransporteMaritimo.public interface TransporteMaritimo { void nadar();}• Crear la interfaz TransporteTerrestre.public interface TransporteTerrestre { void andar();}

Page 14: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Ejercicios Resueltos• Crear la clase AutoAnfibio y luego

implementar ambas interfaces.

public class AutoAnfibio implements TransporteMaritimo, TransporteTerrestre { private String marca; private String modelo;}

Page 15: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Ejercicios Resueltos (Correcto)•Crear la clase AutoAnfibio y luego implementar ambas interfaces.

public class AutoAnfibio implements TransporteMaritimo, TransporteTerrestre { private String marca; private String modelo; public void andar() { System.out.println(“Estoy Andado!!”); } public void nadar() { System.out.println(“Estoy Nadando!!”); }}

Page 16: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

InterfacesEjercicios Propuestos

De las siguientes opciones, seleccione cuál es la que mejor representa el error que se produce al compilar el siguiente código: public interface Persona{

void imprimirInformacion();} public class Alumno implements Persona{

void imprimirInformacion(){}} a) La clase Alumno no puede implementar la interface Persona porque esta no es abstracta.b) La clase Alumno no puede implementar debe heredar de la clase Persona.c) No se puede sobrescribir el método “imprimirInformacion()” en la clase Alumno sin agregar el modificador de acceso public.d) El código compila sin errores.

Page 17: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Interfaces

Ejercicios Propuestos• Cual de las siguientes afirmaciones es

verdadera A. En una interface todos sus métodos son public

abstract y final.B. Los atributos de una interface deben tener

siempre como especificador de acceso private.C. Una clase puede tener dos o más madres.D. Los atributos de una interface siempre son

public, static y final.

Page 18: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Clase ObjectLa Clase Object • Todos los objetos de Java son extensiones de la clase Object. Los métodos

públicos y protegidos de esta clase son :– public boolean equals(Object obj)

compara si dos objetos son iguales, por defecto un objeto es igual solamente a si mismo

– public int hashCode() devuelve (con alta probabilidad) un valor distinto para cada objeto

– protected Object clone() throws CloneNotSuportedException devuelve una copia binaria del objeto (incluyendo sus referencias)

– public final Class getClass() devuelve el objeto del tipo Class que representa dicha clase durante la ejecución

– protected void finalize() throws Throwable se usa para finalizar el objeto, es decir, se avisa al administrador de la memoria que ya no se usa dicho objeto, y se puede ejecutar código especial antes de que se libere la memoria

– public String toString() devuelvo una cadena describiendo el objeto • Las clases derivadas deben sobreecribir los métodos adecuadamente, por

ejemplo el método equals, si se requiere una comparación binaria.

Page 19: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Casting o Conversión de Objetos• Consiste en la conversión de la estructura de datos que contiene

una clase hacia otra clase• Permite la utilización de clases genéricas como Object y cualquier

otra claseReglas1. Toda Clase se puede Castear a Object (Clase Padre Raiz).2. La Clase Object se puede Castear a una Clase Hija (Compila) pero

produce un error en tiempo de Ejecución ClassCastException3. Una Clase Hija se puede Castear a una Clase Padre4. Una Clase no se puede Castear a un Clase Hermana (Error de

Compilación)5. Una Clase Padre se puede Castear a una Clase Hija (Compila) pero

produce un error en tiempo de Ejecución ClassCastException

Page 20: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Casting o Conversión de Objetosclass X{}class Y extends X{}class Z extends X{}public class RunTimeCastDemo{

public static void main(String args[]){X x = new X();Y y = new Y(); Z z = new Z(); X xy = new Y(); // Compila (Cumple Jerarquia X es el padre de YX xz = new Z(); // Compila (Cumple Jerarquia X es el padre de ZY yz = new Z(); // Tipos incompatibles Z e Y son hermanosY y1 = new X(); // X no es un YZ z1 = new X(); // X no es un ZX x1 = y; // Compila y es una subclase de XX x2 = z; // Compila z es una subclase de XY y1 = (Y) x; // Compila pero produce un error en tiempo de ejecución ClassCastExceptionZ z1 = (Z) x; // Compila pero produce un error en tiempo de ejecución ClassCastExceptionY y2 = (Y) x1; // Compila y corre x1 es de tipo YZ z2 = (Z) x2; // Compila y corre x2 es de tipo ZY y3 = (Y) z; // Tipos inconvertibles (Hermanos)Z z3 = (Z) y; // Tipos inconvertibles (Hermanos)Object o = z;Object o1 = (Y)o; // Compila produce un error en tiempo de ejecución ClassCastException

}}

Page 21: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Casting o Conversión de ObjetosEjercicio ResueltoDadas las clases, ¿Cuáles de las siguientes instrucciones compilarán?public class Animal{}public class Gato extends Animal{}public class Perro extends Animal{}

1. Animal a = new Animal();Animal b = (Animal) a;

2. Animal p = new Gato(); Animal p2 = (Perro) p;

3. Gato j = new Animal();4. Animal p = new Perro();5. Perro j = new Perro();

Animal p = j;6. Perro p = new Gato();Alternativas

A. 1, 2, 3 y 5B. 1, 4 y 5C. 1, 2, 4 y 5D. Todas

Page 22: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Casting o Conversión de ObjetosDadas las clases, ¿Cuáles de las siguientes instrucciones compilarán? public class Persona{}public class Juan extends Persona{}

1. Persona p = new Persona();Persona p2 = (Persona) p;

2. Persona p = new Persona();Persona p2 = (Juan) p;

3. Juan j = new Persona();4. Persona p = new Juan();5. Juan j = new Juan();

Persona p = j;6. Persona p = new Persona();

String s = (String) p;

A. 1, 2, 3 y 5B. 2, 3 y 5C. 1, 2, 4 y 5D. Todas

Page 23: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Clases AbstractasConcepto• Hay ocasiones, cuando se desarrolla una jerarquía de clases en que

algún comportamiento está presente en todas ellas pero se materializa de forma distinta para cada una. Por ejemplo, pensemos en una estructura de clases para manipular figuras geométricas.

• Podríamos pensar en tener una clase genérica, que podría llamarse FiguraGeometrica y una serie de clases que extienden a la anterior que podrían ser Circulo, Poligono, etc.

• Podría haber un método dibujar dado que sobre todas las figuras puede llevarse a cabo esta acción, pero las operaciones concretas para llevarla a cabo dependen del tipo de figura en concreto (de su clase).

• Por otra parte la acción dibujar no tiene sentido para la clase genérica FiguraGeometrica, porque esta clase representa una abstracción del conjunto de figuras posibles.

Page 24: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Clases Abstractas

• Para resolver esta problemática Java proporciona las clases y métodos abstractos.

• Un método abstracto es un método declarado en una clase para el cual esa clase no proporciona la implementación (el código).

• Una clase abstracta es una clase que tiene al menos un método abstracto.

• Una clase que extiende a una clase abstracta debe implementar los métodos abstractos (escribir el código) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte también en clase abstracta.

Page 25: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Clases AbstractasDeclaración e implementación de métodos abstractosSiguiendo con el ejemplo del apartado anterior, se puede escribir:abstract class FiguraGeometrica { . . . abstract void dibujar(); . . .}

class Circulo extends FiguraGeometrica { . . . void dibujar() { // codigo para dibujar Circulo . . . }}

Page 26: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Clases Abstractas

• La clase abstracta se declara simplemente con el modificador abstract en su declaración.

• Los métodos abstractos se declaran también con el mismo modificador, declarando el método pero sin implementarlo (sin el bloque de código encerrado entre {}).

• La clase derivada se declara e implementa de forma normal, como cualquier otra. Sin embargo si no declara e implementa los métodos abstractos de la clase base (en el ejemplo el método dibujar) el compilador genera un error indicando que no se han implementado todos los métodos abstractos y que, o bien, se implementan, o bien se declara la clase abstracta.

Page 27: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Clases AbstractasReferencias y objetos abstractos• Se pueden crear referencias a clases abstractas como cualquier otra.

No hay ningún problema en poner:• FiguraGeometrica figura;• Sin embargo una clase abstracta no se puede instanciar, es decir, no se

pueden crear objetos de una clase abstracta. El compilador producirá un error si se intenta:

• FiguraGeometrica figura = new FiguraGeometrica();• Esto es coherente dado que una clase abstracta no tiene completa su

implementación y encaja bien con la idea de que algo abstracto no puede materializarse.

• Sin embargo utilizando el up-casting visto en el capítulo dedicado a la Herencia si se puede escribir:

• FiguraGeometrica figura = new Circulo(. . .);figura.dibujar();

Page 28: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Clases AbstractasEjercicio ResueltoDadas las siguientes declaracionesclass A {}abstract class B {}class C extends B {}class D extends A {}class E extends C {}class F extends E {} 1. A no es una clase abstracta.2. C hereda de la clase A.3. No se pueden crear instancias de la clase B.4. F hereda de la clase B.5. F hereda de la clase A.6. D hereda de B. ¿Cuales afirmaciones son ciertas? A. 1,3 y 4B. 1,2,3 y 5C. 1 y 5D. Todas

Page 29: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Clases AbstractasEjercicio PropuestoDadas las siguientes declaracionesclass A {}abstract class B {}class C extends A {}class D extends B {}class E extends C {}class F extends E {} 1. A no es una clase abstracta.2. C hereda de la clase A.3. No se pueden crear instancias de la clase B.4. F hereda de la clase B.5. F hereda de la clase A.6. D hereda de A. ¿Cuales afirmaciones son ciertas? A. 1,3 y 4B. 1,2,3 y 5C. 1 y 5D. Todas

Page 30: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Clases Finales• Se dice a una clase final una clase que es muy especifica tanto que no

necesita subclases• Las clases Finales restringuen la herencia.• Uno de los mecanismos que tienen los hackers para dañar o para obtener

información privada en los sistemas es la de crear una clase derivada y sustituir dicha clase por la original.

• La clase derivada actúa exactamente igual que la original pero también puede hacer otras cosas, normalmente dañinas.

• Para prevenir los posibles daños, se declara la clase como final, impidiendo a cualquier programador la creación de clases derivadas de ésta.

EjemploLa clase String que es una de las más importantes en la programación en lenguaje Java, está declarada como final. El lenguaje Java garatiza que siempre que se utilice un string, es un objeto de la clase String que se encuentra en el paquete java.lang.String, y no cualquier otro string.

Page 31: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Métodos FinalesComo se ha comentado al introducir la herencia, una de las formas de aprovechar el código existente, es la de crear una clase derivada y redefinir algunos de los métodos de la clase base. class Base{ //...

final public void funcionFinal(){ //... } public void dibujar(Graphics g){ }

} class Derivada{ //...

public void dibujar(Graphics g){ //dibujar algunas figuras }

}• La clase Base define una función miembro pública dibujar, que no dibuja nada en el contexto gráfico g. La

clase Derivada redefine la función miembro dibujar, para dibujar algunas figuras en el contexto grafico g. La función que se redefine tiene que tener la misma declaración en la clase Base y en la clase Derivada.

• Para evitar que las clase derivadas redefinan una función miembro de una clase base, se le antepone la plabara clave final. La función miembro funcionFinal de la clase Base no se puede redefinir en la clase Derivada, pero si se puede redefinir la función miembro dibujar.

Page 32: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Clases FinalesEjercicios ResueltosDe las siguientes opciones, seleccione cuál es la que mejor representa el error que se produce al compilar el siguiente código: public class Persona{

public final void imprimirInformacion(){}} public class Alumno extends Persona{

public void imprimirInformacion(){}} A. La clase Alumno no puede heredar de la clase Persona por que esta es abstracta.B. La clase Alumno no puede heredar de la clase Persona por que esta es final.C. No se puede sobrescribir el método “imprimirInformacion()” en la clase Alumno

por que está declarado como final en la clase Persona.D. El código compila sin errores.

Page 33: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Polimorfismo

• El concepto de Polimorfismo es uno de los fundamentos para cualquier lenguaje orientado a Objetos, las mismas raíces de la palabra pueden ser una fuerte pista de su significado: Poli = Multiple, morfismo= Formas , esto implica que un mismo Objeto puede tomar diversas formas.

Page 34: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Polimorfismo

Ejercicio ResueltoDe acuerdo al diagrama de Clases crear un array de Instrumento llamado banda en el cual se agreguen 1 piano y 2 guitarra y metodo statico en el main que permita tocar todos los instrumentos del array.

Page 35: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Polimorfismo

• Creamos la clase Intrumentopackage polimorfismo;public class Instrumento { private String marca; public Instrumento(){} public Instrumento(String marca) {} public void tocar() { System.out.println("Tocar Instrumento"); }}

Page 36: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Polimorfismo

• Creamos la Piano y Guitarrapackage polimorfismo;public class Guitarra extends Instrumento { public Guitarra() { } public void tocar() { System.out.println("Tocar Guitarra"); }}

package polimorfismo;public class Piano extends Instrumento{ public Piano() { } public void tocar() { System.out.println("Tocar Piano"); }

}

Page 37: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Polimorfismo

• Creamos el metodo que ejecutara el metodo tocar de todos los instrumentos ingresados

public static void tocarBanda(Instrumento[] banda) { int i; for(i=0; i<banda.length;i++) { banda[i].tocar(); } }

Page 38: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Polimorfismo• Creamos el main que creará los intrumentos y ingresará 1 piano y 2 guitarras y luego ejecutará el

método tocarBandapackage polimorfismo;public class Main { public static void main(String[] args) { Instrumento[] banda = new Instrumento[3]; banda[0] = new Piano(); banda[1] = new Guitarra(); banda[2] = new Guitarra(); tocarBanda(banda); } public static void tocarBanda(Instrumento[] banda) { int i; for(i=0; i<banda.length;i++) { banda[i].tocar(); } }}

Page 39: Programación Orientada a Objetos Temario Interfaces Clase Object Casting o Conversión de Objetos Clases Abstractas Métodos Abstractos Clases Finales Métodos.

Polimorfismo

• Conclusiones– El método tocar en el for del metodo tocarBanda

ejecutará el método de las clases hijas Piano y Guitarra, no ejecutará el método tocar de la clase padre instrumento

– El polimorfismo ocurre cuando java en tiempo de ejecución determina el método de la clase hija que lo atenderá por lo tanto el método tocar tiene multiples formas dependiendo de que clase es creada en la referencia de la clase padre esto se llama Polimorfismo con enlace dinámico .

Polimorfismo.rar