09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

19.3. Metodología de la programación de TADs 445<br />

Por ejemplo, si se decide repres<strong>en</strong>tar los conjuntos de <strong>en</strong>teros mediante listas<br />

sin repetición, este invariante se podría formalizar como sigue:<br />

{Inv. ∀i, j ∈ I, si i = j, <strong>en</strong>tonces li = lj}<br />

donde I es el conjunto de “índices” correspondi<strong>en</strong>tes a los elem<strong>en</strong>tos de la lista,<br />

y li es el elem<strong>en</strong>to que ocupa la posición i-ésima <strong>en</strong> la lista. De esta forma se<br />

expresa que no deb<strong>en</strong> existir dos elem<strong>en</strong>tos iguales <strong>en</strong> la lista.<br />

No hay normas g<strong>en</strong>erales para establecer el invariante de repres<strong>en</strong>tación, ya<br />

que dep<strong>en</strong>de del tipo abstracto de datos y de la repres<strong>en</strong>tación escogida. Incluso,<br />

<strong>en</strong> alguna ocasión, el invariante puede ser trivial, como ocurre <strong>en</strong> la repres<strong>en</strong>tación<br />

de los conjuntos de <strong>en</strong>teros mediante árboles binarios de búsqueda: <strong>en</strong><br />

este caso, como <strong>en</strong> la implem<strong>en</strong>tación de estos árboles no se repit<strong>en</strong> las <strong>en</strong>tradas<br />

(véase el apartado 17.4.2), se ti<strong>en</strong>e asegurado que no habrá elem<strong>en</strong>tos duplicados,<br />

con lo cual el invariante de repres<strong>en</strong>tación se formaliza simplem<strong>en</strong>te como:<br />

{Inv. cierto}<br />

Una vez conocida la forma del invariante de repres<strong>en</strong>tación, es necesario<br />

asegurarse de que lo verifica la repres<strong>en</strong>tación particular de todo objeto del tipo<br />

abstracto de datos. Esto es s<strong>en</strong>cillo, parti<strong>en</strong>do del hecho de que todo objeto<br />

del tipo es obt<strong>en</strong>ido a partir de las operaciones constructoras o mediante la<br />

aplicación de las operaciones de selección o de las propias del tipo. Por ello,<br />

basta con comprobar (de forma inductiva) que todo objeto g<strong>en</strong>erado por estas<br />

operaciones verifica el invariante, suponi<strong>en</strong>do que los ev<strong>en</strong>tuales argum<strong>en</strong>tos del<br />

tipo también lo cumpl<strong>en</strong>. Así, volvi<strong>en</strong>do a la repres<strong>en</strong>tación mediante listas, la<br />

operación CrearConj lo cumple trivialm<strong>en</strong>te, ya que g<strong>en</strong>era el conjunto vacío<br />

repres<strong>en</strong>tado, valga la redundancia, por la lista vacía, y se verifica que<br />

puesto que, <strong>en</strong> este caso, I = ∅.<br />

∀i, j ∈ I, si i = j, <strong>en</strong>tonces li = lj<br />

En cuanto a la operación AnnadirElemConj, dado que el argum<strong>en</strong>to recibido<br />

conj verifica el invariante, también lo verificará al completarse la ejecución, ya<br />

que <strong>en</strong> ella se comprueba explícitam<strong>en</strong>te que elem no pert<strong>en</strong>ece a conj.<br />

El lector puede comprobar como ejercicio que el resto de las operaciones<br />

implem<strong>en</strong>tadas <strong>en</strong> el ejemplo también preservan el invariante.<br />

El problema de la corrección <strong>en</strong> tipos abstractos de datos puede tratarse más<br />

formal y profundam<strong>en</strong>te, pero ello escapa a las pret<strong>en</strong>siones de este libro. En las<br />

refer<strong>en</strong>cias bibliográficas se citan textos que profundizan <strong>en</strong> este tema.<br />

Finalm<strong>en</strong>te, se debe destacar que la modularidad introducida por los tipos<br />

abstractos de datos supone una gran ayuda <strong>en</strong> el estudio de la corrección de

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!