Documente Academic
Documente Profesional
Documente Cultură
Plan
1
Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
2 3 4
Plan
1
Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
2 3 4
Plan
1
Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
2 3 4
Plan
1
Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
2 3 4
Abstraccin de datos o
Denicin o Una abstraccin de datos es una manera de usar datos en forma o abstracta, i.e., podemos usar los datos sin tener en cuenta su implementacin. o Ventajas Usar la abstraccin suele ser mucho ms sencillo o a Razonar sobre los datos puede ser ms sencillo a El sistema puede asegurar que los datos se utilicen de la manera correcta
Abstraccin de datos o
Denicin o Una abstraccin de datos es una manera de usar datos en forma o abstracta, i.e., podemos usar los datos sin tener en cuenta su implementacin. o Ventajas Usar la abstraccin suele ser mucho ms sencillo o a Razonar sobre los datos puede ser ms sencillo a El sistema puede asegurar que los datos se utilicen de la manera correcta
Plan
1
Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
2 3 4
Denicin TAD o Un conjunto de valores junto con un conjunto de operaciones sobre esos valores. Puede ser abierto o seguro. Ejemplo: Pila abierta
fun fun fun fun {PilaNueva} nil end {Colocar S E} E|S end {Sacar S E} case S of X|S1 then E=X S1 end end {EsVaca S} S==nil end
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 fun {EsVaca} @C==nil end in pila(colocar:Colocar sacar:Sacar esVaca:EsVaca) end
Plan
1
Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
2 3 4
El estilo Objeto
Objeto Una abstraccin de datos empaquetada se denomina abstraccin o o procedimental de datos, o APD. Y dene una entidad llamada objeto. Ejecucin de un objeto o Una operacin se ejecuta invocando al objeto e informndole o a cul operacin realizar: enviar un mensaje al objeto; Ojo. a o No lo es, en el sentido que lo hemos estudiado. Una invocacin a un objeto es sincrnica. o o Popularidad Modularidad y estructuracin de programas. o Facilidad con que el estilo objeto soporta polimorsmo y herencia. Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
El estilo Objeto
Objeto Una abstraccin de datos empaquetada se denomina abstraccin o o procedimental de datos, o APD. Y dene una entidad llamada objeto. Ejecucin de un objeto o Una operacin se ejecuta invocando al objeto e informndole o a cul operacin realizar: enviar un mensaje al objeto; Ojo. a o No lo es, en el sentido que lo hemos estudiado. Una invocacin a un objeto es sincrnica. o o Popularidad Modularidad y estructuracin de programas. o Facilidad con que el estilo objeto soporta polimorsmo y herencia. Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
El estilo Objeto
Objeto Una abstraccin de datos empaquetada se denomina abstraccin o o procedimental de datos, o APD. Y dene una entidad llamada objeto. Ejecucin de un objeto o Una operacin se ejecuta invocando al objeto e informndole o a cul operacin realizar: enviar un mensaje al objeto; Ojo. a o No lo es, en el sentido que lo hemos estudiado. Una invocacin a un objeto es sincrnica. o o Popularidad Modularidad y estructuracin de programas. o Facilidad con que el estilo objeto soporta polimorsmo y herencia. Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Plan
1
Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
2 3 4
Polimorsmo
En lenguaje natural. . . Es la capacidad de una entidad de tomar varias formas. En el contexto de abstraccin de datos o Una operacin es polimrca si funciona correctamente con o o argumentos de diferentes tipos. Estilo Objeto vs TAD El polimorsmo es ms fcil de expresar en el estilo Objeto. a a Aunque se puede expresar en el estilo TAD, es ms incmodo a o pues requiere de mdulos de primera clase. o El estilo TAD ofrece mayor libertad para hacer implementaciones ecientes.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Polimorsmo
En lenguaje natural. . . Es la capacidad de una entidad de tomar varias formas. En el contexto de abstraccin de datos o Una operacin es polimrca si funciona correctamente con o o argumentos de diferentes tipos. Estilo Objeto vs TAD El polimorsmo es ms fcil de expresar en el estilo Objeto. a a Aunque se puede expresar en el estilo TAD, es ms incmodo a o pues requiere de mdulos de primera clase. o El estilo TAD ofrece mayor libertad para hacer implementaciones ecientes.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Polimorsmo
En lenguaje natural. . . Es la capacidad de una entidad de tomar varias formas. En el contexto de abstraccin de datos o Una operacin es polimrca si funciona correctamente con o o argumentos de diferentes tipos. Estilo Objeto vs TAD El polimorsmo es ms fcil de expresar en el estilo Objeto. a a Aunque se puede expresar en el estilo TAD, es ms incmodo a o pues requiere de mdulos de primera clase. o El estilo TAD ofrece mayor libertad para hacer implementaciones ecientes.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Plan
1
Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
2 3 4
Ejemplo de uso
C={Coleccin.nueva} o {Coleccin.agregar C 1} o {Coleccin.agregar C 2} o o {Browse {Coleccin.extraer C}} o {Browse {Coleccin.extraer C}}
Ejemplo de uso
C={NuevaColeccin} o {C.agregar 1} {C.agregar 2} {Browse {C.extraer}} {Browse {C.extraer}}
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Operacin unin o o
o o {Coleccin.unin C1 C2}:todos los elementos de C2 se agregan a C1, dejando C2 vac a.
Operacin unin o o
o o {Coleccin.unin C1 C2}:todos los elementos de C2 se agregan a C1, dejando C2 vac a.
o o Implementacin de unin usando slo las interfaces o local Envolver Desenvolver ... proc {Unin C1 C2} o {DoUntil fun {$} {Coleccin.esVaca C2} end o proc {$} {Coleccin.agregar C1 o {Coleccin.extraer C2}} end} o end in Coleccin=coleccin(... unin:Unin) o o o o end
Ejemplo de uso
C1={Coleccin.nueva} C2={Coleccin.nueva} o o for I in [1 2 3] do {Coleccin.agregar C1 I} end o for I in [4 5 6] do {Coleccin.agregar C2 I} end o {Coleccin.unin C1 C2} o o {Browse {Coleccin.esVaca C2}} o {DoUntil fun {$} {Coleccin.esVaca C1} end o proc {$} {Browse {Coleccin.extraer C1}} end} o
Implementacin o
fun {NuevaColeccin} o S1={PilaNueva} ... o proc {Unin C2} {DoUntil C2.esVaca proc {$} {S1.colocar {C2.extraer}} end} end in coleccin(... unin:Unin) o o o end
Se usa la representacin interna de Modelos y Paradigmas de Programacin o C1, pero la interfaz externa de Juan Francisco D Frias az o
Implementacin o
fun {NuevaColeccin} o S1={PilaNueva} ... o proc {Unin C2} {DoUntil C2.esVaca proc {$} {S1.colocar {C2.extraer}} end} end in coleccin(... unin:Unin) o o o end
Se usa la representacin interna de Modelos y Paradigmas de Programacin o C1, pero la interfaz externa de Juan Francisco D Frias az o
La implementacin de unin tiene que asegurarse que C2 siempre o o utilice una operacin de Coleccin2. o o Interoperabilidad en TAD Si utilizamos el estilo TAD sin mdulos de primera clase, entonces o debemos escribir cdigo nuevo para que los tipos puedan o o interoperar. Tenemos que escribir una operacin unin que o conozca ambas representaciones internas.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
La implementacin de unin tiene que asegurarse que C2 siempre o o utilice una operacin de Coleccin2. o o Interoperabilidad en TAD Si utilizamos el estilo TAD sin mdulos de primera clase, entonces o debemos escribir cdigo nuevo para que los tipos puedan o o interoperar. Tenemos que escribir una operacin unin que o conozca ambas representaciones internas.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Polimorsmo ad-hoc Se ejecuta cdigo diferente para argumentos de tipos diferentes. o Por ejemplo el operador de sobrecarga. Polimorsmo por subtipos Se ejecuta el mismo cdigo para todos los argumentos cuyo tipo o sea un subtipo del tipo ms general. Por ejemplo, Registros, tuplas a y listas.
Polimorsmo ad-hoc Se ejecuta cdigo diferente para argumentos de tipos diferentes. o Por ejemplo el operador de sobrecarga. Polimorsmo por subtipos Se ejecuta el mismo cdigo para todos los argumentos cuyo tipo o sea un subtipo del tipo ms general. Por ejemplo, Registros, tuplas a y listas.
Principios de la POO
El modelo de computacin o El modelo de computacin de la POO es el modelo con estado. o Qu es un programa? e Los programas son colecciones de abstracciones de datos que interactan entre ellas. Dos principios para construirlas: u Las abstracciones de datos deben tener estado por defecto. El estilo objeto, por defecto, deber ser el estilo APD, el cual a fomenta el polimorsmo y la herencia. En resumen. . . La POO es la programacin con abstraccin de datos en forma de o o objetos, estado expl cito, polimorsmo, y herencia.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Principios de la POO
El modelo de computacin o El modelo de computacin de la POO es el modelo con estado. o Qu es un programa? e Los programas son colecciones de abstracciones de datos que interactan entre ellas. Dos principios para construirlas: u Las abstracciones de datos deben tener estado por defecto. El estilo objeto, por defecto, deber ser el estilo APD, el cual a fomenta el polimorsmo y la herencia. En resumen. . . La POO es la programacin con abstraccin de datos en forma de o o objetos, estado expl cito, polimorsmo, y herencia.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Principios de la POO
El modelo de computacin o El modelo de computacin de la POO es el modelo con estado. o Qu es un programa? e Los programas son colecciones de abstracciones de datos que interactan entre ellas. Dos principios para construirlas: u Las abstracciones de datos deben tener estado por defecto. El estilo objeto, por defecto, deber ser el estilo APD, el cual a fomenta el polimorsmo y la herencia. En resumen. . . La POO es la programacin con abstraccin de datos en forma de o o objetos, estado expl cito, polimorsmo, y herencia.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Herencia
Observacin o Muchas abstracciones de datos tienen mucho en comn, v. gr. los u conjuntos. Podemos implementarlas sin duplicar las partes comunes? Problema: duplicacin de cdigo o o Programas ms largos. a Se diculta el mantenimiento: modicacin de todas las o copias. Copias ligeramente diferentes: relacion entre cambios no obvia.
Herencia
Observacin o Muchas abstracciones de datos tienen mucho en comn, v. gr. los u conjuntos. Podemos implementarlas sin duplicar las partes comunes? Problema: duplicacin de cdigo o o Programas ms largos. a Se diculta el mantenimiento: modicacin de todas las o copias. Copias ligeramente diferentes: relacion entre cambios no obvia.
Herencia
Para qu el concepto de herencia? e Para reducir el problema de la duplicacin de cdigo y para o o claricar las relaciones entre las abstracciones de datos. Cmo? o Una abstraccin hereda de otra(s), teniendo esencialmente o la misma funcionalidad que las otras, posiblemente con algunas extensiones y modicaciones. Slo se especican las diferencias entre la abstraccin de o o datos y sus ancestros. A tal denicin incremental de una abstraccin de datos se le o o denomina una clase.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Herencia
Para qu el concepto de herencia? e Para reducir el problema de la duplicacin de cdigo y para o o claricar las relaciones entre las abstracciones de datos. Cmo? o Una abstraccin hereda de otra(s), teniendo esencialmente o la misma funcionalidad que las otras, posiblemente con algunas extensiones y modicaciones. Slo se especican las diferencias entre la abstraccin de o o datos y sus ancestros. A tal denicin incremental de una abstraccin de datos se le o o denomina una clase.
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Herencia: clase
Cmo se dene una clase? o Por combinacin de una o ms clases existentes con una o a descripcin de las extensiones y modicaciones requeridas. o Concepto nuevo? NO! Abstraccin ling o ustica. Manipulacin sintctica, donde la sintaxis de la clase nueva se o a deriva a partir de las clases originales. Funcin que recibe como entrada valores de tipo clase y o devuelve como salida la clase nueva.
Herencia: clase
Cmo se dene una clase? o Por combinacin de una o ms clases existentes con una o a descripcin de las extensiones y modicaciones requeridas. o Concepto nuevo? NO! Abstraccin ling o ustica. Manipulacin sintctica, donde la sintaxis de la clase nueva se o a deriva a partir de las clases originales. Funcin que recibe como entrada valores de tipo clase y o devuelve como salida la clase nueva.
Factorizacin de una aplicacin vs. dispersin de la implementacin o o o o La implementacin no existe en un sitio; todas las abstracciones de o las que se hereda tienen que considerarse juntas. Esto diculta entender la abstraccin, y, paradjicamente, puede o o dicultar su mantenimiento. Leccin o La herencia debe utilizarse en pequeas cantidades. n
Factorizacin de una aplicacin vs. dispersin de la implementacin o o o o La implementacin no existe en un sitio; todas las abstracciones de o las que se hereda tienen que considerarse juntas. Esto diculta entender la abstraccin, y, paradjicamente, puede o o dicultar su mantenimiento. Leccin o La herencia debe utilizarse en pequeas cantidades. n
Alternativa a la herencia. . .
Programacin Basada en componentes o La idea es denir un componente que encapsula a otro componente y provee una funcionalidad modicada. Compromiso Herencia - Componentes La herencia es ms exible pero puede romper un invariante de a clase, mientras que la composicin de componentes es menos o exible pero no puede romper un invariante de componente.
Alternativa a la herencia. . .
Programacin Basada en componentes o La idea es denir un componente que encapsula a otro componente y provee una funcionalidad modicada. Compromiso Herencia - Componentes La herencia es ms exible pero puede romper un invariante de a clase, mientras que la composicin de componentes es menos o exible pero no puede romper un invariante de componente.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Para construir abstracciones de datos completas Los mtodos, los atributos, y las propiedades. e Mensajes de primera clase y atributos de primera clase: para lograr formas poderosas de polimorsmo. Para construir abstracciones de datos incrementalmente Los conceptos relacionados con la herencia, i.e., los que denen cmo se relaciona una clase con las clases existentes. o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Para construir abstracciones de datos completas Los mtodos, los atributos, y las propiedades. e Mensajes de primera clase y atributos de primera clase: para lograr formas poderosas de polimorsmo. Para construir abstracciones de datos incrementalmente Los conceptos relacionados con la herencia, i.e., los que denen cmo se relaciona una clase con las clases existentes. o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Plan
1
Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
2 3 4
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Sintcticamente: a Nombre Contador (podr ser a annima). o Atributos: val. Mtodos: inic, browse, e inc. e Operadores: := y @.
Modelos y Paradigmas de Programacin o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Sintcticamente: a Nombre Contador (podr ser a annima). o Atributos: val. Mtodos: inic, browse, e inc. e Operadores: := y @.
Modelos y Paradigmas de Programacin o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Sintcticamente: a Nombre Contador (podr ser a annima). o Atributos: val. Mtodos: inic, browse, e inc. e Operadores: := y @.
Modelos y Paradigmas de Programacin o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Las apariencias engaan n La declaracin se ejecuta en tiempo de ejecucin: se crea un o o valor de tipo clase y se liga a la variable Contador. La declaracin al principio del programa se comporta o familiarmente. Pero, la declaracin puede colocarse en cualquier sitio donde o pueda ir una declaracin. Por ejemplo, si se coloca la o declaracin dentro de un procedimiento, se crear una clase o a nueva, distinta, cada vez que se invoca el procedimiento.
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; mtodos. e Nombre de atributo: literal. Mtodo: e procedimiento de dos argumentos: mensaje y estado. Asignacin val:= y o acceso @val.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Detalles Una clase es un registro: nombres de atributos; mtodos. e Nombre de atributo: literal. Mtodo: e procedimiento de dos argumentos: mensaje y estado. Asignacin val:= y o acceso @val.
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.mtodos.{Label M} M S} e 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.mtodos.{Label M} M S} e end in {Obj Inic} Obj end
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
declaracin ::= class variable { descriptorClase } o { meth cabezaMtodo [ = variable ] e ( expresinEn | declaracinEn ) end } o o | | | |
end lock [ expresin then ] declaracinEn end o o expresin := expresin o o expresin , expresin o o
...
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
expresin ::= class $ { descriptorClase } o { meth cabezaMtodo [ = variable ] e ( expresinEn | declaracinEn ) end } o o
end | lock [ expresin then ] expresinEn end o o | expresin := expresin o o | expresin , expresin o o | @ expresin o | self
| ...
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
descriptorClase ::= from { expresin }+ | prop { expresin }+ o o | attr { inicAtrb }+ inicAtrb ::= ( [ ! ] variable | atomo | unit | true | false ) [ : expresin ] o cabezaMtodo ::= ( [ ! ] variable | atomo | unit | true | false ) e [ ( { argMtodo } [ ... ] ) ] e [ = variable ] argMtodo e ::= [ feature : ] ( variable | _ | $ ) [ <= expresin ] o
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
Mtodos: palabra reservada meth e Procedimiento que se invoca en el contexto de un objeto particular y que tiene acceso a los atributos del objeto. Consta de una cabeza y un cuerpo. La cabeza consta de una etiqueta, la cual debe ser un tomo a o un nombre, y de un conjunto de argumentos. Los argumentos deben ser variables diferentes; de otra manera ser un error de sintaxis. a CabezaPatrn y MensajeRegistro. o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Propiedades: palabra reservada prop Una propiedad modica cmo se comporta un objeto: o La propiedad locking crea un candado nuevo con cada instancia de objeto. La propiedad final hace que la clase sea una clase nal
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Atributos como tomos o como identicadores a Las etiquetas de los atributos y de los mtodos son literales. e Si se denen utilizando la sintaxis de tomo, entonces son a a tomos. Si se denen con la sintaxis de identicadores (e.g., en mayscula), entonces el sistema crear nombres nuevos para u a ellos, cuyo alcance es la denicin de la clase. o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Inicializacin por instancia o Un atributo puede tener un valor inicial diferente para cada instancia. Esto se logra no inicializndolos en la denicin de clase. a o Ejemplo
class UnApart attr nombreCalle meth inic(X) @nombreCalle=X end end Apt1={New UnApart inic(pasoancho)} Apt2={New UnApart inic(calleQuinta)}
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Inicializacin por marca o Esta es otra manera de utilizar la inicializacin por clase. Una o marca es un conjunto de clases relacionadas de alguna manera, pero no por herencia. Ejemplo
L=linux class RedHat attr tiposo:L end class SuSE attr tiposo:L end class Debian attr tiposo:L end
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 mtodo debe ser conocida en el momento en e que la denicin de clase sea ejecutada. o El mtodo otherwise: acepta cualquier mensaje para el cual e no exista ningn otro mtodo. u e
meth otherwise(M) % Cuerpo del mtodo e end
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
{Obj M}?
Estticamente . . . a Determinar Obj y M. Si puede, compila a una instruccin muy o rpida y especializada. a Si no puede . . . Compila a un instruccin general de invocacin de un objeto. o o La instruccin general utiliza el ocultamiento. o La primera invocacin es lenta, pero las subsiguientes son casi o tan rpidas como las invocaciones especializadas. a
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Plan
1
Recorderis: Abstraccin de datos o TADs El estilo Objeto Polimorsmo Ejemplo: un tipo Coleccin o Principios de la POO Herencia Un modelo OO Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
2 3 4
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 mltiple u (se hereda de varias clases. Sintcticamente: from. a Superclases Una clase B es una superclase de la clase A si
B aparece en la parte from de la declaracin de A, o o B es una superclase de una clase que aparece en la parte from de la declaracin de A. o
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 mltiple u (se hereda de varias clases. Sintcticamente: from. a Superclases Una clase B es una superclase de la clase A si
B aparece en la parte from de la declaracin de A, o o B es una superclase de una clase que aparece en la parte from de la declaracin de A. o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Cada mtodo (salvo los anulados) debe tener una etiqueta e unica y debe estar denido en una sola clase en la jerarqu a.
class class class class class A1 meth m(...) ... end end B1 meth m(...) ... end end A from A1 end B from B1 end C from A B end
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Cada mtodo (salvo los anulados) debe tener una etiqueta e unica y debe estar denido en una sola clase en la jerarqu a.
class class class class class A1 meth m(...) ... end end B1 meth m(...) ... end end A from A1 end B from B1 end C from A B end
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
A1
B1
A1
B1
A C
Tambin es ilegal . . . e
class A meth m(...) ... end end class B meth m(...) ... end end class C from A B end
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
A1
B1
A1
B1
A C
Tambin es ilegal . . . e
class A meth m(...) ... end end class B meth m(...) ... end end class C from A B end
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
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
Creacin e invocacin o o
CtaVig={New CuentaVigilada transferir(100)}
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Creacin e invocacin o o
CtaVig={New CuentaVigilada transferir(100)}
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Esto se denomina ligadura dinmica: {self transferir(A)}. a Ligadura dinmica: necesidad a Se conserva la funcionalidad de la anterior abstraccin al tiempo o que se aade una funcionalidad nueva. n
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Esto se denomina ligadura dinmica: {self transferir(A)}. a Ligadura dinmica: necesidad a Se conserva la funcionalidad de la anterior abstraccin al tiempo o que se aade una funcionalidad nueva. n
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Dentro del nuevo mtodo transferir, tenemos que invocar el e antiguo mtodo transferir. Podemos usar ligadura dinmica? e a Ligadura esttica:necesidad a Invocamos un mtodo sealando la clase del mtodo: e n e
Cuenta,transferir(Cant)
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Dentro del nuevo mtodo transferir, tenemos que invocar el e antiguo mtodo transferir. Podemos usar ligadura dinmica? e a Ligadura esttica:necesidad a Invocamos un mtodo sealando la clase del mtodo: e n e
Cuenta,transferir(Cant)
Juan Francisco D Frias az Modelos y Paradigmas de Programacin o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Ligadura dinmica y esttica a a La ligadura dinmica permite a la clase nueva extender a correctamente la clase antigua dejando que los mtodos e antiguos invoquen los mtodos nuevos, aunque los mtodos e e nuevos no existan en el momento en que los mtodos antiguos e se denen. La ligadura esttica permite que los nuevos mtodos invoquen a e los mtodos antiguos cuando tengan que hacerlo. e
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 abstraccin de datos y deben ser o invisibles desde el exterior. Mtodos pblicos e u Los mtodos conforman la interfaz externa de la abstraccin de e o datos, por lo tanto deber ser visibles para todas las entidades an que referencian la abstraccin. o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Atributos privados Los atributos son internos a la abstraccin de datos y deben ser o invisibles desde el exterior. Mtodos pblicos e u Los mtodos conforman la interfaz externa de la abstraccin de e o datos, por lo tanto deber ser visibles para todas las entidades an que referencian la abstraccin. o
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Dos conceptos bsicos para controlar la encapsulacin a o Alcance lxico y valores de tipo nombre. Con ellos se implementa: e Alcane pblico. u Alcance privado. Alcance privado y protegido de C++ y Java. Tcnica fundamental e La tcnica fundamental es permitir que las cabezas de los mtodos e e sean valores de tipo nombre en lugar de tomos. a
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Dos conceptos bsicos para controlar la encapsulacin a o Alcance lxico y valores de tipo nombre. Con ellos se implementa: e Alcane pblico. u Alcance privado. Alcance privado y protegido de C++ y Java. Tcnica fundamental e La tcnica fundamental es permitir que las cabezas de los mtodos e e sean valores de tipo nombre en lugar de tomos. a
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 mtodos e Los tomos son visibles a travs de todo el programa y los a e nombres slo son visibles en el alcance lxico de su creacin. o e o Use nombres para mtodos internos, y use tomos para e a mtodos externos. e Cmo lo hacen los lenguajes ms populares? o a Smalltalk, C++, y Java slo soportan tomos como cabezas de o a mtodos; no tienen soporte para los nombres. e El enfoque basado en nombres no es popular todav a.
Clases como abstracciones de datos completas Clases como abstracciones de datos incrementales
Atomos o nombres como cabezas de mtodos e Los tomos son visibles a travs de todo el programa y los a e nombres slo son visibles en el alcance lxico de su creacin. o e o Use nombres para mtodos internos, y use tomos para e a mtodos externos. e Cmo lo hacen los lenguajes ms populares? o a Smalltalk, C++, y Java slo soportan tomos como cabezas de o a mtodos; no tienen soporte para los nombres. e El enfoque basado en nombres no es popular todav a.
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