76
Tema 1. Tipos Abstractos de Datos Proceso de Abstracción Capacidad de manejar un objeto (tema o idea) como un concepto general, sin considerar la enorme cantidad de detalles que pueden estar asociados con ese objeto Ej. Usar una computadora sin conocer como está construida Ej. Usar una televisor, sin saber como funciona internamente

Tema 1 TAD

Embed Size (px)

Citation preview

Tema 1. Tipos Abstractos deDatos

• Proceso de Abstracción– Capacidad de manejar un objeto (tema o idea)

como un concepto general, sin considerar laenorme cantidad de detalles que pueden estarasociados con ese objeto

– Ej. Usar una computadora sin conocer comoestá construida

– Ej. Usar una televisor, sin saber como funcionainternamente

• Proceso de Abstracción– Capacidad de manejar un objeto (tema o idea)

como un concepto general, sin considerar laenorme cantidad de detalles que pueden estarasociados con ese objeto

– Ej. Usar una computadora sin conocer comoestá construida

– Ej. Usar una televisor, sin saber como funcionainternamente

Abstracción

• Aspectos complementarios al proceso deabstracción– Enfocarse en aspectos relevantes del objeto

– Ignorar aspectos irrelevantes

• NOTA: La relevancia depende del nivel deabstracción

• Aspectos complementarios al proceso deabstracción– Enfocarse en aspectos relevantes del objeto

– Ignorar aspectos irrelevantes

• NOTA: La relevancia depende del nivel deabstracción

Abstracción

• Método jerárquico para estudiar fenómenoscomplejos– Estudia niveles de detalle sucesivos

• De niveles generales a niveles más concretos

• Sentido de los niveles es descendente ↓

• Beneficio principal– Es más fácil pensar en el problema a resolver

• Método jerárquico para estudiar fenómenoscomplejos– Estudia niveles de detalle sucesivos

• De niveles generales a niveles más concretos

• Sentido de los niveles es descendente ↓

• Beneficio principal– Es más fácil pensar en el problema a resolver

Abstracción

• Principios importantes del diseño desoftware– Abstracción

– Ocultación de información

• Principios importantes del diseño desoftware– Abstracción

– Ocultación de información

TAD: Tipo Abstracto de Dato

• Idea básica es separar:– Uso del tipo de dato

– Implementación (operaciones que actúansobre los valores de esos datos)

• Especificación del Tipo de Dato es larepresentación del TADindependientemente de su implementación

• Idea básica es separar:– Uso del tipo de dato

– Implementación (operaciones que actúansobre los valores de esos datos)

• Especificación del Tipo de Dato es larepresentación del TADindependientemente de su implementación

TAD: Tipo Abstracto de Dato

• Establece un nivel intermedio derepresentación entre lo esencial de larealidad y los detalles de implementación

• Conceptos relacionados:– Modularidad: aplicación se divide en módulos

– Abstracción de datos: inventar tipos de datosadecuados en un programa

– Objetos: unidad que combina datos y funcionesque operan sobre esos datos

• Establece un nivel intermedio derepresentación entre lo esencial de larealidad y los detalles de implementación

• Conceptos relacionados:– Modularidad: aplicación se divide en módulos

– Abstracción de datos: inventar tipos de datosadecuados en un programa

– Objetos: unidad que combina datos y funcionesque operan sobre esos datos

TAD: Tipo Abstracto de Dato

• Fases del ciclo de vida del software1. Definición de Requisitos (Planteamiento del

problema)

2. Análisis de Requisitos

3. Diseño de Solución

4. Codificación de la Solución

5. Mantenimiento de programas

• Fases del ciclo de vida del software1. Definición de Requisitos (Planteamiento del

problema)

2. Análisis de Requisitos

3. Diseño de Solución

4. Codificación de la Solución

5. Mantenimiento de programas

TAD: Tipo Abstracto de Dato

• Al aplicar la POO (programación orientadaa objetos) para hacer programas, los objetosse tratan en todas la fases del ciclo de vida

• Un Objeto se representa por un TAD (enun primer nivel)

• Un TAD define un tipo de dato en términosde un tipo y un conjunto de operacionessobre ese tipo

• Al aplicar la POO (programación orientadaa objetos) para hacer programas, los objetosse tratan en todas la fases del ciclo de vida

• Un Objeto se representa por un TAD (enun primer nivel)

• Un TAD define un tipo de dato en términosde un tipo y un conjunto de operacionessobre ese tipo

TAD: Tipo Abstracto de Dato

• Las operaciones se definen por sus:– Entradas

– Salidas

• Definición de un TAD NO específica cómose implementa el tipo de dato.

• Encapsulación: proceso de ocultación delos detalles de la implementación

• Las operaciones se definen por sus:– Entradas

– Salidas

• Definición de un TAD NO específica cómose implementa el tipo de dato.

• Encapsulación: proceso de ocultación delos detalles de la implementación

TAD: Tipo Abstracto de Dato

• El TAD consta de un conjunto dedefiniciones

• Una estructura de datos es laimplementación física de un TAD

• Cada operación asociada con el TAD seimplementa por una o más subrutinasmientras ocultan las implementaciones

• El TAD consta de un conjunto dedefiniciones

• Una estructura de datos es laimplementación física de un TAD

• Cada operación asociada con el TAD seimplementa por una o más subrutinasmientras ocultan las implementaciones

TAD: Tipo Abstracto de Dato

• El término “estructura de datos” se refiere,frecuentemente, a los datos almacenados enla memoria principal de la computadora

• El término estructura archivo se refiere,normalmente, a la organización de los datosen un almacenamiento periférico, tal comouna unidad de cinta, disco, CD, DVD osimilar.

• El término “estructura de datos” se refiere,frecuentemente, a los datos almacenados enla memoria principal de la computadora

• El término estructura archivo se refiere,normalmente, a la organización de los datosen un almacenamiento periférico, tal comouna unidad de cinta, disco, CD, DVD osimilar.

TAD: Tipo Abstracto de Dato

• Definición:– Es una declaración de datos empaquetada junto

con las operaciones que son significativas parael tipo de dato.

– Se encapsula datos y operaciones

– Se oculta detalles de implementación

• Definición:– Es una declaración de datos empaquetada junto

con las operaciones que son significativas parael tipo de dato.

– Se encapsula datos y operaciones

– Se oculta detalles de implementación

TAD: Tipo Abstracto de Dato

• Tipos de operaciones de los TAD– Para crear objetos nuevos

– Para determinar el estado de los objetos

– Para construir otros objetos a partir de algunosya existentes

– Etc.

• Tipos de operaciones de los TAD– Para crear objetos nuevos

– Para determinar el estado de los objetos

– Para construir otros objetos a partir de algunosya existentes

– Etc.

Implementación tradicionalfrenta a los TAD

• Programa = Datos + Algoritmo– Ecuación de Wirth

• Los TAD identifican operaciones o partes delalgoritmo que operan sobre los datos, así:

• Algoritmo = Algoritmo de datos + Algoritmo de control

• Programa = Datos + Algoritmo de datos + Algoritmo de control

• Programa = Datos + Algoritmo– Ecuación de Wirth

• Los TAD identifican operaciones o partes delalgoritmo que operan sobre los datos, así:

• Algoritmo = Algoritmo de datos + Algoritmo de control

• Programa = Datos + Algoritmo de datos + Algoritmo de control

Implementación tradicionalfrenta a los TAD

Datos+

Programa = Algoritmo de datos+

Algoritmo de control

TAD = Datos + Algoritmo de datos

Datos+

Programa = Algoritmo de datos+

Algoritmo de control

TAD = Datos + Algoritmo de datos

Implementación tradicionalfrenta a los TAD

Implentación del TAD

Programa = +

Algoritmo de control

• Esta ecuación describe el enfoque dedesarrollo de programas utilizando TiposAbstractos de Datos

Implentación del TAD

Programa = +

Algoritmo de control

• Esta ecuación describe el enfoque dedesarrollo de programas utilizando TiposAbstractos de Datos

Ventajas de los TAD

• Permite una mejor conceptualización ymodelización del mundo real. Mejora larepresentación y la comprensibilidad.Clarifica los objetos basados en estructurasy comportamientos comunes.

• Mejora la robustez del sistema.

• Los tipos abstractos de datos permiten lacomprobación de tipos para evitar erroresde tipo en tiempo de ejecución.

• Permite una mejor conceptualización ymodelización del mundo real. Mejora larepresentación y la comprensibilidad.Clarifica los objetos basados en estructurasy comportamientos comunes.

• Mejora la robustez del sistema.

• Los tipos abstractos de datos permiten lacomprobación de tipos para evitar erroresde tipo en tiempo de ejecución.

Ventajas de los TAD

• Mejora el rendimiento (prestaciones). Parasistemas tipificados, el conocimiento de losobjetos permite la optimización del tiempode compilación.

• Separa la implementación de laespecificación. Permite la modificación ymejora de la implementación sin afectar a lainterfaz pública del tipo abstracto de dato.

• Mejora el rendimiento (prestaciones). Parasistemas tipificados, el conocimiento de losobjetos permite la optimización del tiempode compilación.

• Separa la implementación de laespecificación. Permite la modificación ymejora de la implementación sin afectar a lainterfaz pública del tipo abstracto de dato.

Ventajas de los TAD

• Permite la extensibilidad del sistema. Loscomponentes de software reutilizables sonmás fáciles de crear y mantener.

• Recoge mejor la semántica del tipo. Lostipos abstractos de datos agrupan olocalizan las operaciones y la representaciónde atributos.

