Examen Final - 75.07. Algoritmos y Programación III

Cátedra: Fontela
Fecha: Primer Oportunidad - Segundo Cuatrimestre 2006
Día: 14/12/2006

Esta página está incompleta; podés ayudar completando el material.

Enunciado

Punto I

  1. Implemente una clase ListaCircular, basándose en la clase LinkedList, de modo tal que se pueda recorrer en forma cíclica. Debe implementar el iterador correspondiente. Puede usar composición o herencia respecto de LinkedList.
  2. Justifique por qué utilizó composición o herencia.
  3. Haga el diagrama de clases correspondiente.
  4. Escriba un método estático en una clase auxiliar, que imprima todos los elementos de una lista circular, utilizando el iterador implementado y el método toString de cada elemento.
  5. Haga un diagrama de secuencia en UML para el método anterior.

Punto II

Explique todas las ventajas que conozca de los métodos incrementales (o iterativos) sobre el desarrollo en cascada. Nombre dos procesos de desarrollo iterativo.

Punto III

El uso de concurrencia en una aplicación asegura que la misma va a ejecutarse más rápidamente. ¿Verdadero o falso? Justifique.

Resolución

Punto I

:materias:75:07:circularlistclassdia.png

import java.util.Iterator;
import java.util.LinkedList;
 
public class CircularList<T> extends LinkedList<T>{
 
	public CircularList(){
		super();
	}
 
	public Iterator<T> iterator(){
		return new CircularIterator();
	}
 
	private Iterator<T> superIterator(){
		return super.iterator();
	}
 
	public boolean add(T t){
		return super.add(t);
	}
 
	class CircularIterator implements Iterator<T>{
		private Iterator<T> it;
 
		public CircularIterator(){
			it = superIterator();
		}
 
		public boolean hasNext() {
			if (size() > 0) return true;
			return false;
		}
 
		public T next() {
			if (!(it.hasNext())) it = superIterator();
			return it.next();
		}
 
		public void remove() {
			it.remove();
		}
	}
}

La razón por la cual se utiliza herencia es que esa relación permite la reutilización de todos los métodos de LinkedList. Dado que el único método que es necesario reescribir es iterator, se evita la implementación de los demás, los cuales sólo deberían delegar en los de la clase padre. Además, conceptualmente una ListaCircular “es una” LinkedList.

import java.util.Collection;
import java.util.Iterator;
 
public class CollectionDisplayer {
 
	public static void showCollection(Collection collection){
		int max = collection.size();
		Iterator it = collection.iterator();
		for (int i = 1; i <= max; ++i){
			System.out.println(it.next()); //El método toString es llamado implícitamente
		}
	}
}
Falta diagrama de secuencias

Discusión

Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.
materias/75/07/final_1_20061214_1.txt · Última modificación: 2006/12/30 17:58 por mariano
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia: CC Attribution-Noncommercial-Share Alike 3.0 Unported


Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki