Está en la página 1de 150

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Modelos y Paradigmas de Programacin o


Programacin Orientada a Objetos (1) o Juan Francisco D Frias az
Maestr en Ingenier Enfasis en Ingenier de Sistemas y Computacin a a, a o Universidad del Valle, Cali, Colombia Escuela de Ingenier de Sistemas y Computacin, a o home page: http://eisc.univalle.edu.co/ jdiaz@univalle.edu.co

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Plan
1

Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

2 3 4

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Plan
1

Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

2 3 4

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Plan
1

Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

2 3 4

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Plan
1

Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

2 3 4

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Abstraccin de datos o

Denicin o Una abstraccin de datos es una manera de usar datos en forma o abstracta, i.e., podemos usar los datos sin tener en cuenta su implementacin. o Ventajas Usar la abstraccin suele ser mucho ms sencillo o a Razonar sobre los datos puede ser ms sencillo a El sistema puede asegurar que los datos se utilicen de la manera correcta

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Abstraccin de datos o

Denicin o Una abstraccin de datos es una manera de usar datos en forma o abstracta, i.e., podemos usar los datos sin tener en cuenta su implementacin. o Ventajas Usar la abstraccin suele ser mucho ms sencillo o a Razonar sobre los datos puede ser ms sencillo a El sistema puede asegurar que los datos se utilicen de la manera correcta

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Plan
1

Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

2 3 4

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Tipos Abstractos de datos (1)

Denicin TAD o 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 {EsVaca S} S==nil end

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

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 D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

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 {EsVaca S} {Desenvolver S}==nil end end

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Otras maneras de organizar abstracciones


Segn caracter u sticas . . . Del modelo declarativo: Abierto o Seguro. Del modelo con estado: Empaquetado o no, Con estado o no.
Abierto, declarativo, y desempaquetado Seguro, declarativo, y desempaquetado Seguro, declarativo, y empaquetado Seguro, con estado, y empaquetado Seguro, con estado, y desempaquetado
El estilo, abierto y declarativo, normal tal como se usa en Prolog y Scheme

El estilo TAD

El estilo APD con objetos declarativos El estilo APD con objetos con estado, tal como se usa en Smalltalk y Java

El estilo TAD con valores con estado


Modelos y Paradigmas de Programacin o

Juan Francisco D Frias az

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

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 {EsVaca} S==nil end in pila(colocar:Colocar sacar:Sacar esVaca:EsVaca) end in fun {PilaNueva} {ObjetoPila nil} end end

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

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 fun {EsVaca} @C==nil end in pila(colocar:Colocar sacar:Sacar esVaca:EsVaca) end

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

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 {EsVaca} @C==nil end in proc {$ Msj} case Msj of colocar(X) then {Colocar X} [] sacar(?E) then E={Sacar} [] esVaca(?B) then B={EsVaca} end end end
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

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 {EsVaca S} @{Desenvolver S}==nil end in Pila=pila(nueva:PilaNueva colocar:Colocar sacar:Sacar esVaca:EsVaca) end

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Plan
1

Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

2 3 4

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

El estilo Objeto
Objeto Una abstraccin de datos empaquetada se denomina abstraccin o o procedimental de datos, o APD. Y dene una entidad llamada objeto. Ejecucin de un objeto o Una operacin se ejecuta invocando al objeto e informndole o a cul operacin realizar: enviar un mensaje al objeto; Ojo. a o No lo es, en el sentido que lo hemos estudiado. Una invocacin a un objeto es sincrnica. o o Popularidad Modularidad y estructuracin de programas. o Facilidad con que el estilo objeto soporta polimorsmo y herencia. Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

El estilo Objeto
Objeto Una abstraccin de datos empaquetada se denomina abstraccin o o procedimental de datos, o APD. Y dene una entidad llamada objeto. Ejecucin de un objeto o Una operacin se ejecuta invocando al objeto e informndole o a cul operacin realizar: enviar un mensaje al objeto; Ojo. a o No lo es, en el sentido que lo hemos estudiado. Una invocacin a un objeto es sincrnica. o o Popularidad Modularidad y estructuracin de programas. o Facilidad con que el estilo objeto soporta polimorsmo y herencia. Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

El estilo Objeto
Objeto Una abstraccin de datos empaquetada se denomina abstraccin o o procedimental de datos, o APD. Y dene una entidad llamada objeto. Ejecucin de un objeto o Una operacin se ejecuta invocando al objeto e informndole o a cul operacin realizar: enviar un mensaje al objeto; Ojo. a o No lo es, en el sentido que lo hemos estudiado. Una invocacin a un objeto es sincrnica. o o Popularidad Modularidad y estructuracin de programas. o Facilidad con que el estilo objeto soporta polimorsmo y herencia. Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Plan
1

Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

2 3 4

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Polimorsmo
En lenguaje natural. . . Es la capacidad de una entidad de tomar varias formas. En el contexto de abstraccin de datos o Una operacin es polimrca si funciona correctamente con o o argumentos de diferentes tipos. Estilo Objeto vs TAD El polimorsmo es ms fcil de expresar en el estilo Objeto. a a Aunque se puede expresar en el estilo TAD, es ms incmodo a o pues requiere de mdulos de primera clase. o El estilo TAD ofrece mayor libertad para hacer implementaciones ecientes.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Polimorsmo
En lenguaje natural. . . Es la capacidad de una entidad de tomar varias formas. En el contexto de abstraccin de datos o Una operacin es polimrca si funciona correctamente con o o argumentos de diferentes tipos. Estilo Objeto vs TAD El polimorsmo es ms fcil de expresar en el estilo Objeto. a a Aunque se puede expresar en el estilo TAD, es ms incmodo a o pues requiere de mdulos de primera clase. o El estilo TAD ofrece mayor libertad para hacer implementaciones ecientes.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Polimorsmo
En lenguaje natural. . . Es la capacidad de una entidad de tomar varias formas. En el contexto de abstraccin de datos o Una operacin es polimrca si funciona correctamente con o o argumentos de diferentes tipos. Estilo Objeto vs TAD El polimorsmo es ms fcil de expresar en el estilo Objeto. a a Aunque se puede expresar en el estilo TAD, es ms incmodo a o pues requiere de mdulos de primera clase. o El estilo TAD ofrece mayor libertad para hacer implementaciones ecientes.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Plan
1

Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

2 3 4

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Ejemplo: un tipo Coleccin o

Tipo Coleccin o Tres operaciones:


agregar para aadir un elemento, n extraer para sacar un elemento, y o a a. esVaca para comprobar si la coleccin est vac

Implementacin o En estilo TAD, y en estilo Objeto.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Ejemplo: un tipo Coleccin o

Tipo Coleccin o Tres operaciones:


agregar para aadir un elemento, n extraer para sacar un elemento, y o a a. esVaca para comprobar si la coleccin est vac

Implementacin o En estilo TAD, y en estilo Objeto.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Implementacin tipo Coleccin en estilo TAD (1) o o


Usando una pila con estado, desempaquetada. . .
local Envolver Desenvolver {NuevoEmpacador Envolver Desenvolver} fun {NuevaColeccin} {Envolver {Pila.nueva}} o 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 {EsVaca C} {Pila.esVaca {Desenvolver C}} end in o o o Coleccin=coleccin(nueva:NuevaColeccin agregar:Agregar extraer:Extraer esVaca:EsVaca) end
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Implementacin tipo Coleccin en estilo TAD (2) o o

Ejemplo de uso
C={Coleccin.nueva} o {Coleccin.agregar C 1} o {Coleccin.agregar C 2} o o {Browse {Coleccin.extraer C}} o {Browse {Coleccin.extraer C}}

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Implementacin tipo Coleccin en estilo Objeto o o


Usando una pila con estado, empaquetada. . .
fun {NuevaColeccin} o S={PilaNueva} proc {Agregar X} {S.colocar X} end fun {Extraer} {S.sacar} end fun {EsVaca} {S.esVaca} end in coleccin(agregar:Agregar extraer:Extraer o esVaca:EsVaca) end

Ejemplo de uso
C={NuevaColeccin} o {C.agregar 1} {C.agregar 2} {Browse {C.extraer}} {Browse {C.extraer}}
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Extensin tipo Coleccin en estilo TAD (1) o o

Operacin unin o o
o o {Coleccin.unin C1 C2}:todos los elementos de C2 se agregan a C1, dejando C2 vac a.

Abstraccin de control DoUntil o


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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Extensin tipo Coleccin en estilo TAD (1) o o

Operacin unin o o
o o {Coleccin.unin C1 C2}:todos los elementos de C2 se agregan a C1, dejando C2 vac a.

Abstraccin de control DoUntil o


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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Extensin tipo Coleccin en estilo TAD (2) o o


Implementacin de unin o o
local Envolver Desenvolver ... proc {Unin C1 C2} o S1={Desenvolver C1} S2={Desenvolver C2} in {DoUntil fun {$} {Pila.esVaca S2} end proc {$} {Pila.colocar S1 {Pila.sacar S2}} end} end in Coleccin=coleccin(... unin:Unin) o o o o end

Esta implementacin utiliza tanto la representacin interna de C1 o o como la de C2


Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Extensin tipo Coleccin en estilo TAD (3) o o

o o Implementacin de unin usando slo las interfaces o local Envolver Desenvolver ... proc {Unin C1 C2} o {DoUntil fun {$} {Coleccin.esVaca C2} end o proc {$} {Coleccin.agregar C1 o {Coleccin.extraer C2}} end} o end in Coleccin=coleccin(... unin:Unin) o o o o end

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Extensin tipo Coleccin en estilo TAD (4) o o

Ejemplo de uso
C1={Coleccin.nueva} C2={Coleccin.nueva} o o for I in [1 2 3] do {Coleccin.agregar C1 I} end o for I in [4 5 6] do {Coleccin.agregar C2 I} end o {Coleccin.unin C1 C2} o o {Browse {Coleccin.esVaca C2}} o {DoUntil fun {$} {Coleccin.esVaca C1} end o proc {$} {Browse {Coleccin.extraer C1}} end} o

En resumen Rep. interna Eciencia No polimorsmo

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Extensin tipo Coleccin en estilo Objeto (1) o o


o Operacin unin o {C1.unin C2}:todos los elementos de C2 se agregan a C1, o dejando C2 vac a.

Implementacin o
fun {NuevaColeccin} o S1={PilaNueva} ... o proc {Unin C2} {DoUntil C2.esVaca proc {$} {S1.colocar {C2.extraer}} end} end in coleccin(... unin:Unin) o o o end

Se usa la representacin interna de Modelos y Paradigmas de Programacin o C1, pero la interfaz externa de Juan Francisco D Frias az o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Extensin tipo Coleccin en estilo Objeto (1) o o


o Operacin unin o {C1.unin C2}:todos los elementos de C2 se agregan a C1, o dejando C2 vac a.

Implementacin o
fun {NuevaColeccin} o S1={PilaNueva} ... o proc {Unin C2} {DoUntil C2.esVaca proc {$} {S1.colocar {C2.extraer}} end} end in coleccin(... unin:Unin) o o o end

Se usa la representacin interna de Modelos y Paradigmas de Programacin o C1, pero la interfaz externa de Juan Francisco D Frias az o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Extensin tipo Coleccin en estilo Objeto (2) o o

Implementacin de unin usando slo las interfaces o o o


o fun {NuevaColeccin} ... o proc {Unin C2} {DoUntil C2.esVaca proc {$} {This.agregar {C2.extraer}} end} end This=coleccin(... unin:Unin) o o o in This end

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Cmo escoger entre los estilos TAD y objeto? o


Eciencia El estilo TAD puede ser ms eciente porque permite acceder a a ambas representaciones internas. Unica alternativa Algunas veces el estilo TAD es el unico que funciona: Suma de enteros. Polimorsmo en Objeto es gratis Si D es un objeto coleccin con la misma interfaz de C, aunque o condiferente implementacin, {C unin(D)} funciona. Por qu? o o e Concurrencia El estilo objeto no est limitado a objetos secuenciales: Objetos a ujo, puerto y activos.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Cmo escoger entre los estilos TAD y objeto? o


Eciencia El estilo TAD puede ser ms eciente porque permite acceder a a ambas representaciones internas. Unica alternativa Algunas veces el estilo TAD es el unico que funciona: Suma de enteros. Polimorsmo en Objeto es gratis Si D es un objeto coleccin con la misma interfaz de C, aunque o condiferente implementacin, {C unin(D)} funciona. Por qu? o o e Concurrencia El estilo objeto no est limitado a objetos secuenciales: Objetos a ujo, puerto y activos.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Cmo escoger entre los estilos TAD y objeto? o


Eciencia El estilo TAD puede ser ms eciente porque permite acceder a a ambas representaciones internas. Unica alternativa Algunas veces el estilo TAD es el unico que funciona: Suma de enteros. Polimorsmo en Objeto es gratis Si D es un objeto coleccin con la misma interfaz de C, aunque o condiferente implementacin, {C unin(D)} funciona. Por qu? o o e Concurrencia El estilo objeto no est limitado a objetos secuenciales: Objetos a ujo, puerto y activos.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Cmo escoger entre los estilos TAD y objeto? o


Eciencia El estilo TAD puede ser ms eciente porque permite acceder a a ambas representaciones internas. Unica alternativa Algunas veces el estilo TAD es el unico que funciona: Suma de enteros. Polimorsmo en Objeto es gratis Si D es un objeto coleccin con la misma interfaz de C, aunque o condiferente implementacin, {C unin(D)} funciona. Por qu? o o e Concurrencia El estilo objeto no est limitado a objetos secuenciales: Objetos a ujo, puerto y activos.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Cmo escoger entre los estilos TAD y objeto? (2) o


Polimorsmo en TAD implica mdulos de primera clase o
proc {Unin C1 Coleccin2 C2} o o o {DoUntil fun {$} {Coleccin2.esVaca C2} end o proc {$} {Coleccin.agregar C1 o {Coleccin2.extraer C2}} end} end Coleccin=coleccin(... unin:Unin) o o o o

La implementacin de unin tiene que asegurarse que C2 siempre o o utilice una operacin de Coleccin2. o o Interoperabilidad en TAD Si utilizamos el estilo TAD sin mdulos de primera clase, entonces o debemos escribir cdigo nuevo para que los tipos puedan o o interoperar. Tenemos que escribir una operacin unin que o conozca ambas representaciones internas.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Cmo escoger entre los estilos TAD y objeto? (2) o


Polimorsmo en TAD implica mdulos de primera clase o
proc {Unin C1 Coleccin2 C2} o o o {DoUntil fun {$} {Coleccin2.esVaca C2} end o proc {$} {Coleccin.agregar C1 o {Coleccin2.extraer C2}} end} end Coleccin=coleccin(... unin:Unin) o o o o

La implementacin de unin tiene que asegurarse que C2 siempre o o utilice una operacin de Coleccin2. o o Interoperabilidad en TAD Si utilizamos el estilo TAD sin mdulos de primera clase, entonces o debemos escribir cdigo nuevo para que los tipos puedan o o interoperar. Tenemos que escribir una operacin unin que o conozca ambas representaciones internas.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Otras clases de polimorsmo, distinto al universal

Polimorsmo ad-hoc Se ejecuta cdigo diferente para argumentos de tipos diferentes. o Por ejemplo el operador de sobrecarga. Polimorsmo por subtipos Se ejecuta el mismo cdigo para todos los argumentos cuyo tipo o sea un subtipo del tipo ms general. Por ejemplo, Registros, tuplas a y listas.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o

Otras clases de polimorsmo, distinto al universal

Polimorsmo ad-hoc Se ejecuta cdigo diferente para argumentos de tipos diferentes. o Por ejemplo el operador de sobrecarga. Polimorsmo por subtipos Se ejecuta el mismo cdigo para todos los argumentos cuyo tipo o sea un subtipo del tipo ms general. Por ejemplo, Registros, tuplas a y listas.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Principios de la POO
El modelo de computacin o El modelo de computacin de la POO es el modelo con estado. o Qu es un programa? e Los programas son colecciones de abstracciones de datos que interactan entre ellas. Dos principios para construirlas: u Las abstracciones de datos deben tener estado por defecto. El estilo objeto, por defecto, deber ser el estilo APD, el cual a fomenta el polimorsmo y la herencia. En resumen. . . La POO es la programacin con abstraccin de datos en forma de o o objetos, estado expl cito, polimorsmo, y herencia.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Principios de la POO
El modelo de computacin o El modelo de computacin de la POO es el modelo con estado. o Qu es un programa? e Los programas son colecciones de abstracciones de datos que interactan entre ellas. Dos principios para construirlas: u Las abstracciones de datos deben tener estado por defecto. El estilo objeto, por defecto, deber ser el estilo APD, el cual a fomenta el polimorsmo y la herencia. En resumen. . . La POO es la programacin con abstraccin de datos en forma de o o objetos, estado expl cito, polimorsmo, y herencia.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Principios de la POO
El modelo de computacin o El modelo de computacin de la POO es el modelo con estado. o Qu es un programa? e Los programas son colecciones de abstracciones de datos que interactan entre ellas. Dos principios para construirlas: u Las abstracciones de datos deben tener estado por defecto. El estilo objeto, por defecto, deber ser el estilo APD, el cual a fomenta el polimorsmo y la herencia. En resumen. . . La POO es la programacin con abstraccin de datos en forma de o o objetos, estado expl cito, polimorsmo, y herencia.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Herencia

Observacin o Muchas abstracciones de datos tienen mucho en comn, v. gr. los u conjuntos. Podemos implementarlas sin duplicar las partes comunes? Problema: duplicacin de cdigo o o Programas ms largos. a Se diculta el mantenimiento: modicacin de todas las o copias. Copias ligeramente diferentes: relacion entre cambios no obvia.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Herencia

Observacin o Muchas abstracciones de datos tienen mucho en comn, v. gr. los u conjuntos. Podemos implementarlas sin duplicar las partes comunes? Problema: duplicacin de cdigo o o Programas ms largos. a Se diculta el mantenimiento: modicacin de todas las o copias. Copias ligeramente diferentes: relacion entre cambios no obvia.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Herencia
Para qu el concepto de herencia? e Para reducir el problema de la duplicacin de cdigo y para o o claricar las relaciones entre las abstracciones de datos. Cmo? o Una abstraccin hereda de otra(s), teniendo esencialmente o la misma funcionalidad que las otras, posiblemente con algunas extensiones y modicaciones. Slo se especican las diferencias entre la abstraccin de o o datos y sus ancestros. A tal denicin incremental de una abstraccin de datos se le o o denomina una clase.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Herencia
Para qu el concepto de herencia? e Para reducir el problema de la duplicacin de cdigo y para o o claricar las relaciones entre las abstracciones de datos. Cmo? o Una abstraccin hereda de otra(s), teniendo esencialmente o la misma funcionalidad que las otras, posiblemente con algunas extensiones y modicaciones. Slo se especican las diferencias entre la abstraccin de o o datos y sus ancestros. A tal denicin incremental de una abstraccin de datos se le o o denomina una clase.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Herencia: clase

Cmo se dene una clase? o Por combinacin de una o ms clases existentes con una o a descripcin de las extensiones y modicaciones requeridas. o Concepto nuevo? NO! Abstraccin ling o ustica. Manipulacin sintctica, donde la sintaxis de la clase nueva se o a deriva a partir de las clases originales. Funcin que recibe como entrada valores de tipo clase y o devuelve como salida la clase nueva.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Herencia: clase

Cmo se dene una clase? o Por combinacin de una o ms clases existentes con una o a descripcin de las extensiones y modicaciones requeridas. o Concepto nuevo? NO! Abstraccin ling o ustica. Manipulacin sintctica, donde la sintaxis de la clase nueva se o a deriva a partir de las clases originales. Funcin que recibe como entrada valores de tipo clase y o devuelve como salida la clase nueva.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Use la herencia con cuidado (1)


Conocimiento profundo de las clases ancestro Pues ellas pueden romper fcilmente un invariante de clase. a 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 nales (no se pueden extender) por defecto. Para extenderlas, se requiere la accin expl o cita del programador.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Use la herencia con cuidado (1)


Conocimiento profundo de las clases ancestro Pues ellas pueden romper fcilmente un invariante de clase. a 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 nales (no se pueden extender) por defecto. Para extenderlas, se requiere la accin expl o cita del programador.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Use la herencia con cuidado (2)

Factorizacin de una aplicacin vs. dispersin de la implementacin o o o o La implementacin no existe en un sitio; todas las abstracciones de o las que se hereda tienen que considerarse juntas. Esto diculta entender la abstraccin, y, paradjicamente, puede o o dicultar su mantenimiento. Leccin o La herencia debe utilizarse en pequeas cantidades. n

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Use la herencia con cuidado (2)

Factorizacin de una aplicacin vs. dispersin de la implementacin o o o o La implementacin no existe en un sitio; todas las abstracciones de o las que se hereda tienen que considerarse juntas. Esto diculta entender la abstraccin, y, paradjicamente, puede o o dicultar su mantenimiento. Leccin o La herencia debe utilizarse en pequeas cantidades. n

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Alternativa a la herencia. . .

Programacin Basada en componentes o La idea es denir un componente que encapsula a otro componente y provee una funcionalidad modicada. Compromiso Herencia - Componentes La herencia es ms exible pero puede romper un invariante de a clase, mientras que la composicin de componentes es menos o exible pero no puede romper un invariante de componente.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Alternativa a la herencia. . .

Programacin Basada en componentes o La idea es denir un componente que encapsula a otro componente y provee una funcionalidad modicada. Compromiso Herencia - Componentes La herencia es ms exible pero puede romper un invariante de a clase, mientras que la composicin de componentes es menos o exible pero no puede romper un invariante de componente.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Conjunto de conceptos para denir clases

Para construir abstracciones de datos completas Los mtodos, los atributos, y las propiedades. e Mensajes de primera clase y atributos de primera clase: para lograr formas poderosas de polimorsmo. Para construir abstracciones de datos incrementalmente Los conceptos relacionados con la herencia, i.e., los que denen cmo se relaciona una clase con las clases existentes. o

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Conjunto de conceptos para denir clases

Para construir abstracciones de datos completas Los mtodos, los atributos, y las propiedades. e Mensajes de primera clase y atributos de primera clase: para lograr formas poderosas de polimorsmo. Para construir abstracciones de datos incrementalmente Los conceptos relacionados con la herencia, i.e., los que denen cmo se relaciona una clase con las clases existentes. o

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Plan
1

Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

2 3 4

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 abstraccin ling o ustica.

Sintcticamente: a Nombre Contador (podr ser a annima). o Atributos: val. Mtodos: inic, browse, e inc. e Operadores: := y @.
Modelos y Paradigmas de Programacin o

Juan Francisco D Frias az

Recorderis: Abstraccin de datos o 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 abstraccin ling o ustica.

Sintcticamente: a Nombre Contador (podr ser a annima). o Atributos: val. Mtodos: inic, browse, e inc. e Operadores: := y @.
Modelos y Paradigmas de Programacin o

Juan Francisco D Frias az

Recorderis: Abstraccin de datos o 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 abstraccin ling o ustica.

Sintcticamente: a Nombre Contador (podr ser a annima). o Atributos: val. Mtodos: inic, browse, e inc. e Operadores: := y @.
Modelos y Paradigmas de Programacin o

Juan Francisco D Frias az

Recorderis: Abstraccin de datos o 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 slo sintctica? o a

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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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}

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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Un ejemplo de clase: semntica (1) a


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] mtodos:m(inic:Inic e browse:Browse2 inc:Inc)) end
Juan Francisco D Frias az

Detalles Una clase es un registro: nombres de atributos; mtodos. e Nombre de atributo: literal. Mtodo: e procedimiento de dos argumentos: mensaje y estado. Asignacin val:= y o acceso @val.

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Un ejemplo de clase: semntica (1) a


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] mtodos:m(inic:Inic e browse:Browse2 inc:Inc)) end
Juan Francisco D Frias az

Detalles Una clase es un registro: nombres de atributos; mtodos. e Nombre de atributo: literal. Mtodo: e procedimiento de dos argumentos: mensaje y estado. Asignacin val:= y o acceso @val.

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Un ejemplo de clase: semntica (2) a


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

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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Un ejemplo de clase: semntica (2) a


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

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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Sintaxis de clase (1)

declaracin ::= class variable { descriptorClase } o { meth cabezaMtodo [ = variable ] e ( expresinEn | declaracinEn ) end } o o | | | |
end lock [ expresin then ] declaracinEn end o o expresin := expresin o o expresin , expresin o o

...

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Sintaxis de clase (2)

expresin ::= class $ { descriptorClase } o { meth cabezaMtodo [ = variable ] e ( expresinEn | declaracinEn ) end } o o
end | lock [ expresin then ] expresinEn end o o | expresin := expresin o o | expresin , expresin o o | @ expresin o | self

| ...

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Sintaxis de clase (3)

descriptorClase ::= from { expresin }+ | prop { expresin }+ o o | attr { inicAtrb }+ inicAtrb ::= ( [ ! ] variable | atomo | unit | true | false ) [ : expresin ] o cabezaMtodo ::= ( [ ! ] variable | atomo | unit | true | false ) e [ ( { argMtodo } [ ... ] ) ] e [ = variable ] argMtodo e ::= [ feature : ] ( variable | _ | $ ) [ <= expresin ] o

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Sintaxis de clase (4)


Caracter sticas Nmero de objetos ilimitado. u Qu es una clase? e Una clase es una estructura de Cada objeto se comporta segn la u datos que dene un estado denicin de clase. o interno de un objeto (atributos), su Creacin, invocacin o o comportamiento (mtodos), e 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 D Frias az Modelos y Paradigmas de Programacin o

Objeto instancia. Cada instancia tiene identidad unica.

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Sintaxis de clase (4)


Caracter sticas Nmero de objetos ilimitado. u Qu es una clase? e Una clase es una estructura de Cada objeto se comporta segn la u datos que dene un estado denicin de clase. o interno de un objeto (atributos), su Creacin, invocacin o o comportamiento (mtodos), e 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 D Frias az Modelos y Paradigmas de Programacin o

Objeto instancia. Cada instancia tiene identidad unica.

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Sintaxis de clase (4)


Caracter sticas Nmero de objetos ilimitado. u Qu es una clase? e Una clase es una estructura de Cada objeto se comporta segn la u datos que dene un estado denicin de clase. o interno de un objeto (atributos), su Creacin, invocacin o o comportamiento (mtodos), e 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 D Frias az Modelos y Paradigmas de Programacin o

Objeto instancia. Cada instancia tiene identidad unica.

Recorderis: Abstraccin de datos o 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: expr 1 := expr
@ expr
2

expr 3 = expr 1 := expr 2 .

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)

Mtodos: palabra reservada meth e 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 tomo a o un nombre, y de un conjunto de argumentos. Los argumentos deben ser variables diferentes; de otra manera ser un error de sintaxis. a CabezaPatrn y MensajeRegistro. o

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 modica cmo se comporta un objeto: o La propiedad locking crea un candado nuevo con cada instancia de objeto. La propiedad final hace que la clase sea una clase nal

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 tomos o como identicadores a Las etiquetas de los atributos y de los mtodos son literales. e Si se denen utilizando la sintaxis de tomo, entonces son a a tomos. Si se denen con la sintaxis de identicadores (e.g., en mayscula), entonces el sistema crear nombres nuevos para u a ellos, cuyo alcance es la denicin de la clase. o

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Inicializacin de atributos (1) o

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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Inicializacin de atributos (2) o


Inicializacin por clase o Un atributo puede tener un valor que sea el mismo para todas las instancias de la clase. Esto se hace, inicializndolo con : en la a denicin de clase. o Ejemplo
class ApartQuinta attr nombreCalle:calleQuinta nmeroCalle:100 u colorPared:_ superficiePiso:madera meth inic skip end end Apt3={New ApartQuinta inic} Apt4={New ApartQuinta inic}
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Inicializacin de atributos (3) o

Inicializacin por marca o Esta es otra manera de utilizar la inicializacin por clase. Una o 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 D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos son e patrones que reconocen un registro. Invocacin de objeto {Obj M} o Registro esttico como mensaje. En el caso ms sencillo, M es a a un registro que se conoce en tiempo de compilacin, e.g., o como en la invocacin {Contador inc(X)}. o Registro dinmico como mensaje. Es posible invocar {Obj M} a donde M es una variable que referencia un registro que se calcula en tiempo de ejecucin. Como el tipamiento es o dinmico, es posible crear nuevos tipos de registros en tiempo a de ejecucin (e.g., con Adjoin o List.toRecord). o
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos son e patrones que reconocen un registro. Invocacin de objeto {Obj M} o Registro esttico como mensaje. En el caso ms sencillo, M es a a un registro que se conoce en tiempo de compilacin, e.g., o como en la invocacin {Contador inc(X)}. o Registro dinmico como mensaje. Es posible invocar {Obj M} a donde M es una variable que referencia un registro que se calcula en tiempo de ejecucin. Como el tipamiento es o dinmico, es posible crear nuevos tipos de registros en tiempo a de ejecucin (e.g., con Adjoin o List.toRecord). o
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Denicin de un mtodo (1) o e Lista ja de argumentos:
meth foo(a:A b:B c:C) % Cuerpo del mtodo e end

Lista exible de argumentos:


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

Referencia variable a la cabeza del mtodo: e


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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Denicin de un mtodo (2) o e Argumento opcional:valor por defecto, se usa slo si el o argumento no viene en el mensaje.
meth foo(a:A b:B<=V) % Cuerpo del mtodo e end foo(a:1 b:2) ignora V, foo(a:1) foo(a:1 b:V)

Etiqueta privada de mtodo: A se liga a un nombre fresco e cuando se dene la clase.


meth A(bar:X) % Cuerpo del mtodo e end

Etiqueta dinmica de mtodo: a e


meth !A(bar:X) % Cuerpo del mtodo e end
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Denicin de un mtodo (3) o e Etiqueta dinmica de mtodo: a e
meth !A(bar:X) e % Cuerpo del mtodo end

La etiqueta del mtodo debe ser conocida en el momento en e que la denicin de clase sea ejecutada. o El mtodo otherwise: acepta cualquier mensaje para el cual e no exista ningn otro mtodo. u e
meth otherwise(M) % Cuerpo del mtodo e end

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Cmo hace el compilador con la invocacin o o

{Obj M}?

Estticamente . . . a Determinar Obj y M. Si puede, compila a una instruccin muy o rpida y especializada. a Si no puede . . . Compila a un instruccin general de invocacin de un objeto. o o La instruccin general utiliza el ocultamiento. o La primera invocacin es lenta, pero las subsiguientes son casi o tan rpidas como las invocaciones especializadas. a

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Plan
1

Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

2 3 4

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 Dene cules clases preexistentes se extendern. Se permitir tanto a a a herencia sencilla como herencia mltiple. u Control de acceso a los mtodos e Dene cmo se accede a los mtodos en particular, tanto en la o e clase nueva como en las clases preexistentes. Esto se logra con ligaduras esttica y dinmica y con el concepto de self. a a Control de la encapsulacin o Dene qu parte de un programa puede ver los atributos y e mtodos de una clase. e Otros conceptos . . . Reenv delegacin, y reexin. o, o o
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 Dene cules clases preexistentes se extendern. Se permitir tanto a a a herencia sencilla como herencia mltiple. u Control de acceso a los mtodos e Dene cmo se accede a los mtodos en particular, tanto en la o e clase nueva como en las clases preexistentes. Esto se logra con ligaduras esttica y dinmica y con el concepto de self. a a Control de la encapsulacin o Dene qu parte de un programa puede ver los atributos y e mtodos de una clase. e Otros conceptos . . . Reenv delegacin, y reexin. o, o o
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 Dene cules clases preexistentes se extendern. Se permitir tanto a a a herencia sencilla como herencia mltiple. u Control de acceso a los mtodos e Dene cmo se accede a los mtodos en particular, tanto en la o e clase nueva como en las clases preexistentes. Esto se logra con ligaduras esttica y dinmica y con el concepto de self. a a Control de la encapsulacin o Dene qu parte de un programa puede ver los atributos y e mtodos de una clase. e Otros conceptos . . . Reenv delegacin, y reexin. o, o o
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 Dene cules clases preexistentes se extendern. Se permitir tanto a a a herencia sencilla como herencia mltiple. u Control de acceso a los mtodos e Dene cmo se accede a los mtodos en particular, tanto en la o e clase nueva como en las clases preexistentes. Esto se logra con ligaduras esttica y dinmica y con el concepto de self. a a Control de la encapsulacin o Dene qu parte de un programa puede ver los atributos y e mtodos de una clase. e Otros conceptos . . . Reenv delegacin, y reexin. o, o o
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos y atributos e La herencia es una forma de construir clases nuevas a partir de clases existentes. La herencia dene qu atributos y mtodos estn disponibles en la e e a clase nueva. Relacin de precedencia: Relacin de anulacin o o o Un mtodo (atributo) en la clase C anula cualquier mtodo e e (atributo) con la misma etiqueta (el mismo nombre) en todas las superclases de C.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos y atributos e La herencia es una forma de construir clases nuevas a partir de clases existentes. La herencia dene qu atributos y mtodos estn disponibles en la e e a clase nueva. Relacin de precedencia: Relacin de anulacin o o o Un mtodo (atributo) en la clase C anula cualquier mtodo e e (atributo) con la misma etiqueta (el mismo nombre) en todas las superclases de C.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mltiple u (se hereda de varias clases. Sintcticamente: from. a Superclases Una clase B es una superclase de la clase A si
B aparece en la parte from de la declaracin de A, o o B es una superclase de una clase que aparece en la parte from de la declaracin de A. o

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mltiple u (se hereda de varias clases. Sintcticamente: from. a Superclases Una clase B es una superclase de la clase A si
B aparece en la parte from de la declaracin de A, o o B es una superclase de una clase que aparece en la parte from de la declaracin de A. o

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Grafo de herencia (3)


Jerarqu de clases a Grafo dirigido de la relacin de superclase cuya ra es la clase o z actual. Las aristas son dirigidas hacia las subclases. Legalidad de la herencia La relacin de herencia es dirigida y ac o clica.
class A from B ... end class B from A ... end

Cada mtodo (salvo los anulados) debe tener una etiqueta e unica y debe estar denido en una sola clase en la jerarqu a.
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 D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Grafo de herencia (3)


Jerarqu de clases a Grafo dirigido de la relacin de superclase cuya ra es la clase o z actual. Las aristas son dirigidas hacia las subclases. Legalidad de la herencia La relacin de herencia es dirigida y ac o clica.
class A from B ... end class B from A ... end

Cada mtodo (salvo los anulados) debe tener una etiqueta e unica y debe estar denido en una sola clase en la jerarqu a.
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 D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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

A C

C Jerarqua de clases legal


(un m visible desde C)

Jerarqua de clases ilegal


(dos m visibles desde C)

Tambin es ilegal . . . e
class A meth m(...) ... end end class B meth m(...) ... end end class C from A B end
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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

A C

C Jerarqua de clases legal


(un m visible desde C)

Jerarqua de clases ilegal


(dos m visibles desde C)

Tambin es ilegal . . . e
class A meth m(...) ... end end class B meth m(...) ... end end class C from A B end
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 {ClaseExtraa} n 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 ejecucin o


ClaseExtraa se puede compilar y ejecutar exitosamente. Slo se n o lanzar una excepcin en la invocacin {ClaseExtraa}. a o o n

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 {ClaseExtraa} n 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 ejecucin o


ClaseExtraa se puede compilar y ejecutar exitosamente. Slo se n o lanzar una excepcin en la invocacin {ClaseExtraa}. a o o n

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (1) e


Bsqueda del mtodo correcto u e Cuando se invoca un mtodo de un objeto: cul mtodo se e a e ejecuta? Esto parece bastante sencillo, pero se vuelve ligeramente ms complicado cuando est involucrada la herencia. a a Ligadura esttica y dinmica a a La herencia se utiliza para denir una clase nueva que extiende una clase existente. Ambas clases pueden tener mtodos con el mismo e nombre, y la clase nueva puede querer invocar cualquiera de ellos. Se necesitan dos maneras de invocar: ligadura esttica y ligadura a dinmica. a

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (1) e


Bsqueda del mtodo correcto u e Cuando se invoca un mtodo de un objeto: cul mtodo se e a e ejecuta? Esto parece bastante sencillo, pero se vuelve ligeramente ms complicado cuando est involucrada la herencia. a a Ligadura esttica y dinmica a a La herencia se utiliza para denir una clase nueva que extiende una clase existente. Ambas clases pueden tener mtodos con el mismo e nombre, y la clase nueva puede querer invocar cualquiera de ellos. Se necesitan dos maneras de invocar: ligadura esttica y ligadura a dinmica. a

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (2) e


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 D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (3) e


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

Creacin e invocacin o o
CtaVig={New CuentaVigilada transferir(100)}

qu pasa cuando invocamos transferEnLote? e Se invoca transferir de Cuenta o transferir de CuentaVigilada?


Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (3) e


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

Creacin e invocacin o o
CtaVig={New CuentaVigilada transferir(100)}

qu pasa cuando invocamos transferEnLote? e Se invoca transferir de Cuenta o transferir de CuentaVigilada?


Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (4) e

Cul deber invocarse? a a


transferir de CuentaVigilada.

Esto se denomina ligadura dinmica: {self transferir(A)}. a Ligadura dinmica: necesidad a Se conserva la funcionalidad de la anterior abstraccin al tiempo o que se aade una funcionalidad nueva. n

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (4) e

Cul deber invocarse? a a


transferir de CuentaVigilada.

Esto se denomina ligadura dinmica: {self transferir(A)}. a Ligadura dinmica: necesidad a Se conserva la funcionalidad de la anterior abstraccin al tiempo o que se aade una funcionalidad nueva. n

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (5) e


Ligadura dinmica: limitacin a o
class CuentaVigilada from Cuenta meth transferir(Cant) {LogObj agregueEntrada(transferir(Cant))} Cuenta,transferir(Cant) end end

Dentro del nuevo mtodo transferir, tenemos que invocar el e antiguo mtodo transferir. Podemos usar ligadura dinmica? e a Ligadura esttica:necesidad a Invocamos un mtodo sealando la clase del mtodo: e n e
Cuenta,transferir(Cant)
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (5) e


Ligadura dinmica: limitacin a o
class CuentaVigilada from Cuenta meth transferir(Cant) {LogObj agregueEntrada(transferir(Cant))} Cuenta,transferir(Cant) end end

Dentro del nuevo mtodo transferir, tenemos que invocar el e antiguo mtodo transferir. Podemos usar ligadura dinmica? e a Ligadura esttica:necesidad a Invocamos un mtodo sealando la clase del mtodo: e n e
Cuenta,transferir(Cant)
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (6) e

Ligadura dinmica y esttica a a La ligadura dinmica permite a la clase nueva extender a correctamente la clase antigua dejando que los mtodos e antiguos invoquen los mtodos nuevos, aunque los mtodos e e nuevos no existan en el momento en que los mtodos antiguos e se denen. La ligadura esttica permite que los nuevos mtodos invoquen a e los mtodos antiguos cuando tengan que hacerlo. e

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (7) e


Resumen ligadura dinmica a Se escribe {self M}. Este tipo de ligadura escoge el correspondiente mtodo M visible en el objeto actual, tomando en e cuenta la anulacin que haya sido realizada. o Resumen ligadura esttica a Se escribe C, M (con una coma), donde C es una clase donde se dene el correspondiente mtodo M. Este tipo de ligadura escoge el e mtodo M visible en la clase C, tomando en cuenta las anulaciones e de mtodos desde la clase ra hasta la clase C, pero no ms. e z a Si el objeto es de una subclase de C que ha anulado el mtodo M e de nuevo, entonces sta anulacin no es tenida en cuenta. e o
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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 mtodos (7) e


Resumen ligadura dinmica a Se escribe {self M}. Este tipo de ligadura escoge el correspondiente mtodo M visible en el objeto actual, tomando en e cuenta la anulacin que haya sido realizada. o Resumen ligadura esttica a Se escribe C, M (con una coma), donde C es una clase donde se dene el correspondiente mtodo M. Este tipo de ligadura escoge el e mtodo M visible en la clase C, tomando en cuenta las anulaciones e de mtodos desde la clase ra hasta la clase C, pero no ms. e z a Si el objeto es de una subclase de C que ha anulado el mtodo M e de nuevo, entonces sta anulacin no es tenida en cuenta. e o
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (1) o


Principio Limitar el acceso a los miembros de la clase, a saber, atributos y mtodos, de acuerdo a los requerimientos de la arquitectura de la e aplicacin. o Alcance de un miembro Cada miembro se dene 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 l. e Tipos de alcance Por defecto, o modicado por palabras reservadas como public, private, y protected. Cada lenguaje usa estos alcances con signicados ligeramente diferentes.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (1) o


Principio Limitar el acceso a los miembros de la clase, a saber, atributos y mtodos, de acuerdo a los requerimientos de la arquitectura de la e aplicacin. o Alcance de un miembro Cada miembro se dene 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 l. e Tipos de alcance Por defecto, o modicado por palabras reservadas como public, private, y protected. Cada lenguaje usa estos alcances con signicados ligeramente diferentes.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (1) o


Principio Limitar el acceso a los miembros de la clase, a saber, atributos y mtodos, de acuerdo a los requerimientos de la arquitectura de la e aplicacin. o Alcance de un miembro Cada miembro se dene 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 l. e Tipos de alcance Por defecto, o modicado por palabras reservadas como public, private, y protected. Cada lenguaje usa estos alcances con signicados ligeramente diferentes.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (2) o


Alcance privado Un miembro privado es aquel que slo es visible en la instancia o correspondiente al objeto. Esta instancia puede ver todos los miembros denidos en su clase y en sus superclases. Visibilidad vertical. Alcance pblico u Un miembro pblico es aquel que es visible en cualquier parte del u programa. Qu es lo natural? e Que los atributos sean privados y los mtodos sean pblicos, como e u en Oz y Smalltalk.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (2) o


Alcance privado Un miembro privado es aquel que slo es visible en la instancia o correspondiente al objeto. Esta instancia puede ver todos los miembros denidos en su clase y en sus superclases. Visibilidad vertical. Alcance pblico u Un miembro pblico es aquel que es visible en cualquier parte del u programa. Qu es lo natural? e Que los atributos sean privados y los mtodos sean pblicos, como e u en Oz y Smalltalk.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (2) o


Alcance privado Un miembro privado es aquel que slo es visible en la instancia o correspondiente al objeto. Esta instancia puede ver todos los miembros denidos en su clase y en sus superclases. Visibilidad vertical. Alcance pblico u Un miembro pblico es aquel que es visible en cualquier parte del u programa. Qu es lo natural? e Que los atributos sean privados y los mtodos sean pblicos, como e u en Oz y Smalltalk.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (3) o

Atributos privados Los atributos son internos a la abstraccin de datos y deben ser o invisibles desde el exterior. Mtodos pblicos e u Los mtodos conforman la interfaz externa de la abstraccin de e o datos, por lo tanto deber ser visibles para todas las entidades an que referencian la abstraccin. o

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (3) o

Atributos privados Los atributos son internos a la abstraccin de datos y deben ser o invisibles desde el exterior. Mtodos pblicos e u Los mtodos conforman la interfaz externa de la abstraccin de e o datos, por lo tanto deber ser visibles para todas las entidades an que referencian la abstraccin. o

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (4) o

Dos conceptos bsicos para controlar la encapsulacin a o Alcance lxico y valores de tipo nombre. Con ellos se implementa: e Alcane pblico. u Alcance privado. Alcance privado y protegido de C++ y Java. Tcnica fundamental e La tcnica fundamental es permitir que las cabezas de los mtodos e e sean valores de tipo nombre en lugar de tomos. a

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (4) o

Dos conceptos bsicos para controlar la encapsulacin a o Alcance lxico y valores de tipo nombre. Con ellos se implementa: e Alcane pblico. u Alcance privado. Alcance privado y protegido de C++ y Java. Tcnica fundamental e La tcnica fundamental es permitir que las cabezas de los mtodos e e sean valores de tipo nombre en lugar de tomos. a

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (5) o

Mtodos privados (en el sentido de C++ y Java) e


=
Jerarqua de clases C
Regin de visibilidad para el objeto I3: todos los atributos privados en esta regin son visibles para I3

SubC

private de acuerdo a Smalltalk and Oz

SubSubC

...
Instancias I1 I2 I3

...

In

private de acuerdo a C++ and Java

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (6) o


Implementacin v nombres (1) o a Utilizando un identicador de variable como la cabeza del mtodo. e
class C meth A(X) % Cuerpo del mtodo e end end

Implementacin v nombres (2) o a


local A={NewName} in class C meth !A(X) e % Cuerpo del mtodo end Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (6) o


Implementacin v nombres (1) o a Utilizando un identicador de variable como la cabeza del mtodo. e
class C meth A(X) % Cuerpo del mtodo e end end

Implementacin v nombres (2) o a


local A={NewName} in class C meth !A(X) e % Cuerpo del mtodo end Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (7) o


Mtodos protegidos (en el sentido de C++) e En C++, un mtodo protegido solamente es accesible desde la e clase donde fue denido o en las clases descendientes (y en todas las instancias de objetos de esas clases). Implementacin o
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 D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (7) o


Mtodos protegidos (en el sentido de C++) e En C++, un mtodo protegido solamente es accesible desde la e clase donde fue denido o en las clases descendientes (y en todas las instancias de objetos de esas clases). Implementacin o
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 D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (8) o

Atomos o nombres como cabezas de mtodos e Los tomos son visibles a travs de todo el programa y los a e nombres slo son visibles en el alcance lxico de su creacin. o e o Use nombres para mtodos internos, y use tomos para e a mtodos externos. e Cmo lo hacen los lenguajes ms populares? o a Smalltalk, C++, y Java slo soportan tomos como cabezas de o a mtodos; no tienen soporte para los nombres. e El enfoque basado en nombres no es popular todav a.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (8) o

Atomos o nombres como cabezas de mtodos e Los tomos son visibles a travs de todo el programa y los a e nombres slo son visibles en el alcance lxico de su creacin. o e o Use nombres para mtodos internos, y use tomos para e a mtodos externos. e Cmo lo hacen los lenguajes ms populares? o a Smalltalk, C++, y Java slo soportan tomos como cabezas de o a mtodos; no tienen soporte para los nombres. e El enfoque basado en nombres no es popular todav a.

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o Principios de la POO Herencia Un modelo OO

Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales

Control de encapsulacin (9) o


Sencillez de los tomos a Los tomos se identican unicamente por sus representaciones a impresas. Con los nombres esto es ms dif el programa mismo tiene a cil: que pasar de alguna manera el nombre a quien desea invocar el mtodo. e Ventajas de los nombres Imposible tener conictos con la herencia (sencilla o mltiple). u La encapsulacin se puede manejar mejor, pues una referencia o a un objeto no da necesariamente derecho a invocar los mtodos del objeto. e Los nombres pueden tener soporte sintctico para simplicar a su uso.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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
definida sobre clases self comn

Delegacin
definida sobre objetos self comn

Reenvo
definida sobre objetos 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

Enfoques dinmicos: al momento de la creacin del objeto

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Reenv - Implementacin o o
local class MezclarReenvo attr Reenvo:ninguno meth asgnReenvo(F) Reenvo:=F end meth otherwise(M) if @Reenvo==ninguno then raise e mtodoIndefinido end else {@Reenvo M} end end end in fun {NewF Clase Inic} {New class $ from Clase MezclarReenvo end Inic} end end Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Reenv - Utilizacin o o
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 asgnReenvo(Obj1)}

Invocar {Obj2 cubo(10 X)} llevar a Obj2 a reenviar el mensaje a a Obj1.


Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Delegacin o Jerarqu entre objetos y no entre clases. a Un objeto no hereda de una clase, sino que delega a otro objeto. Los mismos efectos de la herencia, pero la jerarqu se puede a cambiar en cualquier momento. {Obj2 asgnDelegado(Obj1)} congura 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 inici la cadena de delegacin. Entonces, el estado del o o objeto (los atributos) tambin es el estado del objeto original. e
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Delegacin - Implementacin (1) o o
local AsgnSelf={NewName} class MezclarDelegacin o 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 D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Delegacin Implementacin (2) o o
local AsgnSelf={NewName} class MezclarDelegacin o ... 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 mtodoIndefinido end e else {@Delegado Del(M @this)} end end end Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Delegacin Implementacin (3) o o
local AsgnSelf={NewName} class MezclarDelegacin o ... end in fun {NewD Clase Inic} Obj={New class $ from Clase MezclarDelegacin o end Inic} in {Obj AsgnSelf(Obj)} Obj end end
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)

Delegacin - Utilizacin (1) o o


Operacin o Invocacin de objeto o Invocacin de Self o Consulta atributo Modicacin atributo o Denicin del delegado o Sintaxis original { obj M} Sintaxis de delegacin o { obj invcr(M)}

{self M} @ attr attr :=X

{@this M} {@this obt( attr $)} {@this asgn( attr X)} { obj 1 asgnDelegado( obj 2 )}

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Delegacin - Utilizacin (2) o o
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 D Frias az Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Delegacin - Utilizacin (3) o o
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)}

Delegacin - Utilizacin (4) o o


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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)


Delegacin - Utilizacin (3) o o
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)}

Delegacin - Utilizacin (4) o o


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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)

Delegacin - Utilizacin (5) o o


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

Delegacin - Utilizacin (6) o o


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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

Recorderis: Abstraccin de datos o 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)

Delegacin - Utilizacin (5) o o


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

Delegacin - Utilizacin (6) o o


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

Juan Francisco D Frias az

Modelos y Paradigmas de Programacin o

También podría gustarte