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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

informalm<strong>en</strong>te como una colección de objetos con un conjunto de operaciones<br />

definidas sobre estos objetos. Se t<strong>en</strong>drá siempre <strong>en</strong> cu<strong>en</strong>ta la filosofía de la<br />

abstracción de datos: todas las características del tipo abstracto vi<strong>en</strong><strong>en</strong> dadas por<br />

su definición y no por su implem<strong>en</strong>tación (de la que es totalm<strong>en</strong>te indep<strong>en</strong>di<strong>en</strong>te).<br />

En el ejemplo anterior, es evid<strong>en</strong>te que la aplicación de la abstracción de<br />

datos conducirá a un tipo abstracto: 2<br />

type<br />

tConj = Abstracto<br />

cuyos objetos son precisam<strong>en</strong>te conjuntos con un número arbitrario de elem<strong>en</strong>tos<br />

<strong>en</strong>teros que se podrán manipular con las sigui<strong>en</strong>tes operaciones: 3<br />

procedure CrearConj (var conj: tConj);<br />

{Efecto: conj:= ∅}<br />

procedure AnnadirElemConj (elem: integer; var conj: tConj);<br />

{Efecto: conj:= conj ∪ [elem]}<br />

procedure QuitarElemConj (elem: integer; var conj: tConj);<br />

{Efecto: conj:= conj \ [elem]}<br />

function Pert<strong>en</strong>ece (elem: integer; conj: tConj): boolean;<br />

{Dev. True (si elem ∈ conj) o False (<strong>en</strong> otro caso)}<br />

procedure EscribirConj (conj: tConj);<br />

{Efecto: escribe <strong>en</strong> el output los elem<strong>en</strong>tos de conj}<br />

function EstaVacioConj(conj: tConj): boolean;<br />

{Dev. True (si conj = ∅) o False (<strong>en</strong> otro caso)}<br />

Como se dijo anteriorm<strong>en</strong>te, una característica es<strong>en</strong>cial de los tipos abstractos<br />

de datos es su indep<strong>en</strong>d<strong>en</strong>cia de la implem<strong>en</strong>tación. En este mom<strong>en</strong>to, y sin<br />

saber nada <strong>en</strong> absoluto acerca de la forma <strong>en</strong> que está implem<strong>en</strong>tado (o <strong>en</strong> que<br />

se va a implem<strong>en</strong>tar) el tipo tConj, se puede utilizar de una forma abstracta,<br />

si<strong>en</strong>do más que sufici<strong>en</strong>te la información proporcionada por la especificación de<br />

las operaciones del tipo. Además, se podrá comprobar inmediatam<strong>en</strong>te cómo el<br />

código obt<strong>en</strong>ido es más claro, fácil de mant<strong>en</strong>er y verificar. La nueva versión del<br />

programa CribaEratost<strong>en</strong>es es la sigui<strong>en</strong>te:<br />

2 Acéptese esta notación provisional, que se detalla <strong>en</strong> el apartado 19.2.3.<br />

3 En los casos <strong>en</strong> los que se ha considerado conv<strong>en</strong>i<strong>en</strong>te, se ha sustituido la postcondición por<br />

una descripción algo m<strong>en</strong>os formal del efecto del subprograma.

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

Saved successfully!

Ooh no, something went wrong!