Sie sind auf Seite 1von 7

Universidad de Buenos Aires Facultad De Ingenier a

Introducci on al Tipo de Dato Abstracto (TDA)


[75.40] Algoritmos y Programaci on I 2do Cuatrimestre 2010 C atedra: Ing. Pablo Guarna

Autor: Bernardo Ortega Moncada

Apunte de TDA

2do Cuatrimestre 2010

Indice
1. Introducci on 2. Que es la Abstracci on? 3. Concepto de TDA 3.1. Abstracci on al utilizar un TDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Abstracci on al construir un TDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. Dise no de un TDA 4.1. Ejemplo de dise no de un TDA . . . . . . 4.1.1. Analizar el problema . . . . . . . . 4.1.2. Obtener caracter sticas principales 4.1.3. Realizar diagrama del TDA . . . . 4.1.4. Implementar un TDA . . . . . . . 4.1.5. Testear el TDA . . . . . . . . . . . 5. Observaciones 2 2 2 2 3 3 3 3 3 4 4 6 6

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

Autor: Bernardo Ortega Moncada

Apunte de TDA

2do Cuatrimestre 2010

1.

Introducci on

Este apunte esta orientado para introducirle al alumno, el concepto del mecanismo de Abstracci on y sobre el Tipo de Dato Abstracto (TDA), tengan mucho en mente que este tema es dedicado con mucha profundidad en la materia posterior a esta, es decir lo van a ver con mucho detalle en [75.41]Algoritmos y Programaci on II

2.

Que es la Abstracci on?

Bueno para arrancar vamos a denir el concepto de Abstracci on, este concepto no es muy f acil de entender al principio, pero con tiempo y dedicaci on, uno logra captarlo. El concepto de la Abstracci on o como com unmente se denomina Mecanismo de Abstracci on, en formas generales es la consideraci on de ciertas partes seleccionadas de un todo complejo, ignorando las partes sobrantes. Bien hasta ac a no aportamos mucho a la cuesti on, para eso, vamos a aplicarlo a lo nuestro, es decir a un nivel mas Ingenieril. La Abstracci on me otorga la posibilidad de considerar una resoluci on de un cierto problema en el cual, no tenemos idea de como esta resuelto, o demostrado o etc, es decir, que ignoramos todo lo que esta por debajo del nivel que nos interesa. En este caso a nosotros nos interesa solo como se utiliza, lo cual un nivel inferior a lo que nos interesa es el como esta implementado, o desarrollado, o demostrado, etc por ende lo descartamos. Es mas podemos citar ejemplos en nuestra vida cotidiana en la cual, aplicamos el mecanismo de Abstracci on constantemente sin quiz as darnos cuenta que lo hacemos. Como por ejemplo: Al utilizar la televisi on, es decir no nos interesa el como funciona, solo sabemos usarla Al utilizar el auto, solo sabemos conducirlo, pero quiz as no sabemos su complejo funcionamiento interno Al programar en ciertos lenguajes, utilizamos funciones/procedimientos ya existentes sin saber como fueron construidos etc

3.

Concepto de TDA

Un TDA o tambi en conocido como Tipo de Dato Abstracto (quizas si leen algun libro que est e en ingles, o buscan por Internet lo pueden encontrar como ADT que en ingles signica, Abstract Data Type) est a dado por un grupo de datos(vectores, registros, constantes, etc) que cumplen cierta condici on especicada para el TDA, m as un conjunto de operaciones que representan el comportamiento del mismo. Es decir que el TDA tiene una identidad y un comportamiento, con el cual permite la interacci on (comunicaci on) con el mismo. Otro punto muy importante y que tienen que saber siempre, es que el TDA es independiente del lenguaje en el que se quiera implementar, es decir, que cierto TDA puede implementarse en P ASCAL, C , C + +, C #, JAV A, etc. El TDA surgi o para facilitar el trabajo con tipos de datos haciendo abstracci on de la implementaci on de los mismos. Como ver an en el TDA, se aplica el concepto de Abstracci on en su totalidad. Es decir se aplica tanto en su utilizaci on como en su construcci on. Para eso vamos a analizar este concepto en dos fases. La utilizaci on de un TDA y la construcci on de un TDA.

