Sei sulla pagina 1di 32

Programa de teora

Parte I. Estructuras de Datos.


1. Abstracciones y especificaciones.
2. Conjuntos y diccionarios.
3. Representacin de conjuntos mediante rboles.
4. Grafos.

Parte II. Algortmica.


1. Anlisis de algoritmos.
2. Divide y vencers.
3. Algoritmos voraces.
4. Programacin dinmica.
5. Backtracking.
6. Ramificacin y poda.

A.E.D. 1
Tema 1. Abstracciones y especificaciones.

PARTE I: ESTRUCTURAS DE DATOS

Tema 1. Abstracciones y
Especificaciones.
1.1. Abstracciones, tipos y mecanismos.
1.2. Especificaciones informales.
1.3. Especificaciones formales.
1.3.1. Mtodo axiomtico (o algebraico).
1.3.2. Mtodo constructivo (u operacional).

A.E.D. 2
Tema 1. Abstracciones y especificaciones.

1
1.1. Abstracciones, tipos y mecanismos.

procedure ordenar(a: array;


var b: array);

type persona;

class pila;

Abstraer: Eliminar lo irrelevante y quedarnos con lo


realmente importante.
Qu es lo importante?
A.E.D. 3
Tema 1. Abstracciones y especificaciones.

1.1. Abstracciones, tipos y mecanismos.

MECANISMOS DE ABSTRACCIN

Abstraccin por especificacin: Slo


necesitamos conocer qu va a hacer el
procedimiento y no cmo funciona.
(Encapsulacin)
Abstraccin por parametrizacin: Un
algoritmo, un tipo, o una variable se
definen en base a unos parmetros.
(Genericidad)
A.E.D. 4
Tema 1. Abstracciones y especificaciones.

2
1.1. Abstracciones, tipos y mecanismos.

TIPOS DE ABSTRACCIONES
Abstracciones Rutinas, funciones,
funcionales procedimientos

Abstracciones Tipos Abstractos de


de datos Datos (TAD)

Abstracciones
Iteradores
de iteradores
A.E.D. 5
Tema 1. Abstracciones y especificaciones.

1.1. Abstracciones, tipos y mecanismos.


TIPO ABSTRACTO DE DATOS:
Dominio abstracto de valores junto con las
operaciones aplicables sobre el mismo.
TIPO DE DATOS:
Conjunto de valores que puede tomar una
variable, un parmetro o una expresin.
ESTRUCTURA DE DATOS:
Disposicin en memoria de los datos
necesarios para almacenar valores de un
tipo.
A.E.D. 6
Tema 1. Abstracciones y especificaciones.

3
1.1. Abstracciones, tipos y mecanismos.

Ejemplos

TAD: Enteros
Tipo de datos: Tipo integer de Pascal, o
tipo int de C
Estructura de datos: Representacin
mediante enteros de 16 bits, 32 bits, listas
de dgitos (enteros largos), etc.

A.E.D. 7
Tema 1. Abstracciones y especificaciones.

1.1. Abstracciones, tipos y mecanismos

La evolucin de los lenguajes de


programacin tiende a introducir cada vez
ms abstracciones.

Lenguajes Lenguajes Lenguajes


de bajo nivel estructurados orientados a objetos

(Basic, Fortran, (Pascal, C, (Smalltalk, C++,


Ensamblador, ) Modula, ADA, ) Java, Eiffel, )

A.E.D. 8
Tema 1. Abstracciones y especificaciones.

4
1.1. Abstracciones, tipos y mecanismos

La evolucin de los lenguajes de


programacin tiende a introducir cada vez
ms abstracciones.
Soporte de TAD:
Lenguajes estructurados (tipos definidos
por el usuario): Los datos y las operaciones
van aparte.
Lenguajes orientados a objetos (clases):
Los datos y las operaciones constituyen una
unidad.
A.E.D. 9
Tema 1. Abstracciones y especificaciones.

1.1. Abstracciones, tipos y mecanismos.

Pascal ObjectPascal
type type
Pila = register Pila = class
tope: integer; private:
datos: array [1..10] of integer; tope: integer;
end; datos: array [1..10] of integer;
public:
proc push (i: integer; var p:Pila); proc push (i: integer);
proc pop (var p: Pila); proc pop;
func top (p: Pila): integer; func top: integer;
end;

A.E.D. 10
Tema 1. Abstracciones y especificaciones.

5
1.1. Abstracciones, tipos y mecanismos
Pascal ObjectPascal
var var
p1, p2: Pila; p1, p2: Pila;
i: integer; i: integer;

begin begin
push(10, p1); p1.push(10);
push(20, p1); p1.push(20);
pop(p1); p1.pop;
i:= top(p1); i:= p1.top;
Error de
p1.tope:= 243; p1.tope:= 243;
compilacin:
i:= top(p1); i:= p1.top;
tope es
privado
A.E.D. 11
Tema 1. Abstracciones y especificaciones.

1.1. Abstracciones, tipos y mecanismos.

Especificaciones: Tipos de
notaciones
Notaciones informales.
Notaciones formales.
Algebraicas (o axiomticas).
Operacionales (o constructivas).

A.E.D. 12
Tema 1. Abstracciones y especificaciones.

6
1.2. Especificaciones informales.
1.2.1. Abstracciones funcionales.

Notacin
Operacin <nombre> (ent <id>: <tipo>; <id>: <tipo>,
..., sal <tipo>)

Requiere: Establece restricciones de uso.


Modifica: Identifica los datos de entrada que se
modifican (si existe alguno).
Calcula: Descripcin textual del comportamiento
de la operacin.

A.E.D. 13
Tema 1. Abstracciones y especificaciones.

1.2. Especificaciones informales.


1.2.1. Abstracciones funcionales.
Ejemplo 1: Eliminar la repeticin en los elementos de un array.
Operacin QuitarDuplic (ent a: array [entero])
Modifica: a
Calcula: Quita los elementos repetidos de a. El lmite inferior
del array no vara, pero s lo puede hacer el superior.

Ejemplo 2: Buscar un elemento en un array de enteros.


Operacin Buscar (ent a: array [entero]; x: entero; sal i: entero)
Requiere: a debe estar ordenado de forma ascendente.
Calcula: Si x est en a, entonces i debe contener el valor del
ndice de x tal que a[i] = x. Si x no est en a, entonces i =
sup+1, donde sup es el ndice superior del array a.

A.E.D. 14
Tema 1. Abstracciones y especificaciones.

7
1.2.1. Abstracciones funcionales.
Generalizacin: una operacin est definida independiente-
mente de cual sea el tipo de sus parmetros.

Ejemplo 3: Eliminar la repeticin en los elementos de un array.


Operacin QuitarDuplic [T: tipo](ent a: array [T])
Requiere: T debe tener una operacin de comparacin
MenorQue(ent T, T; sal booleano).
Modifica: a
Calcula: Quita los elementos repetidos de a. El lmite inferior del array
no vara, pero s lo puede hacer el superior.

Ejemplo 4: Buscar un elemento en un array de enteros.


Operacin Buscar [T: tipo](ent a: array [T]; x: T; sal i: entero)
Requiere: T debe tener dos operacin de comparacin
MenorQue(ent T, T; sal bool), Igual(ent T, T; sal bool).
a debe estar ordenado de forma ascendente.
Calcula: Si x est en a, entonces i debe contener ...
A.E.D. 15
Tema 1. Abstracciones y especificaciones.

1.2.1. Abstracciones funcionales.


Ejemplo de especificacin informal de funciones:
Especificacin OpenCV
Nombre de
la operacin

Descripcin
corta
Sintaxis

Explicacin de
los parmetros

Descripcin
detallada

A.E.D. 16
Tema 1. Abstracciones y especificaciones.

8
1.2. Especificaciones informales.
1.2.2. Abstracciones de datos.
Notacin
TAD <nombre_tipo> es <lista_operaciones>

Descripcin
Descripcin textual del tipo
Operaciones
Especificacin informal de las operaciones
de la lista anterior
Fin <nombre_tipo>.

A.E.D. 17
Tema 1. Abstracciones y especificaciones.

1.2.2. Abstracciones de datos.


