You are on page 1of 42

Estructuras de Datos y Tipos

Abstractos de Datos

© Zenó
Zenón J. Herná
Hernández Figueroa
This product includes images from Corel GalleryTM Magic 65,000
which are protected by the copyright laws of the U.S.
U.S. Canada and
elsewhere.
elsewhere. Used under licence.
licence.
Estructuras de Datos y Tipos
Abstractos de Datos.
• Estructuras de Datos.
• Clasificación de las Estructuras de Datos.
• Tipos Abstractos de Datos.
• Especificación formal de los tad.
• Tad genéricos.
• Problemas específicos de implementación.
Estructuras de Datos
• Una estructura de
datos es un conjunto
de elementos de
información dotado
de una organización.

Los elementos individuales


reciben el nombre de nodos
Estructuras de Datos y Tipos
Abstractos de Datos.
• Estructuras de Datos.
• Clasificación de las Estructuras de Datos.
• Tipos Abstractos de Datos.
• Especificación formal de los tad.
• Tad genéricos.
• Problemas específicos de implementación.
Clasificación de las estructuras de
datos.
• Una estructura
de datos puede
adoptar una
organización
lineal,
Clasificación de las estructuras de
datos.
• Una es tructura
de datos puede
adoptar una
organización
lineal,
• una jerárquica
Clasificación de las estructuras de
datos.
• Una es tructura
de datos puede
adoptar una
organización
lineal,
• una jerárquica
• o una más
compleja.
Clasificación de las estructuras de
datos.
Estructura
estática

vs

Estructura
dinámica
Clasificación de las estructuras
de datos. Ana
David
Esteban
Pedro
Estructura
lógica
vs Ana
David
Esteban
David
4
1
Esteban Ana 2
Estructura de Pedro Pedro
3
0

Representación

Ana David Esteban Pedro


Clasificación de las estructuras
de datos. Estructuras encadenadas: conjunto de nodos, cada uno de los
cuales incorpora información posicional acerca de otros
miembros de la estructura.

Los nodos son ...

Estructura Se pueden agrupar con otros del


mismo tipo ...

lógica Arrays: agregados de Records: agregados de


elementos del mismo elementos del mismo o

vs
tipo. distintos tipos.

Estructura de
Representación
Se pueden agrupar con otros Se pueden agrupar con otros
del mismo tipo ... del mismo o diferente tipo ...

Tipos simples: numéricos,


caracteres, lógicos, ...

Las unidades básicas se


agrupan para formar ...

Memoria: array de unidades básicas de almacenamiento direccionables.


Estructuras de Datos y Tipos
Abstractos de Datos.
• Estructuras de Datos.
• Clasificación de las Estructuras de Datos.
• Tipos Abstractos de Datos.
• Especificación formal de los tad.
• Tad genéricos.
• Problemas específicos de implementación.
Tipos Abstractos de Datos

Separación

Abstracción
+
Tipo de datos

Encapsulamiento Ocultamiento
Tipos Abstractos de Datos
• Un tad presenta una
interfaz que facilita su
utilización.
Tipos Abstractos de Datos
• Un tad presenta una
interfaz que facilita su
utilización.
• y oculta los detalles
de su
implementación.
Tipos Abstractos de Datos
• Un tad presenta una
interfaz que facilita su
utilización.
• y oculta los detalles
de su
implementación.
• que quedan
encapsulados.
Tipos Abstractos de Datos

• Ejemplo: números complejos.


– Pareja de reales (a,b).
– Parte real + parte imaginaria: a + bi.
– Conjugado(a,b) = (a,-b).
– (a,b) +(c,d) = (a+c,b+d)
– (a,b) * (c,d) = (a*c – b*d, a*d + b*c)
– Realización en Ada.
Estructuras de Datos y Tipos
Abstractos de Datos.
• Estructuras de Datos.
• Clasificación de las Estructuras de Datos.
• Tipos Abstractos de Datos.
• Especificación formal de los tad.
• Tad genéricos.
• Problemas específicos de implementación.
Especificación formal de los tad
especificación números complejos es
define Complejo
operaciones
{constructoras generadoras}
Crear: (real,real) ÷ (Complejo)
{constructoras no generadoras}
Conjugado: (Complejo) ÷ (Complejo)
Suma : (Complejo, Complejo) ÷ (Complejo)
Producto : (Complejo, Complejo) ÷ (Complejo)
{observadoras}
ParteReal : (Complejo) ÷ (real)
ParteImaginaria: (Complejo) ÷ (real)
sea
p, q, r, s 0 real
axiomas
Conjugado(Crear(p,q)) = Crear(p,-q)
Suma(Crear(p,q),Crear(r,s)) = Crear(p+r,q+s)
Producto(Crear(p,q),Crear(r,s)) = Crear(p*r-q*s,p*s+q*r)
ParteReal(Crear(p,q)) = p
ParteImaginaria(Crear(p,q)) = q
fin especificación
Especificación formal de los tad
operaciones
especificación números complejos es
define Complejo {constructoras generadoras}
operaciones
Crear: (real,real) ÷ (Complejo)
{constructoras generadoras}
{constructoras
Crear: (real,real) ÷ (Complejo) no generadoras}
{constructorasConjugado:
no generadoras}
(Complejo) ÷ (Complejo)
Conjugado: (Complejo) ÷ (Complejo)
Suma
Suma : (Complejo, Complejo) ÷ (Complejo)
: (Complejo, Complejo) ÷ (Complejo)
Producto
Producto : (Complejo, : (Complejo,
Complejo) ÷ (Complejo)Complejo) ÷ (Complejo)
{observadoras}{observadoras}
ParteReal : (Complejo) ÷ (real)
ParteReal : (Complejo) ÷ (real)
ParteImaginaria: (Complejo) ÷ (real)
sea ParteImaginaria: (Complejo) ÷ (real)
p, q, r, s 0 real
axiomas
Conjugado(Crear(p,q)) = Crear(p,-q)
La sección operaciones
Suma(Crear(p,q),Crear(r,s))
lista el conjunto de operaciones
= Crear(p+r,q+s)
Producto(Crear(p,q),Crear(r,s)) = Crear(p*r-q*s,p*s+q*r)
que definen el comportamiento
ParteReal(Crear(p,q)) = p del tad
ParteImaginaria(Crear(p,q)) = q
fin especificación
Especificación formal de los tad
especificación números complejos es
define Complejo
operaciones Generadoras
{constructoras generadoras} Constructoras
Crear: (real,real) ÷ (Complejo)
{constructoras no generadoras} No generadoras
Conjugado: (Complejo) ÷ (Complejo)
Suma Operaciones
: (Complejo, Complejo) ÷ (Complejo)
Producto : (Complejo, Complejo) ÷ (Complejo)
{observadoras} Selectoras
ParteReal : (Complejo) ÷ (real)
Observadoras
ParteImaginaria: (Complejo) ÷ (real)
sea No selectoras
p, q, r, s 0 real
axiomas
Conjugado(Crear(p,q)) = Crear(p,-q)
Las operaciones se clasifican en función de si sirven para
Suma(Crear(p,q),Crear(r,s)) = Crear(p+r,q+s)
Producto(Crear(p,q),Crear(r,s)) = Crear(p*r-q*s,p*s+q*r)
crear valores del tad =oppara examinar sus propiedades.
ParteReal(Crear(p,q))
ParteImaginaria(Crear(p,q)) = q
fin especificación
Especificación formal de los tad
operaciones
especificación números naturales es
define Natural
operaciones
{constructoras generadoras}
{constructorasCero : ()
generadoras} ÷ (Natural)
÷ (Natural)
Cero : ()
Sucesor: (Natural) ÷ (Natural)
Sucesor: (Natural) ÷ (Natural)
{constructoras{constructoras
no generadoras} no generadoras}
: (Natural,Natural) ÷ (Natural)
Suma
Suma : (Natural,Natural) ÷ (Natural)
Producto: (Natural,Natural) ÷ (Natural)
{observadoras}Producto: (Natural,Natural) ÷ (Natural)
Menor : (Natural,Natural) ÷ (lógico)
sea
{observadoras}
x,y 0 Natural Menor : (Natural,Natural) ÷ (lógico)
axiomas
Suma(x,Cero) = x
Suma(x,Sucesor(y)) = Sucesor(Suma(x,y))
Generalmente se
Producto(x,Cero) necesita más de una
= Cero operación para
poder generar todos
Producto(x,Sucesor(y)) los valores de un
= Suma(x,Producto(x,y)) tad.
Menor(Cero,Sucesor(x)) = verdadero
Menor(x,Cero) = falso
Menor(Sucesor(x),Sucesor(y)) = Menor(x,y)
fin especificación
Especificación formal de los tad
especificación números complejos es
define Complejo
operaciones
sea
{constructoras generadoras}
0 real
p, q, r,÷ s(Complejo)
Crear: (real,real)
{constructoras
axiomas no generadoras}
Conjugado: (Complejo) ÷ (Complejo)
Suma Conjugado(Crear(p,q))
: (Complejo, Complejo) ÷ (Complejo) = Crear(p,-q)
Producto Suma(Crear(p,q),Crear(r,s))
: (Complejo, Complejo) ÷ (Complejo) = Crear(p+r,q+s)
{observadoras}
Producto(Crear(p,q),Crear(r,s)) = Crear(p*r-q*s,p*s+q*r)
ParteReal : (Complejo) ÷ (real)
ParteReal(Crear(p,q))
ParteImaginaria: (Complejo) ÷ (real) = p
sea ParteImaginaria(Crear(p,q)) = q
p, q,fin 0 real
r, sespecificación
axiomas
Conjugado(Crear(p,q)) = Crear(p,-q)
El conjunto de axiomas tiene el papel de expresar la
Suma(Crear(p,q),Crear(r,s)) = Crear(p+r,q+s)
Producto(Crear(p,q),Crear(r,s)) = Crear(p*r-q*s,p*s+q*r)
semántica del tad = p
ParteReal(Crear(p,q))
ParteImaginaria(Crear(p,q)) = q
fin especificación
Especificación formal de los tad
especificación booleanos es
define Boolean
operaciones
especificación booleanos es
{contructoras generadoras}
define Boolean
operaciones
Verdadero: ()
{contructoras generadoras}
÷ (Boolean)
Verdadero:No() :÷ (Boolean)
(Boolean) ÷ (Boolean)
No : (Boolean) ÷ (Boolean)
{constructoras no generadoras}
{constructoras no generadoras}
Falso: ()
Falso: () ÷ (Boolean)
÷ (Boolean)
O O : (Boolean,Boolean)
: (Boolean,Boolean) ÷ (Boolean) ÷ (Boolean)
Y Y ÷ (Boolean)
: (Boolean,Boolean)
: (Boolean,Boolean) ÷ (Boolean)
sea
sea
x 0 Boolean
axiomas x 0 Boolean
No(No(x)) = x {ecuación de congruencia de la negación}
axiomas
Falso
No(No(x)) = x {ecuación de congruencia de la negación}
= No(Verdadero)
Si el conjunto de generadoras elegido es libre, no hacen
O(x,Verdadero) = Verdadero
O(x,No(Verdadero))= x
falta axiomas
Y(x,Verdadero) = x para explicar las operaciones generadoras.
Y(x,No(x)) = No(Verdadero)
fin especificación
Especificación formal de los tad
especificación números naturales es
define Natural
operaciones
{constructoras generadoras}
Cero : ()
… ÷ (Natural)
Predecesor: (Natural) ÷ (Natural)
Sucesor: (Natural) ÷ (Natural)
{constructoras no generadoras}

