Está en la página 1de 150

Recorderis: Abstracci

on de datos
Principios de la POO
Herencia
Un modelo OO

Modelos y Paradigmas de Programacion


Programacion Orientada a Objetos (1)
Juan Francisco Daz Frias

Maestra en Ingeniera, Enfasis


en Ingeniera de Sistemas y Computaci
on
Universidad del Valle, Cali, Colombia
Escuela de Ingeniera de Sistemas y Computaci
on,
home page: http://eisc.univalle.edu.co/
jdiaz@univalle.edu.co

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Plan
1

Recorderis: Abstraccion de datos


TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Coleccion

Principios de la POO

Herencia

Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Plan
1

Recorderis: Abstraccion de datos


TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Coleccion

Principios de la POO

Herencia

Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Plan
1

Recorderis: Abstraccion de datos


TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Coleccion

Principios de la POO

Herencia

Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Plan
1

Recorderis: Abstraccion de datos


TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Coleccion

Principios de la POO

Herencia

Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Abstraccion de datos

Definicion
Una abstraccion de datos es una manera de usar datos en forma
abstracta, i.e., podemos usar los datos sin tener en cuenta su
implementacion.
Ventajas
Usar la abstraccion suele ser mucho m
as sencillo
Razonar sobre los datos puede ser m
as sencillo
El sistema puede asegurar que los datos se utilicen de la
manera correcta

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Abstraccion de datos

Definicion
Una abstraccion de datos es una manera de usar datos en forma
abstracta, i.e., podemos usar los datos sin tener en cuenta su
implementacion.
Ventajas
Usar la abstraccion suele ser mucho m
as sencillo
Razonar sobre los datos puede ser m
as sencillo
El sistema puede asegurar que los datos se utilicen de la
manera correcta

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Plan
1

Recorderis: Abstraccion de datos


TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Coleccion

Principios de la POO

Herencia

Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Tipos Abstractos de datos (1)

Definicion TAD
Un conjunto de valores junto con un conjunto de operaciones sobre
esos valores. Puede ser abierto o seguro.
Ejemplo: Pila abierta
fun
fun
fun
fun

{PilaNueva} nil end


{Colocar S E} E|S end
{Sacar S E} case S of X|S1 then E=X S1 end end
{EsVac
a S} S==nil end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Tipos Abstractos de datos (2)

Seguridad
proc {NuevoEmpacador ?Envolver ?Desenvolver}
Llave={NewName} in
fun {Envolver X}
{Chunk.new envolver(Llave:X)}
end
fun {Desenvolver W}
try W.Llave catch _ then raise
error(desenvolver(W)) end end
end
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Tipos Abstractos de datos (3)


Ejemplo: Pila segura
local Envolver Desenvolver in
{NuevoEmpacador Envolver Desenvolver}
fun {PilaNueva} {Envolver nil} end
fun {Colocar S E} {Envolver E|{Desenvolver S}}
end
fun {Sacar S E}
case {Desenvolver S} of X|S1 then E=X
{Envolver S1} end
end
fun {EsVac
a S} {Desenvolver S}==nil end
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Otras maneras de organizar abstracciones


Seg
un caractersticas . . .
Del modelo declarativo: Abierto o Seguro.
Del modelo con estado: Empaquetado o no, Con estado o no.
Abierto, declarativo,
y desempaquetado

El estilo, abierto y declarativo, normal


tal como se usa en Prolog y Scheme

Seguro, declarativo,
y desempaquetado

El estilo TAD

Seguro, declarativo,
y empaquetado

El estilo APD con objetos


declarativos

Seguro, con estado,


y empaquetado

El estilo APD con objetos con estado,


tal como se usa en Smalltalk y Java

Seguro, con estado,


y desempaquetado

El estilo TAD con valores con estado

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Pila declarativa, empaquetada, y segura


local
fun {ObjetoPila S}
fun {Colocar E} {ObjetoPila E|S} end
fun {Sacar ?E}
case S of X|S1 then E=X {ObjetoPila S1}
end end
fun {EsVac
a} S==nil end
in pila(colocar:Colocar sacar:Sacar
esVac
a:EsVac
a) end
in
fun {PilaNueva} {ObjetoPila nil} end
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Pila con estado, empaquetada, y segura

fun {PilaNueva}
C={NewCell nil}
proc {Colocar E} C:=E|@C end
fun {Sacar} case @C of X|S1 then C:=S1 X end
end
a} @C==nil end
fun {EsVac
in
pila(colocar:Colocar sacar:Sacar
esVac
a:EsVac
a)
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Pila con estado, empaquetada, y segura (con


procedimiento de despacho)
fun {PilaNueva}
C={NewCell nil}
proc {Colocar E} C:=E|@C end
fun {Sacar} case @C of X|S1 then C:=S1 X end
end
fun {EsVac
a} @C==nil end
in
proc {$ Msj}
case Msj
of colocar(X) then {Colocar X}
[] sacar(?E) then E={Sacar}
a}
a(?B) then B={EsVac
[] esVac
end
end
end
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Pila con estado, desempaquetada, y segura


declare
local Envolver Desenvolver
{NuevoEmpacador Envolver Desenvolver}
fun {PilaNueva} {Envolver {NewCell nil}} end
proc {Colocar S E} C={Desenvolver S} in C:=E|@C
end
fun {Sacar S}
C={Desenvolver S} in case @C of X|S1 then
C:=S1 X end end
fun {EsVac
a S} @{Desenvolver S}==nil end
in
Pila=pila(nueva:PilaNueva colocar:Colocar
sacar:Sacar esVac
a:EsVac
a)
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Plan
1

Recorderis: Abstraccion de datos


TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Coleccion

Principios de la POO

Herencia

Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

El estilo Objeto
Objeto
Una abstraccion de datos empaquetada se denomina abstraccion
procedimental de datos, o APD. Y define una entidad llamada
objeto.
Ejecucion de un objeto
Una operacion se ejecuta invocando al objeto e informandole
cual operacion realizar: enviar un mensaje al objeto; Ojo.
No lo es, en el sentido que lo hemos estudiado.
Una invocacion a un objeto es sincr
onica.
Popularidad
Modularidad y estructuracion de programas.
Facilidad con que el estilo objeto soporta polimorfismo y
herencia. Juan Francisco Daz Frias
Modelos y Paradigmas de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

El estilo Objeto
Objeto
Una abstraccion de datos empaquetada se denomina abstraccion
procedimental de datos, o APD. Y define una entidad llamada
objeto.
Ejecucion de un objeto
Una operacion se ejecuta invocando al objeto e informandole
cual operacion realizar: enviar un mensaje al objeto; Ojo.
No lo es, en el sentido que lo hemos estudiado.
Una invocacion a un objeto es sincr
onica.
Popularidad
Modularidad y estructuracion de programas.
Facilidad con que el estilo objeto soporta polimorfismo y
herencia. Juan Francisco Daz Frias
Modelos y Paradigmas de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

El estilo Objeto
Objeto
Una abstraccion de datos empaquetada se denomina abstraccion
procedimental de datos, o APD. Y define una entidad llamada
objeto.
Ejecucion de un objeto
Una operacion se ejecuta invocando al objeto e informandole
cual operacion realizar: enviar un mensaje al objeto; Ojo.
No lo es, en el sentido que lo hemos estudiado.
Una invocacion a un objeto es sincr
onica.
Popularidad
Modularidad y estructuracion de programas.
Facilidad con que el estilo objeto soporta polimorfismo y
herencia. Juan Francisco Daz Frias
Modelos y Paradigmas de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Plan
1

Recorderis: Abstraccion de datos


TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Coleccion

Principios de la POO

Herencia

Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Polimorfismo
En lenguaje natural. . .
Es la capacidad de una entidad de tomar varias formas.
En el contexto de abstraccion de datos
Una operacion es polimorfica si funciona correctamente con
argumentos de diferentes tipos.
Estilo Objeto vs TAD
El polimorfismo es m
as f
acil de expresar en el estilo Objeto.
Aunque se puede expresar en el estilo TAD, es mas incomodo
pues requiere de modulos de primera clase.
El estilo TAD ofrece mayor libertad para hacer
implementaciones eficientes.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Polimorfismo
En lenguaje natural. . .
Es la capacidad de una entidad de tomar varias formas.
En el contexto de abstraccion de datos
Una operacion es polimorfica si funciona correctamente con
argumentos de diferentes tipos.
Estilo Objeto vs TAD
El polimorfismo es m
as f
acil de expresar en el estilo Objeto.
Aunque se puede expresar en el estilo TAD, es mas incomodo
pues requiere de modulos de primera clase.
El estilo TAD ofrece mayor libertad para hacer
implementaciones eficientes.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Polimorfismo
En lenguaje natural. . .
Es la capacidad de una entidad de tomar varias formas.
En el contexto de abstraccion de datos
Una operacion es polimorfica si funciona correctamente con
argumentos de diferentes tipos.
Estilo Objeto vs TAD
El polimorfismo es m
as f
acil de expresar en el estilo Objeto.
Aunque se puede expresar en el estilo TAD, es mas incomodo
pues requiere de modulos de primera clase.
El estilo TAD ofrece mayor libertad para hacer
implementaciones eficientes.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Plan
1

Recorderis: Abstraccion de datos


TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Coleccion

Principios de la POO

Herencia

Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Ejemplo: un tipo Coleccion

Tipo Coleccion
Tres operaciones:
agregar para a
nadir un elemento,
extraer para sacar un elemento, y
a para comprobar si la colecci
on est
a vaca.
esVac

Implementacion
En estilo TAD, y
en estilo Objeto.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Ejemplo: un tipo Coleccion

Tipo Coleccion
Tres operaciones:
agregar para a
nadir un elemento,
extraer para sacar un elemento, y
a para comprobar si la colecci
on est
a vaca.
esVac

Implementacion
En estilo TAD, y
en estilo Objeto.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Implementacion tipo Coleccion en estilo TAD (1)


Usando una pila con estado, desempaquetada. . .
local Envolver Desenvolver
{NuevoEmpacador Envolver Desenvolver}
fun {NuevaColecci
on} {Envolver {Pila.nueva}}
end
proc {Agregar C X} S={Desenvolver C} in
{Pila.colocar S X} end
fun {Extraer C} S={Desenvolver C} in
{Pila.sacar S} end
fun {EsVac
a C} {Pila.esVac
a {Desenvolver C}}
end
in
on
on(nueva:NuevaColecci
on=colecci
Colecci
a)
a:EsVac
agregar:Agregar extraer:Extraer esVac
end
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Implementacion tipo Coleccion en estilo TAD (2)

Ejemplo de uso
C={Colecci
on.nueva}
{Colecci
on.agregar C 1}
{Colecci
on.agregar C 2}
on.extraer C}}
{Browse {Colecci
on.extraer C}}
{Browse {Colecci

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Implementacion tipo Coleccion en estilo Objeto


Usando una pila con estado, empaquetada. . .
fun {NuevaColecci
on}
S={PilaNueva}
proc {Agregar X} {S.colocar X} end
fun {Extraer} {S.sacar} end
fun {EsVac
a} {S.esVac
a} end
in
colecci
on(agregar:Agregar extraer:Extraer
esVac
a:EsVac
a)
end

Ejemplo de uso
C={NuevaColecci
on}
{C.agregar 1} {C.agregar 2}
{Browse {C.extraer}}
{Browse {C.extraer}}
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Extension tipo Coleccion en estilo TAD (1)

Operacion uni
on
on C1 C2}:todos los elementos de C2 se
on.uni
{Colecci
agregan a C1, dejando C2 vaca.

Abstraccion de control DoUntil


proc {DoUntil BF S}
if {BF} then skip else {S} {DoUntil BF S} end
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Extension tipo Coleccion en estilo TAD (1)

Operacion uni
on
on C1 C2}:todos los elementos de C2 se
on.uni
{Colecci
agregan a C1, dejando C2 vaca.

Abstraccion de control DoUntil


proc {DoUntil BF S}
if {BF} then skip else {S} {DoUntil BF S} end
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Extension tipo Coleccion en estilo TAD (2)


Implementacion de uni
on
local Envolver Desenvolver
...
proc {Uni
on C1 C2}
S1={Desenvolver C1} S2={Desenvolver C2} in
{DoUntil fun {$} {Pila.esVac
a S2} end
proc {$} {Pila.colocar S1 {Pila.sacar S2}}
end}
end
in
Colecci
on=colecci
on(... uni
on:Uni
on)
end

Esta implementacion utiliza tanto la representacion interna de C1


como la de C2
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Extension tipo Coleccion en estilo TAD (3)

on usando s
olo las interfaces
Implementacion de uni
local Envolver Desenvolver
...
proc {Uni
on C1 C2}
{DoUntil fun {$} {Colecci
on.esVac
a C2} end
proc {$} {Colecci
on.agregar C1
{Colecci
on.extraer C2}} end}
end
in
Colecci
on=colecci
on(... uni
on:Uni
on)
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Extension tipo Coleccion en estilo TAD (4)

Ejemplo de uso
C1={Colecci
on.nueva} C2={Colecci
on.nueva}
for I in [1 2 3] do {Colecci
on.agregar C1 I} end
for I in [4 5 6] do {Colecci
on.agregar C2 I} end
{Colecci
on.uni
on C1 C2}
{Browse {Colecci
on.esVac
a C2}}
{DoUntil fun {$} {Colecci
on.esVac
a C1} end
proc {$} {Browse {Colecci
on.extraer C1}} end}

En resumen
Rep. interna Eficiencia No polimorfismo

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Extension tipo Coleccion en estilo Objeto (1)


on
Operacion uni
{C1.uni
on C2}:todos los elementos de C2 se agregan a C1,
dejando C2 vaca.

Implementacion
fun {NuevaColecci
on}
S1={PilaNueva}
...
on C2}
proc {Uni
{DoUntil C2.esVac
a
proc {$} {S1.colocar {C2.extraer}} end}
end
in
colecci
on(... uni
on:Uni
on)
end

Se usa la representaci
on interna
C1, pero
la interfaz
externa
de
Juan Francisco
Daz Frias de Modelos
y Paradigmas
de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Extension tipo Coleccion en estilo Objeto (1)


on
Operacion uni
{C1.uni
on C2}:todos los elementos de C2 se agregan a C1,
dejando C2 vaca.

Implementacion
fun {NuevaColecci
on}
S1={PilaNueva}
...
on C2}
proc {Uni
{DoUntil C2.esVac
a
proc {$} {S1.colocar {C2.extraer}} end}
end
in
colecci
on(... uni
on:Uni
on)
end

Se usa la representaci
on interna
C1, pero
la interfaz
externa
de
Juan Francisco
Daz Frias de Modelos
y Paradigmas
de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Extension tipo Coleccion en estilo Objeto (2)

Implementacion de uni
on usando s
olo las interfaces
on}
fun {NuevaColecci
...
on C2}
proc {Uni
{DoUntil C2.esVac
a
proc {$} {This.agregar {C2.extraer}} end}
end
This=colecci
on(... uni
on:Uni
on)
in
This
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Como escoger entre los estilos TAD y objeto?


Eficiencia
El estilo TAD puede ser m
as eficiente porque permite acceder a
ambas representaciones internas.

Unica
alternativa
Algunas veces el estilo TAD es el u
nico que funciona: Suma de
enteros.
Polimorfismo en Objeto es gratis
Si D es un objeto coleccion con la misma interfaz de C, aunque
condiferente implementacion, {C uni
on(D)} funciona. Por qu
e?
Concurrencia
El estilo objeto no esta limitado a objetos secuenciales: Objetos
flujo, puerto y activos.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Como escoger entre los estilos TAD y objeto?


Eficiencia
El estilo TAD puede ser m
as eficiente porque permite acceder a
ambas representaciones internas.

Unica
alternativa
Algunas veces el estilo TAD es el u
nico que funciona: Suma de
enteros.
Polimorfismo en Objeto es gratis
Si D es un objeto coleccion con la misma interfaz de C, aunque
condiferente implementacion, {C uni
on(D)} funciona. Por qu
e?
Concurrencia
El estilo objeto no esta limitado a objetos secuenciales: Objetos
flujo, puerto y activos.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Como escoger entre los estilos TAD y objeto?


Eficiencia
El estilo TAD puede ser m
as eficiente porque permite acceder a
ambas representaciones internas.

Unica
alternativa
Algunas veces el estilo TAD es el u
nico que funciona: Suma de
enteros.
Polimorfismo en Objeto es gratis
Si D es un objeto coleccion con la misma interfaz de C, aunque
condiferente implementacion, {C uni
on(D)} funciona. Por qu
e?
Concurrencia
El estilo objeto no esta limitado a objetos secuenciales: Objetos
flujo, puerto y activos.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Como escoger entre los estilos TAD y objeto?


Eficiencia
El estilo TAD puede ser m
as eficiente porque permite acceder a
ambas representaciones internas.

Unica
alternativa
Algunas veces el estilo TAD es el u
nico que funciona: Suma de
enteros.
Polimorfismo en Objeto es gratis
Si D es un objeto coleccion con la misma interfaz de C, aunque
condiferente implementacion, {C uni
on(D)} funciona. Por qu
e?
Concurrencia
El estilo objeto no esta limitado a objetos secuenciales: Objetos
flujo, puerto y activos.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Como escoger entre los estilos TAD y objeto? (2)


Polimorfismo en TAD implica modulos de primera clase
proc {Uni
on C1 Colecci
on2 C2}
a C2} end
on2.esVac
{DoUntil fun {$} {Colecci
on.agregar C1
proc {$} {Colecci
on2.extraer C2}} end}
{Colecci
end
Colecci
on=colecci
on(... uni
on:Uni
on)

La implementacion de uni
on tiene que asegurarse que C2 siempre
utilice una operacion de Colecci
on2.
Interoperabilidad en TAD
Si utilizamos el estilo TAD sin modulos de primera clase, entonces
debemos escribir codigo nuevo para que los tipos puedan
on que
interoperar. Tenemos que escribir una operacion uni
conozca ambas representaciones internas.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Como escoger entre los estilos TAD y objeto? (2)


Polimorfismo en TAD implica modulos de primera clase
proc {Uni
on C1 Colecci
on2 C2}
a C2} end
on2.esVac
{DoUntil fun {$} {Colecci
on.agregar C1
proc {$} {Colecci
on2.extraer C2}} end}
{Colecci
end
Colecci
on=colecci
on(... uni
on:Uni
on)

La implementacion de uni
on tiene que asegurarse que C2 siempre
utilice una operacion de Colecci
on2.
Interoperabilidad en TAD
Si utilizamos el estilo TAD sin modulos de primera clase, entonces
debemos escribir codigo nuevo para que los tipos puedan
on que
interoperar. Tenemos que escribir una operacion uni
conozca ambas representaciones internas.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Otras clases de polimorfismo, distinto al universal

Polimorfismo ad-hoc
Se ejecuta codigo diferente para argumentos de tipos diferentes.
Por ejemplo el operador de sobrecarga.
Polimorfismo por subtipos
Se ejecuta el mismo codigo para todos los argumentos cuyo tipo
sea un subtipo del tipo m
as general. Por ejemplo, Registros, tuplas
y listas.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on

Otras clases de polimorfismo, distinto al universal

Polimorfismo ad-hoc
Se ejecuta codigo diferente para argumentos de tipos diferentes.
Por ejemplo el operador de sobrecarga.
Polimorfismo por subtipos
Se ejecuta el mismo codigo para todos los argumentos cuyo tipo
sea un subtipo del tipo m
as general. Por ejemplo, Registros, tuplas
y listas.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Principios de la POO
El modelo de computaci
on
El modelo de computaci
on de la POO es el modelo con estado.
Que es un programa?
Los programas son colecciones de abstracciones de datos que
interact
uan entre ellas. Dos principios para construirlas:
Las abstracciones de datos deben tener estado por defecto.
El estilo objeto, por defecto, debera ser el estilo APD, el cual
fomenta el polimorfismo y la herencia.
En resumen. . .
La POO es la programacion con abstraccion de datos en forma de
objetos, estado explcito, polimorfismo, y herencia.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Principios de la POO
El modelo de computaci
on
El modelo de computaci
on de la POO es el modelo con estado.
Que es un programa?
Los programas son colecciones de abstracciones de datos que
interact
uan entre ellas. Dos principios para construirlas:
Las abstracciones de datos deben tener estado por defecto.
El estilo objeto, por defecto, debera ser el estilo APD, el cual
fomenta el polimorfismo y la herencia.
En resumen. . .
La POO es la programacion con abstraccion de datos en forma de
objetos, estado explcito, polimorfismo, y herencia.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Principios de la POO
El modelo de computaci
on
El modelo de computaci
on de la POO es el modelo con estado.
Que es un programa?
Los programas son colecciones de abstracciones de datos que
interact
uan entre ellas. Dos principios para construirlas:
Las abstracciones de datos deben tener estado por defecto.
El estilo objeto, por defecto, debera ser el estilo APD, el cual
fomenta el polimorfismo y la herencia.
En resumen. . .
La POO es la programacion con abstraccion de datos en forma de
objetos, estado explcito, polimorfismo, y herencia.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Herencia

Observacion
Muchas abstracciones de datos tienen mucho en com
un, v. gr. los
conjuntos. Podemos implementarlas sin duplicar las partes
comunes?
Problema: duplicacion de c
odigo
Programas mas largos.
Se dificulta el mantenimiento: modificacion de todas las
copias.
Copias ligeramente diferentes: relacion entre cambios no obvia.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Herencia

Observacion
Muchas abstracciones de datos tienen mucho en com
un, v. gr. los
conjuntos. Podemos implementarlas sin duplicar las partes
comunes?
Problema: duplicacion de c
odigo
Programas mas largos.
Se dificulta el mantenimiento: modificacion de todas las
copias.
Copias ligeramente diferentes: relacion entre cambios no obvia.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Herencia
Para que el concepto de herencia?
Para reducir el problema de la duplicacion de c
odigo y para
clarificar las relaciones entre las abstracciones de datos.
Como?
Una abstraccion hereda de otra(s), teniendo esencialmente
la misma funcionalidad que las otras, posiblemente con
algunas extensiones y modificaciones.
Solo se especifican las diferencias entre la abstraccion de
datos y sus ancestros.
A tal definicion incremental de una abstraccion de datos se le
denomina una clase.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Herencia
Para que el concepto de herencia?
Para reducir el problema de la duplicacion de c
odigo y para
clarificar las relaciones entre las abstracciones de datos.
Como?
Una abstraccion hereda de otra(s), teniendo esencialmente
la misma funcionalidad que las otras, posiblemente con
algunas extensiones y modificaciones.
Solo se especifican las diferencias entre la abstraccion de
datos y sus ancestros.
A tal definicion incremental de una abstraccion de datos se le
denomina una clase.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Herencia: clase

Como se define una clase?


Por combinacion de una o m
as clases existentes con una
descripcion de las extensiones y modificaciones requeridas.
Concepto nuevo?
NO! Abstraccion ling
ustica.
Manipulacion sint
actica, donde la sintaxis de la clase nueva se
deriva a partir de las clases originales.
Funcion que recibe como entrada valores de tipo clase y
devuelve como salida la clase nueva.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Herencia: clase

Como se define una clase?


Por combinacion de una o m
as clases existentes con una
descripcion de las extensiones y modificaciones requeridas.
Concepto nuevo?
NO! Abstraccion ling
ustica.
Manipulacion sint
actica, donde la sintaxis de la clase nueva se
deriva a partir de las clases originales.
Funcion que recibe como entrada valores de tipo clase y
devuelve como salida la clase nueva.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Use la herencia con cuidado (1)


Conocimiento profundo de las clases ancestro
Pues ellas pueden romper f
acilmente un invariante de clase.
Interfaz adicional a mantener
La capacidad de extender una clase se puede ver como una manera
adicional de interactuar con esa clase. Esta interfaz tiene que
mantenerse a lo largo de la vida del componente.

Las clases son finales (no se pueden extender) por defecto. Para
extenderlas, se requiere la accion explcita del programador.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Use la herencia con cuidado (1)


Conocimiento profundo de las clases ancestro
Pues ellas pueden romper f
acilmente un invariante de clase.
Interfaz adicional a mantener
La capacidad de extender una clase se puede ver como una manera
adicional de interactuar con esa clase. Esta interfaz tiene que
mantenerse a lo largo de la vida del componente.

Las clases son finales (no se pueden extender) por defecto. Para
extenderlas, se requiere la accion explcita del programador.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Use la herencia con cuidado (2)

Factorizacion de una aplicacion vs. dispersion de la implementacion


La implementacion no existe en un sitio; todas las abstracciones de
las que se hereda tienen que considerarse juntas.
Esto dificulta entender la abstraccion, y, paradojicamente, puede
dificultar su mantenimiento.
Leccion
La herencia debe utilizarse en peque
nas cantidades.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Use la herencia con cuidado (2)

Factorizacion de una aplicacion vs. dispersion de la implementacion


La implementacion no existe en un sitio; todas las abstracciones de
las que se hereda tienen que considerarse juntas.
Esto dificulta entender la abstraccion, y, paradojicamente, puede
dificultar su mantenimiento.
Leccion
La herencia debe utilizarse en peque
nas cantidades.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Alternativa a la herencia. . .

Programacion Basada en componentes


La idea es definir un componente que encapsula a otro
componente y provee una funcionalidad modificada.
Compromiso Herencia - Componentes
La herencia es mas flexible pero puede romper un invariante de
clase, mientras que la composicion de componentes es menos
flexible pero no puede romper un invariante de componente.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Alternativa a la herencia. . .

Programacion Basada en componentes


La idea es definir un componente que encapsula a otro
componente y provee una funcionalidad modificada.
Compromiso Herencia - Componentes
La herencia es mas flexible pero puede romper un invariante de
clase, mientras que la composicion de componentes es menos
flexible pero no puede romper un invariante de componente.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Conjunto de conceptos para definir clases

Para construir abstracciones de datos completas


Los metodos, los atributos, y las propiedades.
Mensajes de primera clase y atributos de primera clase: para
lograr formas poderosas de polimorfismo.
Para construir abstracciones de datos incrementalmente
Los conceptos relacionados con la herencia, i.e., los que definen
como se relaciona una clase con las clases existentes.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Conjunto de conceptos para definir clases

Para construir abstracciones de datos completas


Los metodos, los atributos, y las propiedades.
Mensajes de primera clase y atributos de primera clase: para
lograr formas poderosas de polimorfismo.
Para construir abstracciones de datos incrementalmente
Los conceptos relacionados con la herencia, i.e., los que definen
como se relaciona una clase con las clases existentes.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Plan
1

Recorderis: Abstraccion de datos


TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Coleccion

Principios de la POO

Herencia

Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Un ejemplo de clase: sintaxis


Supuestos
class Contador
attr val
meth inic(Valor)
val:=Valor
end
meth browse
{Browse @val}
end
meth inc(Valor)
val:=@val+Valor
end
end

class: constructor nuevo.

Las clases son valores de primera clase.


class es una abstracci
on ling
ustica.

Sint
acticamente:

Juan Francisco Daz Frias

Nombre Contador (podra ser


anonima).
Atributos: val.
Metodos: inic, browse, e inc.
Operadores: := y @.
Modelos y Paradigmas de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Un ejemplo de clase: sintaxis


Supuestos
class Contador
attr val
meth inic(Valor)
val:=Valor
end
meth browse
{Browse @val}
end
meth inc(Valor)
val:=@val+Valor
end
end

class: constructor nuevo.

Las clases son valores de primera clase.


class es una abstracci
on ling
ustica.

Sint
acticamente:

Juan Francisco Daz Frias

Nombre Contador (podra ser


anonima).
Atributos: val.
Metodos: inic, browse, e inc.
Operadores: := y @.
Modelos y Paradigmas de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Un ejemplo de clase: sintaxis


Supuestos
class Contador
attr val
meth inic(Valor)
val:=Valor
end
meth browse
{Browse @val}
end
meth inc(Valor)
val:=@val+Valor
end
end

class: constructor nuevo.

Las clases son valores de primera clase.


class es una abstracci
on ling
ustica.

Sint
acticamente:

Juan Francisco Daz Frias

Nombre Contador (podra ser


anonima).
Atributos: val.
Metodos: inic, browse, e inc.
Operadores: := y @.
Modelos y Paradigmas de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Es la diferencia con otros lenguajes solo sintactica?

Las apariencias enga


nan
La declaracion se ejecuta en tiempo de ejecucion: se crea un
valor de tipo clase y se liga a la variable Contador.
La declaracion al principio del programa se comporta
familiarmente.
Pero, la declaracion puede colocarse en cualquier sitio donde
pueda ir una declaracion. Por ejemplo, si se coloca la
declaracion dentro de un procedimiento, se creara una clase
nueva, distinta, cada vez que se invoca el procedimiento.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Ejemplo de uso

C={New Contador inic(0)}


{C inc(6)} {C inc(6)}
{C browse}
local X in {C inc(X)} X=5
end
{C browse}

Juan Francisco Daz Frias

declare S in
local X in
thread {C inc(X)} S=listo
end
X=5
end
{Wait S} {C browse}

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Un ejemplo de clase: semantica (1)


local
proc {Inic M S}
inic(Valor)=M in (S.val):=Valor
end
proc {Browse2 M S}
{Browse @(S.val)}
end
proc {Inc M S}
inc(Valor)=M in
(S.val):=@(S.val)+Valor
end
in
Contador=c(atrbs:[val]
m
etodos:m(inic:Inic
browse:Browse2 inc:Inc))
end
Juan Francisco Daz Frias

Detalles
Una clase es un
registro: nombres
de atributos;
metodos.
Nombre de
atributo: literal.
Metodo:
procedimiento de
dos argumentos:
mensaje y estado.
Asignacion val:= y
acceso @val.

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Un ejemplo de clase: semantica (1)


local
proc {Inic M S}
inic(Valor)=M in (S.val):=Valor
end
proc {Browse2 M S}
{Browse @(S.val)}
end
proc {Inc M S}
inc(Valor)=M in
(S.val):=@(S.val)+Valor
end
in
Contador=c(atrbs:[val]
m
etodos:m(inic:Inic
browse:Browse2 inc:Inc))
end
Juan Francisco Daz Frias

Detalles
Una clase es un
registro: nombres
de atributos;
metodos.
Nombre de
atributo: literal.
Metodo:
procedimiento de
dos argumentos:
mensaje y estado.
Asignacion val:= y
acceso @val.

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Un ejemplo de clase: semantica (2)

fun {New Clase Inic}


Fs={Map Clase.atrbs fun {$ X}
X#{NewCell _} end}
S={List.toRecord estado Fs}
proc {Obj M}
{Clase.m
etodos.{Label M} M S}
end
in
{Obj Inic}
Obj
end

Juan Francisco Daz Frias

La funcion New
Crea el estado del
objeto.
Define Obj que es
de hecho el objeto.
Inicializa el objeto
antes de devolverlo.
Estado: registro S,
oculto dentro de
Obj.

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Un ejemplo de clase: semantica (2)

fun {New Clase Inic}


Fs={Map Clase.atrbs fun {$ X}
X#{NewCell _} end}
S={List.toRecord estado Fs}
proc {Obj M}
{Clase.m
etodos.{Label M} M S}
end
in
{Obj Inic}
Obj
end

Juan Francisco Daz Frias

La funcion New
Crea el estado del
objeto.
Define Obj que es
de hecho el objeto.
Inicializa el objeto
antes de devolverlo.
Estado: registro S,
oculto dentro de
Obj.

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Sintaxis de clase (1)

hdeclaracioni ::= class hvariablei { hdescriptorClasei }


{ meth hcabezaMetodoi [ = hvariablei ]
( hexpresionEni | hdeclaracionEni ) end }
|
|
|
|

end
lock [ hexpresi
oni then ] hdeclaracionEni end
hexpresioni := hexpresioni
hexpresioni , hexpresioni

...

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Sintaxis de clase (2)

hexpresioni ::= class $ { hdescriptorClasei }


{ meth hcabezaMetodoi [ = hvariablei ]
( hexpresionEni | hdeclaracionEni ) end }
end
| lock [ hexpresioni then ] hexpresionEni end
| hexpresioni := hexpresioni
| hexpresioni , hexpresioni
| @ hexpresioni
| self

| ...

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Sintaxis de clase (3)

hdescriptorClasei ::= from { hexpresi


oni }+ | prop { hexpresi
oni }+
| attr { hinicAtrbi }+
hinicAtrbi
::= ( [ ! ] hvariablei | h
atomoi | unit | true | false )
[ : hexpresi
oni ]
hcabezaM
etodoi ::= ( [ ! ] hvariablei | h
atomoi | unit | true | false )
[ ( { hargM
etodoi } [ ... ] ) ]
[ = hvariablei ]
hargM
etodoi
::= [ hfeaturei : ] ( hvariablei | _ | $ ) [ <= hexpresi
oni ]

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Sintaxis de clase (4)


Caractersticas
N
umero de objetos ilimitado.
Objeto instancia. Cada instancia
tiene identidad u
nica.

Que es una clase?

Una clase es una estructura de


Cada objeto se comporta seg
un la
datos que define un estado
definicion de clase.
interno de un objeto
(atributos), su
Creaci
on, invocacion
comportamiento (metodos),
MiObj={New
MiClase Inic}
las clases de las cuales hereda,
y otras propiedades y
crea un objeto MiObj, de la clase MiClase
operaciones.
e invoca el objeto con el mensaje Inic.
Con la sintaxis {MiObj M} se invoca el
objeto.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Sintaxis de clase (4)


Caractersticas
N
umero de objetos ilimitado.
Objeto instancia. Cada instancia
tiene identidad u
nica.

Que es una clase?

Una clase es una estructura de


Cada objeto se comporta seg
un la
datos que define un estado
definicion de clase.
interno de un objeto
(atributos), su
Creaci
on, invocacion
comportamiento (metodos),
MiObj={New
MiClase Inic}
las clases de las cuales hereda,
y otras propiedades y
crea un objeto MiObj, de la clase MiClase
operaciones.
e invoca el objeto con el mensaje Inic.
Con la sintaxis {MiObj M} se invoca el
objeto.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Sintaxis de clase (4)


Caractersticas
N
umero de objetos ilimitado.
Objeto instancia. Cada instancia
tiene identidad u
nica.

Que es una clase?

Una clase es una estructura de


Cada objeto se comporta seg
un la
datos que define un estado
definicion de clase.
interno de un objeto
(atributos), su
Creaci
on, invocacion
comportamiento (metodos),
MiObj={New
MiClase Inic}
las clases de las cuales hereda,
y otras propiedades y
crea un objeto MiObj, de la clase MiClase
operaciones.
e invoca el objeto con el mensaje Inic.
Con la sintaxis {MiObj M} se invoca el
objeto.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Miembros de una clase (1)

Atributos: palabra reservada attr


O variables de instancia: celda que contiene parte del estado de la
instancia.
Operaciones:
hexpri1 :=hexpri2
@hexpri

hexpri3 =hexpri1 :=hexpri2 .

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Miembros de una clase (2)

Metodos: palabra reservada meth


Procedimiento que se invoca en el contexto de un objeto particular
y que tiene acceso a los atributos del objeto.
Consta de una cabeza y un cuerpo.
La cabeza consta de una etiqueta, la cual debe ser un atomo
o un nombre, y de un conjunto de argumentos.
Los argumentos deben ser variables diferentes; de otra manera
sera un error de sintaxis.
CabezaPatron y MensajeRegistro.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Miembros de una clase (3)

Propiedades: palabra reservada prop


Una propiedad modifica c
omo se comporta un objeto:
La propiedad locking crea un candado nuevo con cada
instancia de objeto.
La propiedad final hace que la clase sea una clase final

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Miembros de una clase (4)

Atributos como atomos o como identificadores


Las etiquetas de los atributos y de los metodos son literales.
Si se definen utilizando la sintaxis de
atomo, entonces son
atomos.
Si se definen con la sintaxis de identificadores (e.g., en
may
uscula), entonces el sistema crear
a nombres nuevos para
ellos, cuyo alcance es la definicion de la clase.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Inicializacion de atributos (1)

Inicializacion por instancia


Un atributo puede tener un valor inicial diferente para cada
instancia. Esto se logra no inicializ
andolos en la definicion de clase.
Ejemplo
class UnApart
attr nombreCalle
meth inic(X) @nombreCalle=X end
end
Apt1={New UnApart inic(pasoancho)}
Apt2={New UnApart inic(calleQuinta)}

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Inicializacion de atributos (2)


Inicializacion por clase
Un atributo puede tener un valor que sea el mismo para todas las
instancias de la clase. Esto se hace, inicializ
andolo con : en la
definicion de clase.
Ejemplo
class ApartQuinta
attr
nombreCalle:calleQuinta
n
umeroCalle:100
colorPared:_
superficiePiso:madera
meth inic skip end
end
Apt3={New ApartQuinta inic}
Apt4={New ApartQuinta inic}
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Inicializacion de atributos (3)

Inicializacion por marca


Esta es otra manera de utilizar la inicializacion por clase. Una
marca es un conjunto de clases relacionadas de alguna manera,
pero no por herencia.
Ejemplo
L=linux
class RedHat attr tiposo:L end
class SuSE attr tiposo:L end
class Debian attr tiposo:L end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Mensajes de primera clase (1)


Principio
Los mensajes son registros y las cabezas de los metodos son
patrones que reconocen un registro.
Invocacion de objeto {Obj M}
Registro estatico como mensaje. En el caso mas sencillo, M es
un registro que se conoce en tiempo de compilacion, e.g.,
como en la invocacion {Contador inc(X)}.
Registro dinamico como mensaje. Es posible invocar {Obj M}
donde M es una variable que referencia un registro que se
calcula en tiempo de ejecucion. Como el tipamiento es
dinamico, es posible crear nuevos tipos de registros en tiempo
de ejecucion (e.g., con Adjoin o List.toRecord).
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Mensajes de primera clase (1)


Principio
Los mensajes son registros y las cabezas de los metodos son
patrones que reconocen un registro.
Invocacion de objeto {Obj M}
Registro estatico como mensaje. En el caso mas sencillo, M es
un registro que se conoce en tiempo de compilacion, e.g.,
como en la invocacion {Contador inc(X)}.
Registro dinamico como mensaje. Es posible invocar {Obj M}
donde M es una variable que referencia un registro que se
calcula en tiempo de ejecucion. Como el tipamiento es
dinamico, es posible crear nuevos tipos de registros en tiempo
de ejecucion (e.g., con Adjoin o List.toRecord).
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Mensajes de primera clase (2)


Definicion de un metodo (1)
Lista fija de argumentos:
meth foo(a:A b:B c:C)
% Cuerpo del m
etodo
end

Lista flexible de argumentos:


meth foo(a:A b:B c:C ...)
% Cuerpo del m
etodo
end

Referencia variable a la cabeza del metodo:


meth foo(a:A b:B c:C ...)=M
% Cuerpo del m
etodo
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Mensajes de primera clase (3)


Definicion de un metodo (2)
Argumento opcional:valor por defecto, se usa solo si el
argumento no viene en el mensaje.
meth foo(a:A b:B<=V)
% Cuerpo del m
etodo
end
foo(a:1 b:2) ignora V, foo(a:1) foo(a:1 b:V)

Etiqueta privada de metodo: A se liga a un nombre fresco


cuando se define la clase.
meth A(bar:X)
% Cuerpo del m
etodo
end

Etiqueta dinamica de metodo:


meth !A(bar:X)
% Cuerpo del m
etodo
end
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Mensajes de primera clase (4)


Definicion de un metodo (3)
Etiqueta dinamica de metodo:
meth !A(bar:X)
etodo
% Cuerpo del m
end

La etiqueta del metodo debe ser conocida en el momento en


que la definicion de clase sea ejecutada.
El metodo otherwise: acepta cualquier mensaje para el cual
no exista ning
un otro metodo.
meth otherwise(M)
% Cuerpo del m
etodo
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Como hace el compilador con la invocacion

{Obj M}?

Estaticamente . . .
Determinar Obj y M. Si puede, compila a una instruccion muy
r
apida y especializada.
Si no puede . . .
Compila a un instruccion general de invocacion de un objeto.
La instruccion general utiliza el ocultamiento.
La primera invocacion es lenta, pero las subsiguientes son casi
tan rapidas como las invocaciones especializadas.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Plan
1

Recorderis: Abstraccion de datos


TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Coleccion

Principios de la POO

Herencia

Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Tres conjuntos de conceptos para la herencia:


Grafo de herencia
Define cuales clases preexistentes se extender
an. Se permitira tanto
herencia sencilla como herencia m
ultiple.
Control de acceso a los metodos
Define como se accede a los metodos en particular, tanto en la
clase nueva como en las clases preexistentes. Esto se logra con
ligaduras estatica y din
amica y con el concepto de self.
Control de la encapsulacion
Define que parte de un programa puede ver los atributos y
metodos de una clase.
Otros conceptos . . .
Reenvo, delegacion, y reflexion.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Tres conjuntos de conceptos para la herencia:


Grafo de herencia
Define cuales clases preexistentes se extender
an. Se permitira tanto
herencia sencilla como herencia m
ultiple.
Control de acceso a los metodos
Define como se accede a los metodos en particular, tanto en la
clase nueva como en las clases preexistentes. Esto se logra con
ligaduras estatica y din
amica y con el concepto de self.
Control de la encapsulacion
Define que parte de un programa puede ver los atributos y
metodos de una clase.
Otros conceptos . . .
Reenvo, delegacion, y reflexion.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Tres conjuntos de conceptos para la herencia:


Grafo de herencia
Define cuales clases preexistentes se extender
an. Se permitira tanto
herencia sencilla como herencia m
ultiple.
Control de acceso a los metodos
Define como se accede a los metodos en particular, tanto en la
clase nueva como en las clases preexistentes. Esto se logra con
ligaduras estatica y din
amica y con el concepto de self.
Control de la encapsulacion
Define que parte de un programa puede ver los atributos y
metodos de una clase.
Otros conceptos . . .
Reenvo, delegacion, y reflexion.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Tres conjuntos de conceptos para la herencia:


Grafo de herencia
Define cuales clases preexistentes se extender
an. Se permitira tanto
herencia sencilla como herencia m
ultiple.
Control de acceso a los metodos
Define como se accede a los metodos en particular, tanto en la
clase nueva como en las clases preexistentes. Esto se logra con
ligaduras estatica y din
amica y con el concepto de self.
Control de la encapsulacion
Define que parte de un programa puede ver los atributos y
metodos de una clase.
Otros conceptos . . .
Reenvo, delegacion, y reflexion.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Grafo de herencia (1)


Disponibilidad de metodos y atributos
La herencia es una forma de construir clases nuevas a partir de
clases existentes.
La herencia define que atributos y metodos est
an disponibles en la
clase nueva.
Relacion de precedencia: Relacion de anulacion
Un metodo (atributo) en la clase C anula cualquier metodo
(atributo) con la misma etiqueta (el mismo nombre) en todas las
superclases de C.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Grafo de herencia (1)


Disponibilidad de metodos y atributos
La herencia es una forma de construir clases nuevas a partir de
clases existentes.
La herencia define que atributos y metodos est
an disponibles en la
clase nueva.
Relacion de precedencia: Relacion de anulacion
Un metodo (atributo) en la clase C anula cualquier metodo
(atributo) con la misma etiqueta (el mismo nombre) en todas las
superclases de C.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Grafo de herencia (2)

Tipos de herencia
Herencia sencilla (se hereda de una sola clase) o Herencia m
ultiple
(se hereda de varias clases. Sint
acticamente: from.
Superclases
Una clase B es una superclase de la clase A si
B aparece en la parte from de la declaraci
on de A, o
B es una superclase de una clase que aparece en la parte from
de la declaracion de A.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Grafo de herencia (2)

Tipos de herencia
Herencia sencilla (se hereda de una sola clase) o Herencia m
ultiple
(se hereda de varias clases. Sint
acticamente: from.
Superclases
Una clase B es una superclase de la clase A si
B aparece en la parte from de la declaraci
on de A, o
B es una superclase de una clase que aparece en la parte from
de la declaracion de A.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Grafo de herencia (3)


Jerarqua de clases
Grafo dirigido de la relacion de superclase cuya raz es la clase
actual. Las aristas son dirigidas hacia las subclases.
Legalidad de la herencia
La relacion de herencia es dirigida y acclica.
class A from B ... end
class B from A ... end

Cada metodo (salvo los anulados) debe tener una etiqueta


u
nica y debe estar definido en una sola clase en la jerarqua.
class
class
class
class
class

A1 meth m(...) ... end end


B1 meth m(...) ... end end
A from A1 end
B from B1 end
C from A B end
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Grafo de herencia (3)


Jerarqua de clases
Grafo dirigido de la relacion de superclase cuya raz es la clase
actual. Las aristas son dirigidas hacia las subclases.
Legalidad de la herencia
La relacion de herencia es dirigida y acclica.
class A from B ... end
class B from A ... end

Cada metodo (salvo los anulados) debe tener una etiqueta


u
nica y debe estar definido en una sola clase en la jerarqua.
class
class
class
class
class

A1 meth m(...) ... end end


B1 meth m(...) ... end end
A from A1 end
B from B1 end
C from A B end
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Grafo de herencia (4)


Mtodo m

A1

B1

A1

B1

Jerarqua de clases ilegal

Jerarqua de clases legal

(dos m visibles desde C)

(un m visible desde C)

Tambien es ilegal . . .
class A meth m(...) ... end end
class B meth m(...) ... end end
class C from A B end
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Grafo de herencia (4)


Mtodo m

A1

B1

A1

B1

Jerarqua de clases ilegal

Jerarqua de clases legal

(dos m visibles desde C)

(un m visible desde C)

Tambien es ilegal . . .
class A meth m(...) ... end end
class B meth m(...) ... end end
class C from A B end
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Grafo de herencia (5)

Cuando se detecta un error de estos?


fun {ClaseExtra
na}
class A meth foo(X) X=a end end
class B meth foo(X) X=b end end
class C from A B end
in C end

Principio:todo se hace en tiempo de ejecucion


ClaseExtra
na se puede compilar y ejecutar exitosamente. S
olo se
lanzara una excepcion en la invocacion {ClaseExtra
na}.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Grafo de herencia (5)

Cuando se detecta un error de estos?


fun {ClaseExtra
na}
class A meth foo(X) X=a end end
class B meth foo(X) X=b end end
class C from A B end
in C end

Principio:todo se hace en tiempo de ejecucion


ClaseExtra
na se puede compilar y ejecutar exitosamente. S
olo se
lanzara una excepcion en la invocacion {ClaseExtra
na}.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (1)


B
usqueda del metodo correcto
Cuando se invoca un metodo de un objeto: cu
al metodo se
ejecuta? Esto parece bastante sencillo, pero se vuelve ligeramente
mas complicado cuando est
a involucrada la herencia.
Ligadura estatica y din
amica
La herencia se utiliza para definir una clase nueva que extiende una
clase existente. Ambas clases pueden tener metodos con el mismo
nombre, y la clase nueva puede querer invocar cualquiera de ellos.
Se necesitan dos maneras de invocar: ligadura est
atica y ligadura
dinamica.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (1)


B
usqueda del metodo correcto
Cuando se invoca un metodo de un objeto: cu
al metodo se
ejecuta? Esto parece bastante sencillo, pero se vuelve ligeramente
mas complicado cuando est
a involucrada la herencia.
Ligadura estatica y din
amica
La herencia se utiliza para definir una clase nueva que extiende una
clase existente. Ambas clases pueden tener metodos con el mismo
nombre, y la clase nueva puede querer invocar cualquiera de ellos.
Se necesitan dos maneras de invocar: ligadura est
atica y ligadura
dinamica.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (2)


Ejemplo de clase: Cuenta
class Cuenta
attr saldo:0
meth transferir(Cant)
saldo:=@saldo+Cant
end
meth pedirSaldo(Sal)
Sal=@saldo
end
meth transferEnLote(CantList)
for A in CantList do {self transferir(A)} end
end
end

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (3)


Extension de Cuenta
class CuentaVigilada from Cuenta
meth transferir(Cant)
{LogObj agregueEntrada(transferir(Cant))}
...
end
end

Creacion e invocacion
CtaVig={New CuentaVigilada transferir(100)}

que pasa cuando invocamos transferEnLote?


Se invoca transferir de Cuenta o transferir de
CuentaVigilada?
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (3)


Extension de Cuenta
class CuentaVigilada from Cuenta
meth transferir(Cant)
{LogObj agregueEntrada(transferir(Cant))}
...
end
end

Creacion e invocacion
CtaVig={New CuentaVigilada transferir(100)}

que pasa cuando invocamos transferEnLote?


Se invoca transferir de Cuenta o transferir de
CuentaVigilada?
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (4)

Cual debera invocarse?


transferir de CuentaVigilada.

Esto se denomina ligadura din


amica: {self transferir(A)}.
Ligadura dinamica: necesidad
Se conserva la funcionalidad de la anterior abstraccion al tiempo
que se a
nade una funcionalidad nueva.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (4)

Cual debera invocarse?


transferir de CuentaVigilada.

Esto se denomina ligadura din


amica: {self transferir(A)}.
Ligadura dinamica: necesidad
Se conserva la funcionalidad de la anterior abstraccion al tiempo
que se a
nade una funcionalidad nueva.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (5)


Ligadura dinamica: limitacion
class CuentaVigilada from Cuenta
meth transferir(Cant)
{LogObj agregueEntrada(transferir(Cant))}
Cuenta,transferir(Cant)
end
end

Dentro del nuevo metodo transferir, tenemos que invocar el


antiguo metodo transferir. Podemos usar ligadura dinamica?
Ligadura estatica:necesidad
Invocamos un metodo se
nalando la clase del metodo:
Cuenta,transferir(Cant)
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (5)


Ligadura dinamica: limitacion
class CuentaVigilada from Cuenta
meth transferir(Cant)
{LogObj agregueEntrada(transferir(Cant))}
Cuenta,transferir(Cant)
end
end

Dentro del nuevo metodo transferir, tenemos que invocar el


antiguo metodo transferir. Podemos usar ligadura dinamica?
Ligadura estatica:necesidad
Invocamos un metodo se
nalando la clase del metodo:
Cuenta,transferir(Cant)
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (6)

Ligadura dinamica y est


atica
La ligadura dinamica permite a la clase nueva extender
correctamente la clase antigua dejando que los metodos
antiguos invoquen los metodos nuevos, aunque los metodos
nuevos no existan en el momento en que los metodos antiguos
se definen.
La ligadura estatica permite que los nuevos metodos invoquen
los metodos antiguos cuando tengan que hacerlo.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (7)


Resumen ligadura dinamica
Se escribe {self M}. Este tipo de ligadura escoge el
correspondiente metodo M visible en el objeto actual, tomando en
cuenta la anulacion que haya sido realizada.
Resumen ligadura estatica
Se escribe C, M (con una coma), donde C es una clase donde se
define el correspondiente metodo M. Este tipo de ligadura escoge el
metodo M visible en la clase C, tomando en cuenta las anulaciones
de metodos desde la clase raz hasta la clase C, pero no mas.
Si el objeto es de una subclase de C que ha anulado el metodo M
de nuevo, entonces esta anulacion no es tenida en cuenta.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de acceso a los metodos (7)


Resumen ligadura dinamica
Se escribe {self M}. Este tipo de ligadura escoge el
correspondiente metodo M visible en el objeto actual, tomando en
cuenta la anulacion que haya sido realizada.
Resumen ligadura estatica
Se escribe C, M (con una coma), donde C es una clase donde se
define el correspondiente metodo M. Este tipo de ligadura escoge el
metodo M visible en la clase C, tomando en cuenta las anulaciones
de metodos desde la clase raz hasta la clase C, pero no mas.
Si el objeto es de una subclase de C que ha anulado el metodo M
de nuevo, entonces esta anulacion no es tenida en cuenta.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (1)


Principio
Limitar el acceso a los miembros de la clase, a saber, atributos y
metodos, de acuerdo a los requerimientos de la arquitectura de la
aplicacion.
Alcance de un miembro
Cada miembro se define con un alcance: El alcance es la parte del
texto del programa en el cual el miembro es visible, i.e., donde, al
mencionar su nombre, se accede a el.
Tipos de alcance
Por defecto, o modificado por palabras reservadas como public,
private, y protected.
Cada lenguaje usa estos alcances con significados ligeramente
diferentes.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (1)


Principio
Limitar el acceso a los miembros de la clase, a saber, atributos y
metodos, de acuerdo a los requerimientos de la arquitectura de la
aplicacion.
Alcance de un miembro
Cada miembro se define con un alcance: El alcance es la parte del
texto del programa en el cual el miembro es visible, i.e., donde, al
mencionar su nombre, se accede a el.
Tipos de alcance
Por defecto, o modificado por palabras reservadas como public,
private, y protected.
Cada lenguaje usa estos alcances con significados ligeramente
diferentes.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (1)


Principio
Limitar el acceso a los miembros de la clase, a saber, atributos y
metodos, de acuerdo a los requerimientos de la arquitectura de la
aplicacion.
Alcance de un miembro
Cada miembro se define con un alcance: El alcance es la parte del
texto del programa en el cual el miembro es visible, i.e., donde, al
mencionar su nombre, se accede a el.
Tipos de alcance
Por defecto, o modificado por palabras reservadas como public,
private, y protected.
Cada lenguaje usa estos alcances con significados ligeramente
diferentes.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (2)


Alcance privado
Un miembro privado es aquel que s
olo es visible en la instancia
correspondiente al objeto. Esta instancia puede ver todos los
miembros definidos en su clase y en sus superclases. Visibilidad
vertical.
Alcance p
ublico
Un miembro p
ublico es aquel que es visible en cualquier parte del
programa.
Que es lo natural?
Que los atributos sean privados y los metodos sean p
ublicos, como
en Oz y Smalltalk.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (2)


Alcance privado
Un miembro privado es aquel que s
olo es visible en la instancia
correspondiente al objeto. Esta instancia puede ver todos los
miembros definidos en su clase y en sus superclases. Visibilidad
vertical.
Alcance p
ublico
Un miembro p
ublico es aquel que es visible en cualquier parte del
programa.
Que es lo natural?
Que los atributos sean privados y los metodos sean p
ublicos, como
en Oz y Smalltalk.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (2)


Alcance privado
Un miembro privado es aquel que s
olo es visible en la instancia
correspondiente al objeto. Esta instancia puede ver todos los
miembros definidos en su clase y en sus superclases. Visibilidad
vertical.
Alcance p
ublico
Un miembro p
ublico es aquel que es visible en cualquier parte del
programa.
Que es lo natural?
Que los atributos sean privados y los metodos sean p
ublicos, como
en Oz y Smalltalk.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (3)

Atributos privados
Los atributos son internos a la abstraccion de datos y deben ser
invisibles desde el exterior.
Metodos p
ublicos
Los metodos conforman la interfaz externa de la abstracci
on de
datos, por lo tanto deberan ser visibles para todas las entidades
que referencian la abstraccion.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (3)

Atributos privados
Los atributos son internos a la abstraccion de datos y deben ser
invisibles desde el exterior.
Metodos p
ublicos
Los metodos conforman la interfaz externa de la abstracci
on de
datos, por lo tanto deberan ser visibles para todas las entidades
que referencian la abstraccion.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (4)

Dos conceptos basicos para controlar la encapsulacion


Alcance lexico y valores de tipo nombre. Con ellos se implementa:
Alcane p
ublico.
Alcance privado.
Alcance privado y protegido de C++ y Java.
Tecnica fundamental
La tecnica fundamental es permitir que las cabezas de los metodos
sean valores de tipo nombre en lugar de
atomos.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (4)

Dos conceptos basicos para controlar la encapsulacion


Alcance lexico y valores de tipo nombre. Con ellos se implementa:
Alcane p
ublico.
Alcance privado.
Alcance privado y protegido de C++ y Java.
Tecnica fundamental
La tecnica fundamental es permitir que las cabezas de los metodos
sean valores de tipo nombre en lugar de
atomos.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (5)

Metodos privados (en el sentido de C++ y Java)


=
Jerarqua de clases

Regin de visibilidad para


el objeto I3: todos los atributos
privados en esta regin
son visibles para I3

private de acuerdo a
Smalltalk and Oz

SubC

SubSubC

...
Instancias

I1

I2

I3

...

Juan Francisco Daz Frias

In

private de acuerdo a
C++ and Java

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (6)


Implementacion va nombres (1)
Utilizando un identificador de variable como la cabeza del metodo.
class C
meth A(X)
% Cuerpo del m
etodo
end
end

Implementacion va nombres (2)


local
A={NewName}
in
class C
meth !A(X)
etodo
% Cuerpo del m
end Juan Francisco Daz Frias
Modelos y Paradigmas de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (6)


Implementacion va nombres (1)
Utilizando un identificador de variable como la cabeza del metodo.
class C
meth A(X)
% Cuerpo del m
etodo
end
end

Implementacion va nombres (2)


local
A={NewName}
in
class C
meth !A(X)
etodo
% Cuerpo del m
end Juan Francisco Daz Frias
Modelos y Paradigmas de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (7)


Metodos protegidos (en el sentido de C++)
En C++, un metodo protegido solamente es accesible desde la
clase donde fue definido o en las clases descendientes (y en todas
las instancias de objetos de esas clases).
Implementacion
class C
attr pa:A
meth A(X) skip end
meth foo(...) {self A(5)} end
end
class C1 from C
meth b(...) A=@pa in {self A(5)} end
end
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (7)


Metodos protegidos (en el sentido de C++)
En C++, un metodo protegido solamente es accesible desde la
clase donde fue definido o en las clases descendientes (y en todas
las instancias de objetos de esas clases).
Implementacion
class C
attr pa:A
meth A(X) skip end
meth foo(...) {self A(5)} end
end
class C1 from C
meth b(...) A=@pa in {self A(5)} end
end
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (8)

Atomos
o nombres como cabezas de metodos
Los atomos son visibles a traves de todo el programa y los
nombres solo son visibles en el alcance lexico de su creacion.
Use nombres para metodos internos, y use
atomos para
metodos externos.
Como lo hacen los lenguajes m
as populares?
Smalltalk, C++, y Java s
olo soportan
atomos como cabezas de
metodos; no tienen soporte para los nombres.
El enfoque basado en nombres no es popular todava.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (8)

Atomos
o nombres como cabezas de metodos
Los atomos son visibles a traves de todo el programa y los
nombres solo son visibles en el alcance lexico de su creacion.
Use nombres para metodos internos, y use
atomos para
metodos externos.
Como lo hacen los lenguajes m
as populares?
Smalltalk, C++, y Java s
olo soportan
atomos como cabezas de
metodos; no tienen soporte para los nombres.
El enfoque basado en nombres no es popular todava.

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Control de encapsulacion (9)


Sencillez de los atomos
Los atomos se identifican u
nicamente por sus representaciones
impresas.
Con los nombres esto es m
as difcil: el programa mismo tiene
que pasar de alguna manera el nombre a quien desea invocar
el metodo.
Ventajas de los nombres
Imposible tener conflictos con la herencia (sencilla o m
ultiple).
La encapsulacion se puede manejar mejor, pues una referencia
a un objeto no da necesariamente derecho a invocar los
metodos del objeto.
Los nombres pueden tener soporte sint
actico para simplificar
su uso.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (1)


Herencia

Delegacin

Reenvo

definida sobre clases

definida sobre objetos

definida sobre objetos

self comn

self comn

self no es comn

Relacin estrecha entre el objeto/clase original Relacin menos estrecha


y el objeto/clase derivado

Enfoque esttico:
al momento de la definicin de la clase

Juan Francisco Daz Frias

Enfoques dinmicos:
al momento de la creacin del objeto

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (2)


Reenvo - Implementacion
local
class MezclarReenv
o
attr Reenv
o:ninguno
meth asgnReenv
o(F) Reenv
o:=F end
meth otherwise(M)
o==ninguno then raise
if @Reenv
etodoIndefinido end
m
o M} end
else {@Reenv
end
end
in
fun {NewF Clase Inic}
{New class $ from Clase MezclarReenv
o end
Inic}
end
end
Juan Francisco Daz Frias
Modelos y Paradigmas de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (3)


Reenvo - Utilizacion
class C1
meth inic skip end
meth cubo(A B) B=A*A*A end
end
class C2
meth inic skip end
meth cuadrado(A B) B=A*A end
end
Obj1={NewF C1 inic}
Obj2={NewF C2 inic}
{Obj2 asgnReenv
o(Obj1)}

Invocar {Obj2 cubo(10 X)} llevar


a a Obj2 a reenviar el mensaje
a Obj1.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (4)


Delegacion
Jerarqua entre objetos y no entre clases.
Un objeto no hereda de una clase, sino que delega a otro
objeto.
Los mismos efectos de la herencia, pero la jerarqua se puede
cambiar en cualquier momento.
{Obj2 asgnDelegado(Obj1)} configura a Obj2 para
delegar en Obj1. Obj1 se comporta como la superclase de
Obj2.
El self se preserva siempre: es el self del objeto original
que inicio la cadena de delegaci
on. Entonces, el estado del
objeto (los atributos) tambien es el estado del objeto original.
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (5)


Delegacion - Implementacion (1)
local
AsgnSelf={NewName}
class MezclarDelegaci
on
attr this Delegado:ninguno
meth !AsgnSelf(S) this:=S end
meth asgn(A X) A:=X end
meth obt(A ?X) X=@A end
meth asgnDelegado(D) Delegado:=D end
meth Del(M S) SS in
SS=@this this:=S
try {self M} finally this:=SS end
end
...
end
in
...
Juan Francisco Daz Frias
Modelos y Paradigmas de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (6)


Delegacion Implementacion (2)
local
AsgnSelf={NewName}
class MezclarDelegaci
on
...
meth invcr(M) SS in
SS=@this this:=self
try {self M} finally this:=SS end
end
meth otherwise(M)
if @Delegado==ninguno then
raise m
etodoIndefinido end
else
{@Delegado Del(M @this)}
end
end
end
Juan Francisco Daz Frias
Modelos y Paradigmas de Programaci
on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (7)


Delegacion Implementacion (3)
local
AsgnSelf={NewName}
class MezclarDelegaci
on
...
end
in
fun {NewD Clase Inic}
Obj={New class $ from Clase MezclarDelegaci
on
end Inic}
in
{Obj AsgnSelf(Obj)}
Obj
end
end
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (8)

Delegacion - Utilizacion (1)


Operaci
on
Invocaci
on de objeto
Invocaci
on de Self
Consulta atributo
Modificaci
on atributo
Definici
on del delegado

Sintaxis original
{hobji M}

Sintaxis de delegaci
on
{hobji invcr(M)}

{self M}
@hattri
hattri:=X

{@this M}
{@this obt(hattri $)}
{@this asgn(hattri X)}
{hobji1 asgnDelegado(hobji2 )}

Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (9)


Delegacion - Utilizacion (2)
class C1
attr i:0
meth inic skip end
meth inc(I)
{@this asgn(i {@this obt(i $)}+I)}
end
meth browse
{@this inc(10)}
{Browse c1#{@this obt(i $)}}
end
meth c {@this browse} end
end
Obj1={NewD C1 inic}
Juan Francisco Daz Frias

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (9)


Delegacion - Utilizacion (3)
class C2
attr i:0
meth inic skip end
meth browse
{@this inc(100)}
{Browse c2#{@this
obt(i $)}}
end
end
Obj2={NewD C2 inic}
{Obj2 asgnDelegado(Obj1)}

Juan Francisco Daz Frias

Delegacion - Utilizacion (4)


{Obj2 invcr(c)}
{Obj1 invcr(c)}

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (9)


Delegacion - Utilizacion (3)
class C2
attr i:0
meth inic skip end
meth browse
{@this inc(100)}
{Browse c2#{@this
obt(i $)}}
end
end
Obj2={NewD C2 inic}
{Obj2 asgnDelegado(Obj1)}

Juan Francisco Daz Frias

Delegacion - Utilizacion (4)


{Obj2 invcr(c)}
{Obj1 invcr(c)}

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (10)

Delegacion - Utilizacion (5)


class C2b
attr i:0
meth inic skip end
end
ObjX={NewD C2b inic}
{ObjX asgnDelegado(Obj2)}

Juan Francisco Daz Frias

Delegacion - Utilizacion (6)


{ObjX asgnDelegado(Obj1)}
{ObjX invcr(c)}

Modelos y Paradigmas de Programaci


on

Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO

Clases como abstracciones de datos completas


Clases como abstracciones de datos incrementales

Otros conceptos ligados a la herencia (10)

Delegacion - Utilizacion (5)


class C2b
attr i:0
meth inic skip end
end
ObjX={NewD C2b inic}
{ObjX asgnDelegado(Obj2)}

Juan Francisco Daz Frias

Delegacion - Utilizacion (6)


{ObjX asgnDelegado(Obj1)}
{ObjX invcr(c)}

Modelos y Paradigmas de Programaci


on

También podría gustarte