0. Desarrollo de Programas: técnica del refinamiento.

Slides:



Advertisements
Presentaciones similares
Complejidad Computacional
Advertisements

Complejidad Computacional
Interprete o máquina real
Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
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.
Modularidad Estructura de datos.
Archivos Implementar un método que lea una secuencia de números enteros de un archivo y compute la cantidad de elementos leídos.
El Proceso de desarrollo de software
Abstracciones y Modelos
Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
El proceso de desarrollo de software
Lección 1 Introducción a la POO
Lección 2 Encapsulamiento
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Herencia y Polimorfismo
Árboles binarios. Algoritmos básicos
2.3 Cola de números enteros.
1.2 Sintaxis del lenguaje Java.
Tema 4 Árboles. Árbol sobre matriz.
SENTENCIA EN LENGUAJE C++
Encapsulamiento y Abstracción
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
/*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.
Introducción a la Computación (7ma Semana) Lunes 16 de Abril del 2007
Algoritmo y Estructura de Datos I
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
7a.1 Silberschatz, Galvin y Gagne ©2003 Sistemas Operativos 6ª edición Capítulo 7: Sincronización de procesos parte a.
Arreglos: Vectores en JAVA
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Método en Java.
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.
TEMA 1. Diseño de interfaces gráficas
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.
Realizado por: Bertha Palomeque A. Rodrigo Barzola J. Sensor de Temperatura utilizando el Starter Kit Javelin Stamp.
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
Modificadores.
Herencia y Polimorfismo en JAVA
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.
Unidad I Java y C++ : Similitudes y diferencias
If anidados y Switch Prof. Lillian Bras.
Public class MiClase { public static int tmp = 123; // miembro variable public static final double PI = ;// miembro constante public float.
Input – Scanner y Cajas de diálogo
1 Streams en Java Agustín J. González ELO Generalidades Un Stream es simplemente una fuente o destino de bytes. Los streams más comunes son los.
Archivos y Búsqueda Secuencial
USA agenda e itemAgenda
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.
El lenguaje de programación Java
JAVA J.A.C..
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Estructuras de control Introducción a la programación.
Repaso/resumen 1.lectura/escritura y asignación 2.funciones 3.selección de instrucciones (if-else) 4.repetición de instrucciones (while) 5.recursión 6.operadores/instrucciones.
3.  Recursividad.
Patrones Creacionales
Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -
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.
METODOLOGÍA DE LA PROGRAMACIÓN
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
4. Desarrollo de Programas: enfoques Top-down y Bottom-up
Entrada y Salida ES.leerChar (); ES.leerEntero (); ES.leerEnteroLargo (); ES.leerFloat (); ES.leerDouble (); System.out.print System.out.println.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
Un paseo por las nuevas funciones. Patrones de Diseño Por si no ha quedado claro, los Patrones de Diseño, son el esqueleto de las soluciones a problemas.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Transcripción de la presentación:

0. Desarrollo de Programas: técnica del refinamiento

Idea Objetivos: Facilitar el proceso de solución de un problema Orden y Claridad del código Distribución de tareas entre programadores Estrategia bottom-up: “partir” un problema en sub- problemas, solucionar los sub-problemas desarrollando código “encapsulado” y luego escribir el programa principal usando el código encapsulado Estrategia top-down: Escribir el código del programa principal en forma gruesa, dejando para después la solución de sub- problemas. Luego se desarrollan los sub-problemas. Distribución del trabajo: para distribuir el trabajo es necesario establecer claramente como se usarán y cual será el comportamiento del código encapsulado

Ejemplo Problema: desarrollar el programa que implementa el siguiente diálogo con el usuario: Suma, resta de 2 tiempos Primer tiempo (HHMMSS) ? Segundo tiempo (HHMMSS) ? Suma = 12:16:10 Resta = 09:14:50 Mayor = 10:45:30 Menor = 01:30:40

Solución sin estrategia: import java.util.*; class T { public static void main(String[] args) { Scanner C = new Scanner(System.in); System.out.println(“Sumar y resta de 2 tiempos”); System.out.print(“Primer instante(HHMMSS)?”); int t1=C.nextInt(); ht1=t1/10000; mt1=t1%10000/1000; st1=t1%1000; System.out.print(“Segundo instante(HHMMSS)?”); int t2=C.nextInt(); ht2=t2/3600; mt2=t2%20000/60; st2=t2%60; int sum = (ht1+ht2)*3600+(mt1+mt2)*60+st1+st2; System.out.print(“Suma= “+(sum/3600)+”:”+(sum%3600/60)+”:”+(sum%60)); int res = (ht1-ht2)*3600+(mt1-mt2)*60+st1-st2; System.out.print(“Resta= “+(res/3600)+”:”+(res%3600/60)+”:”+(res%60)); if (t1 > t2) System.out.print(“Mayor=“+ht1+”:”+mt1+”:”+st1); else System.out.print(“Mayor=“+ht2+”:”+mt2+”:”+st2); }

Solución top down: import java.util.*; class T { public static void main(String[] args) { Scanner C = new Scanner(System.in); System.out.println(“Sumar y resta de 2 tiempos”); System.out.print(“Primer instante(HHMMSS)?”); int t1=Tiempo.totalSegundos(C.nextInt()); System.out.print(“Segundo instante(HHMMSS)?”); int t2=Tiempo.totalSegundos(C.nextInt()); System.out.print(“Suma=); Tiempo.escribir(t1+t2); int mayor=Math.max(t1,t2), menor=Math.min(t1,t2); System.out.print(“Mayor=); Tiempo.escribir(mayor); System.out.print(“Menor=); Tiempo.escribir(menor); System.out.print(“Resta=); Tiempo.escribir(mayor-menor); } class Tiempo{ static public int horas(int x){ return x/10000;} static public int minutos(int x){return x/100%100;} static public int segundos(int x){return x%100;} static public int totalSegundos(int x){ return horas(x)*3600+minutos(x)*60+segundos(x);} static public void escribir(int x){ System.out.println(x/3600+”:”+x%3600/60+”:”+x%3600%60);} }

Solución bottom-up: class Tiempo { int segundos; //conviene guardar el total de segundos no mas Tiempo (int x) { segundos = x; } public int compareTo(Tiempo x) { // retorna un entero 0 según si x es mayor igual o menor return segundos – x.segundos; } public Tiempo suma(Tiempo x) { //retorna un objeto tiempo nuevo con la suma return new Tiempo(segundos+x.segundos); } public Tiempo resta(Tiempo x) { //retorna un objeto tiempo nuevo con la resta return new Tiempo(segundos-x.segundos); } public String toString() { //retorna un string “HH:MM:SS” return segundos/3600+”:”+(segundos%3600/60)+”:”+segundos%60; }

Programa class T { public static void main(String[] args) { Tiempo t1 = new Tiempo(C.readInt(“Primer instante(HHMMSS)?“)); Tiempo t2 = new Tiempo(C.readInt(“Segundo instante(HHMMSS)?”); Tiempo t3 = t1.suma(t2); System.out.print(“Suma=”+t3.toString()); if (t1.compareTo(t2) > 0){ mayor = t1; menor = t2; } else { mayor = t2; menor = t1; } U.println(“Mayor=“+mayor.toString()); U.println(“Menor=”+menor.tostring()); U.print(“Suma =“+(t1.suma(t2)).toString()+ ”Resta=”+(t1.resta(t2)).toString()); }

Pensamientos Es importante definir claramente la interfaz entre el programa principal y los sub-programas El enfoque de llamado a funciones es más antiguo que el de diseñar y construir objetos pero ambos persiguen los mismos objetivos El enfoque orientado a objetos responde a la necesidad de desarrollar software de grandes dimensiones con menos errores Permite encapsular mejor el código y los datos de un subprograma Apoya desarrollo de “Tipos de Datos Abstractos”

Estructura de Dato y su invariante Cada estructura de datos que implementa un TDA tiene un invariante Conjunto de condiciones que se cumplen siempre Cada operación que se define sobre la estructura tiene el derecho de suponer que se cumple el invariante al principio y dejarlo cumpliéndose al final Ej. Implementar un TDA conjunto con la siguiente estructura de datos a0a0 a1a1 anan a n-1... n

Estructura de Dato y su invariante class Conjunto { private int[] a; private int n; Conjunto(int x) { a = new int[x]: n = 0; } public boolean agragar(int x) { if (esta(x)) return false a[n++] = x; return true; } public boolean sacar(int x) { } public boolean esta(int x) { //retorna true si esta x en el conjunto }... }