Especificación de problemas, algoritmos, programas

especificación de un problema = un contrato
I ¿qué problema tenemos?
I lenguaje formal de contratos
I contrato: “\si la entrada es aceptable, la salida debe cumplir la
propiedad especicada"(Edsger Dijkstra, Richard Hoare, 1970s)
algoritmo = la solución del problema escrita para humanos
I ¿cómo resolvemos el problema?
programa = la solución del problema escrita para computadora
I ¿cómo resuelve la computadora el problema?
I lenguaje de programación (ej. C++, Haskell)
11 Especificación de problemas, algoritmos, programas
Una especificación de un problema es un contrato en un lenguaje formal.
I Da nombre al problema
I Dice cuáles son las entradas aceptables
I Dice qué propiedades debe cumplir la salida
Dada una especicación:
I Idearemos uno o mas algoritmos que resuelven el problema.
I Escribiremos un programa que codifica el algoritmo en un lenguaje
de programación.
I Demostraremos que el programa es correcto respecto de la
especificación: demostraremos que cuando el programa se ejecuta
en la computadora realiza una transformación de la entrada en una
salida que cumple las propiedades especificadas en el contrato.
Especificación de un problema
Tiene 3 partes
1. encabezado
indica el nombre, los argumentos de entrada, y de salida
2. precondicion
es una condicion sobre los argumentos de entrada
la llamamos \requiere"
ejemplo: \el valor de entrada es un real no negativo"
3. poscondicion
es una condicion sobre el resultado
la llamamos \asegura"
ejemplo: \el valor de salida es tal que multiplicado por s mismo es
el valor de entrada original"
Encabezado de un problema
problema nombre(argumentos) = nombreRes : tipoRes
donde:
nombre: nombre que le damos al problema
nombreRes: nombre que le damos al resultado
tipoRes: tipo de datos del resultado
argumentos: lista que da el tipo y el nombre de cada uno

g Bien especificado problema distinto(x : Z) = res : Z f asegura not(res == x). a partir de un texto en lenguaje natural. porque impone mas condiciones para la salida. Limita excesivamente los posibles algoritmos a considerar. o deja afuera datos de entrada. Subespecificar es. Esta mal. g Subespecificacion problema distinto(x : Z) = res : Z f requiere x > 0 asegura not(res == x). Ignora condiciones necesarias para la salida. Ejemplos Problema: Dado un numero entero. dar otro distinto. sin advertirlo. o ampla los datos de entrada. sin advertirlo. g . Sobrespecificar es.Sobrespecificacion y Subespecificacion Especificar un problema es dar una descripcion formal en forma de un contrato. imponer una postcondicion mas debil que lo que se necesita. O una precondicion mas restrictiva. Sobrespecificacion problema distinto(x : Z) = res : Z f asegura res > x. O una precondicion mas laxa. imponer una postcondicion mas restrictiva que lo que se necesita. Sobrespecificacion y Subespecificacion.