3.1.

Abstracci on al utilizar un TDA

La utilizaci on de un TDA, como se mencion o anteriormente, consiste en saber sobre que tema trata dicho TDA, que tipos de datos utiliza y cuales son las operaciones que ofrece (es decir, sus funciones/procedimientos). Bien usted puede decir: Ok, pero si yo conozco todo esto, estoy sabiendo como est a implementado. Esta armaci on es com un y sepan que esta totalmente Err onea, ya que se como esta compuesto ese TDA, se todas las operaciones que me ofrece, pero no se como fue construido, es decir conozco la INTERFAZ (o el dise no), pero no se como dichas operaciones fueron . Para citar un ejemplo com construidas, que vendr a a ser la IMPLEMENTACION un es cuando ustedes en PASCAL, utilizan el tipo de dato STRING, como sabr an y buscan en Internet el STRING ofrece muchas rutinas (funciones/procedimientos) con el cual me permiten manipularlo. Pueden jarse dichas rutinas en el siguiente link: http://www.freepascal.org/docs-html/rtl/sysutils/stringfunctions.html. Entonces podemos decir que STRING es un TDA compuesto por una cadena de caracteres de 255 posiciones cuya rutinas que ofrece son las que aparecen en el link, en las cuales se me informa como se llaman y que es lo que hacen, momento supe cuando ni como fueron programadas. Entonces, al utilizar el TDA STRING, estoy pero en NINGUN realizando el mecanismo de abstracci on, considerando solo el nivel que me interesa (es decir, como funciona y como se utiliza) y descarto todo nivel inferior (en este caso, vendr a a ser, como fue programado). Como conclusi on, podemos decir que el mecanismo de abstracci on se cumple al pie de la letra, al momento de utilizar un TDA. Autor: Bernardo Ortega Moncada 2

Apunte de TDA

2do Cuatrimestre 2010

3.2.

Abstracci on al construir un TDA

La construcci on de un TDA, cambia bastante a diferencia de su utilizaci on al momento de aplicar el mecanismo de abstracci on. Para eso vamos primero a recordar lo siguiente: Durante esta materia ustedes s olo creaban software cuyos clientes eran personas comunes, es decir, personas comunes y corrientes que no saben sobre programaci on, por lo tanto, creaban programas en los cuales, les daban opciones al usuario que ingrese datos o que haga algo o etc, y el usuario segu a todos los pasos, como pueden apreciar, ustedes constru an software, de tal manera que lograban que el usuario se abstraiga del como estaba programado (para el usuario creado) y lo utilice sin preocupaci on, ya que daba f e, que ese programa funcionaba correctamente. Bueno, ahora cuando uno cree un TDA, lo que esta haciendo es exactamente lo mismo. Uno puede estar sorprendido con esta armaci on, ya que le resulta medio raro que un TDA sea un software que lo use un cliente. Pues bien, un TDA es un software, cuyo destinatario o usuario, es en denitiva otro programador, as es, otra persona que sabe programar al igual que ustedes. Por ende al igual que un programa com un y corriente, al momento de crear un TDA, ustedes tienen que entregarle al usuario, la documentaci on correspondiente al mismo, junto con los archivos necesarios para que dicho TDA funcione. Pero al momento de construir un TDA, se tiene que tener un buen dise no previo del mismo. Para eso vamos a ver el concepto de dise no de un TDA.

4.

Dise no de un TDA

Al momento de dise nar un TDA, lo que se tiene que tener en mente es realizar un modelo del problema a resolver, Como es esto?, Facil!, se tiene que seguir los siguientes pasos: 1. Analizar el problema a plantear 2. Obtener sus caracter sticas principales 3. Hacer un diagrama de dicho TDA (como m as les resulte c omodo) analizando que tipos de datos, constantes y funciones/procedimientos se puede utilizar 4. Implementarlo (programarlo) en el lenguaje deseado, es decir, el que mas nos convenga (en este caso es PASCAL) 5. Testear el TDA una vez terminado Bueno, ahora para que quede mas claro, vamos a realizar un ejemplo, aplicando este concepto de dise no.

