Você está na página 1de 39

Programacin Orientada a Objetos

Temario Interfaces Clase Object Casting o Conversin de Objetos Clases Abstractas Mtodos Abstractos Clases Finales Mtodos Finales Polimorfismo Polimorfismo, enlace dinmico

Interfaces
Interfaces Concepto
Una interfaz en Java es una coleccin de mtodos abstractos y propiedades. En ellas se especifica qu se debe hacer pero no su implementacin. Sern las clases que implementen estas interfaces las que describan la lgica del comportamiento de los mtodos. Otra forma de llamarle es una clase totalmente abstracta.

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

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

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

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()); } }

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 mtodo y tiene que ser con los mismos parmetros de entrada y salida, adems del mismo nombre.

Interfaces
Ejercicios Resueltos Crear una interfaz para las operaciones matemticas de una calculadora bsica, Sumar, restar, multiplicar y dividir (Con y Sin decimales), implementandola en una clase llamada calculadora que contiene los atributos primerNumero, SegundoNumero y resultado.

Interfaces
Ejercicios Resueltos Creacin 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); }

Interfaces
Ejercicios Resueltos Creacin 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) { 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; } }

Interfaces
Ejercicios Resueltos Conclusiones
La clase calculadora tubo que implementar el cdigo de todos los mtodos declarados en la interfaz. En la interfaz solamente se declaran los mtodos no se codifica en su mbito.

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.

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

Interfaces
Ejercicios Resueltos Crear la clase AutoAnfibio y luego implementar ambas interfaces.
public class AutoAnfibio implements TransporteMaritimo, TransporteTerrestre { private String marca; private String modelo; }

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!!); }

Interfaces
Ejercicios Propuestos

De las siguientes opciones, seleccione cul es la que mejor representa el error que se produce al compilar el siguiente cdigo:
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 mtodo imprimirInformacion() en la clase Alumno sin agregar el modificador de acceso public. d) El cdigo compila sin errores.

Interfaces
Ejercicios Propuestos Cual de las siguientes afirmaciones es verdadera
A. En una interface todos sus mtodos 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 ms madres. D. Los atributos de una interface siempre son public, static y final.

Clase Object
La Clase Object Todos los objetos de Java son extensiones de la clase Object. Los mtodos pblicos 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 ejecucin 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 cdigo especial antes de que se libere la memoria public String toString() devuelvo una cadena describiendo el objeto

Las clases derivadas deben sobreecribir los mtodos adecuadamente, por ejemplo el mtodo equals, si se requiere una comparacin binaria.

Casting o Conversin de Objetos


Consiste en la conversin de la estructura de datos que contiene una clase hacia otra clase Permite la utilizacin de clases genricas como Object y cualquier otra clase Reglas 1. 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 Ejecucin ClassCastException 3. Una Clase Hija se puede Castear a una Clase Padre 4. Una Clase no se puede Castear a un Clase Hermana (Error de Compilacin) 5. Una Clase Padre se puede Castear a una Clase Hija (Compila) pero produce un error en tiempo de Ejecucin ClassCastException

Casting o Conversin 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 ejecucin ClassCastException Z z1 = (Z) x; // Compila pero produce un error en tiempo de ejecucin 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 ejecucin ClassCastException } }

Casting o Conversin de Objetos


Ejercicio Resuelto Dadas las clases, Cules de las siguientes instrucciones compilarn? 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. B. C. D. 1, 2, 3 y 5 1, 4 y 5 1, 2, 4 y 5 Todas

Casting o Conversin de Objetos


Dadas las clases, Cules de las siguientes instrucciones compilarn? 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. B. C. D. 1, 2, 3 y 5 2, 3 y 5 1, 2, 4 y 5 Todas

Clases Abstractas
Concepto Hay ocasiones, cuando se desarrolla una jerarqua de clases en que algn 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 geomtricas. Podramos pensar en tener una clase genrica, que podra llamarse FiguraGeometrica y una serie de clases que extienden a la anterior que podran ser Circulo, Poligono, etc. Podra haber un mtodo dibujar dado que sobre todas las figuras puede llevarse a cabo esta accin, pero las operaciones concretas para llevarla a cabo dependen del tipo de figura en concreto (de su clase). Por otra parte la accin dibujar no tiene sentido para la clase genrica FiguraGeometrica, porque esta clase representa una abstraccin del conjunto de figuras posibles.

