Lenguajes de Programación Tema 4. Paradigma Orientado a Objetos Java 1.5 Pedro García López

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Advertisements

CJ02 – Técnicas avanzadas en java 1.4 y 5.0
EL LENGUAJE DE PROGRAMACIÓN C
Programación Interactiva Fundamentos de Programación
Lenguajes de Programación Soluciones a pruebas de nivel
Entrada y salida Fundamentos de programación/Programación I
Algoritmo y Estructura de Datos I I Facultad de Ingeniería y Arquitectura Ing. Juan José Montero Román. Sesión 13 - Programación.
Programación Concurrente en Java
Modularidad Estructura de datos.
Defina una clase TempMinMaxEst que encapsule la representación de las temperaturas mínimas y máximas registradas en una estación meteorológica y brinde.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
1 Entrada/Salida en Java Jaime Ramírez, Ángel Lucas González DLSIIS. Facultad de Informática Universidad Politécnica de Madrid.
Tema 1. Introducción a la programación (Lenguaje java).
1.2 Sintaxis del lenguaje Java.
2.4 Construcción de un TAD a partir de otro.
Seminario de Lenguajes A – Opción Ada Seminario de Lenguajes A – Opción Ada – Raúl Champredonde1 Genéricos –Molde a partir del cual se pueden crear instancias.
/*Desarrollar una solución que permita ingresar y almacenar el promedio de prácticas, la nota del examen parcial y la nota del examen final de todos.
Marzo 2007 Lenguajes Visuales Clase III.
Vectores en java.
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
Lenguaje de Programación Java Profesor: Mauricio Martínez P. Análisis y Diseño Orientado a Objetos UML: Lenguaje de Modelamiento Unificado Toma de Requerimientos.
Recursión Se dice que un método es recursivo si forma parte de sí mismo o se define en función de sí mismo. La recursión es un medio particularmente poderoso.
Traductores DDS con CUP Ejemplo. Cadena de entrada : false or ( 1 >= 0 ) ;
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
Herencia e Interfaces.
JAVA 1.5 Fernando Almeida Octubre Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y.
10. Hilos Definición y ejecución Thread y Runnable
RMI JAVA Implementación.
Estructuras de Control
Estructuras de Datos y Algoritmos TDA LISTA. Metáfora del TDA (repaso) Conjunto de operaciones forman una pared forman una interfase entre los programas.
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.
Creación de Aplicaciones
Public class MiClase { public static int tmp = 123; // miembro variable public static final double PI = ;// miembro constante public float.
Técnicas avanzadas de programación Interfaces
Colecciones.
Programación orientada a objetos
Clase Teórica No. 4 Programación IV
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
El lenguaje de programación Java
JAVA J.A.C..
Estructuras de control Introducción a la programación.
3.  Recursividad.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
ESTRUCTURA DE DATOS EN JAVA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Capítulo 5 - b: Hilos. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Ejemplo de hilos: un applet Un.
El lenguaje de programación Java
METODOLOGÍA DE LA PROGRAMACIÓN
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Computación II Repaso de java Karina Figueroa Mora.
Herramientas de polimorfismo y herencia en C++
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
Implementación de Iterables Construcción de Iterables virtuales o basados en otros iterables Fundamentos de Programación Departamento de Lenguajes y Sistemas.
Iterables virtuales Concepto, Metodología de desarrollo y Ejemplos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
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.
Criterios de ordenación y Guava Comparator, Comparable y Ordering Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
2012-BM5A. Unos tips antes de empezar: C# es Case Sensitive (sensible a mayúsculas) Pepe ≠ pepe ≠ pEpE Las asignaciones se hacen con “=” y las comparaciones.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
Departamento de Lenguajes y Sistemas Informáticos escuela técnica superior de ingeniería informática Ingeniería del Software II Implementación metódica.
Tipos List y Set con tipos genéricos Estructura for extendido Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
Taller de Java Universidad de los Andes
¿Cómo almacenar grandes cantidades de datos?
Colecciones Carlos Fontela, 2008.
Arreglos en Java.
Tratamientos secuenciales I
Transcripción de la presentación:

Lenguajes de Programación Tema 4. Paradigma Orientado a Objetos Java 1.5 Pedro García López

Ejemplo Calculadora Se trata de implementar una calculadora que permita calcular operaciones sobre tipos que permitan ser sumados, restados, multiplicados o divididos. Por ejemplo haremos que la calculadora ejecute la operación sumatorio de una lista de valores que se le pasan por parámetro. Los valores podrían ser enteros, floats, vectores de enteros, vectores de floats. Matrices de enteros, matrices de float. Lo haremos primero con 1.4

Como definir el contrato El tipo Operable debe soportar suma, resta, multiplicación y división En C++ o Python utilizaríamos la sobrecarga de operadores (+,-,*,/) En Java serán métodos normales Tomaremos como patrón el método equals: –if (a.equals(b)) … –public boolean equals(Object obj);

Contrato Operable public interface Operable { public Operable suma(Operable otro); public Operable resta(Operable otro); public Operable multiplicacion(Operable otro); public Operable division(Operable otro); }

Código genérico: calculadora public static Operable calcula(List valores, Operable inicial){ Iterator it = valores.iterator(); Operable result = inicial; while (it.hasNext()){ Operable elem = (Operable)it.next(); result = result.suma(elem); } return result; }

public class PInteger implements Operable { private int valor; public PInteger(int valor) { this.valor = valor; } public int getValor() { return valor; } public Operable suma(Operable otro) { PInteger potro = (PInteger)otro; return new PInteger(valor+potro.getValor()); } public String toString(){ return "("+valor+")"; }

public class PDouble implements Operable { private double valor; public PDouble(double valor) { this.valor = valor; } public double getValor() { return valor; } public Operable suma(Operable otro) { PDouble potro = (PDouble)otro; return new PDouble(valor+potro.getValor()); } public String toString(){ return "("+valor+")"; }

List penteros = new LinkedList(); penteros.add(new PInteger(1)); penteros.add(new PInteger(7)); penteros.add(new PInteger(8)); List pdoubles = new LinkedList(); pdoubles.add(new PDouble(1.5)); pdoubles.add(new PDouble(7.3)); pdoubles.add(new PDouble(8.8)); PInteger pinicial = new PInteger(0); PDouble pinicial2 = new PDouble(0.0); System.out.println(Calculadora.calcula(penteros,pinicial)); System.out.println(Calculadora.calcula(pdoubles,pinicial2)) ;

public class PVector implements Operable { private List valores; public PVector(List valores) { this.valores = valores; } public Operable suma(Operable otro) { List result = new LinkedList(); PVector potro = (PVector)otro; List listotro = potro.getValores(); for (int i=0;i<valores.size();i++){ Operable elem = (Operable)valores.get(i); result.add(elem.suma((Operable)listotro.get(i))); } return new PVector(result); }

Solución con Genericidad Ojo: genericidad es polimorfismo paramétrico, código genérico se puede conseguir con el polimorfismo de herencia.

public interface Operable { public T suma(T otro); public T resta(T otro); public T multiplicacion(T otro); public T division(T otro); }

public static > T calcula(List valores, T inicial) { T result = inicial; for (T elem: valores) { result = result.suma(elem); } return result; }

public class PInteger implements Operable { private Integer valor; public PInteger(Integer valor) { this.valor = valor; } public Integer getValor() { return valor; } public PInteger suma(PInteger otro) { return new PInteger(valor+otro.getValor()); }

public class PDouble implements Operable { private Double valor; public PDouble(Double valor) { this.valor = valor; } public Double getValor() { return valor; } public PDouble suma(PDouble otro) { return new PDouble(valor+otro.getValor()); }

List penteros = new LinkedList (); penteros.add(new PInteger(1)); penteros.add(new PInteger(7)); penteros.add(new PInteger(8)); List pdoubles = new LinkedList (); pdoubles.add(new PDouble(1.5)); pdoubles.add(new PDouble(7.3)); pdoubles.add(new PDouble(8.8)); PInteger pinicial = new PInteger(0); PDouble pinicial2 = new PDouble(0.0); System.out.println(Calculadora.calcula(penteros,pinicial)); System.out.println(Calculadora.calcula(pdoubles,pinicial2 )) ;

public class PVector > implements Operable > { private List valores; public PVector(List valores) { this.valores = valores; } public PVector suma(PVector otro) { List result = new LinkedList (); List listotro = otro.getValores(); for (int i=0;i<valores.size();i++){ T elem = valores.get(i); result.add(elem.suma(listotro.get(i))); } return new PVector (result); }

Matriz ??? Se puede implementar creando una clase nueva o parametrizando Pvector Asimimos que las operaciones de la matriz son Cij = Aij + Bij Sugerencias ?

Ejercicios Extender HashSet para que soporte las operaciones union e intersección La interfaz Queue tiene operaciones para insertar o sacar elementos de la cola usando normalmente un orden FIFO. Extender la clase LinkedList que cumple Queue, para crear una clase ColaParados que tiene métodos para entrar en la cola, y que cuando alguno sale de la cola llama al método sellar papeles del INEM al parado. Experimentar con PriorityQueues en el que el orden lo establece el Comparator