4.1.

Ejemplo de dise no de un TDA

Supongamos que viene una empresa y nos piden que realicemos un software que realice operaciones con n umeros complejos en su forma bin omica. Bien, el cliente solo nos dice eso, ya que lo necesitan para realizar un programa que opere con funciones de variable compleja. Entonces una vez planteado el problema (por parte del cliente) s olo nos resta dise narlo, siguiendo los pasos que mencion e en la secci on 4. 4.1.1. Analizar el problema

Analicemos el siguiente problema, nos piden realizar un software, que haga operaciones con n umeros complejos. Bien, ahora solo nos resta aprender (o terminar de recordar) que es un n umero complejo, para eso consultamos o si no tenemos a quien consultar, buscamos un libro o por Internet, por ejemplo el siguiente link:

http://es.wikipedia.org/wiki/N%C3%BAmero_complejo.

4.1.2.

Obtener caracter sticas principales

Una vez analizado podemos resumir al problema, considerando las caracter sticas que mas nos importa: Numero Complejo: 1. Un numero complejo es un par ordenado tal que si: z C entonces z = a + ib, con a y b R, entonces podemos decir, que un numero complejo se compone en dos partes: Parte Real = (z ) = a 3

Autor: Bernardo Ortega Moncada

Apunte de TDA

2do Cuatrimestre 2010

Parte Imaginaria =

(z ) = b

2. Las operaciones que puedo realizar con los n umeros complejos son las siguiente: Conjugaci on: la conjugaci on de un numero complejo z = a + ib se realiza de la siguiente manera: z = a ib Suma: la suma de dos n umeros complejos z = a + ib y w = x + iy se realiza de la siguiente manera: z + w = (a + x) + i(b + y ) Resta: la resta de dos n umeros complejos z = a + ib y w = x + iy se realiza de la siguiente manera: z w = (a x) + i(b y ) Multiplicaci on: la multiplicaci on de dos n umeros complejos z = a + ib y w = x + iy se realiza de la siguiente manera: z w = (ax by ) + i(ay + bx) Divisi on: la divisi on de dos n umeros complejos z = a + ib y w = x + iy se realiza de la siguiente manera: ax+by bxay z z w = = + i 2 2 2 2 w ww x +y x +y M odulo: el m odulo de un n umero complejo z = a + ib se realiza de la siguiente manera: |z | = a2 + b2 4.1.3. Realizar diagrama del TDA

Para realizar un diagrama no se necesita mucha complicaci on, solo resta ver los pasos anteriores y armarlo. En este caso el diagrama queda como si fuese una tabla veamos lo siguiente: TDA N umero Complejo unNumeroComplejo : tNumeroComplejo crear numero(var unNumero :tNumeroComplejo ; real,imaginario : REAL) conjugar numero(var unNumero :tNumeroComplejo):tNumeroComplejo calcular modulo(var unNumero :tNumeroComplejo):Real sumar numeros(var unNumero, otroNumero :tNumeroComplejo):tNumeroComplejo restar numeros(var unNumero, otroNumero :tNumeroComplejo):tNumeroComplejo multiplicar numeros(var unNumero, otroNumero :tNumeroComplejo):tNumeroComplejo dividir numeros(var unNumero, otroNumero :tNumeroComplejo):tNumeroComplejo 4.1.4. Implementar un TDA

Para implementar dicho TDA, lo vamos a realizar en el lenguaje PASCAL, utilizando lo que se denomina (y ustedes ya conocen) UNITS1 . Entonces solo nos resta crear dicha UNIT. Aclaraci on: Tengan en cuenta que dicha unit va a estar incompleta, para que ustedes la terminen a modo de ejercicio

Unit: TDA Numero Complejo

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

UNIT numero complejo ; INTERFACE CONST ERROR DIVISION = 0 ; TYPE tNumeroComplejo = RECORD p a r t e R e a l : REAL; p a r t e I m a g i n a r i a : REAL END; {POST: c r e a un numero c o m p l e j o con l a p a r t e r e a l e i m a g i n a r i a d e s e a d a } PROCEDURE c r e a r n u m e r o ( var unNumero : tNumeroComplejo ; r e a l , i m a g i n a r i o : REAL ) ; {PRE: unNumero t i e n e que e s t a r c r e a d o }
1 Lo pueden chequear tambi en en el apunte te orico que se encuentra en el grupo yahoo de la c atedra llamado Apunte Te orico(Algoritmos I)(VERSION 3)

Autor: Bernardo Ortega Moncada

Apunte de TDA

2do Cuatrimestre 2010

17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

{POST: c o n j u g a e l numero c o m p l e j o d e s e a d o } FUNCTION c o n j u g a r n u m e r o ( var unNumero : tNumeroComplejo ) : tNumeroComplejo ; {PRE: unNumero t i e n e que e s t a r c r e a d o } {POST: d e v u e l v e e l r e s u l t a d o d e l c a l c u l o d e l modulo d e l numero c o m p l e j o d e s e a d o } FUNCTION c a l c u l a r m o d u l o ( var unNumero : tNumeroComplejo ) : Real ; {PRE: unNumero y otroNumero t i e n e n que e s t a r c r e a d o s } {POST: d e v u e l v e un numero c o m p l e j o r e s u l t a d o de l a suma de unNumero y otroNumero } FUNCTION sumar numeros ( var unNumero , otroNumero : tNumeroComplejo ) : tNumeroComplejo ; {PRE: unNumero y otroNumero t i e n e n que e s t a r c r e a d o s } {POST: d e v u e l v e un numero c o m p l e j o r e s u l t a d o de l a r e s t a de unNumero y otroNumero } FUNCTION r e s t a r n u m e r o s ( var unNumero , otroNumero : tNumeroComplejo ) : tNumeroComplejo ; {PRE: unNumero y otroNumero t i e n e n que e s t a r c r e a d o s } {POST: d e v u e l v e un numero c o m p l e j o r e s u l t a d o de l a m u l t i p l i c a c i o n de unNumero y otroNumero } FUNCTION m u l t i p l i c a r n u m e r o s ( var unNumero , otroNumero : tNumeroComplejo ) : tNumeroComplejo ; {PRE: unNumero y otroNumero t i e n e n que e s t a r c r e a d o s , otroNumero t i e n e que s e r d i s t i n t o de 0 + i 0 } {POST: d e v u e l v e un numero d i s t i n t o de ERROR DIVISION a s i g n a n d o a r e s u l t a d o l a d i v i s i o n e n t r e unNumero y otroNumero . Caso c o n t r a r i o d e v u e l v e ERROR RESULTADO} FUNCTION d i v i d i r n u m e r o s ( var unNumero , otroNumero , r e s u l t a d o : tNumeroComplejo ) : byte ; IMPLEMENTATION