• Permite la extensibilidad del sistema. Loscomponentes de software reutilizables sonmás fáciles de crear y mantener.

• Recoge mejor la semántica del tipo. Lostipos abstractos de datos agrupan olocalizan las operaciones y la representaciónde atributos.

Especificación de los TAD

• Objetivo: Describir el comportamiento delTAD

• Partes de la Especificación de un TAD– Datos. Descripción matemática del conjunto de

datos

– Operaciones. Definidas para ese conjunto dedatos

• Objetivo: Describir el comportamiento delTAD

• Partes de la Especificación de un TAD– Datos. Descripción matemática del conjunto de

datos

– Operaciones. Definidas para ese conjunto dedatos

Clasificación de las operaciones

• Para crear objetos– Iniciales

– Constructores

• Para transformar objetos de TAD– Simplificadoras

• Para analizar los elementos del TAD– Analizadoras

• Para crear objetos– Iniciales

– Constructores

• Para transformar objetos de TAD– Simplificadoras

• Para analizar los elementos del TAD– Analizadoras

Especificación de los TAD

• Tipos de Especificación:– Informal (lenguaje natural)

• Para análisis

– Semi-formal (lenguaje natural, axiomas olenguajes de programación)

• Para diseño

– Formal (axiomas o lenguaje de programación)• Para codificación o implementación

• Tipos de Especificación:– Informal (lenguaje natural)

• Para análisis

– Semi-formal (lenguaje natural, axiomas olenguajes de programación)

• Para diseño

– Formal (axiomas o lenguaje de programación)• Para codificación o implementación

Ejemplo: TAD Conjunto

• Realizar una especificación informal del TADConjunto, que incluye números enterospositivos, con las operaciones:– CrearConjunto– Esvacio– Añadir un elemento al conjunto– Pertenece un elemento al conjunto– Retirar un elemento del conjunto– Unión de dos conjuntos– Intersección de dos conjuntos– Inclusión de conjuntos

• Realizar una especificación informal del TADConjunto, que incluye números enterospositivos, con las operaciones:– CrearConjunto– Esvacio– Añadir un elemento al conjunto– Pertenece un elemento al conjunto– Retirar un elemento del conjunto– Unión de dos conjuntos– Intersección de dos conjuntos– Inclusión de conjuntos

Solución al Ejemplo: TAD Conjunto

• Análisis:– Definir tipo de datos

– Descripción de las operaciones

• Diseño:– Definición de valor

– Definición de operadores

• Análisis:– Definir tipo de datos

– Descripción de las operaciones

• Diseño:– Definición de valor

– Definición de operadores

Análisis del problema

• Definición del tipo de datosTAD Conjunto (Especificación deelementos sin duplicidades pueden estar encualquier orden, se usa para representar losconjuntos matemáticos de números enterospositivos con sus operaciones)

• Definición del tipo de datosTAD Conjunto (Especificación deelementos sin duplicidades pueden estar encualquier orden, se usa para representar losconjuntos matemáticos de números enterospositivos con sus operaciones)

Análisis del problema

Descripción de las operaciones:• CrearConjunto: . Crea un conjunto sin elementos

• Añadir(Conjunto, elemento): Comprueba si el elementoforma parte del conjunto, en caso negativo es añadido

• Retirar(Conjunto, elemento): En el caso de que elelemento pertenezca al conjunto es eliminado de este

• Pertenece(Conjunto, elemento): Verifica si el elementoforma parte del conjunto, en cuyo caso devuelve cierto.

Descripción de las operaciones:• CrearConjunto: . Crea un conjunto sin elementos

• Añadir(Conjunto, elemento): Comprueba si el elementoforma parte del conjunto, en caso negativo es añadido

• Retirar(Conjunto, elemento): En el caso de que elelemento pertenezca al conjunto es eliminado de este

• Pertenece(Conjunto, elemento): Verifica si el elementoforma parte del conjunto, en cuyo caso devuelve cierto.

Análisis del problema

Descripción de las operaciones:• Pertenece(Conjunto, elemento): Verifica si el elemento

forma parte del conjunto, en cuyo caso devuelve cierto• Esvacio(Conjunto): Verifica si el conjunto no tiene

elementos, en cuyo caso devuelve cierto• Cardinal(Conjunto): Devuelve el número de elementos del

conjunto• Union(Conjunto, Conjunto): Realiza la operación

matemática de la unión de dos conjuntos. La operacióndevuelve un conjunto con los elementos comunes y nocomunes a los dos argumentos

Descripción de las operaciones:• Pertenece(Conjunto, elemento): Verifica si el elemento

forma parte del conjunto, en cuyo caso devuelve cierto• Esvacio(Conjunto): Verifica si el conjunto no tiene

elementos, en cuyo caso devuelve cierto• Cardinal(Conjunto): Devuelve el número de elementos del

conjunto• Union(Conjunto, Conjunto): Realiza la operación

matemática de la unión de dos conjuntos. La operacióndevuelve un conjunto con los elementos comunes y nocomunes a los dos argumentos

Análisis del problema

Descripción de las operaciones:

• Intersección(Conjunto, Conjunto): Realiza laoperación matemática de la intersección de dosconjuntos. La operación devuelve un conjunto conlos elementos comunes a los dos argumentos.

• Inclusión(Conjunto, Conjunto): Verifica si elprimer conjunto está incluido en el conjuntoespecificado en el segundo argumento, en cuyocaso devuelve cierto.

Descripción de las operaciones:

• Intersección(Conjunto, Conjunto): Realiza laoperación matemática de la intersección de dosconjuntos. La operación devuelve un conjunto conlos elementos comunes a los dos argumentos.

• Inclusión(Conjunto, Conjunto): Verifica si elprimer conjunto está incluido en el conjuntoespecificado en el segundo argumento, en cuyocaso devuelve cierto.

Resultado del Análisis

Diseño del TAD Conjunto

Definición de valor

Abstract typedef < integer, n > Conjunto

Condition Conjunto Є Numeros enterospositivos

Definición de valor

Abstract typedef < integer, n > Conjunto

Condition Conjunto Є Numeros enterospositivos

Diseño del TAD Conjunto

Definición de operador

abstract Conjunto CrearConjunto()

Conjunto MiConjunto = Null;

PostCondition CrearConjunto = MiConjunto;

Definición de operador

abstract Conjunto CrearConjunto()

Conjunto MiConjunto = Null;

PostCondition CrearConjunto = MiConjunto;

Diseño del TAD Conjunto

Definición de operador

Abstract int Pertenece (Conjunto MiConjunto, int Elemento)int i=0, Resultado=0;Precondition MiConjunto != Ø y Elemento Є Números enteros positivosPostCondition