TAD CjtoEnteros es Vaco, Insertar, Suprimir, Miembro,
EsVaco, Unin, Interseccin, Cardinalidad
Descripcin
Los CjtoEnteros son conjuntos matemticos modificables,
que almacenan valores enteros.
Operaciones
Operacin Vaco (sal CjtoEnteros)
Calcula: Devuelve un conjunto de enteros vaco.
Operacin Insertar (ent c: CjtoEnteros; x: entero)
Modifica: c.
Calcula: Aade x a los elementos de c. Despus de la
insercin, el nuevo conjunto es c U {x}.

Fin CjtoEnteros.
A.E.D. 18
Tema 1. Abstracciones y especificaciones.

9
1.2.2. Abstracciones de datos.

TAD ListaEnteros es Crear, Insertar, Primero, Ultimo, Cabeza,


Cola, EsVaco, Igual
Descripcin
Las ListaEnteros son listas de enteros modificables. Las
listas se crean con las operaciones Crear e Insertar
Operaciones
Operacin Crear (sal ListaEnteros)
Calcula: Devuelve una lista de enteros vaca.
Operacin Insertar (ent l: ListaEnteros; x: entero)
Modifica: l.
Calcula: Aade x a la lista l en la primera posicin.

Fin ListaEnteros.
A.E.D. 19
Tema 1. Abstracciones y especificaciones.

1.2.2. Abstracciones de datos.


Generalizacin (parametrizacin de tipo): El
tipo se define en funcin de otro tipo pasado
como parmetro.
til para definir tipos contenedores o
colecciones. P. ej. Listas, pilas, colas, arrays,
conjuntos, etc.
En lugar de: y Tenemos:
ListaEnteros Lista[T]
ListaCadenas
ListaReales
.
Instanciacin: Lista[entero],Lista[cadena],

A.E.D. 20
Tema 1. Abstracciones y especificaciones.

10
1.2.2. Abstracciones de datos.
TAD Conjunto[T: tipo] es Vaco, Insertar, Suprimir, Miembro,
EsVaco, Unin, Interseccin, Cardinalidad
Descripcin
Los Conjunto[T] son conjuntos matemticos modificables,
que almacenan valores de tipo T.
Operaciones
Operacin Vaco (sal Conjunto[T])
...
Operacin Insertar (ent c: Conjunto[T]; x: T)

Operacin Suprimir (ent c: Conjunto[T]; x: T)

Operacin Miembro (ent c: Conjunto[T]; x: T; sal booleano)

Fin Conjunto.
A.E.D. 21
Tema 1. Abstracciones y especificaciones.

1.2.2. Abstracciones de datos.

TAD Lista[T] es Crear, Insertar, Primero, Ultimo, Cabeza,


Cola, EsVaco, Igual
Descripcin
Las Lista[T] son listas modificables de valores de tipo T.
Las listas se crean con las operaciones Crear e Insertar...
Operaciones
Operacin Crear (sal Lista[T])

Operacin Insertar (ent l: Lista[T]; x: entero)

Operacin Primero (ent l: Lista[T]; sal Lista[T])

Fin Lista.

A.E.D. 22
Tema 1. Abstracciones y especificaciones.

11
1.2.2. Abstracciones de datos.
En C++ es posible definir tipos parametrizados.
Plantillas template:
template <class T>
class Pila {
private:
int tope;
int maxDatos;
T *datos;
public:
Pila (int maximo);
Push (T valor);
T Pop ();
}
A.E.D. 23
Tema 1. Abstracciones y especificaciones.

1.2. Especificaciones informales.


1.2.3. Abstracciones de iteradores.

Ejemplo: Sobre el TAD CjtoEnteros queremos aadir


operaciones para calcular la suma, el producto, ...

Operacin suma_conj (ent c: CjtoEnteros; sal entero)


Calcula: Devuelve la suma de los elementos de c.
....
Operacin producto_conj (ent c: CjtoEnteros; sal entero)
....
Operacin varianza_conj (ent c: CjtoEnteros; sal real)
....

A.E.D. 24
Tema 1. Abstracciones y especificaciones.

12
1.2.3. Abstracciones de iteradores.
Necesitamos abstracciones de la forma:
para cada elemento i del conjunto A
hacer accin sobre i
para cada elemento i de la lista L
hacer accin sobre i
para cada i de la cola C tal que P(i)
hacer accin sobre i
D:= Seleccionar todos los i de C tal que P(i)
Abstraccin de iteradores: permiten definir un
recorrido abstracto sobre los elementos de una
coleccin.
A.E.D. 25
Tema 1. Abstracciones y especificaciones.