Predecesor: (Natural) ÷ (Natural)
Suma : (Natural,Natural) ÷ (Natural)
sea
Producto : (Natural,Natural) ÷ (Natural)
{observadoras} x,y 0 Natural
Menor : (Natural,Natural) ÷ (lógico)
sea definitud
x,y 0 Natural def Predecesor(Sucesor(x))
definitud
axiomas
def Predecesor(Sucesor(x))
axiomas
Suma(x,Cero) … = x
Predecesor(Sucesor(x)) = x
Suma(x,Sucesor(y)) = Sucesor(Suma(x,y))


Predecesor(Sucesor(x)) = x
Las operaciones
Producto(x,Cero) = Cero parciales no están definidas para todo el
rango de valores
Producto(x,Sucesor(y)) de los tipos de sus argumentos.
= Suma(x,Producto(x,y))

Menor(Cero,Sucesor(x)) = verdadero
Menor(x,Cero) = falso
Menor(Sucesor(x),Sucesor(y)) = Menor(x,y)
fin especificación
Estructuras de Datos y Tipos
Abstractos de Datos.
• Estructuras de Datos.
• Clasificación de las Estructuras de Datos.
• Tipos Abstractos de Datos.
• Especificación formal de los tad.
• Tad genéricos.
• Problemas específicos de implementación.
Tad genéricos

• Un tad cuyo comportamiento general se


puede definir sin necesidad de concretar
algunos detalles hasta que se vaya a usar
es un tad genérico.
• Ejemplo: un conjunto.
• Implementación del tad conjunto.
Tad genéricos