Clases Abstractas
Para resolver esta problemtica Java proporciona las clases y mtodos abstractos. Un mtodo abstracto es un mtodo declarado en una clase para el cual esa clase no proporciona la implementacin (el cdigo). Una clase abstracta es una clase que tiene al menos un mtodo abstracto. Una clase que extiende a una clase abstracta debe implementar los mtodos abstractos (escribir el cdigo) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte tambin en clase abstracta.

Clases Abstractas
Declaracin e implementacin de mtodos 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 ... } }

Clases Abstractas
La clase abstracta se declara simplemente con el modificador abstract en su declaracin. Los mtodos abstractos se declaran tambin con el mismo modificador, declarando el mtodo pero sin implementarlo (sin el bloque de cdigo encerrado entre {}). La clase derivada se declara e implementa de forma normal, como cualquier otra. Sin embargo si no declara e implementa los mtodos abstractos de la clase base (en el ejemplo el mtodo dibujar) el compilador genera un error indicando que no se han implementado todos los mtodos abstractos y que, o bien, se implementan, o bien se declara la clase abstracta.

Clases Abstractas
Referencias y objetos abstractos Se pueden crear referencias a clases abstractas como cualquier otra. No hay ningn 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 implementacin y encaja bien con la idea de que algo abstracto no puede materializarse. Sin embargo utilizando el up-casting visto en el captulo dedicado a la Herencia si se puede escribir: FiguraGeometrica figura = new Circulo(. . .); figura.dibujar();

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 {} 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. B. C. D. 1,3 y 4 1,2,3 y 5 1y5 Todas

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 {} 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. B. C. D. 1,3 y 4 1,2,3 y 5 1y5 Todas

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 daar o para obtener informacin privada en los sistemas es la de crear una clase derivada y sustituir dicha clase por la original. La clase derivada acta exactamente igual que la original pero tambin puede hacer otras cosas, normalmente dainas. Para prevenir los posibles daos, se declara la clase como final, impidiendo a cualquier programador la creacin de clases derivadas de sta. Ejemplo La clase String que es una de las ms importantes en la programacin 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.

Mtodos Finales
Como se ha comentado al introducir la herencia, una de las formas de aprovechar el cdigo existente, es la de crear una clase derivada y redefinir algunos de los mtodos 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 funcin miembro pblica dibujar, que no dibuja nada en el contexto grfico g. La clase Derivada redefine la funcin miembro dibujar, para dibujar algunas figuras en el contexto grafico g. La funcin que se redefine tiene que tener la misma declaracin en la clase Base y en la clase Derivada. Para evitar que las clase derivadas redefinan una funcin miembro de una clase base, se le antepone la plabara clave final. La funcin miembro funcionFinal de la clase Base no se puede redefinir en la clase Derivada, pero si se puede redefinir la funcin miembro dibujar.

Clases Finales
Ejercicios Resueltos De las siguientes opciones, seleccione cul es la que mejor representa el error que se produce al compilar el siguiente cdigo: public class Persona{ public final void imprimirInformacion(){} } public class Alumno extends Persona{ public void imprimirInformacion(){} } A. B. C. D. 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 mtodo imprimirInformacion() en la clase Alumno por que est declarado como final en la clase Persona. El cdigo compila sin errores.

Polimorfismo
El concepto de Polimorfismo es uno de los fundamentos para cualquier lenguaje orientado a Objetos, las mismas races 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.

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.

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"); } }

Polimorfismo
Creamos la Piano y Guitarra
package 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"); } }

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(); } }

Polimorfismo
Creamos el main que crear los intrumentos y ingresar 1 piano y 2 guitarras y luego ejecutar el mtodo 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(); } } }

Polimorfismo
Conclusiones
El mtodo tocar en el for del metodo tocarBanda ejecutar el mtodo de las clases hijas Piano y Guitarra, no ejecutar el mtodo tocar de la clase padre instrumento El polimorfismo ocurre cuando java en tiempo de ejecucin determina el mtodo de la clase hija que lo atender por lo tanto el mtodo tocar tiene multiples formas dependiendo de que clase es creada en la referencia de la clase padre esto se llama Polimorfismo con enlace dinmico .

Você também pode gostar