1.2.3. Abstracciones de iteradores.

La abstraccin de iteradores no es soportada por


los lenguajes de programacin.
Posibles definiciones:
Como una abstraccin funcional:

Iterador ParaTodoHacer [T: tipo] (ent C: Conjunto[T]; accion: Operacion)


Requiere: accion debe ser una operacin que recibe un parmetro de
tipo T y no devuelve nada, accion(ent T).
Calcula: Recorre todos los elementos c del conjunto C, aplicando
sobre ellos la operacin accion(c).

A.E.D. 26
Tema 1. Abstracciones y especificaciones.

13
1.2.3. Abstracciones de iteradores.
Como una abstraccin de datos:
TipoIterador IteradorPreorden [T: tipo] es Iniciar, Actual, Avanzar,
EsUltimo
Descripcin
Los valores de tipo IteradorPreorden[T] son iteradores definidos sobre
rboles binarios de cualquier tipo T. Los elementos del rbol son
devueltos en preorden. El iterador se debe inicializar con Iniciar.
Operaciones
Operacin Iniciar (ent A: ArbolBinario[T]; sal IteradorPreorden)
Calcula: Devuelve un iterador nuevo, colocado sobre la raz de A.
Operacin Actual (ent iter: IteradorPreorden; sal T)

Fin IteradorPreorden.

A.E.D. 27
Tema 1. Abstracciones y especificaciones.

1.2.3. Abstracciones de iteradores.

var
A: ArbolBinario[T];
i: IteradorPreorden[T];
begin
...
i:= Iniciar(A);
while Not EsUltimo(i) do begin
Accin sobre Actual(i);
i:= Avanzar(i);
end;

A.E.D. 28
Tema 1. Abstracciones y especificaciones.

14
1.3. Especificaciones formales.
Las especificaciones en lenguaje natural son
ambiguas e imprecisas.
Especificaciones formales: definen un TAD o
una operacin de manera precisa, utilizando un
lenguaje matemtico.
Ventajas de una especificacin formal:
Prototipado. Las especificaciones formales pueden
llegar a ser ejecutables.
Correccin del programa. Verificacin automtica y
formal de que el programa funciona correctamente.
Reusabilidad. Posibilidad de usar la especificacin
formal en distintos mbitos.
A.E.D. 29
Tema 1. Abstracciones y especificaciones.

1.3. Especificaciones formales.


Notacin
La descripcin formal constar de cuatro partes:
NOMBRE. Nombre genrico del TAD.
CONJUNTOS. Conjuntos de datos que
intervienen en la definicin.
SINTAXIS. Signatura de las operaciones
definidas.
SEMNTICA. Indica el significado de las
operaciones, cul es su resultado.

A.E.D. 30
Tema 1. Abstracciones y especificaciones.

15
1.3. Especificaciones formales.
Sintaxis:
<nombre_operacin> : <conj_dominio> <conj_resultado>

Los distintas notaciones formales difieren en la


forma de definir la semntica:
Mtodo axiomtico o algebraico. Se establece el
significado de las operaciones a travs de relaciones
entre operaciones (axiomas). Significado implcito de las
operaciones.
Mtodo constructivo u operacional. Se define cada
operacin por s misma, independientemente de las
otras, basndose en un modelo subyacente. Significado
explcito de las operaciones.
A.E.D. 31
Tema 1. Abstracciones y especificaciones.

1.3.1. Mtodo axiomtico (o algebraico).

La semntica de las operaciones se define a


travs de un conjunto de axiomas.
Un axioma es una regla que establece la
igualdad de dos expresiones:
<Expresin 1> = <Expresin 2>
Por ejemplo:
Suma (dos, dos) = Producto (dos, dos)
Tope (Push (x, pila)) = x
And (verdadero, b) = verdadero

A.E.D. 32
Tema 1. Abstracciones y especificaciones.

16
1.3.1. Mtodo axiomtico (o algebraico).

Qu axiomas introducir en la semntica?


Los axiomas deben ser los necesarios para
satisfacer dos propiedades:
Completitud: Los axiomas deben ser los
suficientes para poder deducir el significado de
cualquier expresin.
Correccin: A partir de una expresin slo se
puede obtener un resultado.

