Programación avanzada en Java Miguel Ángel Corella 23 de Septiembre de 2005.

Slides:



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

FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
POLIMORFISMO UNIDAD 4.
Programación Interactiva Fundamentos de Java. 2 Ejecución de un programa Para Java una clase ejecutable es aquella que es pública y tiene un método main()
Programación Interactiva Hilos
Herencia en C#.
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.
Conceptos más avanzados de Programación Orientada a Objetos Programación 2005 Licenciatura de Lingüística y Nuevas Tecnologías.
Algoritmos y Estructura de Datos
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Herencia y Polimorfismo
Tema 1. Introducción a la programación (Lenguaje java).
1.2 Sintaxis del lenguaje Java.
Aplicación del paradigma orientado a objetos
Diseño y programación de
Rosalía Laza Fidalgo Reyes Pavón Rial Curso
HERENCIA.
Método en Java.
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.
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é
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
Variables polimórficas (plantillas): definición, uso y aplicación
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
JAVA J.A.C..
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -
Diplomado Desarrollo de Aplicaciones en Internet
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA DOS ORIENTACION A OBJETOS.
Interfaces. Introducción La unidad fundamental en el lenguaje de programación Java es la clase, pero la unidad fundamental del diseño orientado a objetos.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Programación avanzada en Java Miguel Ángel Corella 22 de Septiembre de 2005.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2008.
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
Tema 8: Herencia Antonio J. Sierra.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Java.
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005.
Programación avanzada en Java Miguel Ángel Corella 26 de Septiembre de 2005.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
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
Algoritmos y Programación III
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Herencia y Clases Abstractas
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
CONCEPTOS.
HERENCIA.
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación CLASES DE JAVA Diciembre de 2008.
Clases “ Es una Abstracción de un elemento del mundo real ”
Herencias Conceptos básicos i
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,
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.
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 avanzada en Java Miguel Ángel Corella 23 de Septiembre de 2005

Funciones matemáticas Constantes: Math.PI, Math.E Métodos (mirar los parámetros en la API):  sqrt  pow  random  abs  max  round  cos  sin  tan  acos  exp  log  … Todos los métodos y constantes son estáticos (acceso Math.xxx).

Escritura de ficheros de texto Clase java.io.PrintStream. Funciona igual que System.out, pero se imprime a un fichero. PrintStream printer = new PrintStream (new FileOutputStream ("abc.txt")); printer.print ("Dos + " + 2); printer.println (" = " + (2+2));... printer.close (); Emite la excepción: java.io.IOException

Lectura de ficheros de texto Clase java.io.BufferedReader Funciona igual que System.in, pero se lee de un fichero. Emite la excepción: java.io.IOException BufferedReader reader = new BufferedReader (new FileReader ("abc.txt")); String str = reader.readLine ();... reader.close ();

Jerarquías de clases

Definición de subclases class Persona { String nombre; int edad; String descripcion () { return "Nombre: " + nombre + "\nEdad: " + edad; } class Empleado extends Persona { long sueldoBruto; Directivo jefe; } class Directivo extends Empleado { int categoria; Vector subordinados = new Vector (); void promocionar () { categoria++; } }

Jerarquía de tipos (I) Persona x1, x2; Empleado y, emp = new Empleado (); Directivo z, dir = new Directivo (); Conversión automática implícita (generalización) x1 = emp; // Empleado  Persona x2 = dir; // Directivo  Persona y = dir; // Directivo  Empleado Conversión explícita (especialización), responsabilidad del programador z = x2; // Error de compilación z = (Directivo) x2; // Persona  Directivo z = (Directivo) x1; // Error de ejecución: // x1 no es un Directivo z = (Perro) x1; // Error de compilación (a menos que Perro // fuese subclase o superclase de Persona) Un Directivo puede hacer automáticamente el papel de Empleado y de Persona Una Persona puede hacer el papel de Directivo si realmente es un Directivo

Jerarquía de tipos (y II) class C { void f (Empleado p) {... } void g (Directivo p) {... } } Directivo dir = new Directivo (); Empleado x, emp = new Empleado (); C c = new C (); Conversión implícita c.f (dir); // Directivo  Empleado Conversión explícita c.g (x); // Error de compilación c.g ((Directivo) x); // Empleado  Directivo c.g ((Directivo) emp); // Error de ejecución: emp no es // un Directivo

Herencia de variables y métodos Empleado emp = new Empleado (); Directivo dir = new Directivo (); emp.nombre = "Pedro"; emp.edad = 28; emp.sueldoBase = 200; emp.jefe = dir; System.out.println (emp.descripcion ()); dir.nombre = "Maria"; dir.edad = 45; dir.sueldoBruto = 700; dir.jefe = null; dir.categoria = 3; System.out.println (dir.descripcion ());

Herencia y jerarquía de tipos nombre edad sueldo jefe categoría Persona Empleado Directivo p emp dir

Sobreescritura en herencia Redefinición de variables y métodos de una clase padre en una subclase La definición de la subclase oculta a la de la superclase La definición de la superclase accesible desde la subclase con super Sobreescritura de métodos (especialización) –El método se redefine con los mismos argumentos y tipo de retorno –Si no coinciden los tipos de los argumentos, se trata de una sobrecarga –No se puede aumentar la privacidad de los métodos sobreescritos –Evita la proliferación de identificadores –Permite la ligadura dinámica Sobreescritura de variables –Se reserva un espacio de memoria para cada definición –El tipo no tiene por qué coincidir –En general es preferible evitar la sobreescritura de variables

Sobreescritura de métodos class Empleado extends Persona { long sueldoBruto; Directivo jefe; String descripcion () { return "Nombre: " + nombre + "\nEdad: " + edad + "\nSueldo: " + sueldoBruto + "\nJefe: " + ((jefe == null)? nombre : jefe.nombre); } // Bloque main Empleado emp = new Empleado (); Persona p = emp; emp.descripcion (); // descripcion de Empleado p.descripcion (); // descripcion de Empleado

Ligadura dinámica La sobreescritura de métodos se resuelve por ligadura dinámica en tiempo de ejecución Se ejecuta la definición del método de la clase más específica del objeto, independientemente de cómo se ha declarado la referencia al objeto A B C D E void f () E obj = new E(); A x = obj; x.f(); obj pertenece a las clases A, B, C, D, E x declarado como A, apunta a un E se ejecuta la versión de f definida en D

Ejemplo de ligadura dinámica (I) class Persona { String nombre; int edad; String descripcion () { return "Nombre: " + nombre + "\nEdad: " + edad; } class Empleado extends Persona { long sueldoBruto; Directivo jefe; String descripcion () { return "Nombre: " + nombre + "\nEdad: " + edad + "\nSueldo: " + sueldoBruto + "\nJefe: " + ((jefe == null)? nombre : jefe.nombre); }

Ejemplo de ligadura dinámica (II) class Directivo extends Empleado { int categoria; Vector subordinados = new Vector (); String descripcion () { return "Nombre: " + nombre + "\nEdad: " + edad + "\nSueldo: " + sueldoBruto + "\nJefe: " + ((jefe == null)? nombre : jefe.nombre) + "\nCategoria: " + categoria; } void promocionar () { categoria++; } }

Ejemplo de ligadura dinámica (y III) // Bloque main Directivo dir = new Directivo (); Empleado emp = new Empleado (); Empleado z = dir; Persona p = new Persona (); Persona x = emp; Persona y = z; p.descripcion (); // descripcion de Persona emp.descripcion (); // descripcion de Empleado dir.descripcion (); // descripcion de Directivo x.descripcion (); // descripcion de Empleado y.descripcion (); // descripcion de Directivo z.descripcion (); // descripcion de Directivo y.promocionar (); // ERROR

Interfaces

Motivación de interfaces (I) // Algoritmo de ordenacion public class Algoritmos { public static void ordenar (double valores[]) { int i, j; for (i = 0; i < valores.length; i++) for (j = valores.length; j > i; j--) if (valores[j] < valores[j-1]) intercambiar (valores, j, j-1); }

Motivación de interfaces (y II) ¿Y si queremos ordenar valores int? Las interfaces permiten generalizar funcionalidad. // Generalizacion public class Algoritmos { public static void ordenar (Ordenable valores[]) { int i, j; for (i = 0; i < valores.length; i++) for (j = valores.length; j > i; j--) if (valores[j].menor (valores[j-1])) intercambiar (valores, j, j-1); } Interfaz (o capacidad) cumplida por los objetos que se pueden ordenar Método que deben implementar todos los objetos que se pueden ordenar

Solución al problema (I) interface Ordenable { boolean menor (Ordenable valor); } class Directivo extends Empleado implements Ordenable {... public boolean menor (Ordenable dir) { return categoria < ((Directivo) dir).categoria; } class Figura implements Ordenable {... public boolean menor (Ordenable fig) { return area () < ((Figura) fig).area (); }

Solución al problema (y II) public static void main (String args[]) { Directivo jefes[] = { new Directivo (...), new Directivo (...) }; Figura objcompuesto[] = { new Triangulo (...), new Circulo (...), new Rectangulo (...) }; Algoritmos.ordenar (jefes); Algoritmos.ordenar (objcompuesto); }

¿Qué es una interfaz? Colección de métodos sin definir y valores constantes Extender de una clase  implementar una interfaz Una clase puede implementar varias interfaces

¿Para qué sirve una interfaz? Una interfaz impone un protocolo de métodos a implementar Una interfaz introduce un nuevo tipo Las clases que implementan la interfaz son compatibles con este tipo Las interfaces posibilitan la herencia múltiple en cuanto a jerarquía de tipos: Una interfaz define un tipo  una clase puede tener múltiples supertipos Sin embargo una interfaz no tiene contenido que heredar: –los métodos no tienen código –las variables se heredan pero son inamovibles (son estáticas y constantes) Una interfaz no proporciona funcionalidad a un objeto, sino la posibilidad de ser objeto de la funcionalidad de otros objetos

Programación avanzada en Java Miguel Ángel Corella 23 de Septiembre de 2005