Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Poo PDF
Poo PDF
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Plan
1
Principios de la POO
Herencia
Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Plan
1
Principios de la POO
Herencia
Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Plan
1
Principios de la POO
Herencia
Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Plan
1
Principios de la POO
Herencia
Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Abstraccion de datos
Definicion
Una abstraccion de datos es una manera de usar datos en forma
abstracta, i.e., podemos usar los datos sin tener en cuenta su
implementacion.
Ventajas
Usar la abstraccion suele ser mucho m
as sencillo
Razonar sobre los datos puede ser m
as sencillo
El sistema puede asegurar que los datos se utilicen de la
manera correcta
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Abstraccion de datos
Definicion
Una abstraccion de datos es una manera de usar datos en forma
abstracta, i.e., podemos usar los datos sin tener en cuenta su
implementacion.
Ventajas
Usar la abstraccion suele ser mucho m
as sencillo
Razonar sobre los datos puede ser m
as sencillo
El sistema puede asegurar que los datos se utilicen de la
manera correcta
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Plan
1
Principios de la POO
Herencia
Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Definicion TAD
Un conjunto de valores junto con un conjunto de operaciones sobre
esos valores. Puede ser abierto o seguro.
Ejemplo: Pila abierta
fun
fun
fun
fun
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
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
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Seguro, declarativo,
y desempaquetado
El estilo TAD
Seguro, declarativo,
y empaquetado
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
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
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Plan
1
Principios de la POO
Herencia
Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
El estilo Objeto
Objeto
Una abstraccion de datos empaquetada se denomina abstraccion
procedimental de datos, o APD. Y define una entidad llamada
objeto.
Ejecucion de un objeto
Una operacion se ejecuta invocando al objeto e informandole
cual operacion realizar: enviar un mensaje al objeto; Ojo.
No lo es, en el sentido que lo hemos estudiado.
Una invocacion a un objeto es sincr
onica.
Popularidad
Modularidad y estructuracion de programas.
Facilidad con que el estilo objeto soporta polimorfismo y
herencia. Juan Francisco Daz Frias
Modelos y Paradigmas de Programaci
on
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
El estilo Objeto
Objeto
Una abstraccion de datos empaquetada se denomina abstraccion
procedimental de datos, o APD. Y define una entidad llamada
objeto.
Ejecucion de un objeto
Una operacion se ejecuta invocando al objeto e informandole
cual operacion realizar: enviar un mensaje al objeto; Ojo.
No lo es, en el sentido que lo hemos estudiado.
Una invocacion a un objeto es sincr
onica.
Popularidad
Modularidad y estructuracion de programas.
Facilidad con que el estilo objeto soporta polimorfismo y
herencia. Juan Francisco Daz Frias
Modelos y Paradigmas de Programaci
on
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
El estilo Objeto
Objeto
Una abstraccion de datos empaquetada se denomina abstraccion
procedimental de datos, o APD. Y define una entidad llamada
objeto.
Ejecucion de un objeto
Una operacion se ejecuta invocando al objeto e informandole
cual operacion realizar: enviar un mensaje al objeto; Ojo.
No lo es, en el sentido que lo hemos estudiado.
Una invocacion a un objeto es sincr
onica.
Popularidad
Modularidad y estructuracion de programas.
Facilidad con que el estilo objeto soporta polimorfismo y
herencia. Juan Francisco Daz Frias
Modelos y Paradigmas de Programaci
on
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Plan
1
Principios de la POO
Herencia
Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Polimorfismo
En lenguaje natural. . .
Es la capacidad de una entidad de tomar varias formas.
En el contexto de abstraccion de datos
Una operacion es polimorfica si funciona correctamente con
argumentos de diferentes tipos.
Estilo Objeto vs TAD
El polimorfismo es m
as f
acil de expresar en el estilo Objeto.
Aunque se puede expresar en el estilo TAD, es mas incomodo
pues requiere de modulos de primera clase.
El estilo TAD ofrece mayor libertad para hacer
implementaciones eficientes.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Polimorfismo
En lenguaje natural. . .
Es la capacidad de una entidad de tomar varias formas.
En el contexto de abstraccion de datos
Una operacion es polimorfica si funciona correctamente con
argumentos de diferentes tipos.
Estilo Objeto vs TAD
El polimorfismo es m
as f
acil de expresar en el estilo Objeto.
Aunque se puede expresar en el estilo TAD, es mas incomodo
pues requiere de modulos de primera clase.
El estilo TAD ofrece mayor libertad para hacer
implementaciones eficientes.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Polimorfismo
En lenguaje natural. . .
Es la capacidad de una entidad de tomar varias formas.
En el contexto de abstraccion de datos
Una operacion es polimorfica si funciona correctamente con
argumentos de diferentes tipos.
Estilo Objeto vs TAD
El polimorfismo es m
as f
acil de expresar en el estilo Objeto.
Aunque se puede expresar en el estilo TAD, es mas incomodo
pues requiere de modulos de primera clase.
El estilo TAD ofrece mayor libertad para hacer
implementaciones eficientes.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Plan
1
Principios de la POO
Herencia
Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Tipo Coleccion
Tres operaciones:
agregar para a
nadir un elemento,
extraer para sacar un elemento, y
a para comprobar si la colecci
on est
a vaca.
esVac
Implementacion
En estilo TAD, y
en estilo Objeto.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Tipo Coleccion
Tres operaciones:
agregar para a
nadir un elemento,
extraer para sacar un elemento, y
a para comprobar si la colecci
on est
a vaca.
esVac
Implementacion
En estilo TAD, y
en estilo Objeto.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Ejemplo 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
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Ejemplo de uso
C={NuevaColecci
on}
{C.agregar 1} {C.agregar 2}
{Browse {C.extraer}}
{Browse {C.extraer}}
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Operacion uni
on
on C1 C2}:todos los elementos de C2 se
on.uni
{Colecci
agregan a C1, dejando C2 vaca.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Operacion uni
on
on C1 C2}:todos los elementos de C2 se
on.uni
{Colecci
agregan a C1, dejando C2 vaca.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
on usando s
olo las interfaces
Implementacion de uni
local Envolver Desenvolver
...
proc {Uni
on C1 C2}
{DoUntil fun {$} {Colecci
on.esVac
a C2} end
proc {$} {Colecci
on.agregar C1
{Colecci
on.extraer C2}} end}
end
in
Colecci
on=colecci
on(... uni
on:Uni
on)
end
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Ejemplo de uso
C1={Colecci
on.nueva} C2={Colecci
on.nueva}
for I in [1 2 3] do {Colecci
on.agregar C1 I} end
for I in [4 5 6] do {Colecci
on.agregar C2 I} end
{Colecci
on.uni
on C1 C2}
{Browse {Colecci
on.esVac
a C2}}
{DoUntil fun {$} {Colecci
on.esVac
a C1} end
proc {$} {Browse {Colecci
on.extraer C1}} end}
En resumen
Rep. interna Eficiencia No polimorfismo
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Implementacion
fun {NuevaColecci
on}
S1={PilaNueva}
...
on C2}
proc {Uni
{DoUntil C2.esVac
a
proc {$} {S1.colocar {C2.extraer}} end}
end
in
colecci
on(... uni
on:Uni
on)
end
Se usa la representaci
on interna
C1, pero
la interfaz
externa
de
Juan Francisco
Daz Frias de Modelos
y Paradigmas
de Programaci
on
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Implementacion
fun {NuevaColecci
on}
S1={PilaNueva}
...
on C2}
proc {Uni
{DoUntil C2.esVac
a
proc {$} {S1.colocar {C2.extraer}} end}
end
in
colecci
on(... uni
on:Uni
on)
end
Se usa la representaci
on interna
C1, pero
la interfaz
externa
de
Juan Francisco
Daz Frias de Modelos
y Paradigmas
de Programaci
on
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Implementacion de uni
on usando s
olo las interfaces
on}
fun {NuevaColecci
...
on C2}
proc {Uni
{DoUntil C2.esVac
a
proc {$} {This.agregar {C2.extraer}} end}
end
This=colecci
on(... uni
on:Uni
on)
in
This
end
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Unica
alternativa
Algunas veces el estilo TAD es el u
nico que funciona: Suma de
enteros.
Polimorfismo en Objeto es gratis
Si D es un objeto coleccion con la misma interfaz de C, aunque
condiferente implementacion, {C uni
on(D)} funciona. Por qu
e?
Concurrencia
El estilo objeto no esta limitado a objetos secuenciales: Objetos
flujo, puerto y activos.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Unica
alternativa
Algunas veces el estilo TAD es el u
nico que funciona: Suma de
enteros.
Polimorfismo en Objeto es gratis
Si D es un objeto coleccion con la misma interfaz de C, aunque
condiferente implementacion, {C uni
on(D)} funciona. Por qu
e?
Concurrencia
El estilo objeto no esta limitado a objetos secuenciales: Objetos
flujo, puerto y activos.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Unica
alternativa
Algunas veces el estilo TAD es el u
nico que funciona: Suma de
enteros.
Polimorfismo en Objeto es gratis
Si D es un objeto coleccion con la misma interfaz de C, aunque
condiferente implementacion, {C uni
on(D)} funciona. Por qu
e?
Concurrencia
El estilo objeto no esta limitado a objetos secuenciales: Objetos
flujo, puerto y activos.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Unica
alternativa
Algunas veces el estilo TAD es el u
nico que funciona: Suma de
enteros.
Polimorfismo en Objeto es gratis
Si D es un objeto coleccion con la misma interfaz de C, aunque
condiferente implementacion, {C uni
on(D)} funciona. Por qu
e?
Concurrencia
El estilo objeto no esta limitado a objetos secuenciales: Objetos
flujo, puerto y activos.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
La implementacion de uni
on tiene que asegurarse que C2 siempre
utilice una operacion de Colecci
on2.
Interoperabilidad en TAD
Si utilizamos el estilo TAD sin modulos de primera clase, entonces
debemos escribir codigo nuevo para que los tipos puedan
on que
interoperar. Tenemos que escribir una operacion uni
conozca ambas representaciones internas.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
La implementacion de uni
on tiene que asegurarse que C2 siempre
utilice una operacion de Colecci
on2.
Interoperabilidad en TAD
Si utilizamos el estilo TAD sin modulos de primera clase, entonces
debemos escribir codigo nuevo para que los tipos puedan
on que
interoperar. Tenemos que escribir una operacion uni
conozca ambas representaciones internas.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Polimorfismo ad-hoc
Se ejecuta codigo diferente para argumentos de tipos diferentes.
Por ejemplo el operador de sobrecarga.
Polimorfismo por subtipos
Se ejecuta el mismo codigo para todos los argumentos cuyo tipo
sea un subtipo del tipo m
as general. Por ejemplo, Registros, tuplas
y listas.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
TADs
El estilo Objeto
Polimorfismo
Ejemplo: un tipo Colecci
on
Polimorfismo ad-hoc
Se ejecuta codigo diferente para argumentos de tipos diferentes.
Por ejemplo el operador de sobrecarga.
Polimorfismo por subtipos
Se ejecuta el mismo codigo para todos los argumentos cuyo tipo
sea un subtipo del tipo m
as general. Por ejemplo, Registros, tuplas
y listas.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Principios de la POO
El modelo de computaci
on
El modelo de computaci
on de la POO es el modelo con estado.
Que es un programa?
Los programas son colecciones de abstracciones de datos que
interact
uan entre ellas. Dos principios para construirlas:
Las abstracciones de datos deben tener estado por defecto.
El estilo objeto, por defecto, debera ser el estilo APD, el cual
fomenta el polimorfismo y la herencia.
En resumen. . .
La POO es la programacion con abstraccion de datos en forma de
objetos, estado explcito, polimorfismo, y herencia.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Principios de la POO
El modelo de computaci
on
El modelo de computaci
on de la POO es el modelo con estado.
Que es un programa?
Los programas son colecciones de abstracciones de datos que
interact
uan entre ellas. Dos principios para construirlas:
Las abstracciones de datos deben tener estado por defecto.
El estilo objeto, por defecto, debera ser el estilo APD, el cual
fomenta el polimorfismo y la herencia.
En resumen. . .
La POO es la programacion con abstraccion de datos en forma de
objetos, estado explcito, polimorfismo, y herencia.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Principios de la POO
El modelo de computaci
on
El modelo de computaci
on de la POO es el modelo con estado.
Que es un programa?
Los programas son colecciones de abstracciones de datos que
interact
uan entre ellas. Dos principios para construirlas:
Las abstracciones de datos deben tener estado por defecto.
El estilo objeto, por defecto, debera ser el estilo APD, el cual
fomenta el polimorfismo y la herencia.
En resumen. . .
La POO es la programacion con abstraccion de datos en forma de
objetos, estado explcito, polimorfismo, y herencia.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Herencia
Observacion
Muchas abstracciones de datos tienen mucho en com
un, v. gr. los
conjuntos. Podemos implementarlas sin duplicar las partes
comunes?
Problema: duplicacion de c
odigo
Programas mas largos.
Se dificulta el mantenimiento: modificacion de todas las
copias.
Copias ligeramente diferentes: relacion entre cambios no obvia.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Herencia
Observacion
Muchas abstracciones de datos tienen mucho en com
un, v. gr. los
conjuntos. Podemos implementarlas sin duplicar las partes
comunes?
Problema: duplicacion de c
odigo
Programas mas largos.
Se dificulta el mantenimiento: modificacion de todas las
copias.
Copias ligeramente diferentes: relacion entre cambios no obvia.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Herencia
Para que el concepto de herencia?
Para reducir el problema de la duplicacion de c
odigo y para
clarificar las relaciones entre las abstracciones de datos.
Como?
Una abstraccion hereda de otra(s), teniendo esencialmente
la misma funcionalidad que las otras, posiblemente con
algunas extensiones y modificaciones.
Solo se especifican las diferencias entre la abstraccion de
datos y sus ancestros.
A tal definicion incremental de una abstraccion de datos se le
denomina una clase.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Herencia
Para que el concepto de herencia?
Para reducir el problema de la duplicacion de c
odigo y para
clarificar las relaciones entre las abstracciones de datos.
Como?
Una abstraccion hereda de otra(s), teniendo esencialmente
la misma funcionalidad que las otras, posiblemente con
algunas extensiones y modificaciones.
Solo se especifican las diferencias entre la abstraccion de
datos y sus ancestros.
A tal definicion incremental de una abstraccion de datos se le
denomina una clase.
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Herencia: clase
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Herencia: clase
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Las clases son finales (no se pueden extender) por defecto. Para
extenderlas, se requiere la accion explcita del programador.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Las clases son finales (no se pueden extender) por defecto. Para
extenderlas, se requiere la accion explcita del programador.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Alternativa a la herencia. . .
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Alternativa a la herencia. . .
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Plan
1
Principios de la POO
Herencia
Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Sint
acticamente:
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Sint
acticamente:
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Sint
acticamente:
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Ejemplo de uso
declare S in
local X in
thread {C inc(X)} S=listo
end
X=5
end
{Wait S} {C browse}
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Detalles
Una clase es un
registro: nombres
de atributos;
metodos.
Nombre de
atributo: literal.
Metodo:
procedimiento de
dos argumentos:
mensaje y estado.
Asignacion val:= y
acceso @val.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Detalles
Una clase es un
registro: nombres
de atributos;
metodos.
Nombre de
atributo: literal.
Metodo:
procedimiento de
dos argumentos:
mensaje y estado.
Asignacion val:= y
acceso @val.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
La funcion New
Crea el estado del
objeto.
Define Obj que es
de hecho el objeto.
Inicializa el objeto
antes de devolverlo.
Estado: registro S,
oculto dentro de
Obj.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
La funcion New
Crea el estado del
objeto.
Define Obj que es
de hecho el objeto.
Inicializa el objeto
antes de devolverlo.
Estado: registro S,
oculto dentro de
Obj.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
end
lock [ hexpresi
oni then ] hdeclaracionEni end
hexpresioni := hexpresioni
hexpresioni , hexpresioni
...
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
| ...
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
{Obj M}?
Estaticamente . . .
Determinar Obj y M. Si puede, compila a una instruccion muy
r
apida y especializada.
Si no puede . . .
Compila a un instruccion general de invocacion de un objeto.
La instruccion general utiliza el ocultamiento.
La primera invocacion es lenta, pero las subsiguientes son casi
tan rapidas como las invocaciones especializadas.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Plan
1
Principios de la POO
Herencia
Un modelo OO
Clases como abstracciones de datos completas
Clases como abstracciones de datos incrementales
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Tipos de herencia
Herencia sencilla (se hereda de una sola clase) o Herencia m
ultiple
(se hereda de varias clases. Sint
acticamente: from.
Superclases
Una clase B es una superclase de la clase A si
B aparece en la parte from de la declaraci
on de A, o
B es una superclase de una clase que aparece en la parte from
de la declaracion de A.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Tipos de herencia
Herencia sencilla (se hereda de una sola clase) o Herencia m
ultiple
(se hereda de varias clases. Sint
acticamente: from.
Superclases
Una clase B es una superclase de la clase A si
B aparece en la parte from de la declaraci
on de A, o
B es una superclase de una clase que aparece en la parte from
de la declaracion de A.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
A1
B1
A1
B1
Tambien es ilegal . . .
class A meth m(...) ... end end
class B meth m(...) ... end end
class C from A B end
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
A1
B1
A1
B1
Tambien es ilegal . . .
class A meth m(...) ... end end
class B meth m(...) ... end end
class C from A B end
Juan Francisco Daz Frias
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Creacion e invocacion
CtaVig={New CuentaVigilada transferir(100)}
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Creacion e invocacion
CtaVig={New CuentaVigilada transferir(100)}
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Atributos privados
Los atributos son internos a la abstraccion de datos y deben ser
invisibles desde el exterior.
Metodos p
ublicos
Los metodos conforman la interfaz externa de la abstracci
on de
datos, por lo tanto deberan ser visibles para todas las entidades
que referencian la abstraccion.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Atributos privados
Los atributos son internos a la abstraccion de datos y deben ser
invisibles desde el exterior.
Metodos p
ublicos
Los metodos conforman la interfaz externa de la abstracci
on de
datos, por lo tanto deberan ser visibles para todas las entidades
que referencian la abstraccion.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
private de acuerdo a
Smalltalk and Oz
SubC
SubSubC
...
Instancias
I1
I2
I3
...
In
private de acuerdo a
C++ and Java
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Atomos
o nombres como cabezas de metodos
Los atomos son visibles a traves de todo el programa y los
nombres solo son visibles en el alcance lexico de su creacion.
Use nombres para metodos internos, y use
atomos para
metodos externos.
Como lo hacen los lenguajes m
as populares?
Smalltalk, C++, y Java s
olo soportan
atomos como cabezas de
metodos; no tienen soporte para los nombres.
El enfoque basado en nombres no es popular todava.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Atomos
o nombres como cabezas de metodos
Los atomos son visibles a traves de todo el programa y los
nombres solo son visibles en el alcance lexico de su creacion.
Use nombres para metodos internos, y use
atomos para
metodos externos.
Como lo hacen los lenguajes m
as populares?
Smalltalk, C++, y Java s
olo soportan
atomos como cabezas de
metodos; no tienen soporte para los nombres.
El enfoque basado en nombres no es popular todava.
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Delegacin
Reenvo
self comn
self comn
self no es comn
Enfoque esttico:
al momento de la definicin de la clase
Enfoques dinmicos:
al momento de la creacin del objeto
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Sintaxis original
{hobji M}
Sintaxis de delegaci
on
{hobji invcr(M)}
{self M}
@hattri
hattri:=X
{@this M}
{@this obt(hattri $)}
{@this asgn(hattri X)}
{hobji1 asgnDelegado(hobji2 )}
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO
Recorderis: Abstracci
on de datos
Principios de la POO
Herencia
Un modelo OO