A.E.D. 33
Tema 1. Abstracciones y especificaciones.

1.3.1. Mtodo axiomtico (o algebraico).


Ejemplo: TAD Natural de los nmeros naturales.
NOMBRE
Natural
CONJUNTOS
N Conjunto de naturales
B Conjunto de booleanos {true, false}
SINTAXIS
cero: N
sucesor: N N
esCero: N B
igual: NxN B
suma: NxN N
A.E.D. 34
Tema 1. Abstracciones y especificaciones.

17
1.3.1. Mtodo axiomtico (o algebraico).

SEMANTICA
m, n N
1. esCero (cero) = true
2. esCero (sucesor (n)) = false
3. igual (cero, n) = esCero (n)
4. igual (sucesor (n), cero) = false
5. igual (sucesor (n), sucesor (m)) = igual (n, m)
6. suma (cero, n) = n
7. suma (sucesor (m), n) = sucesor (suma (m, n))

A.E.D. 35
Tema 1. Abstracciones y especificaciones.

1.3.1. Mtodo axiomtico (o algebraico).

Ejecucin de una especificacin algebraica:


aplicar sucesivamente las reglas de la semntica
hasta que no se puedan aplicar ms.

Ejemplo. Cunto valen las siguientes


expresiones?

a) suma (suma(sucesor(cero), cero), sucesor (cero) )

b) igual (sucesor (sucesor (cero)), suma (suma (sucesor


(cero), cero), sucesor (cero) ) )

A.E.D. 36
Tema 1. Abstracciones y especificaciones.

18
1.3.1. Mtodo axiomtico (o algebraico).

Supongamos un TAD, T.
Tipos de operaciones:
Constructores. Conjunto mnimo de operaciones del
TAD, a partir del cual se puede obtener cualquier valor
del tipo T.
c1: T, c2: V T, c3: V1x...xVn T
Modificacin. A partir de un valor del tipo obtienen otro
valor del tipo T, y no son constructores.
m1: T T, m2: TxV T, m3: V1x...xVn T
Consulta. Devuelven un valor que no es del tipo T.
o1: T V, o2: TxV V, o3: V1x...xVn Vn+1

A.E.D. 37
Tema 1. Abstracciones y especificaciones.

1.3.1. Mtodo axiomtico (o algebraico).

La ejecucin de una expresin acaba al


expresarla en funcin de los constructores.
Cmo garantizar que una especificacin es
completa y correcta?
Definir los axiomas suficientes para
relacionar las operaciones de modificacin y
consulta con los constructores.
No incluir axiomas que se puedan deducir
de otros existentes.

A.E.D. 38
Tema 1. Abstracciones y especificaciones.

19
1.3.1. Mtodo axiomtico (o algebraico).
Ejemplo: Especificacin del TAD genrico pila.
NOMBRE
Pila [T]
CONJUNTOS
S Conjunto de pilas
T Conjunto de elementos que pueden ser almacenados
B Conjunto de booleanos {true, false}
SINTAXIS
crearPila: S
esVaca: S B
pop: S S
tope: S T
push: TxS S
A.E.D. 39
Tema 1. Abstracciones y especificaciones.

1.3.1. Mtodo axiomtico (o algebraico).


En el caso de tope: S T, qu pasa si la pila
est vaca?
Se puede aadir un conjunto de mensajes en
CONJUNTOS, de la forma:

M Conjunto de mensajes {Error. La pila


est vaca}

Y cambiar en la parte de SINTAXIS la operacin


tope:

tope: S T U M
A.E.D. 40
Tema 1. Abstracciones y especificaciones.

20
1.3.1. Mtodo axiomtico (o algebraico).

crearPila push (t, s)

esVaca ( ) esVaca(crearPila) = esVaca(push(t, s)) =

pop ( ) pop(crearPila) = pop(push(t, s)) =

tope ( ) tope(crearPila) = tope(push(t, s)) =

A.E.D. 41
Tema 1. Abstracciones y especificaciones.

1.3.1. Mtodo axiomtico (o algebraico).

