Programación Orientada a Objetos

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Curso de Java Capitulo 7: Continuación Poo Profesor:
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Definición de Clases y Variables de referencia.
Herencia en C#.
Fundamentos de la programación orientada a objetos
POLIMORFISMO "una interfaz, múltiples métodos".
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Arquitectura CLARO-TECNOTREE
Introducción Abdelahad, Corina Natalia Abdelahad, Yanina Zoraida
Capitulo 4 Excepciones.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Herencia y Polimorfismo
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
Diseño y programación de
Rosalía Laza Fidalgo Reyes Pavón Rial Curso
Programación Orientada a Objetos en Java
HERENCIA.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Herencia e Interfaces.
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Medio de tele-comunicación
Modificadores.
Herencia y Polimorfismo en JAVA
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Tema 10: Interfaces Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
6. Herencia. Clases abstractas. Genericidad
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Jerarquía de Clases: Herencia, Composición y Polimorfismo
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Tema 11: Excepciones Antonio J. Sierra.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Un programa no es nada mas que una serie de instrucciones dadas al ordenador en un lenguaje entendido por el, para decirle exactamente lo que queremos.
Herramientas de polimorfismo y herencia en C++
FACULTAD DE ESTUDIOS SUPERIORES ARAGON
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2008.
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Detalles Generales sobre Java
Programación orientada a objetos
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Tipo de relación entre clases Es uno de los aspectos que distinguen el paradigma de orientación a objetos frente a otros paradigmas. Mecanismo que,
Clases “ Es una Abstracción de un elemento del mundo real ”
Herencias Conceptos básicos i
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
RELACIONES ENTRE CLASES M.C. YOLANDA MOYAO MARTINEZ.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Programación I Clases. Paradigma POO La programación Orientada a objetos (POO) es una forma programar, más cercana a como expresaríamos las cosas en la.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

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

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 creación package interfaz01; public interface MiInterfaz { // Constantes public final int miConstante=0; // Metodos Abstractos public int miMetodo(); }

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

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 método y tiene que ser con los mismos parámetros de entrada y salida, además del mismo nombre.

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.

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

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;

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.

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!!”); 15

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.

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.

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.

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

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 }

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

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

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.

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. 

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 . . . } }

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. 

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

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

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

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.

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.

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.

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.

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"); public class Piano extends Instrumento{ public Piano() 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 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();

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 .