Clase del 30/10/2007 (Diseño Avanzado con Objetos)

De Cuba-Wiki

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