while MiConjunto[i] != Null{

If MiConjunto[i] == Elemento {Pertenece = Resultado=1; exit; // Rompe el ciclo}

i++}return Resultado;

Definición de operador

Abstract int Pertenece (Conjunto MiConjunto, int Elemento)int i=0, Resultado=0;Precondition MiConjunto != Ø y Elemento Є Números enteros positivosPostCondition

while MiConjunto[i] != Null{

If MiConjunto[i] == Elemento {Pertenece = Resultado=1; exit; // Rompe el ciclo}

i++}return Resultado;

Diseño del TAD Conjunto

Definición de operadorabstract Conjunto Añadir( Conjunto MiConjunto, int Elemento)int i=0;PreCondition Elemento Є Números enteros positivosPostCondition

If !Pertenece(MiConjunto, Elemento){/* identifica la primera posición vacía */while ( MiConjunto[i] != Ø)

Añadir = i=i+1;MiConjunto[i] = Elemento;

}return MiConjunto;

Definición de operadorabstract Conjunto Añadir( Conjunto MiConjunto, int Elemento)int i=0;PreCondition Elemento Є Números enteros positivosPostCondition

If !Pertenece(MiConjunto, Elemento){/* identifica la primera posición vacía */while ( MiConjunto[i] != Ø)

Añadir = i=i+1;MiConjunto[i] = Elemento;

}return MiConjunto;

Diseño del TAD Conjunto

Definición de operador

abstract int Cardinal( Conjunto MiConjunto)int NumElementos, i=0;PreCondition MiConjunto != ØPostCondition

while MiConjunto[i] != Nulli=i+1;

Cardinal = NumElementos = i;return NumElementos;

TAREA: Definir los operadores restantes.

Definición de operador

abstract int Cardinal( Conjunto MiConjunto)int NumElementos, i=0;PreCondition MiConjunto != ØPostCondition

while MiConjunto[i] != Nulli=i+1;

Cardinal = NumElementos = i;return NumElementos;

TAREA: Definir los operadores restantes.

Ejemplo de Diseño delTAD RATIONAL

Definición de valor

abstract typedef <integer, integer> RATIONAL;

condition RATIONAL[1] != 0;

Definición de valor

abstract typedef <integer, integer> RATIONAL;

condition RATIONAL[1] != 0;

Diseño del TAD RATIONAL

Definición de operador

abstract RATIONAL makerational (int Num, int Denom)

Precondition Denom != 0;

Postcondition makerational[0] = Num;

makerational[1] = Denom;

Definición de operador

abstract RATIONAL makerational (int Num, int Denom)

Precondition Denom != 0;

Postcondition makerational[0] = Num;

makerational[1] = Denom;

Diseño del TAD RATIONAL

Definición de operador

abstract RATIONAL add (RATIONAL a,

RATIONAL b) /* written a + b */

Postcondition add[1] = a[1] * b[1] ;

add[0] = a[0] * b[1] + b[0] * a[1] ;

Definición de operador

abstract RATIONAL add (RATIONAL a,

RATIONAL b) /* written a + b */

Postcondition add[1] = a[1] * b[1] ;

add[0] = a[0] * b[1] + b[0] * a[1] ;

Diseño del TAD RATIONAL

Definición de operador

abstract RATIONAL mult (RATIONAL a,

RATIONAL b) /* written a * b */

Postcondition mult[0] = a[0] * b[0] ;

mult[1] = a[1] * b[1] ;

Definición de operador

abstract RATIONAL mult (RATIONAL a,

RATIONAL b) /* written a * b */

Postcondition mult[0] = a[0] * b[0] ;

mult[1] = a[1] * b[1] ;

Diseño del TAD RATIONAL

Definición de operador

abstract int equal (RATIONAL a, RATIONAL b)/* written a == b */

Postcondition equal = (a[0] * b[1] == b[0] * a[1] );

Definición de operador

abstract int equal (RATIONAL a, RATIONAL b)/* written a == b */

Postcondition equal = (a[0] * b[1] == b[0] * a[1] );

Secuencias comodefiniciones de valor

• Las especificaciones para diferentes tipos de datos,se pueden realizar mediante– Notación de teoría de conjuntos, y en particular, es útil

usar la notación de secuencias matemáticas

• Una secuencia es un conjunto de elementosordenados

• Una secuencia S se escribe en ocasiones como laenumeración de sus elementos, así:

S = < s0, s1, ..., sn-1 >

• Las especificaciones para diferentes tipos de datos,se pueden realizar mediante– Notación de teoría de conjuntos, y en particular, es útil

usar la notación de secuencias matemáticas

• Una secuencia es un conjunto de elementosordenados

• Una secuencia S se escribe en ocasiones como laenumeración de sus elementos, así:

S = < s0, s1, ..., sn-1 >

Secuencia S

• Si S contiene elementos, se dice que S tiene unalongitud de n

• Se supone la existencia de las funciones:– De longitud len, por lo que len(S) es la longitud de la

secuencia S– first(S), la cual regresa el valor del primer elemento de

S– last(S), que retorna el valor del último elemento de S

• nilseq es una secuencia especial de longitud 0, queno contiene elementos

• first(nilseq) y last(nilseq), no están definidos.

• Si S contiene elementos, se dice que S tiene unalongitud de n

• Se supone la existencia de las funciones:– De longitud len, por lo que len(S) es la longitud de la

secuencia S– first(S), la cual regresa el valor del primer elemento de

S– last(S), que retorna el valor del último elemento de S

• nilseq es una secuencia especial de longitud 0, queno contiene elementos

• first(nilseq) y last(nilseq), no están definidos.

Ejemplos de Definición de Valor

• abstract typedef <<tp>> stp1;

• abstract typedef<tp0, tp1, tp2, ..., tpn>stp2;

• abstract typedef<<tp, n>> stp3;

• abstract typedef <<tp>> stp1;

• abstract typedef<tp0, tp1, tp2, ..., tpn>stp2;

• abstract typedef<<tp, n>> stp3;

Ejemplos de Definición de Valor

• abstract typedef <<tp>> stp1;– stp1 es un TAD cuyos valores son secuencias

de elementos

– stp1 puede ser de una longitud arbitraria

– stp1 contiene elementos del mismo tipo tp

• abstract typedef <<tp>> stp1;– stp1 es un TAD cuyos valores son secuencias

de elementos

– stp1 puede ser de una longitud arbitraria

– stp1 contiene elementos del mismo tipo tp

Ejemplos de Definición de Valor

• abstract typedef<tp0, tp1, tp2, ..., tpn>stp2;• TAD stp2, cuyos valores son secuencias de

longitud fija• Los elementos son de tipos de dato diferentes• Los tipos de dato deberían existir, y si es

necesario se especificaría la definición

• abstract typedef<tp0, tp1, tp2, ..., tpn>stp2;• TAD stp2, cuyos valores son secuencias de

longitud fija• Los elementos son de tipos de dato diferentes• Los tipos de dato deberían existir, y si es

necesario se especificaría la definición

Ejemplos de Definición de Valor

• abstract typedef<<tp, n>> stp3;– stp3 es una secuencia de longitud fija n

– Todos los elementos son del mismo tipo tp

• abstract typedef<<tp, n>> stp3;– stp3 es una secuencia de longitud fija n

– Todos los elementos son del mismo tipo tp

Implementación de los TAD

• Al tener el diseño de un TAD, se escoge lasestructuras de datos para representar cadauno de los objetos abstractos

• Se escribe un modulo (Procedimiento ofunción) en un lenguaje de programación,que simule el funcionamiento de cada unade las operaciones, de acuerdo con suespecificación

• Al tener el diseño de un TAD, se escoge lasestructuras de datos para representar cadauno de los objetos abstractos

• Se escribe un modulo (Procedimiento ofunción) en un lenguaje de programación,que simule el funcionamiento de cada unade las operaciones, de acuerdo con suespecificación

Implementación de los TAD

• La selección de las estructuras de datosdetermina, en muchos casos, la complejidaddel algoritmo que implementa unaoperación

• La selección de las estructuras de datosdetermina, en muchos casos, la complejidaddel algoritmo que implementa unaoperación

Implementación de los TAD

• El lenguaje C, permite la definición denuevos tipos y la declaración de funcionespara realizar operaciones sobre objetos delos tipos

• Pero los datos y las operaciones asociadasNO son declarados juntos como una unidady con un solo nombre

• El lenguaje C, permite la definición denuevos tipos y la declaración de funcionespara realizar operaciones sobre objetos delos tipos

• Pero los datos y las operaciones asociadasNO son declarados juntos como una unidady con un solo nombre

Implementación de los TAD

• En los lenguajes en el que los TAD sepueden implementar como una unidad,éstos reciben nombres distintos:– Turbo Pascal--- unidad, objeto

– Modula-2------- módulo

– Ada------------- paquete

– C++------------ clase

– Java------------ clase

• En los lenguajes en el que los TAD sepueden implementar como una unidad,éstos reciben nombres distintos:– Turbo Pascal--- unidad, objeto

– Modula-2------- módulo

– Ada------------- paquete

– C++------------ clase

– Java------------ clase

Implementación de los TAD

• En C no existe como tal una construccióndel lenguaje para especificar un TAD

• Sin embargo se puede agrupar la interfaz yla representación de los datos en un archivode inclusión: archivo.h

• La implementación de la interfaz, de lafunciones se realiza en el correspondientearchivo.c

• En C no existe como tal una construccióndel lenguaje para especificar un TAD

• Sin embargo se puede agrupar la interfaz yla representación de los datos en un archivode inclusión: archivo.h

• La implementación de la interfaz, de lafunciones se realiza en el correspondientearchivo.c

Implementación de los TAD

“Complejo.h”

• Representación delos datos

• Prototipos de lasoperaciones

“Complejo.c”

• Incluir “Complejo.h”

• Codificación de lasoperaciones

… en Lenguaje C

“Complejo.h”

• Representación delos datos

• Prototipos de lasoperaciones

“Complejo.c”

• Incluir “Complejo.h”

• Codificación de lasoperaciones

Implementación de los TAD

“Complejo.h”

• Representación de losdatos

• Prototipos de lasoperaciones

“Complejo.c”

• Incluir “Rational.h”

• Codificación de lasoperaciones

… en Lenguaje C

“MiPrograma.cpp”#include “Complejo.h”…main(){

Complejo x, y, z;…

}

Se agregan estosarchivos a unarchivo deproyecto enLenguaje C

“Complejo.h”

• Representación de losdatos

• Prototipos de lasoperaciones

“Complejo.c”

• Incluir “Rational.h”

• Codificación de lasoperaciones

“MiPrograma.cpp”#include “Complejo.h”…main(){

Complejo x, y, z;…

}

