Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Jerarquía de Collection
La jerarquía de Collection es una de las más importantes dentro de un
ambiente vivo de objetos pensado para generar modelos computacionales.
Esto se debe a que en la gran mayoría de los dominios existen entes de la
realidad que son o contienen colecciones de otros entes.
El primer detalle que se debe tener en cuenta es que los protocolos de clases
concretas con las que el ambiente debe contar comienzan con mayúsculas. El
ANSI no exige que se implementen en clases el resto de los protocolos
abstractos que define. No obstante, exige que las clases concretas
implementen los protocolos con los que están relacionadas en el gráfico.
Los protocolos para las clases concretas <Set> y <Bag> deben implementar el
protocolo <extensibleCollection>. El primero de estos representa una colección
de tamaño variable, sin orden entre sus elementos. Además, sus elementos no
pueden ser accedidos individualmente a través de una clave externa, y de la
misma manera que los conjuntos matemáticos, no pueden tener elementos
repetidos. <Bag> es similar a <Set>, pero al contrario que este último permite
elementos repetidos.
1
El mensaje #== retorna un objeto del tipo Boolean indicando si ambos objetos son
exactamente la misma instancia.
2
Un índice es una clave de búsqueda a través de la cual se puede acceder al elemento
indicado por el valor del mismo.
Otro de los protocolos abstractos definidos por el ANSI es
<sequencedCollection>, este provee comportamiento para escribir en una
colección ordenada de objetos, cuyos elementos pueden ser accedidos
mediante un índice.
Tanto Array como ByteArray quedaron fuera del alcance por cuestiones
implementativas, ya que son clases bien conocidas por la Virtual Machine (VM).
Es decir, que la VM conoce su estructura interna y por lo tanto utiliza esta
información para realizar optimizaciones. Además, estas clases deben
subclasificar de su superclase utilizando mensajes especiales y no todo su
comportamiento es implementado a través de colaboraciones entre objetos.
variableSubclass:instanceVariableNames:classVariableNames:poolDictionarie
s:category:
variableByteSubclass:instanceVariableNames:classVariableNames:poolDictio
naries:category:
Tal como sucede con Array, algunos de sus métodos se implementan utilizando
primitivas y se consideró innecesario implementar esta colección para cumplir
con el objetivo del trabajo.
Figura 3.2: Protocolos de creación de instancias de la jerarquía de Collection definidos por el ANSI.
Jerarquía de Collection en Squeak
En Squeak, como en toda implementación de Smalltalk, se encuentra
desarrollado un modelo de la jerarquía de Collection. En esta sección se
describe este modelo y además se realiza un análisis de los principales
problemas del mismo.
Descripción
En Squeak, la jerarquía de Collection cuenta con la implementación de las once
colecciones concretas descriptas por el ANSI, sin embargo ésta jerarquía
implementa una gran cantidad de comportamiento que no está relacionado
con lo que se define en el ANSI. En concreto, la clase abstracta Collection
cuenta con 98 subclases, donde muchas de estas (por ejemplo,
CompiledMethod y Bitmap) son de propósito específico.
Por otro lado, sucede algo similar con el mensaje #add:, pero con una solución
diferente. La clase Dictionary puede responder al mensaje #add:, que también
es heredado de su superclase, o sea Set. Así como con el mensaje #remove:,
esto no tiene mucho sentido, ya que un diccionario se debe acceder mediante
una clave (mensaje #at:) y eventualmente para esa clave, modificar o definir
su valor (mensaje #at:put:).
Pero en este caso, el mensaje no es cancelado como #remove:, sino que recibe
como colaborador una instancia de la clase Association. Por lo tanto, que el
mensaje #add: definido en la clase Dictionary no es intuitivo para el
programador. Además al recibir como colaborador a una instancia de la clase
Association, está exponiendo hacia el exterior de qué manera se guardan los
elementos.
Explosión de Clases
Otro problema que ocurre en la jerarquía de Squeak (se consideran aquí, a
todas las clases de la jerarquía, no solamente a las definidas en el ANSI) es la
gran explosión de clases que existe. Como ya se mencionó en este capítulo, la
misma cuenta con 98 subclases. Entre otros motivos, este inconveniente es
una consecuencia del problema ya tratado de subclasificaciones mal utilizada.
Como se puede ver en el gráfico Collection es una clase abstracta al igual que
las clases DictionaryBehavior y SetBehavior.
Una vez presentada la especificación del dominio, la cual fue tomada de guía
durante el desarrollo, y luego de haber presentado la nueva jerarquía de
Collection, se comenzará a explicar el modelo generado. Para esto se
comenzará relatando la evolución del mismo, marcando las principales
modificaciones realizadas durante el desarrollo, para luego presentar el modelo
final generado. En este caso, se incluyen los Traits reificados y cómo estos son
utilizados desde las clases del modelo.
Referencias
[11] William R. Cook. Interfaces and specifications for the Smalltalk-80 collection
classes. In Proceedings OOPSLA ’92, ACM SIGPLAN Notices, volume 27, pages 1–15,
October 1992.