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.

19.2. Un ejemplo completo 439<br />

Con los elem<strong>en</strong>tos de que se dispone ahora, esta declaración se sustituirá por<br />

la sigui<strong>en</strong>te:<br />

uses conjEnt;<br />

que hace que el tipo tConj declarado <strong>en</strong> la unidad esté disponible para su empleo<br />

<strong>en</strong> el programa.<br />

❡❡ Una implem<strong>en</strong>tación <strong>en</strong> <strong>Pascal</strong> estándar obligaría a prescindir de las unidades,<br />

obligando a incluir todas las declaraciones del tipo y de los subprogramas<br />

correspondi<strong>en</strong>tes a las operaciones del tipo abstracto tConj <strong>en</strong> todo<br />

programa <strong>en</strong> que se utilice. Con ello se perderían gran parte de las v<strong>en</strong>tajas<br />

aportadas por la abstracción de datos, como, por ejemplo, la <strong>en</strong>capsulación,<br />

la ocultación de información y el aislami<strong>en</strong>to de los cambios.<br />

La repres<strong>en</strong>tación escogida para la implem<strong>en</strong>tación no es la más efici<strong>en</strong>te. En<br />

efecto, las operaciones de inserción, eliminación y consulta requier<strong>en</strong>, <strong>en</strong> el peor<br />

caso, el recorrido del conjunto completo.<br />

Una posibilidad más interesante consiste <strong>en</strong> repres<strong>en</strong>tar los conjuntos mediante<br />

arboles de búsqueda (véase el apartado 17.4.2) <strong>en</strong> vez de usar listas. No<br />

es necesario reparar ahora <strong>en</strong> los porm<strong>en</strong>ores de esta estructura de datos; <strong>en</strong> este<br />

mom<strong>en</strong>to, nos basta con saber que las operaciones de modificación y consulta<br />

son ahora mucho más efici<strong>en</strong>tes.<br />

Pues bi<strong>en</strong>, si ahora decidiésemos mejorar la efici<strong>en</strong>cia de nuestra implem<strong>en</strong>tación,<br />

cambiando las listas por árboles, no t<strong>en</strong>emos que modificar las operaciones<br />

de la interfaz, sino tan sólo su desarrollo posterior <strong>en</strong> la sección implem<strong>en</strong>tation.<br />

De este modo, se puede apreciar una de las v<strong>en</strong>tajas de la<br />

abstracción de datos:<br />

• El programador-usuario no ti<strong>en</strong>e que p<strong>en</strong>sar <strong>en</strong> ningún mom<strong>en</strong>to <strong>en</strong> la<br />

repres<strong>en</strong>tación del tipo abstracto de datos, sino únicam<strong>en</strong>te <strong>en</strong> su especificación.<br />

• Los cambios, correcciones o mejoras introducidas <strong>en</strong> la implem<strong>en</strong>tación del<br />

tipo abstracto de datos repercut<strong>en</strong> <strong>en</strong> el m<strong>en</strong>or ámbito posible, cual es la<br />

unidad <strong>en</strong> que se incluye su repres<strong>en</strong>tación. En nuestro ejemplo, el cambio<br />

de la implem<strong>en</strong>tación basada <strong>en</strong> listas por la basada <strong>en</strong> árboles no afecta<br />

ni a una sola línea del programa Criba: el programador-usuario sólo se<br />

sorpr<strong>en</strong>derá con una mayor efici<strong>en</strong>cia de su programa tras dicho cambio.<br />

Obsérvese el efecto que hubiera t<strong>en</strong>ido el cambio de repres<strong>en</strong>tación <strong>en</strong> la<br />

primera versión de Criba, y compare.<br />

Una vez pres<strong>en</strong>tado este ejemplo y con él las ideas g<strong>en</strong>erales de la abstracción<br />

de datos, se dan <strong>en</strong> el sigui<strong>en</strong>te apartado nociones metodológicas g<strong>en</strong>erales<br />

acerca de esta técnica.

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

Saved successfully!

Ooh no, something went wrong!