Especificacin de problemas, algoritmos, programas
especificacin 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 solucin del problema escrita para humanos
I cmo resolvemos el problema?
programa = la solucin del problema escrita para computadora
I cmo resuelve la computadora el problema?
I lenguaje de programacin (ej. C++, Haskell)
11 Especificacin de problemas, algoritmos, programas
Una especificacin de un problema es un contrato en un lenguaje formal.
I Da nombre al problema
I Dice cules son las entradas aceptables
I Dice qu propiedades debe cumplir la salida
Dada una especicacin:
I Idearemos uno o mas algoritmos que resuelven el problema.
I Escribiremos un programa que codifica el algoritmo en un lenguaje
de programacin.
I Demostraremos que el programa es correcto respecto de la
especificacin: demostraremos que cuando el programa se ejecuta
en la computadora realiza una transformacin de la entrada en una
salida que cumple las propiedades especificadas en el contrato.
Especificacin 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
Sobrespecificacion y Subespecificacion
Especificar un problema es dar una descripcion formal en forma de
un contrato, a partir de un texto en lenguaje natural.
Sobrespecificar es, sin advertirlo, imponer una postcondicion mas
restrictiva que lo que se necesita. O una precondicion mas laxa.
Limita excesivamente los posibles algoritmos a considerar, porque
impone mas condiciones para la salida, o ampla los datos de
entrada.
Subespecificar es, sin advertirlo, imponer una postcondicion mas
debil que lo que se necesita. O una precondicion mas restrictiva.
Ignora condiciones necesarias para la salida, o deja afuera datos de
entrada. Esta mal.
Sobrespecificacion y Subespecificacion. Ejemplos
Problema: Dado un numero entero, dar otro distinto.
Sobrespecificacion
problema distinto(x : Z) = res : Z f
asegura res > x; g
Subespecificacion
problema distinto(x : Z) = res : Z f
requiere x > 0
asegura not(res == x); g
Bien especificado
problema distinto(x : Z) = res : Z f
asegura not(res == x); g