Diferencia entre revisiones de «Clase del 30/10/2007 (Diseño Avanzado con Objetos)»
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