1 / 39

Programación Orientada a Objetos

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. Interfaces. Interfaces Concepto

kera
Download Presentation

Programación Orientada a Objetos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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; publicclassMiClaseimplementsMiInterfaz{ publicintmiMetodo() { // Aqui se implementa el metodo y constante int valor = miConstante * 10; return valor; } }

  6. Interfaces Interfaces • Uso en el Main package interfaz01; publicclassMain{ publicstaticvoidmain(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; publicinterface OperacionesMatematicas { publicdouble sumar(double sumando1, double sumando2); publicdouble restar(double minuendo, double sustraendo); publicdouble multiplicar(double producto1, double producto2); publicdouble dividir(double dividendo, double divisor); }

  10. Interfaces publicvoidsetSegundoNumero(doublesegundoNumero) { this.segundoNumero = segundoNumero; } publicdoublegetResultado() { return resultado; } publicvoidsetResultado(double resultado) { this.resultado = resultado; } publicdouble sumar(double sumando1, double sumando2) { return sumando1 + sumando2; } publicdouble restar(double minuendo, double sustraendo) { return minuendo - sustraendo; } publicdouble multiplicar(double producto1, double producto2) { return producto1*producto2; } publicdouble dividir(double dividendo, double divisor) { return dividendo/divisor; } } Ejercicios Resueltos • Creación de la clase Calculadora package interfaz02; publicclass Calculadora implementsOperacionesMatematicas { privatedoubleprimerNumero; privatedoublesegundoNumero; privatedouble resultado; public Calculadora() {} public Calculadora(doubleprimerNumero, doublesegundoNumero) { this.primerNumero = primerNumero; this.segundoNumero = segundoNumero; } publicdoublegetPrimerNumero() { returnprimerNumero; } publicvoidsetPrimerNumero(doubleprimerNumero) { this.primerNumero = primerNumero; } publicdoublegetSegundoNumero() { returnsegundoNumero; }

  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 trasporteTerrestreandar sobre la clase AutoAnfibio donde sus atributos sean marca y modelo.

  13. Interfaces Ejercicios Resueltos • Crear la interfaz TransporteMaritimo. public interface TransporteMaritimo{ void nadar(); } • CrearlainterfazTransporteTerrestre. public interface TransporteTerrestre { voidandar(); }

  14. Interfaces Ejercicios Resueltos • Crear la clase AutoAnfibio y luego implementar ambas interfaces. publicclassAutoAnfibioimplementsTransporteMaritimo, TransporteTerrestre{ privateString marca; privateString 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!!”); } }

  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 publicabstract 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 : • publicbooleanequals(Objectobj) compara si dos objetos son iguales, por defecto un objeto es igual solamente a si mismo • publicinthashCode() devuelve (con alta probabilidad) un valor distinto para cada objeto • protectedObject clone() throwsCloneNotSuportedException devuelve una copia binaria del objeto (incluyendo sus referencias) • public final ClassgetClass() devuelve el objeto del tipo Class que representa dicha clase durante la ejecución • protectedvoidfinalize() throwsThrowable 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 • publicStringtoString() 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{} publicclassRunTimeCastDemo{ public static void main(String args[]){ X x = new X(); Y y = new Y(); Z z = new Z(); X xy = new Y(); // Compila (CumpleJerarquia X es el padre de Y X xz = new Z(); // Compila (CumpleJerarquia 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 esunasubclase de X X x2 = z; // Compila z esunasubclase 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: abstractclassFiguraGeometrica {    . . .abstractvoid dibujar();    . . .}class Circulo extendsFiguraGeometrica {    . . .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 = newFiguraGeometrica(); • 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{ //... finalpublicvoidfuncionFinal(){ //... } publicvoid dibujar(Graphics g){ } } classDerivada{ //... publicvoid 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; publicclass Instrumento { privateString marca; public Instrumento(){} public Instrumento(String marca) {} publicvoid tocar() { System.out.println("Tocar Instrumento"); } }

  36. Polimorfismo • Creamos la Piano y Guitarra

  37. Polimorfismo • Creamos el metodo que ejecutara el metodo tocar de todos los instrumentos ingresados publicstaticvoidtocarBanda(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; publicclassMain { publicstaticvoidmain(String[] args) { Instrumento[] banda = new Instrumento[3]; banda[0] = new Piano(); banda[1] = new Guitarra(); banda[2] = new Guitarra(); tocarBanda(banda); } publicstaticvoidtocarBanda(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 metodotocarBanda 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 .

More Related