Está en la página 1de 12

Programación II

Definición de T.A.D.

Prog. 2 - 2022 1
Tipo abstracto de datos (TAD)
Un TDA es básicamente es un conjunto de valores,
provisto de un conjunto finito de operaciones y
propiedades que determinan inequívocamente su
comportamiento
•Notación formal
•Modelo matemático
•Abstracto: su implementación es irrelevante
•La manipulación de los objetos de un tipo solo depende del
comportamiento descrito en su especificación y es independiente de
su implementación (Xavier Gutiérrez)

Una especificación debe ser:

MINIMA GENERAL LEGIBLE NO AMBIGUA


Prog. 2 - 2022 2
Mecanismos de Abstracción
 Procedimientos y Funciones
 Ocultar la información

 Reutilización de códigos
 Módulos
 Tipos Abstractos de Datos
 Definición de Estructuras de Datos

 Operaciones de mantenimiento

 Protección de la información

 Permitir instancias múltiples del tipo

 Objetos

Prog. 2 - 2022 3
Especificación
Proporciona una descripción formal de un concepto
Ventajas:
a) Evita ambigüedades en el uso de lenguaje de una
especificación informal
b) La definición es independientemente de la
representación de los datos
c) Especificaciones formales pueden ser procesadas por un
computador
d) Establece una descripción formal de un concepto que
puede ser usado para establecer si una implementación es
correcta por medio de su evaluación con respecto a la
especificación.
Prog. 2 - 2022 4
•1. Determinar, ante un problema, los objetos candidatos
a tipos de datos, estén o no estén en el lenguaje de
partida.
•2. Identificar las operaciones básicas, primitivas entre
dichos objetos.
•3. Especificar dichas operaciones
•4. Construir un programa, que usando estos tipos y estas
operaciones resuelva el problema original.
•5. Implementar los tipos y operaciones que no estén en
el lenguaje de partida, con los elementos de dicho
lenguaje
•6. Determinar la eficiencia de la implementación
Prog. 2 - 2022 5
Especificación: Método algebraico

Una especificación para un tipo “d” tiene una


descripción sintáctica y una descripción
semántica; la especificación sintáctica define
los nombres, dominios y co-dominios de la
operaciones de “d” , mientras que la
especificación semántica contiene un
conjunto de axiomas, en forma de ecuaciones,
relacionando las operaciones del tipo “d”.

Prog. 2 - 2022 6
Axiomas
1. Existe un elemento “a”, tal que todos los otros elementos
de la estructura son accesibles desde el:

∀x(Ac(a, x))
2. Para todo elemento “x” e “y”, “y” es accesible desde “x”, si
y solo si “x” es igual a “y” o existe algún elemento “z” tal
que “z” es next to “x” e “y” es accesible desde “z”:

∀x, y (Ac(x, y) ⇔ x = y ∨ ∃z ((next(x) = z) ∧


Ac(z, y))

Prog. 2 - 2022 7
3. Elementos diferentes no pueden tener sucesores
comunes:

∀ x, y, z(((next(x) = y) ∧ (next(z) = y))  (x = z))


4. No existen ciclos en la estructura:

∀ x, y((x ≠ y ∧ Ac(x, y))  ¬Ac(y, x))

Prog. 2 - 2022 8
Especificación: Método algebraico

Ventajas:
• Es lo suficientemente rigurosa como para permitir una
prueba de que una realización particular de la estructura de
datos esta de acuerdo con la especificación.
• Es fácil de leer y comprender, facilitando ası una
verificación informal del hecho de que esta de acuerdo con
las intenciones de su creador.
• Es declarativa, evitando ası detalles de programación y
dependencia de lenguaje.
• Es una descripción razonablemente intuitiva del
comportamiento de varias estructuras
Prog. 2 - 2022 9
Ejemplo Definición sintáctica

S = {Nat,Bool}
Simbolos de operaciones:  = {Z, F, V, SUC,
PRED,MNOR}
Z : → Nat
F : → Bool
V : → Bool
SUC : Nat → Nat
PRED : Nat → Nat
MNOR : Nat × Nat → Bool
Prog. 2 - 2022 10
Modelo semántico
ANat = Conjunto de los naturales({0, 1, 2, ........})
ABool = Conjunto de valores lógicos({Falso, Verdadero})
ZA = Constante 0 (cero)
FA = Constante Falso
VA = Constante Verdadero
SUCA = Función sucesor: [n ∈ N → SUCA(n) = n + 1]
PREDA = Función predecesor: Para n ∈ N
PREDA(n) = n si n = 0
PREDA (n) = n − 1 si n ≠ 0
MNORA = Función lógica < (menor que)
Prog. 2 - 2022 11
structureTABLE(STRING)
declare
NEW()→ table
ADD(table, string, int) → table
DELETE(table, string) → table
IS IN(string, table) → boolean
EV AL(table, string) → int
IS EMPTY (table) → boolean
SIZE(table) → int
Para todo t ∈ TABLE, i ∈ int, s1, s ∈ STRING let
EV AL(NEW(), s1) ::= 0
EV AL(ADD(t, s, i), s1) ::= if s = s1 then i else EV AL(t, s1)
IS IN(NEW(), s) ::= false
IS IN(ADD(t, s1, i), s)) ::= (s = s1)|IS IN(s, t)
SIZE(NEW()) ::= 0
SIZE(ADD(t, s1, i)) ::= if IS IN(t, s1) then SIZE(t) else 1 + SIZE(t)
IS EMPTY (t) ::= (SIZE(t) = 0)
DELETE(NEW(), s) ::= NEW()
DELETE(ADD(t, s1, i), s) ::= if s = s1 then DELETE(t, s1)
else ADD(DELETE(t, s), s1, i)
Prog. 2 - 2022 12

También podría gustarte