Documentos de Académico
Documentos de Profesional
Documentos de Cultura
POO Paradigmas
POO Paradigmas
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
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
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
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
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
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
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
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
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
El estilo TAD
El estilo APD con objetos declarativos El estilo APD con objetos con estado, tal como se usa en Smalltalk y Java
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
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
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
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
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
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
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
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
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
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
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
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
Operaci on uni on
on C1 C2}:todos los elementos de C2 se on.uni {Colecci agregan a C1, dejando C2 vac a.
Operaci on uni on
on C1 C2}:todos los elementos de C2 se on.uni {Colecci agregan a C1, dejando C2 vac a.
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
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}
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
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
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
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
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.
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.
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
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
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
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.
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.
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
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
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.
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.
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.
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.
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.
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
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}
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
...
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
| ...
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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 ]
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Atributos: palabra reservada attr O variables de instancia: celda que contiene parte del estado de la instancia. Operaciones: expr 1 := expr
@ expr
2
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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)}
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
{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.
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
A1
B1
A1
B1
A 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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
A1
B1
A1
B1
A 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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Creaci on e invocaci on
CtaVig={New CuentaVigilada transferir(100)}
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Creaci on e invocaci on
CtaVig={New CuentaVigilada transferir(100)}
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
SubC
SubSubC
...
Instancias I1 I2 I3
...
In
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
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
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
{@this M} {@this obt( attr $)} {@this asgn( attr X)} { obj 1 asgnDelegado( obj 2 )}
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales