Descargar la presentación
La descarga está en progreso. Por favor, espere
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 Finales Polimorfismo Polimorfismo, enlace dinámico
2
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.
3
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
4
Interfaces Interfaces Sintaxis de creación package interfaz01;
public interface MiInterfaz { // Constantes public final int miConstante=0; // Metodos Abstractos public int miMetodo(); }
5
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; }
6
Interfaces Interfaces Uso en el Main package interfaz01;
public class Main { public static void main(String[] args) { MiClase mc = new MiClase(); System.out.println(mc.miMetodo()); }
7
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.
8
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.
9
Interfaces Ejercicios Resueltos Creación de Interfaz
package 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); }
10
Interfaces public void setSegundoNumero(double segundoNumero) {
Ejercicios Resueltos Creación de la clase Calculadora package 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) { 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;
11
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.
12
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.
13
Interfaces Ejercicios Resueltos Crear la interfaz TransporteMaritimo.
public interface TransporteMaritimo { void nadar(); } Crear la interfaz TransporteTerrestre. public interface TransporteTerrestre { void andar();
14
Interfaces Ejercicios Resueltos
Crear la clase AutoAnfibio y luego implementar ambas interfaces. public class AutoAnfibio implements TransporteMaritimo, TransporteTerrestre { private String marca; private String modelo; }
15
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!!”); 15
16
Interfaces Ejercicios 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.
17
Interfaces Ejercicios Propuestos
Cual de las siguientes afirmaciones es verdadera En una interface todos sus métodos son public abstract y final. Los atributos de una interface deben tener siempre como especificador de acceso private. Una clase puede tener dos o más madres. Los atributos de una interface siempre son public, static y final.
18
Clase Object La 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.
19
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 clase Reglas Toda Clase se puede Castear a Object (Clase Padre Raiz). La Clase Object se puede Castear a una Clase Hija (Compila) pero produce un error en tiempo de Ejecución ClassCastException Una Clase Hija se puede Castear a una Clase Padre Una Clase no se puede Castear a un Clase Hermana (Error de Compilación) Una Clase Padre se puede Castear a una Clase Hija (Compila) pero produce un error en tiempo de Ejecución ClassCastException
20
Casting o Conversión de Objetos
class 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 Y X xz = new Z(); // Compila (Cumple Jerarquia X es el padre de Z Y yz = new Z(); // Tipos incompatibles Z e Y son hermanos Y y1 = new X(); // X no es un Y Z z1 = new X(); // X no es un Z X x1 = y; // Compila y es una subclase de X X x2 = z; // Compila z es una subclase de X Y y1 = (Y) x; // Compila pero produce un error en tiempo de ejecución ClassCastException Z z1 = (Z) x; // Compila pero produce un error en tiempo de ejecución ClassCastException Y y2 = (Y) x1; // Compila y corre x1 es de tipo Y Z z2 = (Z) x2; // Compila y corre x2 es de tipo Z Y 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 }
21
Casting o Conversión de Objetos
Ejercicio Resuelto Dadas las clases, ¿Cuáles de las siguientes instrucciones compilarán? public class Animal{} public class Gato extends Animal{} public class Perro extends Animal{} Animal a = new Animal(); Animal b = (Animal) a; Animal p = new Gato(); Animal p2 = (Perro) p; Gato j = new Animal(); Animal p = new Perro(); Perro j = new Perro(); Animal p = j; Perro p = new Gato(); Alternativas 1, 2, 3 y 5 1, 4 y 5 1, 2, 4 y 5 Todas
22
Casting o Conversión de Objetos
Dadas las clases, ¿Cuáles de las siguientes instrucciones compilarán? public class Persona{} public class Juan extends Persona{} Persona p = new Persona(); Persona p2 = (Persona) p; Persona p = new Persona(); Persona p2 = (Juan) p; Juan j = new Persona(); Persona p = new Juan(); Juan j = new Juan(); Persona p = j; Persona p = new Persona(); String s = (String) p; 1, 2, 3 y 5 2, 3 y 5 1, 2, 4 y 5 Todas
23
Clases Abstractas Concepto
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.
24
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.
25
Clases Abstractas Declaración e implementación de métodos abstractos Siguiendo 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 } }
26
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.
27
Clases Abstractas Referencias 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();
28
Clases Abstractas Ejercicio Resuelto
Dadas las siguientes declaraciones class A {} abstract class B {} class C extends B {} class D extends A {} class E extends C {} class F extends E {} A no es una clase abstracta. C hereda de la clase A. No se pueden crear instancias de la clase B. F hereda de la clase B. F hereda de la clase A. D hereda de B. ¿Cuales afirmaciones son ciertas? 1,3 y 4 1,2,3 y 5 1 y 5 Todas
29
Clases Abstractas Ejercicio Propuesto
Dadas las siguientes declaraciones class A {} abstract class B {} class C extends A {} class D extends B {} class E extends C {} class F extends E {} A no es una clase abstracta. C hereda de la clase A. No se pueden crear instancias de la clase B. F hereda de la clase B. F hereda de la clase A. D hereda de A. ¿Cuales afirmaciones son ciertas? 1,3 y 4 1,2,3 y 5 1 y 5 Todas
30
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. Ejemplo La 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.
31
Métodos Finales Como 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.
32
Clases Finales Ejercicios Resueltos
De 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(){} La clase Alumno no puede heredar de la clase Persona por que esta es abstracta. La clase Alumno no puede heredar de la clase Persona por que esta es final. No se puede sobrescribir el método “imprimirInformacion()” en la clase Alumno por que está declarado como final en la clase Persona. El código compila sin errores.
33
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.
34
Polimorfismo Ejercicio Resuelto De 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.
35
Polimorfismo Creamos la clase Intrumento package polimorfismo;
public class Instrumento { private String marca; public Instrumento(){} public Instrumento(String marca) {} public void tocar() { System.out.println("Tocar Instrumento"); }
36
Polimorfismo Creamos la Piano y Guitarra package polimorfismo;
public class Guitarra extends Instrumento { public Guitarra() { } public void tocar() System.out.println("Tocar Guitarra"); public class Piano extends Instrumento{ public Piano() System.out.println("Tocar Piano");
37
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(); }
38
Polimorfismo Creamos el main que creará los intrumentos y ingresará 1 piano y 2 guitarras y luego ejecutará el método tocarBanda package 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();
39
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 .
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.