PDF de programación - Diseño por contrato - Tecnología de la Programación

Imágen de pdf Diseño por contrato - Tecnología de la Programación

Diseño por contrato - Tecnología de la Programacióngráfica de visualizaciones

Publicado el 5 de Julio del 2017
1.072 visualizaciones desde el 5 de Julio del 2017
189,8 KB
19 paginas
Creado hace 15a (28/04/2008)
Tecnología de la Programación

Diseño por contrato

David Cabrero Souto

Facultad de Informática
Universidade da Coruña

Curso 2007/2008

Introducción

Pruebas de unidad

¿ Especificación formal de las propiedades ?

Diseño por Contrato

Promotor: Bertrand Meyer (ver Object-Oriented Software
Construction, Second Edition, Prentice Hall, 1997
Busca mejorar la calidad del código (reducir errores)

Diseño por contrato

En OO: clases y sus clientes tienen un contrato:

Condiciones que garantiza el cliente (precondiciones).
Condiciones que garantiza el proveedor (postcondiciones).

Las entradas del API quedan caracterizadas por su
especificación.
En general, un contrato se puede implementar de varias
formas.
Separamos el contrato (qué/intención) de la implementación
(cómo).
El contrato se hace ejecutable.
Se comprueba el contrato en tiempo de ejecución.

Diseño por contrato

En OO: clases y sus clientes tienen un contrato:

Condiciones que garantiza el cliente (precondiciones).
Condiciones que garantiza el proveedor (postcondiciones).

Las entradas del API quedan caracterizadas por su
especificación.
En general, un contrato se puede implementar de varias
formas.
Separamos el contrato (qué/intención) de la implementación
(cómo).
El contrato se hace ejecutable.
Se comprueba el contrato en tiempo de ejecución.

Diseño por contrato

En OO: clases y sus clientes tienen un contrato:

Condiciones que garantiza el cliente (precondiciones).
Condiciones que garantiza el proveedor (postcondiciones).

Las entradas del API quedan caracterizadas por su
especificación.
En general, un contrato se puede implementar de varias
formas.
Separamos el contrato (qué/intención) de la implementación
(cómo).
El contrato se hace ejecutable.
Se comprueba el contrato en tiempo de ejecución.

Documentar con contratos

Ventajas:

Más abstracto que el lenguaje natural.
Menos ambiguo que el lenguaje natural.
En general, es declarativo.
Ejecutable.
Asignación de culpa.
Eficiencia. Evita la programación defensiva y la “compilación”
de los contratos es opcional.

DPC: ejemplo

/* requiere X >= 0
* asegura
*/
FUNCTION raíz_cuadrada(float:X):float { ... }

X ~= resultado * resultado

Cliente

Obligaciones
Pasa un número no
negativo

Implementador Calcula y devuelve

la raíz cuadrada

Derechos
Obtiene una aprox-
imación de la raíz
cuadrada
Asume que el argu-
mento es no negati-
vo

Ejemplo: Eiffel

Lenguaje Orientado a Objetos, “Tipado estático”, herencia,
polimorfismo, excepciones, paquetes, tipos genéricos,
aserciones, . . .
Origen: Bertrand Meyers, 1986-92.
Las anotaciones forman parte del lenguaje.

INTEGER)

i s

