Documentos de Académico
Documentos de Profesional
Documentos de Cultura
9-Calculo de Objetos
9-Calculo de Objetos
Ingredientes
§ Objetos como única estructura computacional.
§ Los objetos son una colección de atributos nombrados
(registros).
§ Todos los atributos son métodos.
§ Cada método tiene una única variable ligada que representa a
self (this) y un cuerpo que produce un resultado.
§ Los objetos proveen dos operaciones:
§ envı́o de mensaje (invocación de un método)
§ redefinición de un método
Sintaxis
o, b ::“ x variable
| rli “ ςpxi qbi iP1..n s objeto
| o.l selección / envı́o de mensaje
| o.l Ø ςpxqb redefinición de método
Un objeto
def
o “ rl1 “ ςpx1 qr s, l2 “ ςpx2 qx2 .l1 s
Escribimos
def
o “ rl1 “ r s, l2 “ ςpx2 qx2 .l1 s
en lugar de
def
o “ rl1 “ ςpx1 qr s, l2 “ ςpx2 qx2 .l1 s
Sintaxis - Variables libres
xtc{xu “c
ytc{xu “y if x ‰ y
prli “ ςpxi qbiP1..n
i sqtc{xu “ rli “ pςpxi qbi qtc{xuiP1..n s
po.lqtc{xu “ potc{xuq.l
po.l Ø ςpyqbqtc{xu “ potc{xuq.l Ø ppςpyqbqtc{xuq
pςpyqbqtc{xu “ ςpy 1 qpbty 1 {yutc{xuq
if y 1 R fvpςpyqbq Y fvpcq Y txu
Equivalencia de términos (”)
Reducción big-step ÝÑ
[Obj]
v ÝÑ v
[Obj]
“r s
hkkkikkkj
o ÝÑ o r sto{xu ÝÑ r s
[Sel]
“o.a
hkkkkkikkkkkj
o ÝÑ o px.aqto{xu ÝÑ r s
[Sel]
ra “ r s, l “ ςpxqx.as .l ÝÑ rs
loooooooooooomoooooooooooon
o
Ejemplos pra “ r s, l “ ςpxqx.as.l Ø ςpyqr sq.l ÝÑ ...
[Obj] [Obj]
o ÝÑ o “r s
[Upd]
hkkkikkkj
u ÝÑ ra “ r s, l “ r ss r stu{xu ÝÑ r s
[Sel]
pra “ r s, l “ ςpxqx.as .l Ø ςpyqr sq .l ÝÑ r s
loooooooooooomoooooooooooon
o
loooooooooooooooooooooomoooooooooooooooooooooon
u
Ejemplos ra “ ςpxqx.as.a ÝÑ ...
..
.
[Sel]
“o.a
[Obj]
hkkkikkkj
o ÝÑ o x.ato{xu ÝÑ
[Sel]
ra “ ςpxqx.as .a ÝÑ
looooooomooooooon
o
M ::“ M N | λx.M | x
§ Idea:
§ Representar a una función como un objeto
rarg “ . . . , val “ . . .s.
§ Al aplicar una función, primero se asigna el valor del
argumento al atributo arg y luego se envı́a el mensaje val que
evalúa el cuerpo de la función.
§ pf vq se traduce en pof .arg :“ ov q.val
Codificación del cálculo lambda J K : M Ñ a
def
JxK “x
def
JM N K “ pJM K.arg :“ JN Kq.val
def
Jλx.M K “ r val “ ςpyqJM Kty.arg{xu,
arg “ ςpyqy.arg s y R fvpM q
pλx.xqv
def
Jλx.xK “ rval “ ςpyqJxKty.arg{xu, arg “ ςpyqy.args
“ rval “ ςpyqxty.arg{xu, arg “ ςpyqy.args
“ rval “ ςpyqy.arg, arg “ ςpyqy.args
def
Jpλx.xq M K “ pJλx.xK.arg :“ JM Kq.val
“ prval “ ςpxqx.arg, arg “ ςpxqx.args.
arg :“ JM Kq.val
ÝÑ JM K
ςpyqJλx.M K
Notación
§ λpxqM en lugar de Jλx.M K
§ M pN q en lugar de JM N K
Ejemplo: Punto en el plano
def
CompT “ r eq “ ςptqλpxqλpyqpx.comppyqq ““ 0,
lt “ ςptqλpxqλpyqpx.comppyqq ă 0 s
(Stateless) Traits
def
o “ new ptq
« rli “ ςpsqt.li psqiP1..n s
« rli “ ςpyi qbi iP1..n s
(Stateless) Traits
def
CompT “ r eq “ ςptqλpxqλpyqpx.comppyqq ““ 0,
lt “ ςptqλpxqλpyqpx.comppyqq ă 0 s
def
new “ λpzqrli “ ςpsqz.li psqiP1..n s
r eq “ ςpsqCompT.eqpsq
new pCompTq«
lt “ ςpsqCompT.ltpsq s
r eq “ ςpsqλpyq ps.comppyqq ““ 0,
«
lt “ ςpsqλpyq ps.comppyqq ă 0 s
def
Contador “ r new “ ςpzqr v “ ςpsqz.vpsq,
inc “ ςpsqz.incpsq,
get “ ςpsqz.getpsqs,
v “ λpsq0,
inc “ λpsqs.v :“ s.v ` 1,
get “ λpsqs.v ]
Representando Herencia
§ Sea la clase
def
c “ r new “ ςpzqrli “ ςpsqz.li psqiP1..n s,
li “ λpsqbi iP1..n s