Se agregan estosarchivos a unarchivo deproyecto enLenguaje C

Ejemplo de Diseño delTAD RATIONAL

Definición de valor

abstract typedef <integer, integer> RATIONAL;

condition RATIONAL[1] != 0;

Definición de valor

abstract typedef <integer, integer> RATIONAL;

condition RATIONAL[1] != 0;

Diseño del TAD RATIONAL

Definición de operador

abstract RATIONAL makerational (int Num, int Denom)

Precondition Denom != 0;

Postcondition makerational[0] = Num;

makerational[1] = Denom;

Definición de operador

abstract RATIONAL makerational (int Num, int Denom)

Precondition Denom != 0;

Postcondition makerational[0] = Num;

makerational[1] = Denom;

Diseño del TAD RATIONAL

Definición de operador

abstract RATIONAL add (RATIONAL a,

RATIONAL b) /* written a + b */

Postcondition add[1] = a[1] * b[1] ;

add[0] = a[0] * b[1] + b[0] * a[1] ;

Definición de operador

abstract RATIONAL add (RATIONAL a,

RATIONAL b) /* written a + b */

Postcondition add[1] = a[1] * b[1] ;

add[0] = a[0] * b[1] + b[0] * a[1] ;

Diseño del TAD RATIONAL

Definición de operador

abstract RATIONAL mult (RATIONAL a,

RATIONAL b) /* written a * b */

Postcondition mult[0] = a[0] * b[0] ;

mult[1] = a[1] * b[1] ;

Definición de operador

abstract RATIONAL mult (RATIONAL a,

RATIONAL b) /* written a * b */

Postcondition mult[0] = a[0] * b[0] ;

mult[1] = a[1] * b[1] ;

Diseño del TAD RATIONAL

Definición de operador