• Un tad cuyo comportamiento general se


puede definir sin necesidad de concretar
algunos detalles hasta que se vaya a usar
es un tad genérico.
• Ejemplo: un conjunto.
• Implementación del tad conjunto.
Tad genéricos

Un conjunto queda caracterizado


por sus operaciones, con
independencia del tipo de sus
elementos

A1B

AUB A-B

A B A B A B
Tad genéricos
especificación Conjuntos es
parámetros
tipo TElemento
parámetros
define Conjunto<TElemento>
operaciones

Vacío :
tipo TElemento
{constructoras generadoras}
÷ (Conjunto<TElemento>)
Unitario: (TElemento) ÷ (Conjunto<TElemento>)
Unión define Conjunto<TElemento>
: (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{constructoras no generadoras}
Intersección: (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
Diferencia : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)

La sección de parámetros declara los elementos


{observadoras}
Incluido : (Conjunto<TElemento>,Conjunto<TElemento>) ÷ (Lógico)
Pertenece: (Conjunto<TElemento>,TElemento) ÷ (Lógico)

sea cambiables del tad.


Cardinal : (Conjunto<TElemento>,TElemento) ÷ (Natural)

A, B, C 0 Conjunto<TElemento>
X, Y 0 TElemento
axiomas
Unión(Vacío,A) = A
Unión(Unión(A,B),B) = Unión(A,B)
Unión(Unión(A,B),C) = Unión(Unión(A,C),B)

Intersección(Vacío,A) = Vacío
Intersección(Unión(A,B),B) = B
Intersección(Unión(A,B),C) =
Unión(Intersección(C,A),Intersección(C,B))

Diferencia(A,Vacío) = A
Diferencia(A,Unión(A,B)) = Vacío
Diferencia(Unión(A,B),C) =
Unión(Diferencia(A,C),Diferencia(B,C))

Incluido(A,Vacío) = Falso
Incluido(A,Unión(A,B)) = Verdadero
Incluido(Unión(A,B),C) = Incluido(A,C) v Incluido(B,C)

Pertenece(Vacío,E) = Falso
Pertenece(Unitario(X),Y) = (X = Y)
Pertenece(Unión(A,B),X) = Pertenece(A,X) w Pertenece(B,X)

Cardinal(Vacío) = 0
Cardinal(Unitario(X)) = 1
Cardinal(Unión(A,B)) =
Cardinal(A) + Cardinal(B) - Cardinal(Intersección(A,B))
fin especificación.
Tad genéricos
especificación Conjuntos es
parámetros
tipo TElemento
operaciones
define Conjunto<TElemento>
operaciones

Vacío :
{constructoras generadoras}
{constructoras generadoras}
÷ (Conjunto<TElemento>)
Unitario: (TElemento) ÷ (Conjunto<TElemento>)
Unión Vacío :
: (Conjunto<TElemento>,Conjunto<TElemento>) ÷ (Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
Unitario: (TElemento) ÷ (Conjunto<TElemento>)
{constructoras no generadoras}
Intersección: (Conjunto<TElemento>,Conjunto<TElemento>)
Unión
÷ (Conjunto<TElemento>) : (Conjunto<TElemento>,Conjunto<TElemento>)
Diferencia : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{observadoras}
Incluido : (Conjunto<TElemento>,Conjunto<TElemento>) ÷ (Lógico)
{constructoras no generadoras}
Pertenece: (Conjunto<TElemento>,TElemento) ÷ (Lógico)
Cardinal : (Conjunto<TElemento>,TElemento) ÷ (Natural)
sea Intersección: (Conjunto<TElemento>,Conjunto<TElemento>)
A, B, C 0 Conjunto<TElemento>
X, Y
axiomas
÷ (Conjunto<TElemento>)
0 TElemento

Unión(Vacío,A) = A
Diferencia : (Conjunto<TElemento>,Conjunto<TElemento>)
Unión(Unión(A,B),B) = Unión(A,B)

÷ (Conjunto<TElemento>)
Unión(Unión(A,B),C) = Unión(Unión(A,C),B)

Intersección(Vacío,A) = Vacío
{observadoras}
Intersección(Unión(A,B),B)
Intersección(Unión(A,B),C) =
= B

Incluido : (Conjunto<TElemento>,Conjunto<TElemento>) ÷
Unión(Intersección(C,A),Intersección(C,B))

Diferencia(A,Vacío) = A
(Lógico)
Diferencia(A,Unión(A,B)) = Vacío
Diferencia(Unión(A,B),C) =
Pertenece: (Conjunto<TElemento>,TElemento)
Unión(Diferencia(A,C),Diferencia(B,C)) ÷
Incluido(A,Vacío)
(Lógico)
= Falso
Incluido(A,Unión(A,B)) = Verdadero

Cardinal : (Conjunto<TElemento>,TElemento) ÷ (Natural)


Incluido(Unión(A,B),C) = Incluido(A,C) v Incluido(B,C)

Pertenece(Vacío,E) = Falso
Pertenece(Unitario(X),Y) = (X = Y)
Pertenece(Unión(A,B),X) = Pertenece(A,X) w Pertenece(B,X)

Cardinal(Vacío) La sección de operaciones se desarrolla luego de modo


= 0

normal.
Cardinal(Unitario(X)) = 1
Cardinal(Unión(A,B)) =
Cardinal(A) + Cardinal(B) - Cardinal(Intersección(A,B))
fin especificación.
Tad genéricos
especificación Conjuntos es
parámetros
tipo TElemento
define Conjunto<TElemento>
operaciones
{constructoras generadoras}
Vacío : ÷ (Conjunto<TElemento>)
Unitario: (TElemento) ÷ (Conjunto<TElemento>)
Unión : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{constructoras no generadoras}
Intersección: (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
Diferencia : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{observadoras}
Incluido : (Conjunto<TElemento>,Conjunto<TElemento>) ÷ (Lógico)
Pertenece: (Conjunto<TElemento>,TElemento) ÷ (Lógico)
Cardinal : (Conjunto<TElemento>,TElemento) ÷ (Natural)
sea
A, B, C 0 Conjunto<TElemento>
X, Y 0 TElemento
axiomas
Unión(Vacío,A) = A
Unión(Unión(A,B),B) = Unión(A,B)
axiomas
Unión(Unión(A,B),C) = Unión(Unión(A,C),B)

Unión(Vacío,A)
Intersección(Vacío,A) = Vacío = A
Intersección(Unión(A,B),B) = B
Unión(Unión(A,B),B)
Intersección(Unión(A,B),C) =
Unión(Intersección(C,A),Intersección(C,B))
= Unión(A,B)
Unión(Unión(A,B),C) = Unión(Unión(A,C),B)
Diferencia(A,Vacío) = A
Diferencia(A,Unión(A,B)) = Vacío
Diferencia(Unión(A,B),C) =
Unión(Diferencia(A,C),Diferencia(B,C))

Incluido(A,Vacío) = Falso

La sección de axiomas comienza con los de conguencia…


Incluido(A,Unión(A,B)) = Verdadero
Incluido(Unión(A,B),C) = Incluido(A,C) v Incluido(B,C)

Pertenece(Vacío,E) = Falso
Pertenece(Unitario(X),Y) = (X = Y)
Pertenece(Unión(A,B),X) = Pertenece(A,X) w Pertenece(B,X)

Cardinal(Vacío) = 0
Cardinal(Unitario(X)) = 1
Cardinal(Unión(A,B)) =
Cardinal(A) + Cardinal(B) - Cardinal(Intersección(A,B))
fin especificación.
Tad genéricos
especificación Conjuntos es
parámetros
tipo TElemento
define Conjunto<TElemento>
operaciones
{constructoras generadoras}
Vacío : ÷ (Conjunto<TElemento>)
Unitario: (TElemento) ÷ (Conjunto<TElemento>)
Unión : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{constructoras no generadoras}
Intersección(Vacío,A) = Vacío
Intersección: (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
Intersección(Unión(A,B),B) = B
Diferencia : (Conjunto<TElemento>,Conjunto<TElemento>)
÷ (Conjunto<TElemento>)
{observadoras}
Intersección(Unión(A,B),C) =
Incluido : (Conjunto<TElemento>,Conjunto<TElemento>) ÷ (Lógico)
Pertenece: (Conjunto<TElemento>,TElemento) ÷ (Lógico)
Unión(Intersección(C,A),Intersección(C,B))
Cardinal : (Conjunto<TElemento>,TElemento) ÷ (Natural)
sea
A, B, C 0 Conjunto<TElemento>
X, Y 0 TElemento
axiomas
Diferencia(A,Vacío) = A
Unión(Vacío,A) = A
Unión(Unión(A,B),B) = Unión(A,B)
Diferencia(A,Unión(A,B)) = Vacío
Unión(Unión(A,B),C) = Unión(Unión(A,C),B)

Diferencia(Unión(A,B),C)
Intersección(Vacío,A) = Vacío
Intersección(Unión(A,B),B) = B
=
Unión(Diferencia(A,C),Diferencia(B,C))
Intersección(Unión(A,B),C) =
Unión(Intersección(C,A),Intersección(C,B))

Diferencia(A,Vacío) = A
Diferencia(A,Unión(A,B)) = Vacío
...
Diferencia(Unión(A,B),C) =
Unión(Diferencia(A,C),Diferencia(B,C))

Incluido(A,Vacío) = Falso
Incluido(A,Unión(A,B)) = Verdadero
Incluido(Unión(A,B),C) = Incluido(A,C) v Incluido(B,C)

… Y continúa con el resto.


Pertenece(Vacío,E) = Falso
Pertenece(Unitario(X),Y) = (X = Y)
Pertenece(Unión(A,B),X) = Pertenece(A,X) w Pertenece(B,X)

Cardinal(Vacío) = 0
Cardinal(Unitario(X)) = 1
Cardinal(Unión(A,B)) =
Cardinal(A) + Cardinal(B) - Cardinal(Intersección(A,B))
fin especificación.
Tad genéricos

• Un tad cuyo comportamiento general se


puede definir sin necesidad de concretar
algunos detalles hasta que se vaya a usar
es un tad genérico.
• Ejemplo: un conjunto.
• Implementación del tad conjunto.
Tad genéricos

• Como estructura de representación para el


tad conjunto se va a usar una lista
encadenada en memoria dinámica.
Elem1 Elem2 ... ElemN
N

NumElementos Sig
Elementos Elemento

• Realización en Ada.
Estructuras de Datos y Tipos
Abstractos de Datos.
• Estructuras de Datos.
• Clasificación de las Estructuras de Datos.
• Tipos Abstractos de Datos.
• Especificación formal de los tad.
• Tad genéricos.
• Problemas específicos de implementación.
Problemas específicos de
implementación.
• La mayoría están relacionados con el uso
de memoria dinámica:
– Inicialización.
– Destrucción.
– Asignación.
– Comparación.
Problemas específicos de
implementación. Inicialización.
• Puede ser necesario inicializar un tad para que
adopte un valor apropiado antes de poder
usarlo.
– Procedimiento de Inicialización/constructor.
– Ada inicializa todos los punteros a Null de forma
automática y el resto de los campos se pueden
inicializar en la definición del tipo.
– No obstante, los tipos Controlled pueden tener un
procedimiento Initialize para realizar inicializaciones
adicionales.
Problemas específicos de
implementación. Destrucción.
• Los recursos ocupados por una variable
deben liberarse cuando ésta acaba su ciclo
de vida.
• Si parte de la estructura está en memoria
dinámica es necesario usar un
procedimiento de finalización/destructor.
• Se tiende a incorporar a los lenguajes
mecánismos de garbage collection.
Problemas específicos de
implementación. Asignación.
A A1 A2 ... AN
N
B B1 B2 ... BM
M

B := A;

A A1 A2 ... AN
N
B B1 B2 ... BM
N

Posible resultado de una asignación no controlada


Problemas específicos de
implementación. Asignación.
• El control de la asignación debe combinar
la copia “profunda” de la fuente con la
destrucción del destino.
• En los lenguajes que incorporan un
garbage collector la destrucción del
destino es innecesaria.
Problemas específicos de
implementación. Asignación.
Paso 1: Temp := A Paso 2: Adjust(Temp) Paso 3: F inalize(B)
A1 A2 ... A1 A2 ... A1 A2 ...
A N
A N
A N
A1 A2 ... A1 A2 ...
Temp N
Temp N
Temp N

B M
B1 B2 ... B M
B1 B2 ... B M

Pasos de una asignación controlada (B := A) en Ada en el peor caso


Paso 4: B := Temp Paso 5: Adjust(B) Paso 6: F inalize(Temp)
A1 ... A1 A2 ... A1 A2 ...
A N
A2 A N
A N

A1 A2 ... A1 A2 ...
Temp N
Temp N
Temp N

B B N
A1 A2 ... B N
A1 A2 ...
N
Problemas específicos de
implementación. Comparación.
A 23 12 25
3

B 23 12 25
3

¿Son iguales?

Es necesaria una comparación “en profundidad”

You might also like