PDF de programación - TEMA 3 Corrección y Robustez - Programación Orientada a Objetos

Imágen de pdf TEMA 3 Corrección y Robustez - Programación Orientada a Objetos

TEMA 3 Corrección y Robustez - Programación Orientada a Objetosgráfica de visualizaciones

Publicado el 31 de Mayo del 2018
972 visualizaciones desde el 31 de Mayo del 2018
444,7 KB
30 paginas
Creado hace 17a (06/11/2006)
Programación Orientada a Objetos

TEMA 3

Corrección y Robustez

Facultad de Informática
Universidad de Murcia

Contenido

1. Introducción

• Fiabilidad = Corrección y Robustez

2. Aserciones. Programación por Contrato

3. Abordando los casos excepcionales

Corrección y Robustez

2

•1

Introducción

• “La reutilización y la extensibilidad no se deben lograr a expensas

de la fiabilidad (corrección y robustez)”.

• Corrección:

– Capacidad de los sistemas software de ajustarse a la especificación.
– Asegura que el programa hace lo correcto durante la ejecución normal del

programa.

– Los asertos establecen las condiciones que se deben cumplir.

• Robustez:

– Capacidad de los sistemas software de reaccionar ante circunstancias

inesperadas.

– El mecanismo de excepciones proporciona un mecanismo para

manejar estas situaciones excepcionales durante la ejecución de un programa.

Corrección y Robustez

3

2.- Aserciones. Diseño por Contrato

• Corrección de un elemento software = consistencia entre su

implementación y su especificación

• Las aserciones permiten especificar la semántica de una clase

asociada al TAD.

• Una aserción es una expresión que establece una propiedad que
debe satisfacer alguna de las entidades de un programa, en
algún punto de la ejecución del software.

• El código define “el cómo”, las aserciones “el qué”

Corrección y Robustez

4

•2

Lenguaje de Aserciones

• El lenguaje de aserciones de Eiffel es muy

simple:
– Expresiones booleanas con unas pocas

extensiones
(old, ‘;’)

– Una aserción puede incluir funciones.

Positivo: n>0;
autor = not void
not vacia; conta = old conta + 1
saldo = old saldo – cantidad

Corrección y Robustez

5

Uso de las aserciones:

(A) Especificar la semántica de las rutinas mediante:

– PRECONDICIONES:

Condiciones para que una rutina funcione adecuadamente.

– POSTCONDICIONES:

Describen el efecto de una rutina, definiendo el estado final.

(B) Especificar las propiedades globales de una
clase mediante el INVARIANTE:

Aserción que expresa restricciones de integridad que deben
ser satisfechas por cada instancia de la clase si se encuentra en una
situación estable.

Corrección y Robustez

6

•3

Momentos “estables”

• Los “momentos estables” son aquellos en los que una

instancia está en un estado observable (e1, e2, …):
– Después de la creación: !!a o !!a.make(...)
– Antes y después de la invocación remota de una rutina de la

clase: a.r(...)

!!a.make(…)

En etapas intermedias el INV no se cumplirá

¿Cuál es el papel de las rutinas de creación?

Corrección y Robustez

e1

a.f(...)

e2

a.g(...)

e3

a.f(...)

e4

Ejemplo: Pre y Postcondiciones

put (elemento: T; key: STRING) is

-- Insertar en la tabla elemento con clave key
require

-- precondición

not_full: count< capacity

not key.empty

... "algoritmo de inserción"

do

ensure

end – put

count <= capacity;
item (key) = elemento;
count= old count + 1;

Corrección y Robustez

-- postcondiciones

7

8

•4

Ejemplo: Invariante de clase

class STACK [G] feature

capacity: Integer; -- tamaño de la pila
count: Integer; -- número de elementos

feature {None}

representation: Array[G]
…..

invariant

-- invariante

0<=count; count <=capacity;
capacity = representation.capacity;
(count>0) implies representation.item(count)=item

end

Corrección y Robustez

9

Invariante de representación Lista activa

• Importante basarse en aserciones para expresar las
propiedades precisas de un diseño.

--count=nº de elementos

0<=index; index <=count
before = (index=0);
after = (index=count+1);
is_first = ((not empty) and (index=1));
is_last = ((not empty) and (index=count));
empty implies (before or after);
not (before and after)

• Invariante es la mejor manera de comprender una clase

Corrección y Robustez

10

•5

Contrato Software

Definir una pre y una post para una rutina
es una forma de definir un contrato que
liga a la rutina con quien la llama.

put
Cliente

Obligaciones

Al invocar a put
debe asegurar que
la tabla no está llena

Beneficios

Obtiene una tabla en la que
elemento está asociado con clave

Servidor

Insertar elemento
en la tabla asociándolo de tabla llena antes de la inserción
a clave

No necesita tratar la situación

Corrección y Robustez

11

Contrato Software

Definir una pre y una post para una rutina
es una forma de definir un contrato que
liga a la rutina con quien la llama.

put
Cliente

Obligaciones

Beneficios

Satisfacer
Al invocar a put
debe asegurar que
la tabla no está llena
precondición

Obtiene una tabla en la que
De la postcondición
elemento está asociado con clave

Servidor

Satisfacer
Insertar elemento
No necesita tratar la situación
De la precondición
en la tabla asociándolo de tabla llena antes de la inserción
postcondición
a clave

Corrección y Robustez

12

•6

Contrato Software

satisfecho

“Si usted me promete llamar a rcon
pre
le
prometo entregar un estado final en
el que post es satisfecho”

entonces

yo

Lo que es una obligación para
uno es un beneficio para el otro

CLIENTE

CLASE

Corrección y Robustez

13

Rechazo a la “programación defensiva”

sqrt(x: REAL): REAL is do

if x<0 then “Manejar error”
else “Calcular raíz”

end;

No hay que comprobar la precondición en la rutina

sqrt(x: REAL): REAL is

require

x >= 0;

CLIENTE:
if (x>=0)

Math.sqrt(x);

do

end;

“Calcular raíz”

El cuerpo de la rutina no comprueba el cumplimiento

de la precondición

Corrección y Robustez

14

•7

Rechazo a la “programación defensiva”

• Redundancia es perjudicial: software más complejo.

¡¡La complejidad es el mayor enemigo de la calidad!!

• Mejor identificar condiciones y establecer responsabilidades.

• Tedioso eliminar o ignorar los controles cuando no se necesiten

• Paradoja: “La fiabilidad se mejora chequeando menos”

¡¡Garantizar mas comprobando menos!!

“El código cliente debe comprobar la precondición”

Corrección y Robustez

15

Utilidad de las Aserciones

• Escribir software correcto:

describir requisitos exactos de cada rutina y las propiedades
globales de las clases ayuda a producir software que es correcto
desde el principio.

• Ayuda para la documentación:

pre, post- condiciones e invariante proporcionan información
precisa a los clientes de los módulos.

• Apoyo para la prueba y depuración:

el programador establece como opción del compilador el efecto
de las aserciones en tiempo de ejecución.

Corrección y Robustez

16

•8

Asertos en Java (JDK 1.4)

• Expresión booleana que un desarrollador

indica
explícitamente que se debe cumplir en un punto del
programa en tiempo de ejecución.

assert expresion_boolean;
assert expresion_boolean : expresion;

• El sistema evalúa la expresión booleana e informa del

error en el caso de que el valor sea false.
– Lanza AssertionException

• Las aserciones en Java NO proporcionan el soporte para

el Diseño por Contrato tal y como se entiende en Eiffel.

Corrección y Robustez

17

Ejemplo

/** Insertar en la tabla elemento con clave key */

public void put (Object elemento, String key) {

assert count < capacity: “fallo en la pre”;

int oldCount = count;

... "algoritmo de inserción"

assert count <= capacity &&

item (key).equals(elemento) &&
count == oldCount + 1: “fallo en la post”;

}

Corrección y Robustez

18

•9

Ejemplos
assert ref != null;
assert saldo == (oldSaldo + cantidad);
assert ref.m1(parametro);
assert valor>0 : “argumento negativo”;
assert x>0 : x;
• La expresion_booleana no debe tener efectos

laterales

• La expresión se pasa como argumento al constructor de

la excepción en el caso de que el aserto sea false.

Corrección y Robustez

19

Activación de asertos en Java

• Los asertos los soporta sólo a partir de la versión 1.4. Se debe
indicar explícitamente al compilador para que reconozca la palabra
clave assertion
javac –source 1.4 MiAplicacion.java

• La comprobación de los asertos se puede desactivar en tiempo de

ejecución para incrementar el rendimiento.
– Normalmente se activa durante la fase de depuración y pruebas

java [–ea|-da] MiAplicacion
java –ea:UnaClase –ea:java.modelo –da:OtraClase App

• En la versión 1.4 por defecto no se tienen en cuenta los asertos, en

la versión JDK 5.0 si.

Corrección y Robustez

20

•10

Usos de los asertos

• Invariantes internos:
if (i%3 == 0){
…}else if (i%3 == 1){
…} else {
assert (i%3 ==2);

}

• Invariantes de flujo de control:

void met(){

if(…) return;

for (…){
}
//nunca deberíamos llegar a este punto
assert false;

}

• Precondiciones, postcondiciones e invariantes:

Corrección y Robustez

21

Pre, post e invariantes en Java
private void setIntervalo(int intervalo){
//precondición
assert intervalo>0 && intervalo<=MAXIMO;
...//establecer el intervalo

}
//devuelve this-1 mod m
public BigInteger modInverso (BigInteger m){

//comprobaciones de la precondición
...
//hacer el cálculo
//postcondición
assert this.multiply(result).mod(m).equals(UNO);
return result;

}

Corrección y Robustez

22

•11

Invariante en Java

class Pila{

//método que comprueba el invariante
private boolean invariante(){

return ((count>=0) && (count <=capacity) &&

(capacity == representation.length));

}
...

}
• Se debe cumplir antes y después de la terminación de cada método.
• Todo método y constructor debe contener la línea

assert invariante();

inmediatamente antes de que termine.

Corrección y Robustez

23

¿Cuándo utilizar assert?

• Localizar errores internos irrecuperables durante la

fase de pruebas y depuración.

• No utilizar para evaluar condiciones externas al
programa (existencia de un fichero, conexión de red,
…)

• Puesto que se pueden desactivar, la corrección de un

programa no puede depender de los asertos.

Corrección y Robustez

24

•12

assert de Java ≠ Diseño por Contrato

• En DxC existen distintos tipos de asertos.

– en Java todos son assert

• Los aser
  • Links de descarga
http://lwp-l.com/pdf11487

Comentarios de: TEMA 3 Corrección y Robustez - Programación Orientada a Objetos (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