SEMANTICA
t T; s S
1. esVaca (crearPila) = true
2. esVaca (push (t, s)) = false
3. pop (crearPila) = crearPila
4. pop (push (t, s)) = s
5. tope (crearPila) = Error. La pila est vaca
6. tope (push (t, s)) = t

A.E.D. 42
Tema 1. Abstracciones y especificaciones.

21
1.3.1. Mtodo axiomtico (o algebraico).
Calcular:
a) pop(push(3, push(2, pop(crearPila))))
b) tope(pop(push(1, push(2, crearPila))))
Aadir una operacin Igual para
comparar dos pilas.
Modificar la operacin pop, para que
devuelva un error si la pila est vaca.
Cmo hacer que la operacin pop
devuelva el tope de la pila y al mismo
tiempo lo saque de la pila?
A.E.D. 43
Tema 1. Abstracciones y especificaciones.

1.3.1. Mtodo axiomtico (o algebraico).


Para facilitar la escritura de la expresin del resultado en la
semntica, se pueden emplear condicionales de la forma:
SI <condicin> <valor si cierto> | <valor si falso>
Ejemplo: Especificacin algebraica del TAD bolsa.
NOMBRE
Bolsa[I]
CONJUNTOS
S Conjunto de bolsas
I Conjunto de elementos
B Conjunto de booleanos {true, false}
N Conjunto de naturales
SINTAXIS
bolsaVaca: S
poner: SxI S
esVaca: S B
cuntos: S x I N
A.E.D. 44
Tema 1. Abstracciones y especificaciones.

22
1.3.1. Mtodo axiomtico (o algebraico).

Incluir una operacin quitar, que saque un


elemento dado de la bolsa.
Y si queremos que los saque todos?
Incluir una operacin Igual, de comparacin
de bolsas.

A.E.D. 45
Tema 1. Abstracciones y especificaciones.

1.3.1. Mtodo axiomtico (o algebraico).


Conclusiones:
Las operaciones no se describen de manera
explcita, sino implcitamente relacionando
el resultado de unas con otras.
La construccin de los axiomas se basa en
un razonamiento inductivo.
Cmo se podra especificar, por ejemplo,
un procedimiento de ordenacin?

A.E.D. 46
Tema 1. Abstracciones y especificaciones.

23
1.3.2. Mtodo constructivo (operacional).

Para cada operacin, se establecen las


precondiciones y las postcondiciones.
Precondicin: Relacin que se debe
cumplir con los datos de entrada para que
la operacin se pueda aplicar.
Postcondicin: Relaciones que se
cumplen despus de ejecutar la operacin.

A.E.D. 47
Tema 1. Abstracciones y especificaciones.

1.3.2. Mtodo constructivo (operacional).


Notacin
En la semntica, para cada operacin <nombre>:
pre-<nombre>(<param_entrada>)::= <condicin_lgica>
post-<nombre>(<param_entrada>;<param_salida>)::=
<condicin_lgica>

Ejemplo: operacin mximo, que tiene como


entrada dos nmeros reales y da como salida el
mayor de los dos.
mximo: R x R R (SINTAXIS)
pre-mximo(x, y) ::= true (SEMANTICA)
post-mximo(x, y; r) ::= (r x) (r y) (r=x r=y)

A.E.D. 48
Tema 1. Abstracciones y especificaciones.

24
1.3.2. Mtodo constructivo (operacional).

Ejemplo: operacin mximo sobre nmeros


reales, pero restringida a nmeros positivos.
mximop: R x R R
pre-mximop(x, y) ::= (x 0) (y 0)
post-mximop(x, y; r) ::= (r x) (r y) (r=x r=y)

Qu sucedera si x o y no son mayores que 0?


No se cumple la precondicin No podemos
asegurar que se cumpla la postcondicin.

A.E.D. 49
Tema 1. Abstracciones y especificaciones.

1.3.2. Mtodo constructivo (operacional).


Implementacin en C++ de pre- y post-condiciones.
mximop: R x R R
pre-mximop(x, y) ::= (x 0) (y 0)
post-mximop(x, y; r) ::= (r x) (r y) (r=x r=y)
float maximop (float x, float y)
{
assert(x>= 0 && y >= 0); // Precondicin
double r;
if (x>y) r= x; else r= y;
assert(r>=x && r>=y && (r==x || r==y)); //Postcond
return r;
}

A.E.D. 50
Tema 1. Abstracciones y especificaciones.

25
1.3.2. Mtodo constructivo (operacional).
Otra posibilidad: Definir un conjunto M (de
mensajes de error) y cambiar la imagen. Modificar
la sintaxis y la semntica:
mximop2: R x R R U M
pre-mximop2(x, y) ::= true
post-mximop2(x, y; r) ::= SI (x 0) (y 0)
(r x) (r y) (r=x r=y)
| r = Fuera de rango

Cul es la mejor opcin?

A.E.D. 51
Tema 1. Abstracciones y especificaciones.

1.3.2. Mtodo constructivo (operacional).


Cul es la mejor solucin?
La especificacin como un contrato.
Contrato de una operacin:
NE S
Si se cumplen unas C IF ICACIO O
ESP E PRODUCT
condiciones en los DEL
parmetros de entrada,
O
entonces garantiza una CT
O DU
obtencin correcta del PR 1.0
V
resultado.

A.E.D. & 52
Tema 1. Abstracciones y especificaciones.

26
1.3.2. Mtodo constructivo (operacional).
Dos puntos de vista del contrato (especificacin):
Implementador. Obligacin: Cumplir la postcondicin.
Derechos: Sabe que se cumple la precondicin.
Usuario. Obligacin: Cumplir la precondicin.
Derechos: Sabe que se cumple la postcondicin.

Idea:
La operacin no trata todos los casos de error, sino que
hace uso de las precondiciones.
La responsabilidad de comprobar la precondicin es del
que usa la operacin.

A.E.D. 53
Tema 1. Abstracciones y especificaciones.

1.3.2. Mtodo constructivo (operacional).


Cmo se pueden definir las pre/post-condiciones
cuando el TAD es ms complejo? Por ejemplo,
para TAD colecciones.
Necesitamos un modelo subyacente, en el cual
se base la definicin del TAD.
No siempre se encuentra uno adecuado...

Ejemplo: Para definir el TAD Pila[T], definiremos


el TAD Lista[T] por el mtodo axiomtico, y luego
lo usaremos para definir el TAD pila con el mtodo
constructivo.
A.E.D. 54
Tema 1. Abstracciones y especificaciones.

27
1.3.2. Mtodo constructivo (operacional).
NOMBRE
Lista[I]
CONJUNTOS
L Conjunto de listas
I Conjunto de elementos
B Conjunto de booleanos {true, false}
N Conjunto de naturales
M Conjunto de mensajes {La lista est vaca}
SINTAXIS
crearLista: L
formarLista: I L
concatenar: L x L L
ltimo: L IUM
cabecera: L L
primero: L IUM
cola: L L
longitud: L N
esListaVaca: L B
A.E.D. 55
Tema 1. Abstracciones y especificaciones.

1.3.2. Mtodo constructivo (operacional).

SEMANTICA
i I; a,b L
1. ltimo (crearLista) = La lista est vaca
2. ltimo (formarLista (i)) = i
3. ltimo (concatenar (a, b)) = SI esListaVaca (b)
ltimo (a) | ltimo (b)
4. cabecera (crearLista) = crearLista
5. cabecera (formarLista (i)) = crearLista
6. cabecera (concatenar (a, b)) = SI esListaVaca (b)
cabecera (a) | concatenar (a, cabecera (b))
7. primero (crearLista) = La lista est vaca
8. primero (formarLista (i)) = i
9. primero (concatenar (a, b)) = SI esListaVaca (a)
primero (b) | primero (a)

A.E.D. 56
Tema 1. Abstracciones y especificaciones.

28
1.3.2. Mtodo constructivo (operacional).
10. cola (crearLista) = crearLista
11. cola (formarLista (i)) = crearLista
12. cola (concatenar (a, b)) = SI esListaVaca (a)
cola (b) | concatenar (cola (a), b)
13. longitud (crearLista) = cero
14. longitud (formarLista (i)) = sucesor (cero)
15. longitud (concatenar (a, b)) = suma (longitud (a),
longitud (b))
16. esListaVaca (crearLista) = true
17. esListavaca (formarLista (i)) = false
18. esListaVaca (concatenar (a, b)) = esListaVaca (a)
AND esListaVaca(b)
Aserto invariante: siempre que aparezca un mensaje a la
entrada de una operacin, la salida ser el mismo mensaje.
A.E.D. 57
Tema 1. Abstracciones y especificaciones.

1.3.2. Mtodo constructivo (operacional).


Seguimos el ejemplo y aplicamos el mtodo constructivo a
la definicin de Pila[I], teniendo como modelo subyacente
el tipo Lista[I].
NOMBRE
Pila[I]
CONJUNTOS
S Conjunto de pilas
I Conjunto de elementos
B Conjunto de valores booleanos {true, false}
M Conjunto de mensajes {La pila est vaca}
SINTAXIS
crearPila: S
tope: S IUM
pop: S SUM
push: IxS S
esVacaPila: S B
A.E.D. 58
Tema 1. Abstracciones y especificaciones.

29
1.3.2. Mtodo constructivo (operacional).
SEMANTICA
iI; sS; bB; rS; tI U M; pS U M
1. pre-crearPila () ::= true
2. post-crearPila (s) ::= s = crearLista
3. pre-tope (s) ::= true
4. post-tope (s; t) ::= SI esListaVaca (s)
t = La pila est vaca
| t = primero (s)
5. pre-pop (s) ::= true
6. post-pop (s; p) ::= SI esListaVaca (s)
p = La pila est vaca
| p = cola (s)
7. pre-push (i, s) ::= true
8. post-push (i, s; r) ::= r = concatenar (formarLista (i), s)
9. pre-esVacaPila (s) ::= true
10. post-esVacaPila (s; b) ::= b = esListaVaca (s)
A.E.D. 59
Tema 1. Abstracciones y especificaciones.

1.3.2. Mtodo constructivo (operacional).


NOMBRE
Pila[I]
CONJUNTOS
S Conjunto de pilas
I Conjunto de elementos
B Conjunto de valores booleanos {true, false}
SINTAXIS
crearPila: S
tope: S I
pop: S S
push: IxS S
esVacaPila: S B

A.E.D. 60
Tema 1. Abstracciones y especificaciones.

30
1.3.2. Mtodo constructivo (operacional).
SEMANTICA
i, tI; s, r, pS; bB
1. pre-crearPila () ::= true
2. post-crearPila (s) ::= s = crearLista
3. pre-tope (s) ::= NOT esListaVaca (s)
4. post-tope (s; t) ::= t = primero (s)
5. pre-pop (s) ::= NOT esListaVaca (s)
6. post-pop (s; p) ::= p = cola (s)
7. pre-push (i, s) ::= true
8. post-push (i, s; r) ::= r = concatenar (formarLista (i), s)
9. pre-esVacaPila (s) ::= true
10. post-esVacaPila (s; b) ::= b = esListaVaca (s)

A.E.D. 61
Tema 1. Abstracciones y especificaciones.

1.3.2. Mtodo constructivo (operacional).


Seguimos el ejemplo y aplicamos el mtodo constructivo a
la definicin de Cola[I], teniendo como modelo subyacente
el tipo Lista[I].
NOMBRE
Cola[I]
CONJUNTOS
C Conjunto de colas
I Conjunto de elementos
B Conjunto de valores booleanos {true, false}
M Conjunto de mensajes {La cola est vaca}
SINTAXIS
crearCola: C
frente: C IUM
inserta: C CUM
resto: IxC C
esVacaCola: C B
A.E.D. 62
Tema 1. Abstracciones y especificaciones.

31
1.3.2. Mtodo constructivo (operacional).
Ejecucin de la especificacin: comprobar
precondiciones y postcondiciones de todas las
operaciones de la expresin.

Ejemplos: Pila[Natural]
a) tope (push (4, pop (push (2, crearPila) ) ) )

b) esVacaPila (push (2, pop (crearPila) ) )

A.E.D. 63
Tema 1. Abstracciones y especificaciones.

1.3.2. Mtodo constructivo (operacional).


Conclusiones:
La especificacin constructiva est limitada
por la necesidad de modelos
subyacentes.
No confundir especificacin con
implementacin.
Es ms fcil incluir especificaciones
constructivas en los programas (p.ej.,
mediante asertos).

A.E.D. 64
Tema 1. Abstracciones y especificaciones.

32

Potrebbero piacerti anche