abstract int equal (RATIONAL a, RATIONAL b)/* written a == b */

Postcondition equal = (a[0] * b[1] == b[0] * a[1] );

Definición de operador

abstract int equal (RATIONAL a, RATIONAL b)/* written a == b */

Postcondition equal = (a[0] * b[1] == b[0] * a[1] );

Implementación estructura TADRACIONAL

• La implementación del TAD puede ser encualquier lenguaje y con cualquierestructura de datos que no modifique laespecificación

• En la definición de las operaciones del TADRACIONAL, varias de ellas devuelven unracional

• La implementación del TAD puede ser encualquier lenguaje y con cualquierestructura de datos que no modifique laespecificación

• En la definición de las operaciones del TADRACIONAL, varias de ellas devuelven unracional

Implementación estructura TADRACIONAL

• En el lenguaje C, no es posible devolver unaestructura por lo cual se usará unapuntador a la estructura para poderretornar dicho apuntador.

• La implementación del TAD RACIONALen C sería:

• En el lenguaje C, no es posible devolver unaestructura por lo cual se usará unapuntador a la estructura para poderretornar dicho apuntador.

• La implementación del TAD RACIONALen C sería:

Implementación estructura TADRACIONAL

typedef struct s_rac {

int num;

int den;

} STRUCTRAC;

typedef STRUCTRAC * RACIONAL;

typedef struct s_rac {

int num;

int den;

} STRUCTRAC;

typedef STRUCTRAC * RACIONAL;

Implementación estructura TADRACIONAL

• Se declara la estructura (STRUCTRAC)

• Luego, se declara el apuntador a dichaestructura (RACIONAL) el cual es laimplementación del TAD

• Se declara la estructura (STRUCTRAC)

• Luego, se declara el apuntador a dichaestructura (RACIONAL) el cual es laimplementación del TAD

Implementación estructura TADRACIONAL

• Las operaciones– R_adicion

– R_multiplicacion y

– R_igualdad

• se implementan en base a las operaciones– R_crear y R_destruir

– R_num y R_den

– R_asignarNum y R_asignarDen

• Las operaciones– R_adicion

– R_multiplicacion y

– R_igualdad

• se implementan en base a las operaciones– R_crear y R_destruir

– R_num y R_den

– R_asignarNum y R_asignarDen

Implementación estructura TADRACIONAL

Los prototipos de las operaciones serían:

RACIONAL R_Crear (int x, int y);

/* PRE: y != 0

POST: R_Crear = x , y */

void R_Destruir (RACIONAL R);

/* PRE: ninguna

POST: Libera el espacio ocupado por el racional */

Los prototipos de las operaciones serían:

RACIONAL R_Crear (int x, int y);

/* PRE: y != 0

POST: R_Crear = x , y */

void R_Destruir (RACIONAL R);

/* PRE: ninguna

POST: Libera el espacio ocupado por el racional */

Implementación estructura TADRACIONAL

int R_Num(RACIONAL R)

/* PRE: ninguna

POST: Devuelve el numerador del racional dado */

int R_Den(RACIONAL R)

/* PRE: ninguna

POST: Devuelve el denominador del racional dado */

int R_Num(RACIONAL R)

/* PRE: ninguna

POST: Devuelve el numerador del racional dado */

int R_Den(RACIONAL R)

/* PRE: ninguna

POST: Devuelve el denominador del racional dado */

Implementación estructura TADRACIONAL

RACIONAL R_AsignarNum(RACIONAL R, int z)

/* PRE: ninguna

POST: Devuelve el racional modificado con z

como numerador */

RACIONAL R_AsignarDen(RACIONAL R, int z)

/* PRE: z != 0

POST: Devuelve el racional modificado con z

como denominador */

RACIONAL R_AsignarNum(RACIONAL R, int z)

/* PRE: ninguna

POST: Devuelve el racional modificado con z

como numerador */

RACIONAL R_AsignarDen(RACIONAL R, int z)

/* PRE: z != 0

POST: Devuelve el racional modificado con z

como denominador */

Implementación estructura TADRACIONAL

• Los prototipos se colocan en el archivoRational.h junto con los typedef de laestructura

• Ahora implementando las operacionesadición, multiplicación e igualdad usandoestos prototipos, se tiene:

• Los prototipos se colocan en el archivoRational.h junto con los typedef de laestructura

• Ahora implementando las operacionesadición, multiplicación e igualdad usandoestos prototipos, se tiene:

Implementación estructura TADRACIONAL

RACIONAL R_adicion (RACIONAL R1, RACIONAL R2)

/* PRE: R1 = X1/Y1 y R2=X2/Y2

POST: R_adicion = X1/Y1 + X2/Y2

= (X1*Y2 + X2*Y1) / Y1*Y2 */