{PRE: unNumero t i e n e que e s t a r c r e a d o } {POST: d e v u e l v e TRUE s i e l numero c o m p l e j o e s 0 + i0 , c a s o c o n t r a r i o FALSE} { O b s e r v a c i o n : F i j a r s e que d i c h a f u n c i o n no e s t a d e c l a r a d a en INTERFACE, p e r o su c o d i g o s i e s t a en IMPLEMENTATION, h a c i e n d o que d i c h a f u n c i o n s e a de c a r a c t e r p r i v a d o l o c u a l e l c l i e n t e de e s t e TDA, NUNCA podra u s a r l a , ya que jamas s e e n t e r a r a de su e x i s t e n c i a } { Tip : Esta f u n c i o n p r i v a d a l e s va a s e r u t i l a l momento de programar l a f u n c i o n dividir numeros } FUNCTION e s c e r o ( var unNumero : tNumeroComplejo ) : b o o l e a n ; VAR r e s u l t a d o : BOOLEAN; BEGIN r e s u l t a d o := FALSE ; IF ( ( unNumero . p a r t e R e a l = 0 ) and ( unNumero . p a r t e I m a g i n a r i a = 0 ) ) THEN r e s u l t a d o := TRUE e s c e r o := r e s u l t a d o END; PROCEDURE c r e a r n u m e r o ( var unNumero : tNumeroComplejo ; r e a l , i m a g i n a r i o : REAL ) ; BEGIN unNumero . p a r t e R e a l := r e a l ; unNumero . p a r t e I m a g i n a r i a := i m a g i n a r i o ; END; FUNCTION c o n j u g a r n u m e r o ( var unNumero : tNumeroComplejo ) : tNumeroComplejo ; VAR aux : tNumeroComplejo ; BEGIN aux . p a r t e R e a l := unNumero . p a r t e R e a l ; aux . p a r t e I m a g i n a r i a := 1 ( unNumero . p a r t e I m a g i n a r i a ) ; c o n j u g a r n u m e r o := aux ;

Autor: Bernardo Ortega Moncada

Apunte de TDA

2do Cuatrimestre 2010

84 85 86 87 88 89 90 91 92 93 94 95 96 97 98

END; FUNCTION sumar numeros ( var unNumero , otroNumero : tNumeroComplejo ) : tNumeroComplejo ; VAR aux : tNumeroComplejo ; BEGIN aux . p a r t e R e a l := unNumero . p a r t e R e a l + otroNumero . p a r t e R e a l ; aux . p a r t e I m a g i n a r i a := unNumero . p a r t e R e a l + otroNumero . p a r t e I m a g i n a r i a ; sumar numeros := aux ; END; {CONTINUAR DICHA UNIT HASTA COMPLETAR TODAS LAS FUNCIONES/PROCEDIMIENTOS} END.

4.1.5.

Testear el TDA

Una vez nalizado la implementaci on del TDA, se tiene que testear, para eso se debe armar un nuevo programa que este dedicado exclusivamente al testeo del TDA (que por cierto el cliente no DEBE enterarse), para eso se debe llamar a la UNIT, y se empieza a manipular las funciones/procedimientos, vericando que hagan lo que tengan que hacer por medio de impresiones por pantalla (utilizando Writeln), lo mas importante es que el testeo tiene que abarcar todas las posibilidades de error en dicho TDA, para asegurarse que funcione correctamente, en caso de haber error, esta dem as aclarar que se tiene que reparar el TDA

5.

Observaciones

Para terminar de cerrar este tema, paso a mostrarles, los puntos claves que tienen que tener en cuenta para saber si dise naron un buen TDA: El TDA, tiene que modelar solo un tema, es decir que el TDA tiene que resolver solo un problema y no varios a la vez, en este caso, supongamos que tenemos el TDA N umero Complejo, dicho TDA, tiene que modelar y resolver las operaciones con n umeros complejos y no dedicarse a otra cosa como modelar y resolver las funciones de variable compleja, ya que eso se encargar a otro TDA. Las funciones/procedimientos de los TDA, se denominan Primitivas y dichas Primitivas, tienen que contener c odigos cortos, no tienen que ser extremadamente largas, una Primitiva con pocas lineas de c odigo, es una Primitiva bien dise nada Todo TDA tiene que tener una primitiva para su construcci on y (en algunos casos) para su destrucci on Las primitivas del TDA tienen que permitirle al usuario manipularlo d andole la m nima informaci on sobre la implementaci on del TDA, esto se denomina Ocultamiento de la Informaci on con el cual al usuario solo le informamos de como se compone y que herramientas tiene a la alcance para manipularlo. El ocultamiento de la implementaci on de las primitivas, es lo que se denomina como Encapsulamiento en el cual ocultamos toda linea de c odigo existente en dicho TDA. El testeo del TDA tiene que ser 100 % exitoso

Autor: Bernardo Ortega Moncada

Das könnte Ihnen auch gefallen