TEST REFERENCIAS Y TIPOS ABSTRACTOS DE DATOS (06/10/2010) EDI - CURSO 2010/2011 (Grupo Sistemas)
Alumno/a: ____________________________________________
D.N.I.: _______________
TEST . 5 puntos.
Nota: cada pregunta correcta suma 1,25 puntos (las respuestas incorrectas no penalizan). En algunos casos, la respuesta correcta puede consistir en no marcar opción alguna.
1.- Marque la respuesta/s correcta/s.
[ ] Una referencia en Java guarda la dirección de memoria en la que se almacena un objeto.
[ ] Los objetos en Java se pasan por valor.
[ ] Sólo es posible tener una referencia por objeto.
[ ] Generalmente, en Java es posible aplicar operadores aritméticos (+, -, *, ...) sobre referencias.
2.- Marque la respuesta incorrecta respecto al concepto de especificación algebraica de tipos abstractos de datos.
[ ] Es una técnica formal.
[ ] Permite definir sin ambigüedad un TAD.
[ ] A la hora de definir un TAD de tipo T, sus operaciones nunca involucran tipos de datos auxiliares (ej.: tipo Entero).
[ ] Es independiente de cualquier representación/implementación.
3.- Marque la respuesta/s correcta/s respecto a los tipos abstractos de datos.
[ ] El conjunto de operaciones constructoras se puede clasificar como libre o no libre.
[ ] Si la operación de un TAD llamado T devuelve un resultado de tipo T, entonces dicha operación es generadora.
[ ] Si la operación de un TAD llamado T devuelve un resultado de tipo T, entonces dicha operación es modificadora.
[ ] El usuario de un TAD ha de conocer sólo los aspectos más relevantes de su implementación.
4.- Señale la principal desventaja de una interfaz respecto a una clase abstracta.
[ ] Las interfaces están ligadas a una jerarquía rígida de tipos de datos.
[ ] Las interfaces no están ligadas a una jerarquía rígida de tipos de datos.
[ ] Es necesario hacer una inversión importante de esfuerzo si la interfaz cambia después de su especificación inicial.
[ ] No permiten el uso de herencia múltiple.
- Página 1 -
CUESTIONES . 5 puntos.
A (1,5 puntos) Dado el TAD bolsa, definido como una colección no ordenada de elementos y con posible repetición, y suponiendo las operaciones CrearBolsa, EsVacía, Poner y Quitar, escriba la especificación semántica de las operaciones EsVacía y Quitar en función de las operaciones generadoras.
* Nota: suponga ∀b∈bolsa ,∀e , f ∈elemento
Solución:
EsVacía (CrearBolsa) → cierto EsVacía (Poner (b, e)) → falso Quitar (CrearBolsa, e) → CrearBolsa Quitar (Poner (b, f), e) =
Si e = f → Quitar (b, e)
Si no → Poner (Quitar (b, e), f)
- Página 2 -
B (3,5 puntos) Suponiendo la siguiente implementación de la clase VariableEnlazada,
class VariableEnlazada<X> { private X _valor;
private VariableEnlazada<X> _enlace;
public VariableEnlazada (X valor, VariableEnlazada<X> enlace) { _valor = valor;
_enlace = enlace;
}
public void setValor (X valor) { _valor = valor; } public X getValor () { return _valor; }
public void setEnlace (VariableEnlazada<X> enlace) { _enlace = enlace; } public VariableEnlazada<X> getEnlace () { return _enlace; }
public String toString () { return _valor.toString(); } }
implemente en Java un método recorrer (VariableEnlazada<X> inicio) que imprima por pantalla el contenido de toda la cadena de enlaces (uno por línea). 1,75 puntos.
* Nota: suponga que inicio representa la referencia al primer objeto de la cadena.
Solución:
public static <X> void recorrer (VariableEnlazada<X> inicio) {
for (VariableEnlazada<X> aux = inicio;
aux != null;
aux = aux.getEnlace()) System.out.println(aux);
}
- Página 3 -
Implemente en Java un método recorrer_y_alterar (VariableEnlazada<X> inicio) que modifique una cadena de enlaces 'ignorando' los enlaces que ocupan una posición par en la cadena inicial. A continuación se muestra un ejemplo. 1,75 puntos.
* Nota: se pide modificar los enlaces, no crear una nueva cadena de objetos de clase VariableEnlazada.
Solución:
public static <X> void recorrer_y_alterar (VariableEnlazada<X> inicio)
{
try {
inicio.setEnlace(inicio.getEnlace().getEnlace());
recorrer_y_alterar(inicio.getEnlace());
}
catch (NullPointerException exc) { }
}
- Página 4 -
'a' 'b' 's' 'ñ' 'b'
Pos: 1 Pos: 2 Pos: 3 Pos: 4 Pos: 5
'a' 's' 'b'
Resultado: