Está en la página 1de 150

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

Modelos y Paradigmas de Programaci on


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

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

Plan
1

Recorderis: Abstracci on de datos TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on 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 az Frias

Modelos y Paradigmas de Programaci on

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

Plan
1

Recorderis: Abstracci on de datos TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on 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 az Frias

Modelos y Paradigmas de Programaci on

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

Plan
1

Recorderis: Abstracci on de datos TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on 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 az Frias

Modelos y Paradigmas de Programaci on

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

Plan
1

Recorderis: Abstracci on de datos TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on 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 az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Abstracci on de datos

Denici on Una abstracci on de datos es una manera de usar datos en forma abstracta, i.e., podemos usar los datos sin tener en cuenta su implementaci on. Ventajas Usar la abstracci on 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 D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Abstracci on de datos

Denici on Una abstracci on de datos es una manera de usar datos en forma abstracta, i.e., podemos usar los datos sin tener en cuenta su implementaci on. Ventajas Usar la abstracci on 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 D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Plan
1

Recorderis: Abstracci on de datos TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on 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 az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Tipos Abstractos de datos (1)

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

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo 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 D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo 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 D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Otras maneras de organizar abstracciones


Seg un caracter 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 Programaci on

Juan Francisco D az Frias

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

TADs El estilo Objeto Polimorsmo 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 D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo 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 D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo 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 D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo 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 D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Plan
1

Recorderis: Abstracci on de datos TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on 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 az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

El estilo Objeto
Objeto Una abstracci on de datos empaquetada se denomina abstracci on procedimental de datos, o APD. Y dene una entidad llamada objeto. Ejecuci on de un objeto Una operaci on se ejecuta invocando al objeto e inform andole cu al operaci on realizar: enviar un mensaje al objeto; Ojo. No lo es, en el sentido que lo hemos estudiado. Una invocaci on a un objeto es sincr onica. Popularidad Modularidad y estructuraci on de programas. Facilidad con que el estilo objeto soporta polimorsmo y herencia. Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

El estilo Objeto
Objeto Una abstracci on de datos empaquetada se denomina abstracci on procedimental de datos, o APD. Y dene una entidad llamada objeto. Ejecuci on de un objeto Una operaci on se ejecuta invocando al objeto e inform andole cu al operaci on realizar: enviar un mensaje al objeto; Ojo. No lo es, en el sentido que lo hemos estudiado. Una invocaci on a un objeto es sincr onica. Popularidad Modularidad y estructuraci on de programas. Facilidad con que el estilo objeto soporta polimorsmo y herencia. Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

El estilo Objeto
Objeto Una abstracci on de datos empaquetada se denomina abstracci on procedimental de datos, o APD. Y dene una entidad llamada objeto. Ejecuci on de un objeto Una operaci on se ejecuta invocando al objeto e inform andole cu al operaci on realizar: enviar un mensaje al objeto; Ojo. No lo es, en el sentido que lo hemos estudiado. Una invocaci on a un objeto es sincr onica. Popularidad Modularidad y estructuraci on de programas. Facilidad con que el estilo objeto soporta polimorsmo y herencia. Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Plan
1

Recorderis: Abstracci on de datos TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on 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 az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Polimorsmo
En lenguaje natural. . . Es la capacidad de una entidad de tomar varias formas. En el contexto de abstracci on de datos Una operaci on es polim orca si funciona correctamente con argumentos de diferentes tipos. Estilo Objeto vs TAD El polimorsmo es m as f acil de expresar en el estilo Objeto. Aunque se puede expresar en el estilo TAD, es m as inc omodo pues requiere de m odulos de primera clase. El estilo TAD ofrece mayor libertad para hacer implementaciones ecientes.
Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Polimorsmo
En lenguaje natural. . . Es la capacidad de una entidad de tomar varias formas. En el contexto de abstracci on de datos Una operaci on es polim orca si funciona correctamente con argumentos de diferentes tipos. Estilo Objeto vs TAD El polimorsmo es m as f acil de expresar en el estilo Objeto. Aunque se puede expresar en el estilo TAD, es m as inc omodo pues requiere de m odulos de primera clase. El estilo TAD ofrece mayor libertad para hacer implementaciones ecientes.
Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Polimorsmo
En lenguaje natural. . . Es la capacidad de una entidad de tomar varias formas. En el contexto de abstracci on de datos Una operaci on es polim orca si funciona correctamente con argumentos de diferentes tipos. Estilo Objeto vs TAD El polimorsmo es m as f acil de expresar en el estilo Objeto. Aunque se puede expresar en el estilo TAD, es m as inc omodo pues requiere de m odulos de primera clase. El estilo TAD ofrece mayor libertad para hacer implementaciones ecientes.
Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Plan
1

Recorderis: Abstracci on de datos TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on 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 az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Ejemplo: un tipo Colecci on

Tipo Colecci on Tres operaciones:


agregar para a nadir un elemento, extraer para sacar un elemento, y a para comprobar si la colecci on est a vac a. esVac

Implementaci on En estilo TAD, y en estilo Objeto.

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Ejemplo: un tipo Colecci on

Tipo Colecci on Tres operaciones:


agregar para a nadir un elemento, extraer para sacar un elemento, y a para comprobar si la colecci on est a vac a. esVac

Implementaci on En estilo TAD, y en estilo Objeto.

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Implementaci on tipo Colecci on 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 D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Implementaci on tipo Colecci on 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 D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Implementaci on tipo Colecci on 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 D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Extensi on tipo Colecci on en estilo TAD (1)

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

Abstracci on de control DoUntil


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

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Extensi on tipo Colecci on en estilo TAD (1)

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

Abstracci on de control DoUntil


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

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Extensi on tipo Colecci on en estilo TAD (2)


Implementaci on 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 implementaci on utiliza tanto la representaci on interna de C1 como la de C2


Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Extensi on tipo Colecci on en estilo TAD (3)

on usando s olo las interfaces Implementaci on 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 D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Extensi on tipo Colecci on 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 Eciencia No polimorsmo

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Extensi on tipo Colecci on en estilo Objeto (1)


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

Implementaci on
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 D az 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 Polimorsmo Ejemplo: un tipo Colecci on

Extensi on tipo Colecci on en estilo Objeto (1)


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

Implementaci on
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 D az 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 Polimorsmo Ejemplo: un tipo Colecci on

Extensi on tipo Colecci on en estilo Objeto (2)

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

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

C omo escoger entre los estilos TAD y objeto?


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

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

C omo escoger entre los estilos TAD y objeto?


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

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

C omo escoger entre los estilos TAD y objeto?


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

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

C omo escoger entre los estilos TAD y objeto?


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

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

C omo escoger entre los estilos TAD y objeto? (2)


Polimorsmo en TAD implica m odulos 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 implementaci on de uni on tiene que asegurarse que C2 siempre utilice una operaci on de Colecci on2. Interoperabilidad en TAD Si utilizamos el estilo TAD sin m odulos de primera clase, entonces debemos escribir c odigo nuevo para que los tipos puedan on que interoperar. Tenemos que escribir una operaci on uni conozca ambas representaciones internas.
Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

C omo escoger entre los estilos TAD y objeto? (2)


Polimorsmo en TAD implica m odulos 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 implementaci on de uni on tiene que asegurarse que C2 siempre utilice una operaci on de Colecci on2. Interoperabilidad en TAD Si utilizamos el estilo TAD sin m odulos de primera clase, entonces debemos escribir c odigo nuevo para que los tipos puedan on que interoperar. Tenemos que escribir una operaci on uni conozca ambas representaciones internas.
Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Otras clases de polimorsmo, distinto al universal

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

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on

Otras clases de polimorsmo, distinto al universal

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

Juan Francisco D az 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. Qu e 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, deber a ser el estilo APD, el cual fomenta el polimorsmo y la herencia. En resumen. . . La POO es la programaci on con abstracci on de datos en forma de objetos, estado expl cito, polimorsmo, y herencia.
Juan Francisco D az 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. Qu e 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, deber a ser el estilo APD, el cual fomenta el polimorsmo y la herencia. En resumen. . . La POO es la programaci on con abstracci on de datos en forma de objetos, estado expl cito, polimorsmo, y herencia.
Juan Francisco D az 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. Qu e 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, deber a ser el estilo APD, el cual fomenta el polimorsmo y la herencia. En resumen. . . La POO es la programaci on con abstracci on de datos en forma de objetos, estado expl cito, polimorsmo, y herencia.
Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

Herencia

Observaci on Muchas abstracciones de datos tienen mucho en com un, v. gr. los conjuntos. Podemos implementarlas sin duplicar las partes comunes? Problema: duplicaci on de c odigo Programas m as largos. Se diculta el mantenimiento: modicaci on de todas las copias. Copias ligeramente diferentes: relacion entre cambios no obvia.

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

Herencia

Observaci on Muchas abstracciones de datos tienen mucho en com un, v. gr. los conjuntos. Podemos implementarlas sin duplicar las partes comunes? Problema: duplicaci on de c odigo Programas m as largos. Se diculta el mantenimiento: modicaci on de todas las copias. Copias ligeramente diferentes: relacion entre cambios no obvia.

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

Herencia
Para qu e el concepto de herencia? Para reducir el problema de la duplicaci on de c odigo y para claricar las relaciones entre las abstracciones de datos. C omo? Una abstracci on hereda de otra(s), teniendo esencialmente la misma funcionalidad que las otras, posiblemente con algunas extensiones y modicaciones. S olo se especican las diferencias entre la abstracci on de datos y sus ancestros. A tal denici on incremental de una abstracci on de datos se le denomina una clase.
Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

Herencia
Para qu e el concepto de herencia? Para reducir el problema de la duplicaci on de c odigo y para claricar las relaciones entre las abstracciones de datos. C omo? Una abstracci on hereda de otra(s), teniendo esencialmente la misma funcionalidad que las otras, posiblemente con algunas extensiones y modicaciones. S olo se especican las diferencias entre la abstracci on de datos y sus ancestros. A tal denici on incremental de una abstracci on de datos se le denomina una clase.
Juan Francisco D az Frias Modelos y Paradigmas de Programaci on

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

Herencia: clase

C omo se dene una clase? Por combinaci on de una o m as clases existentes con una descripci on de las extensiones y modicaciones requeridas. Concepto nuevo? NO! Abstracci on ling u stica. Manipulaci on sint actica, donde la sintaxis de la clase nueva se deriva a partir de las clases originales. Funci on que recibe como entrada valores de tipo clase y devuelve como salida la clase nueva.

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

Herencia: clase

C omo se dene una clase? Por combinaci on de una o m as clases existentes con una descripci on de las extensiones y modicaciones requeridas. Concepto nuevo? NO! Abstracci on ling u stica. Manipulaci on sint actica, donde la sintaxis de la clase nueva se deriva a partir de las clases originales. Funci on que recibe como entrada valores de tipo clase y devuelve como salida la clase nueva.

Juan Francisco D az 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 nales (no se pueden extender) por defecto. Para extenderlas, se requiere la acci on expl cita del programador.

Juan Francisco D az 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 nales (no se pueden extender) por defecto. Para extenderlas, se requiere la acci on expl cita del programador.

Juan Francisco D az 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)

Factorizaci on de una aplicaci on vs. dispersi on de la implementaci on La implementaci on no existe en un sitio; todas las abstracciones de las que se hereda tienen que considerarse juntas. Esto diculta entender la abstracci on, y, parad ojicamente, puede dicultar su mantenimiento. Lecci on La herencia debe utilizarse en peque nas cantidades.

Juan Francisco D az 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)

Factorizaci on de una aplicaci on vs. dispersi on de la implementaci on La implementaci on no existe en un sitio; todas las abstracciones de las que se hereda tienen que considerarse juntas. Esto diculta entender la abstracci on, y, parad ojicamente, puede dicultar su mantenimiento. Lecci on La herencia debe utilizarse en peque nas cantidades.

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

Alternativa a la herencia. . .

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

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

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

Alternativa a la herencia. . .

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

Juan Francisco D az 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 denir clases

Para construir abstracciones de datos completas Los m etodos, los atributos, y las propiedades. 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 c omo se relaciona una clase con las clases existentes.

Juan Francisco D az 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 denir clases

Para construir abstracciones de datos completas Los m etodos, los atributos, y las propiedades. 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 c omo se relaciona una clase con las clases existentes.

Juan Francisco D az 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: Abstracci on de datos TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on 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 az 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 u stica.

Sint acticamente: Nombre Contador (podr a ser an onima). Atributos: val. M etodos: inic, browse, e inc. Operadores: := y @.
Modelos y Paradigmas de Programaci on

Juan Francisco D az Frias

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 u stica.

Sint acticamente: Nombre Contador (podr a ser an onima). Atributos: val. M etodos: inic, browse, e inc. Operadores: := y @.
Modelos y Paradigmas de Programaci on

Juan Francisco D az Frias

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 u stica.

Sint acticamente: Nombre Contador (podr a ser an onima). Atributos: val. M etodos: inic, browse, e inc. Operadores: := y @.
Modelos y Paradigmas de Programaci on

Juan Francisco D az Frias

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 s olo sint actica?

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

Juan Francisco D az 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}

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

Juan Francisco D az 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: sem antica (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 D az Frias

Detalles Una clase es un registro: nombres de atributos; m etodos. Nombre de atributo: literal. M etodo: procedimiento de dos argumentos: mensaje y estado. Asignaci on 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: sem antica (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 D az Frias

Detalles Una clase es un registro: nombres de atributos; m etodos. Nombre de atributo: literal. M etodo: procedimiento de dos argumentos: mensaje y estado. Asignaci on 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: sem antica (2)


La funci on New 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.m etodos.{Label M} M S} end in {Obj Inic} Obj end

Juan Francisco D az 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: sem antica (2)


La funci on New 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.m etodos.{Label M} M S} end in {Obj Inic} Obj end

Juan Francisco D az 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 (1)

declaraci on ::= class variable { descriptorClase } { meth cabezaM etodo [ = variable ] ( expresi onEn | declaraci onEn ) end } | | | |
end lock [ expresi on then ] declaraci onEn end expresi on := expresi on expresi on , expresi on

...

Juan Francisco D az 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)

expresi on ::= class $ { descriptorClase } { meth cabezaM etodo [ = variable ] ( expresi onEn | declaraci onEn ) end }
end | lock [ expresi on then ] expresi onEn end | expresi on := expresi on | expresi on , expresi on | @ expresi on | self

| ...

Juan Francisco D az 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)

descriptorClase ::= from { expresi on }+ | prop { expresi on }+ | attr { inicAtrb }+ inicAtrb ::= ( [ ! ] variable | a tomo | unit | true | false ) [ : expresi on ] cabezaM etodo ::= ( [ ! ] variable | a tomo | unit | true | false ) [ ( { argM etodo } [ ... ] ) ] [ = variable ] argM etodo ::= [ feature : ] ( variable | _ | $ ) [ <= expresi on ]

Juan Francisco D az 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)


Caracter sticas N umero de objetos ilimitado. Qu e es una clase? Una clase es una estructura de Cada objeto se comporta seg un la datos que dene un estado denici on de clase. interno de un objeto (atributos), su Creaci on, invocaci on comportamiento (m etodos), 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 az Frias Modelos y Paradigmas de Programaci on

Objeto instancia. Cada instancia tiene identidad u nica.

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)


Caracter sticas N umero de objetos ilimitado. Qu e es una clase? Una clase es una estructura de Cada objeto se comporta seg un la datos que dene un estado denici on de clase. interno de un objeto (atributos), su Creaci on, invocaci on comportamiento (m etodos), 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 az Frias Modelos y Paradigmas de Programaci on

Objeto instancia. Cada instancia tiene identidad u nica.

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)


Caracter sticas N umero de objetos ilimitado. Qu e es una clase? Una clase es una estructura de Cada objeto se comporta seg un la datos que dene un estado denici on de clase. interno de un objeto (atributos), su Creaci on, invocaci on comportamiento (m etodos), 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 az Frias Modelos y Paradigmas de Programaci on

Objeto instancia. Cada instancia tiene identidad u nica.

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: expr 1 := expr
@ expr
2

expr 3 = expr 1 := expr 2 .

Juan Francisco D az 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)

M etodos: 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 ser a un error de sintaxis. CabezaPatr on y MensajeRegistro.

Juan Francisco D az 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 modica 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 nal

Juan Francisco D az 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 identicadores Las etiquetas de los atributos y de los m etodos son literales. Si se denen utilizando la sintaxis de atomo, entonces son tomos. a Si se denen con la sintaxis de identicadores (e.g., en may uscula), entonces el sistema crear a nombres nuevos para ellos, cuyo alcance es la denici on de la clase.

Juan Francisco D az 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

Inicializaci on de atributos (1)

Inicializaci on por instancia Un atributo puede tener un valor inicial diferente para cada instancia. Esto se logra no inicializ andolos en la denici on 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 D az 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

Inicializaci on de atributos (2)


Inicializaci on 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 denici on 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 D az 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

Inicializaci on de atributos (3)

Inicializaci on por marca Esta es otra manera de utilizar la inicializaci on 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 D az 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 m etodos son patrones que reconocen un registro. Invocaci on de objeto {Obj M} Registro est atico como mensaje. En el caso m as sencillo, M es un registro que se conoce en tiempo de compilaci on, e.g., como en la invocaci on {Contador inc(X)}. Registro din amico como mensaje. Es posible invocar {Obj M} donde M es una variable que referencia un registro que se calcula en tiempo de ejecuci on. Como el tipamiento es din amico, es posible crear nuevos tipos de registros en tiempo de ejecuci on (e.g., con Adjoin o List.toRecord).
Juan Francisco D az 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 m etodos son patrones que reconocen un registro. Invocaci on de objeto {Obj M} Registro est atico como mensaje. En el caso m as sencillo, M es un registro que se conoce en tiempo de compilaci on, e.g., como en la invocaci on {Contador inc(X)}. Registro din amico como mensaje. Es posible invocar {Obj M} donde M es una variable que referencia un registro que se calcula en tiempo de ejecuci on. Como el tipamiento es din amico, es posible crear nuevos tipos de registros en tiempo de ejecuci on (e.g., con Adjoin o List.toRecord).
Juan Francisco D az 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)


Denici on de un m etodo (1) Lista ja de argumentos:
meth foo(a:A b:B c:C) % Cuerpo del m etodo end

Lista exible de argumentos:


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

Referencia variable a la cabeza del m etodo:


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

Juan Francisco D az 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)


Denici on de un m etodo (2) Argumento opcional:valor por defecto, se usa s olo 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 m etodo: A se liga a un nombre fresco cuando se dene la clase.


meth A(bar:X) % Cuerpo del m etodo end

Etiqueta din amica de m etodo:


meth !A(bar:X) % Cuerpo del m etodo end
Juan Francisco D az 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)


Denici on de un m etodo (3) Etiqueta din amica de m etodo:
meth !A(bar:X) etodo % Cuerpo del m end

La etiqueta del m etodo debe ser conocida en el momento en que la denici on de clase sea ejecutada. El m etodo otherwise: acepta cualquier mensaje para el cual no exista ning un otro m etodo.
meth otherwise(M) % Cuerpo del m etodo end

Juan Francisco D az 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

C omo hace el compilador con la invocaci on

{Obj M}?

Est aticamente . . . Determinar Obj y M. Si puede, compila a una instrucci on muy r apida y especializada. Si no puede . . . Compila a un instrucci on general de invocaci on de un objeto. La instrucci on general utiliza el ocultamiento. La primera invocaci on es lenta, pero las subsiguientes son casi tan r apidas como las invocaciones especializadas.

Juan Francisco D az 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: Abstracci on de datos TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Colecci on 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 az 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 Dene cu ales clases preexistentes se extender an. Se permitir a tanto herencia sencilla como herencia m ultiple. Control de acceso a los m etodos Dene c omo se accede a los m etodos en particular, tanto en la clase nueva como en las clases preexistentes. Esto se logra con ligaduras est atica y din amica y con el concepto de self. Control de la encapsulaci on Dene qu e parte de un programa puede ver los atributos y m etodos de una clase. Otros conceptos . . . Reenv o, delegaci on, y reexi on.
Juan Francisco D az 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 Dene cu ales clases preexistentes se extender an. Se permitir a tanto herencia sencilla como herencia m ultiple. Control de acceso a los m etodos Dene c omo se accede a los m etodos en particular, tanto en la clase nueva como en las clases preexistentes. Esto se logra con ligaduras est atica y din amica y con el concepto de self. Control de la encapsulaci on Dene qu e parte de un programa puede ver los atributos y m etodos de una clase. Otros conceptos . . . Reenv o, delegaci on, y reexi on.
Juan Francisco D az 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 Dene cu ales clases preexistentes se extender an. Se permitir a tanto herencia sencilla como herencia m ultiple. Control de acceso a los m etodos Dene c omo se accede a los m etodos en particular, tanto en la clase nueva como en las clases preexistentes. Esto se logra con ligaduras est atica y din amica y con el concepto de self. Control de la encapsulaci on Dene qu e parte de un programa puede ver los atributos y m etodos de una clase. Otros conceptos . . . Reenv o, delegaci on, y reexi on.
Juan Francisco D az 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 Dene cu ales clases preexistentes se extender an. Se permitir a tanto herencia sencilla como herencia m ultiple. Control de acceso a los m etodos Dene c omo se accede a los m etodos en particular, tanto en la clase nueva como en las clases preexistentes. Esto se logra con ligaduras est atica y din amica y con el concepto de self. Control de la encapsulaci on Dene qu e parte de un programa puede ver los atributos y m etodos de una clase. Otros conceptos . . . Reenv o, delegaci on, y reexi on.
Juan Francisco D az 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 m etodos y atributos La herencia es una forma de construir clases nuevas a partir de clases existentes. La herencia dene qu e atributos y m etodos est an disponibles en la clase nueva. Relaci on de precedencia: Relaci on de anulaci on Un m etodo (atributo) en la clase C anula cualquier m etodo (atributo) con la misma etiqueta (el mismo nombre) en todas las superclases de C.

Juan Francisco D az 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 m etodos y atributos La herencia es una forma de construir clases nuevas a partir de clases existentes. La herencia dene qu e atributos y m etodos est an disponibles en la clase nueva. Relaci on de precedencia: Relaci on de anulaci on Un m etodo (atributo) en la clase C anula cualquier m etodo (atributo) con la misma etiqueta (el mismo nombre) en todas las superclases de C.

Juan Francisco D az 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 declaraci on de A.

Juan Francisco D az 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 declaraci on de A.

Juan Francisco D az 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)


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

Cada m etodo (salvo los anulados) debe tener una etiqueta u nica 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 az 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)


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

Cada m etodo (salvo los anulados) debe tener una etiqueta u nica 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 az 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

A C

C Jerarqua de clases legal


(un m visible desde C)

Jerarqua de clases ilegal


(dos m visibles desde C)

Tambi en es ilegal . . .
class A meth m(...) ... end end class B meth m(...) ... end end class C from A B end
Juan Francisco D az 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

A C

C Jerarqua de clases legal


(un m visible desde C)

Jerarqua de clases ilegal


(dos m visibles desde C)

Tambi en es ilegal . . .
class A meth m(...) ... end end class B meth m(...) ... end end class C from A B end
Juan Francisco D az 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 ejecuci on


ClaseExtra na se puede compilar y ejecutar exitosamente. S olo se lanzar a una excepci on en la invocaci on {ClaseExtra na}.

Juan Francisco D az 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 ejecuci on


ClaseExtra na se puede compilar y ejecutar exitosamente. S olo se lanzar a una excepci on en la invocaci on {ClaseExtra na}.

Juan Francisco D az 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 m etodos (1)


B usqueda del m etodo correcto Cuando se invoca un m etodo de un objeto: cu al m etodo se ejecuta? Esto parece bastante sencillo, pero se vuelve ligeramente m as complicado cuando est a involucrada la herencia. Ligadura est atica y din amica La herencia se utiliza para denir una clase nueva que extiende una clase existente. Ambas clases pueden tener m etodos 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 din amica.

Juan Francisco D az 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 m etodos (1)


B usqueda del m etodo correcto Cuando se invoca un m etodo de un objeto: cu al m etodo se ejecuta? Esto parece bastante sencillo, pero se vuelve ligeramente m as complicado cuando est a involucrada la herencia. Ligadura est atica y din amica La herencia se utiliza para denir una clase nueva que extiende una clase existente. Ambas clases pueden tener m etodos 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 din amica.

Juan Francisco D az 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 m etodos (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 D az 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 m etodos (3)


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

Creaci on e invocaci on
CtaVig={New CuentaVigilada transferir(100)}

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


Juan Francisco D az 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 m etodos (3)


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

Creaci on e invocaci on
CtaVig={New CuentaVigilada transferir(100)}

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


Juan Francisco D az 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 m etodos (4)

Cu al deber a invocarse?
transferir de CuentaVigilada.

Esto se denomina ligadura din amica: {self transferir(A)}. Ligadura din amica: necesidad Se conserva la funcionalidad de la anterior abstracci on al tiempo que se a nade una funcionalidad nueva.

Juan Francisco D az 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 m etodos (4)

Cu al deber a invocarse?
transferir de CuentaVigilada.

Esto se denomina ligadura din amica: {self transferir(A)}. Ligadura din amica: necesidad Se conserva la funcionalidad de la anterior abstracci on al tiempo que se a nade una funcionalidad nueva.

Juan Francisco D az 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 m etodos (5)


Ligadura din amica: limitaci on
class CuentaVigilada from Cuenta meth transferir(Cant) {LogObj agregueEntrada(transferir(Cant))} Cuenta,transferir(Cant) end end

Dentro del nuevo m etodo transferir, tenemos que invocar el antiguo m etodo transferir. Podemos usar ligadura din amica? Ligadura est atica:necesidad Invocamos un m etodo se nalando la clase del m etodo:
Cuenta,transferir(Cant)
Juan Francisco D az 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 m etodos (5)


Ligadura din amica: limitaci on
class CuentaVigilada from Cuenta meth transferir(Cant) {LogObj agregueEntrada(transferir(Cant))} Cuenta,transferir(Cant) end end

Dentro del nuevo m etodo transferir, tenemos que invocar el antiguo m etodo transferir. Podemos usar ligadura din amica? Ligadura est atica:necesidad Invocamos un m etodo se nalando la clase del m etodo:
Cuenta,transferir(Cant)
Juan Francisco D az 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 m etodos (6)

Ligadura din amica y est atica La ligadura din amica permite a la clase nueva extender correctamente la clase antigua dejando que los m etodos antiguos invoquen los m etodos nuevos, aunque los m etodos nuevos no existan en el momento en que los m etodos antiguos se denen. La ligadura est atica permite que los nuevos m etodos invoquen los m etodos antiguos cuando tengan que hacerlo.

Juan Francisco D az 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 m etodos (7)


Resumen ligadura din amica Se escribe {self M}. Este tipo de ligadura escoge el correspondiente m etodo M visible en el objeto actual, tomando en cuenta la anulaci on que haya sido realizada. Resumen ligadura est atica Se escribe C, M (con una coma), donde C es una clase donde se dene el correspondiente m etodo M. Este tipo de ligadura escoge el m etodo M visible en la clase C, tomando en cuenta las anulaciones de m etodos desde la clase ra z hasta la clase C, pero no m as. Si el objeto es de una subclase de C que ha anulado el m etodo M de nuevo, entonces esta anulaci on no es tenida en cuenta.
Juan Francisco D az 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 m etodos (7)


Resumen ligadura din amica Se escribe {self M}. Este tipo de ligadura escoge el correspondiente m etodo M visible en el objeto actual, tomando en cuenta la anulaci on que haya sido realizada. Resumen ligadura est atica Se escribe C, M (con una coma), donde C es una clase donde se dene el correspondiente m etodo M. Este tipo de ligadura escoge el m etodo M visible en la clase C, tomando en cuenta las anulaciones de m etodos desde la clase ra z hasta la clase C, pero no m as. Si el objeto es de una subclase de C que ha anulado el m etodo M de nuevo, entonces esta anulaci on no es tenida en cuenta.
Juan Francisco D az 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 encapsulaci on (1)


Principio Limitar el acceso a los miembros de la clase, a saber, atributos y m etodos, de acuerdo a los requerimientos de la arquitectura de la aplicaci on. 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 el. 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 az 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 encapsulaci on (1)


Principio Limitar el acceso a los miembros de la clase, a saber, atributos y m etodos, de acuerdo a los requerimientos de la arquitectura de la aplicaci on. 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 el. 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 az 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 encapsulaci on (1)


Principio Limitar el acceso a los miembros de la clase, a saber, atributos y m etodos, de acuerdo a los requerimientos de la arquitectura de la aplicaci on. 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 el. 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 az 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 encapsulaci on (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 denidos 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. Qu e es lo natural? Que los atributos sean privados y los m etodos sean p ublicos, como en Oz y Smalltalk.
Juan Francisco D az 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 encapsulaci on (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 denidos 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. Qu e es lo natural? Que los atributos sean privados y los m etodos sean p ublicos, como en Oz y Smalltalk.
Juan Francisco D az 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 encapsulaci on (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 denidos 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. Qu e es lo natural? Que los atributos sean privados y los m etodos sean p ublicos, como en Oz y Smalltalk.
Juan Francisco D az 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 encapsulaci on (3)

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

Juan Francisco D az 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 encapsulaci on (3)

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

Juan Francisco D az 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 encapsulaci on (4)

Dos conceptos b asicos para controlar la encapsulaci on Alcance l exico y valores de tipo nombre. Con ellos se implementa: Alcane p ublico. Alcance privado. Alcance privado y protegido de C++ y Java. T ecnica fundamental La t ecnica fundamental es permitir que las cabezas de los m etodos sean valores de tipo nombre en lugar de atomos.

Juan Francisco D az 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 encapsulaci on (4)

Dos conceptos b asicos para controlar la encapsulaci on Alcance l exico y valores de tipo nombre. Con ellos se implementa: Alcane p ublico. Alcance privado. Alcance privado y protegido de C++ y Java. T ecnica fundamental La t ecnica fundamental es permitir que las cabezas de los m etodos sean valores de tipo nombre en lugar de atomos.

Juan Francisco D az 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 encapsulaci on (5)

M etodos privados (en el sentido de C++ y Java)


=
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 az 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 encapsulaci on (6)


Implementaci on v a nombres (1) Utilizando un identicador de variable como la cabeza del m etodo.
class C meth A(X) % Cuerpo del m etodo end end

Implementaci on v a nombres (2)


local A={NewName} in class C meth !A(X) etodo % Cuerpo del m end Juan Francisco D az 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 encapsulaci on (6)


Implementaci on v a nombres (1) Utilizando un identicador de variable como la cabeza del m etodo.
class C meth A(X) % Cuerpo del m etodo end end

Implementaci on v a nombres (2)


local A={NewName} in class C meth !A(X) etodo % Cuerpo del m end Juan Francisco D az 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 encapsulaci on (7)


M etodos protegidos (en el sentido de C++) En C++, un m etodo protegido solamente es accesible desde la clase donde fue denido o en las clases descendientes (y en todas las instancias de objetos de esas clases). Implementaci on
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 az 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 encapsulaci on (7)


M etodos protegidos (en el sentido de C++) En C++, un m etodo protegido solamente es accesible desde la clase donde fue denido o en las clases descendientes (y en todas las instancias de objetos de esas clases). Implementaci on
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 az 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 encapsulaci on (8)

Atomos o nombres como cabezas de m etodos Los atomos son visibles a trav es de todo el programa y los nombres s olo son visibles en el alcance l exico de su creaci on. Use nombres para m etodos internos, y use atomos para m etodos externos. C omo lo hacen los lenguajes m as populares? Smalltalk, C++, y Java s olo soportan atomos como cabezas de m etodos; no tienen soporte para los nombres. El enfoque basado en nombres no es popular todav a.

Juan Francisco D az 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 encapsulaci on (8)

Atomos o nombres como cabezas de m etodos Los atomos son visibles a trav es de todo el programa y los nombres s olo son visibles en el alcance l exico de su creaci on. Use nombres para m etodos internos, y use atomos para m etodos externos. C omo lo hacen los lenguajes m as populares? Smalltalk, C++, y Java s olo soportan atomos como cabezas de m etodos; no tienen soporte para los nombres. El enfoque basado en nombres no es popular todav a.

Juan Francisco D az 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 encapsulaci on (9)


Sencillez de los atomos Los atomos se identican u nicamente por sus representaciones impresas. Con los nombres esto es m as dif cil: el programa mismo tiene que pasar de alguna manera el nombre a quien desea invocar el m etodo. Ventajas de los nombres Imposible tener conictos con la herencia (sencilla o m ultiple). La encapsulaci on se puede manejar mejor, pues una referencia a un objeto no da necesariamente derecho a invocar los m etodos del objeto. Los nombres pueden tener soporte sint actico para simplicar su uso.
Juan Francisco D az 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
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 az 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 (2)


Reenv o - Implementaci on
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 D az 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)


Reenv o - Utilizaci on
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 D az 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)


Delegaci on Jerarqu a 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 jerarqu a se puede 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 o la cadena de delegaci on. Entonces, el estado del objeto (los atributos) tambi en es el estado del objeto original.
Juan Francisco D az 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)


Delegaci on - Implementaci on (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 D az 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)


Delegaci on Implementaci on (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 D az 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)


Delegaci on Implementaci on (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 D az 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)

Delegaci on - Utilizaci on (1)


Operaci on Invocaci on de objeto Invocaci on de Self Consulta atributo Modicaci on atributo Denici on del delegado Sintaxis original { obj M} Sintaxis de delegaci on { 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 az 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)


Delegaci on - Utilizaci on (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 D az 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)


Delegaci on - Utilizaci on (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)}

Delegaci on - Utilizaci on (4)


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

Juan Francisco D az 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)


Delegaci on - Utilizaci on (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)}

Delegaci on - Utilizaci on (4)


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

Juan Francisco D az 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 (10)

Delegaci on - Utilizaci on (5)


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

Delegaci on - Utilizaci on (6)


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

Juan Francisco D az 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 (10)

Delegaci on - Utilizaci on (5)


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

Delegaci on - Utilizaci on (6)


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

Juan Francisco D az Frias

Modelos y Paradigmas de Programaci on

También podría gustarte