deposit (sum :
r e q u i r e

sum >= 0

do

add (sum)

ensure

balance = old balance + sum

end ;

DPC en Java

Java 1.4, 1.5: aserciones.

assert Expression1 ;
assert Expression1 : Expression2 ;
javac -source 1.4 MyClass.java
Limitado (precondiciones, fórmulas lógicas, invariantes)

Why not provide a full-fledged design-by-contract
facility with preconditions, postconditions and class
invariants, like the one in the Eiffel programming
language?

JML.
OCL (UML).
http://ocl4java.org/

DPC en Java

Java 1.4, 1.5: aserciones.

assert Expression1 ;
assert Expression1 : Expression2 ;
javac -source 1.4 MyClass.java
Limitado (precondiciones, fórmulas lógicas, invariantes)

Why not provide a full-fledged design-by-contract
facility with preconditions, postconditions and class
invariants, like the one in the Eiffel programming
language?

JML.
OCL (UML).
http://ocl4java.org/

DPC en Java

Java 1.4, 1.5: aserciones.

assert Expression1 ;
assert Expression1 : Expression2 ;
javac -source 1.4 MyClass.java
Limitado (precondiciones, fórmulas lógicas, invariantes)

Why not provide a full-fledged design-by-contract
facility with preconditions, postconditions and class
invariants, like the one in the Eiffel programming
language?

JML.
OCL (UML).
http://ocl4java.org/

DPC en Java

Java 1.4, 1.5: aserciones.

assert Expression1 ;
assert Expression1 : Expression2 ;
javac -source 1.4 MyClass.java
Limitado (precondiciones, fórmulas lógicas, invariantes)

Why not provide a full-fledged design-by-contract
facility with preconditions, postconditions and class
invariants, like the one in the Eiffel programming
language?

JML.
OCL (UML).
http://ocl4java.org/

DPC en Java

Java 1.4, 1.5: aserciones.

assert Expression1 ;
assert Expression1 : Expression2 ;
javac -source 1.4 MyClass.java
Limitado (precondiciones, fórmulas lógicas, invariantes)

Why not provide a full-fledged design-by-contract
facility with preconditions, postconditions and class
invariants, like the one in the Eiffel programming
language?

JML.
OCL (UML).
http://ocl4java.org/

Sobre las especificaciones

Consideramos un programa como correcto cuando cumple
una especificación.
¿ Cómo comprobar que se cumple la especificación ?

Validación
Verificación

La especificación puede ser erronea, incompleta, . . .
/* requiere
* asegura
*/
FUNCION dividir(int:dividendo, int:divisor):void { ... }

dividendo >= 0 Y divisor > 0
dividendo == divisor * cociente + resto

La siguiente implementación cumple la especificación:

int cociente = 0;
int resto = dividendo;

Sobre las especificaciones

Consideramos un programa como correcto cuando cumple
una especificación.
¿ Cómo comprobar que se cumple la especificación ?

Validación
Verificación

La especificación puede ser erronea, incompleta, . . .
/* requiere
* asegura
*/
FUNCION dividir(int:dividendo, int:divisor):void { ... }

dividendo >= 0 Y divisor > 0
dividendo == divisor * cociente + resto

La siguiente implementación cumple la especificación:

int cociente = 0;
int resto = dividendo;

Sobre las especificaciones

Consideramos un programa como correcto cuando cumple
una especificación.
¿ Cómo comprobar que se cumple la especificación ?

Validación
Verificación

La especificación puede ser erronea, incompleta, . . .
/* requiere
* asegura
*/
FUNCION dividir(int:dividendo, int:divisor):void { ... }

dividendo >= 0 Y divisor > 0
dividendo == divisor * cociente + resto

La siguiente implementación cumple la especificación:

int cociente = 0;
int resto = dividendo;

Sobre las especificaciones

Consideramos un programa como correcto cuando cumple
una especificación.
¿ Cómo comprobar que se cumple la especificación ?

Validación
Verificación

La especificación puede ser erronea, incompleta, . . .
/* requiere
* asegura
*/
FUNCION dividir(int:dividendo, int:divisor):void { ... }

dividendo >= 0 Y divisor > 0
dividendo == divisor * cociente + resto

La siguiente implementación cumple la especificación:

int cociente = 0;
int resto = dividendo;

Sobre las especificaciones (cont.)

dividendo >= 0 Y divisor > 0
dividendo == divisor * cociente + resto Y
resto < divisor

Mejoramos la especificación:
/* requiere
* asegura
*
*/
Las especificaciones no son únicas:
/* requiere
* asegura
*
*/

dividendo >= 0 Y divisor > 0
divisor * cociente <= dividendo Y
divisor * (cociente+1) > dividendo

Sobre las especificaciones (cont.)

dividendo >= 0 Y divisor > 0
dividendo == divisor * cociente + resto Y
resto < divisor

Mejoramos la especificación:
/* requiere
* asegura
*
*/
Las especificaciones no son únicas:
/* requiere
* asegura
*
*/

dividendo >= 0 Y divisor > 0
divisor * cociente <= dividendo Y
divisor * (cociente+1) > dividendo
  • Links de descarga
http://lwp-l.com/pdf4883

Comentarios de: Diseño por contrato - Tecnología de la Programación (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad