Diferencia entre revisiones de «Clase del 30/10/2007 (Diseño Avanzado con Objetos)»

De Cuba-Wiki
Sin resumen de edición
 
Sin resumen de edición
 
Línea 2: Línea 2:


[[performance:]] Malo, tardas O(nlog(n)) en encontrar algo
[[performance:]] Malo, tardas O(nlog(n)) en encontrar algo
[[memoria:]] bueno, por no tener duplicados
[[memoria:]] bueno, por no tener duplicados
es dinamico? Si, facilmente se puede agregar un método, el cual pega directamente en el method dictionary
es dinamico? Si, facilmente se puede agregar un método, el cual pega directamente en el method dictionary


'''STI:''' Hace una tabla  
'''STI:''' Hace una tabla  
en las columnas pone las clases
en las columnas pone las clases
en las filas pone los metodos
en las filas pone los metodos
en donde se unen, se apunta al metodo si es que la clase lo tiene por herencia o por reimplementarlo
en donde se unen, se apunta al metodo si es que la clase lo tiene por herencia o por reimplementarlo
si no tiene ese metodo, apunta a DNU
si no tiene ese metodo, apunta a DNU


[[performance:]] Bueno
[[performance:]] Bueno
[[memoria:]] Malo, muchas referencias al DNU (doesNotUnderstand)
[[memoria:]] Malo, muchas referencias al DNU (doesNotUnderstand)
la administracion de la tablas es muy complicada
la administracion de la tablas es muy complicada
RD y CT hacen lo mismo, compactando la tabla con coloreo
RD y CT hacen lo mismo, compactando la tabla con coloreo


'''VTBL:''' Para cada clase tiene una tabla, y para cada selector tiene un indice
'''VTBL:''' Para cada clase tiene una tabla, y para cada selector tiene un indice


[[performance:]] Bueno
[[performance:]] Bueno
[[memoria:]] Malo, duplica mucha informacion
[[memoria:]] Malo, duplica mucha informacion
en el ejemplo
en el ejemplo
aC m4 (se traduce como) -> call cvt[2]
aC m4 (se traduce como) -> call cvt[2]


'''NO''' se puede usar en lenguajes dinamicamente tipados
'''NO''' se puede usar en lenguajes dinamicamente tipados
por el late binding sabes de que clase es el objeto cuando se envia el mensaje, entonces m4 no lo podes traducir como 2 hasta que no se sepa
por el late binding sabes de que clase es el objeto cuando se envia el mensaje, entonces m4 no lo podes traducir como 2 hasta que no se sepa


Un problema es que al agregar un metodo en una clase, se tiene que agregar  en todas las tablas virtuales asociadas al resto de las clases hijas
Un problema es que al agregar un metodo en una clase, se tiene que agregar  en todas las tablas virtuales asociadas al resto de las clases hijas


'''GLC:'''
 
'''GLC:'''  
Define una cache global con 95% de hit
Define una cache global con 95% de hit
trabaja como un hash abierto
trabaja como un hash abierto
“Las tablas hash de direccionamiento abierto pueden almacenar los registros directamente en el arreglo. Las colisiones se resuelven mediante un sondeo del arreglo, en el que se buscan diferentes localidades del arreglo “ [http://es.wikipedia.org/wiki/Tabla_hash]
“Las tablas hash de direccionamiento abierto pueden almacenar los registros directamente en el arreglo. Las colisiones se resuelven mediante un sondeo del arreglo, en el que se buscan diferentes localidades del arreglo “ [http://es.wikipedia.org/wiki/Tabla_hash]


la tabla la arma con las columnas
la tabla la arma con las columnas
clase
 
mensaje
-clase
metodo al que apunta
 
-mensaje
 
-metodo al que apunta
 


la idea es que cada vez que se haga una busqueda por <clase,mensaje>
la idea es que cada vez que se haga una busqueda por <clase,mensaje>
si no se encuentra en la posicion buscada se mira en la fila siguiente, sino en la otra siguiente
si no se encuentra en la posicion buscada se mira en la fila siguiente, sino en la otra siguiente
de no encontrarlo en las 3 filas, las mismas se vacian y se va a buscar con el algoritmo DTS
de no encontrarlo en las 3 filas, las mismas se vacian y se va a buscar con el algoritmo DTS


'''IC o PIC:'''
'''IC o PIC:'''
actua como una cache local por cada mensaje con un 80% de hit
actua como una cache local por cada mensaje con un 80% de hit
reemplaza la llamada por una porcion de codigo, en donde se pregunta si la clase del receiver es del tipo buscado, si es asi, tiene la llamada directa al método
reemplaza la llamada por una porcion de codigo, en donde se pregunta si la clase del receiver es del tipo buscado, si es asi, tiene la llamada directa al método


es una cache por cada envio de mensajes
es una cache por cada envio de mensajes
- existe un costo al enviar el mensaje
- existe un costo al enviar el mensaje
- se hace cuando el metodo se ejecuta una X cantidad de veces
- se hace cuando el metodo se ejecuta una X cantidad de veces
- se pueden evitar los call poniendo el byte-code en la llamada
- se pueden evitar los call poniendo el byte-code en la llamada

Revisión actual - 05:25 4 nov 2007

DTS: Para cada clase tiene una tabla con los mensajes que sabe responder esa clase (pero no los mensajes que hereda)

performance: Malo, tardas O(nlog(n)) en encontrar algo

memoria: bueno, por no tener duplicados

es dinamico? Si, facilmente se puede agregar un método, el cual pega directamente en el method dictionary


STI: Hace una tabla en las columnas pone las clases

en las filas pone los metodos

en donde se unen, se apunta al metodo si es que la clase lo tiene por herencia o por reimplementarlo

si no tiene ese metodo, apunta a DNU

performance: Bueno

memoria: Malo, muchas referencias al DNU (doesNotUnderstand)

la administracion de la tablas es muy complicada

RD y CT hacen lo mismo, compactando la tabla con coloreo


VTBL: Para cada clase tiene una tabla, y para cada selector tiene un indice

performance: Bueno

memoria: Malo, duplica mucha informacion

en el ejemplo aC m4 (se traduce como) -> call cvt[2]

NO se puede usar en lenguajes dinamicamente tipados

por el late binding sabes de que clase es el objeto cuando se envia el mensaje, entonces m4 no lo podes traducir como 2 hasta que no se sepa

Un problema es que al agregar un metodo en una clase, se tiene que agregar en todas las tablas virtuales asociadas al resto de las clases hijas


GLC: Define una cache global con 95% de hit

trabaja como un hash abierto

“Las tablas hash de direccionamiento abierto pueden almacenar los registros directamente en el arreglo. Las colisiones se resuelven mediante un sondeo del arreglo, en el que se buscan diferentes localidades del arreglo “ [1]

la tabla la arma con las columnas

-clase

-mensaje

-metodo al que apunta


la idea es que cada vez que se haga una busqueda por <clase,mensaje> si no se encuentra en la posicion buscada se mira en la fila siguiente, sino en la otra siguiente

de no encontrarlo en las 3 filas, las mismas se vacian y se va a buscar con el algoritmo DTS


IC o PIC: actua como una cache local por cada mensaje con un 80% de hit

reemplaza la llamada por una porcion de codigo, en donde se pregunta si la clase del receiver es del tipo buscado, si es asi, tiene la llamada directa al método

es una cache por cada envio de mensajes

- existe un costo al enviar el mensaje

- se hace cuando el metodo se ejecuta una X cantidad de veces

- se pueden evitar los call poniendo el byte-code en la llamada