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.

444 Capítulo 19. Tipos abstractos de datos<br />

parar:= True;<br />

insertar:= True<br />

<strong>en</strong>d<br />

else if auxBuscar^.sig^.info >= elem th<strong>en</strong> begin<br />

parar:= True;<br />

insertar:= auxBuscar^.sig^.info > elem<br />

<strong>en</strong>d<br />

else<br />

auxBuscar:= auxBuscar^.sig<br />

until parar;<br />

if insertar th<strong>en</strong> begin<br />

auxInsertar:= auxBuscar^.sig;<br />

New(auxBuscar^.sig);<br />

auxBuscar^.sig^.info:= elem;<br />

auxBuscar^.sig^.sig:= auxInsertar<br />

<strong>en</strong>d {if}<br />

<strong>en</strong>d; {AnnadirElemConj}<br />

que verifica la especificación, como es fácil comprobar examinando el código.<br />

En efecto, la implem<strong>en</strong>tación propuesta para AnnadirElemConj, hace que se<br />

agregue elem a la repres<strong>en</strong>tación de conj. Más detalladam<strong>en</strong>te, <strong>en</strong> el caso del que<br />

elem no pert<strong>en</strong>ezca al conjunto, se asigna el valor True a la variable insertar,<br />

provocando la ejecución de la rama th<strong>en</strong> de la instrucción if insertar..., que<br />

añade un nuevo nodo (cuya información es elem) <strong>en</strong> la lista que repres<strong>en</strong>ta a<br />

conj. Esto demuestra informalm<strong>en</strong>te que AnnadirElemConj consigue el efecto<br />

descrito <strong>en</strong> la especificación.<br />

Por otra parte, <strong>en</strong> los tipos abstractos de datos, se debe estudiar la corrección<br />

<strong>en</strong> una segunda dirección, ya que es necesario establecer propiedades de<br />

los objetos del tipo, y mediante ellas comprobar que los objetos que se manejan<br />

pert<strong>en</strong>ec<strong>en</strong> realm<strong>en</strong>te al tipo. Estas propiedades se formalizan <strong>en</strong> los llamados<br />

invariantes de la repres<strong>en</strong>tación de la forma que se explica seguidam<strong>en</strong>te. El<br />

s<strong>en</strong>tido de esta segunda parte de la verificación es el de una comprobación de<br />

tipos exhaustiva: al escoger una repres<strong>en</strong>tación, por ejemplo, las listas <strong>en</strong> el caso<br />

del tipo abstracto tConj, se activa la comprobación de tipos implícita de <strong>Pascal</strong>,<br />

es decir, el compilador se asegura de que todo objeto del tipo tConj es una lista<br />

del tipo ^tNodoLista.<br />

Pero esta comprobación de tipos implícita no es sufici<strong>en</strong>te, por el hecho de<br />

que no toda lista de <strong>en</strong>teros es una repres<strong>en</strong>tación legal de un conjunto, concretam<strong>en</strong>te<br />

porque puede t<strong>en</strong>er elem<strong>en</strong>tos repetidos. Por tanto, es necesaria una<br />

verificación más profunda que debe ser realizada por el programador-diseñador.<br />

Esta verificación se llevará a cabo formalizando las propiedades pertin<strong>en</strong>tes de<br />

los objetos <strong>en</strong> los citados invariantes de repres<strong>en</strong>tación.

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

Saved successfully!

Ooh no, something went wrong!