{

return( R_Crear(R_Num(R1)*R_Den(R2)+

R_Num(R2)*R_Den(R1),

R_Den(R1)*R_Den(R2) );

}

RACIONAL R_adicion (RACIONAL R1, RACIONAL R2)

/* PRE: R1 = X1/Y1 y R2=X2/Y2

POST: R_adicion = X1/Y1 + X2/Y2

= (X1*Y2 + X2*Y1) / Y1*Y2 */

{

return( R_Crear(R_Num(R1)*R_Den(R2)+

R_Num(R2)*R_Den(R1),

R_Den(R1)*R_Den(R2) );

}

Implementación estructura TADRACIONAL

RACIONAL R_multiplicacion ( RACIONAL R1,

RACIONAL R2)

/* PRE: R1 = X1/Y1 y R2=X2/Y2

POST: R_multiplicacion = X1/Y1 * X2/Y2

= (X1 * X2) / (Y1 * Y2) */

{

return( R_Crear(R_Num(R1)*R_Num(R2),

R_Den(R1)*R_Den(R2) );

}

RACIONAL R_multiplicacion ( RACIONAL R1,

RACIONAL R2)

/* PRE: R1 = X1/Y1 y R2=X2/Y2

POST: R_multiplicacion = X1/Y1 * X2/Y2

= (X1 * X2) / (Y1 * Y2) */

{

return( R_Crear(R_Num(R1)*R_Num(R2),

R_Den(R1)*R_Den(R2) );

}

Implementación estructura TADRACIONAL

int R_igualdad( RACIONAL R1, RACIONAL R2)

/* PRE: R1 = X1/Y1 y R2=X2/Y2

POST: R_igualdad=(X1*Y2 = X2*Y1 ) */

{

return( R_Num(R1)*R_Den(R2) ==

R_Num(R2)*R_Den(R1) );

}

int R_igualdad( RACIONAL R1, RACIONAL R2)

/* PRE: R1 = X1/Y1 y R2=X2/Y2

POST: R_igualdad=(X1*Y2 = X2*Y1 ) */

{

return( R_Num(R1)*R_Den(R2) ==

R_Num(R2)*R_Den(R1) );

}

Implementación estructura TADRACIONAL

RACIONAL R_Crear (int x, int y)

/* PRE: y != 0

POST: R_Crear = x , y */

{

RACIONAL R;

if ((R=(RACIONAL)malloc(sizeof(STRUCTRAC))) != NULL)

{

R->num = x;

R->den = y;

}

return (R);

}

RACIONAL R_Crear (int x, int y)

/* PRE: y != 0

POST: R_Crear = x , y */

{

RACIONAL R;

if ((R=(RACIONAL)malloc(sizeof(STRUCTRAC))) != NULL)

{

R->num = x;

R->den = y;

}

return (R);

}

Implementación estructura TADRACIONAL

void R_Destruir (RACIONAL R)

/* PRE: ninguna

POST: Libera el espacio ocupado por el racional */

{

free(R);

}

void R_Destruir (RACIONAL R)

/* PRE: ninguna

POST: Libera el espacio ocupado por el racional */

{

free(R);

}

Implementación estructura TADRACIONAL

int R_Num(RACIONAL R)

/* PRE: ninguna

POST: Devuelve el numerador del racional dado */

{

return( R->num );

}

int R_Num(RACIONAL R)

/* PRE: ninguna

POST: Devuelve el numerador del racional dado */

{

return( R->num );

}

Implementación estructura TADRACIONAL

int R_Den(RACIONAL R)

/* PRE: ninguna

POST: Devuelve el denominador del racional dado */

{

return (R->den);

}

int R_Den(RACIONAL R)

/* PRE: ninguna

POST: Devuelve el denominador del racional dado */

{

return (R->den);

}

Implementación estructura TADRACIONAL

RACIONAL R_AsignarNum(RACIONAL R, int z)

/* PRE: ninguna

POST: Devuelve el racional modificado con z

como numerador */

{

R->num = z;

return(R);

}

RACIONAL R_AsignarNum(RACIONAL R, int z)

/* PRE: ninguna

POST: Devuelve el racional modificado con z

como numerador */

{

R->num = z;

return(R);

}

Implementación estructura TADRACIONAL

RACIONAL R_AsignarDen(RACIONAL R, int z)

/* PRE: z != 0

POST: Devuelve el racional modificado con z

como denominador */

{

R->den = z;

return(R);

}

RACIONAL R_AsignarDen(RACIONAL R, int z)

/* PRE: z != 0

POST: Devuelve el racional modificado con z

como denominador */

{

R->den = z;

return(R);

}

Tarea: Ejercicios deprogramación

• Diseñe un TAD para los númerosimaginarios (TAD Complejo). Defina lasoperaciones crear, suma, resta, igual, menorque.

• Diseñe un TAD para los númerosimaginarios (TAD Complejo). Defina lasoperaciones crear, suma, resta, igual, menorque.