Compuestos
vs
Clases
TIPOS
ABSTRACTOS
• Qué
es
un
TAD?
– Un
TAD
define
un
conjunto
de
valores
a
traves
de
operaciones
que
puede
realizarse
sobre
ellos
• Qué
es
un
Epo
compuesto?
3
puntos
– Mecanismo
que
provee
el
leng
de
especificación
para
definir
TADs
=>
Especificar
las
OPERACIONES
• Y
uso
observadores
como
mecanismo
ARTIFICIAL
para
hablar
de
VALORES
• Clase:
Forma
de
programar
un
TAD
en
Java
– REPRESENTACION
del
TAD
– Operaciones
del
TAD
=>
Metodos
– Valores
=>
Campos/variables
de
instancia
(representación)
Invariantes
de
TC
• Invariante
del
Tipo
Compuesto?
– Predicado
sobre
los
OBSERVADORES
– Habla
de
la
“consistencia”
de
los
valores
– Es
SIEMPRE
verdadero
• Problema
X
– Require
P
(&&
Inv)
– Aseguramos
Q
(&&
Inv)
Invariante
de
representación
• Que
es
InvRep?
– Vive
en
la
implementación
(campos
de
una
clase)
– Condiciones
sobre
los
campos
– NADA
QUE
VER
CON
Tipo
Compuesto
– Vale
SIEMPRE?
• Se
puede
asumir
en
la
precondicion
de
cada
metodo
• Se
puede
romper
en
el
medio
• Hay
que
GARANTIZAR
que
valga
al
FINAL
Predicado
de
Abstracción
• Abs(c:
C,
t:
T)
:
predicado
– Que
asumo?
Invariante
de
t
vale
(OBVIO!
Porque
SIEMPRE
vale)
– Requiere
InvRep(C)
• Porque
queremos
mapear
un
objeto
en
un
estado
consistente
de
C
con
uno
Epo
compuesto.
– Yo
implemento
un
metodo
“M”
que
es
solucion
de
un
• problema
M
• Require
algo
(en
funcion
de
obs)
• Asegura
algo(en
funcion
de
obs)
– Abs
me
dice
que
mi
implementación
que
usa
campos
de
una
clase
C
es
solucion
de
un
problema
especificado
con
observadores
de
un
TC
Qué
hace
el
ABS
• Qué
me
conecta
la
implementación
(usando
una
clase
“C”)
de
un
TAD
con
su
especificación
(usando
un
Tipo
Compuesto
“T”)?
– Abs(c:
C,
t:
T)
y
“conecta”
observadores
con
campos
– Dice
como
se
calculan
los
observadores
usando
los
campos