Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Guia Ejercicios
Guia Ejercicios
(versin preliminar)
Autores:
Nicols Pez
Nicols Ferretti
Eugenio Yolis
Pablo Roca
Ignacio Waitoller
Marcio Degiovaninni
Compilacin:
Pablo Surez
Gua de ejercicios
Disco
usa
titulo
fechaEdicion
contiene
Cancion
titulo
duracion
obtenerDuracionTotal()
obtenerCancion(int)
5. Escriba una clase Lista que implemente el tipo abstracto de dato Lista y que contenga
elementos de la clase Figura. No puede utilizar ninguna de las clases provistas por el lenguaje
a excepcin de object.
6. Utilizando la tcnica de composicin y la clase Lista desarrollada en el ejercicio anterior,
escriba una clase que implemente el tipo abstracto de dato Pila.
7. Un diagrama de estados muestra los distintos cambios de estado que sufre un objeto a travz
del tiempo. Tomando como punto el siguiente texto, dibuje el diagrama de estado de un
defecto.
Durante el proceso de desarrollo de todo software aparecen defectos. Dependiendo de los
criterios de cada equipo de desarrollo el ciclo de vida de los defectos vara, pero a pesar de
eso es posible definirlo a grandes rasgos: un defecto es encontrado y a partir de ese momento
y hasta que alguien se hace cargo de intentar arreglarlo el defecto permance reportado.
Gua de ejercicios
Mientras que alguien intenta arreglarlo se dice que el defecto est abierto. Puede que por ser
muy complejo se decida no arreglar el defecto hasta la proxma versin del producto, en cuyo
caso el mismo queda suspendido. Si alguien puede arreglar el defecto, entonces el mismo
pasar a estar arreglado, hasta que finalmente quien encontr el defecto lo de por cerrado.
En ocasiones puede que el arreglo no sea correcto, entonces el defecto ser reabierto.
Dibuje el diagrama de estados de un defecto.
8. Dibuje un posible diagrama de clases consistente con el siguiente diagrama de secuencia y
escriba un fragmento de cdigo correspondiente al mismo.
: Buscador
: usuario
: ServidorArchivos
: Archivo
1: buscar()
2: listarArchivos()
3:
4:
5: descargar()
6: obtenerArchivo()
7:
8:
9: cambiarNombre( )
connection.close();
while(int i < reader.getResultSize())
{
Printer.write(reader.getRow(i));
i++;
}
connection.close();
Gua de ejercicios
Gua de ejercicios
2. Indicar que imprimen por pantalla los siguientes fragmentos de cdigo suponiendo primero que
no existe el archivo y luego que existe (se supone arch instancia de una clase X;
arch.siguienteLinea() arroja IOException si el archivo fsico al que se refiere no existe, caso
contrario devuelve Hola)
a)
try{
System.out.print(Comienza linea: );
System.out.print(arch.siguienteLinea());
System.out.println(Fin linea);
}
catch (IOException IOex){
System.out.println(No existe el archivo);
}
catch (Exception ex){
System.out.println(Oops, hubo una excepcion);
}
finally{
System.out.println(Chau);
}
b)
try{
System.out.print(Comienza linea: );
System.out.print(arch.siguienteLinea());
System.out.println(Fin linea);
}
catch (Exception ex){
System.out.println(Oops, hubo una excepcion);
}
catch (IOException IOex){
System.out.println(No existe el archivo);
}
finally{
System.out.println(Chau);
}
Gua de ejercicios
Gua de ejercicios
Los mtodos que requieran que se les pase como parmetros lugares del tablero, para
hacerlo
ms intuitivo para el usuario de la clase deberan recibir un carcter y un
entero (columna fila).
12. Para el punto anterior (11) implementar un iterador propio para el Tabler, que recorra de
columna en columna. Utilizar este iterador para recorrer el tablero imprimiendo las posiciones de
los botes, y la cantidad de botes que se encuentran en el tablero.
Gua de ejercicios
Unidad 4
1. Escriba una clase que contenga un elemento agregado y uno compuesto de dos tipos que
defina.
Agregue un atributo de tipo entero y extienda la clase hacia otra. Defina constructores por defecto
donde se establezcan valores significativos para cada uno de los posibles atributos.
Se desea tener la posibilidad de copiar un objeto de esta clase y que el siguiente cdigo
no genere excepciones:
public class TestClonacion {
private void checkAttributes(Clase1 original, Clase1 clonado) throws Exception
{
if (clonado == original)
throw new Exception("Original y clonado son el mismo objeto.");
if ( ! clonado.equals(original))
throw new Exception("Original y clonado no son iguales.");
if (original.getAtribEntero() != clonado.getAtribEntero())
throw new Exception("Original y clonado no comparten el atributo de tipo primitivo.");
if (original.getAtribAgregado() != clonado.getAtribAgregado())
throw new Exception("Original y clonado no comparten el atributo agregado.");
if (original.getAtribCompuesto() == clonado.getAtribCompuesto())
throw new Exception("Original y clonado comparten el atributo compuesto.");
if (original.getAtribCompuesto().equals( clonado.getAtribCompuesto()))
throw new Exception("El atributo compuesto no es igual en ambos objetos.");
}
private void run() throws CloneNotSupportedException, Exception
{
Clase2 base = new Clase2();
{
Clase2 original = (Clase2) base;
Clase2 clonado = (Clase2) original.clone();
checkAttributes(original, clonado);
}
{
Clase1 original = (Clase1) base;
Clase1 clonado = (Clase1) original.clone();
checkAttributes(original, clonado);
}
}
public static void main(String[] args)
{
TestClonacion test = new TestClonacion();
try {
test.run();
System.out.println("TEST EXITOSO.");
}catch (Exception e) {
System.out.println("HA FALLADO EL TEST.");
e.printStackTrace();
}
}
Gua de ejercicios
2. El siguiente diagrama de clases muestra la estructura que debe mantener una habitacin de
una casa en cuanto a composicin y agregacin de otros objetos.
Se puede observar el carcter no propietario de la habitacin para con sus muebles, esto
es as por la facilidad que estos tienen de ser parte de una u otra habitacin momentneamente.
Por lo tanto, el mobiliario de una habitacin slo indica el conjunto de elementos que puede estar
en la misma pero no que necesariamente se encuentre para un momento dado.
Se est trabajando en un modelador de casas en el cual se permite disear una vivienda y
plantear su estilo de decoracin.
Uno de los mdulos de la aplicacin brinda casas prediseadas para que el cliente
modifique a placer. Se adjunta un trozo de cdigo que se utiliza para testear el mdulo.
a. Implemente el modelo de forma tal que se puede practicar clonacin para cualquier elemento
y, en particular para una habitacin. Chequee el funcionamiento utilizando el siguiente cdigo;
preste principal atencin a la identidad de cada objeto contenido por las habitaciones.
public class CasaBuilder {
public static void main(String[] args)
{
Moviliario moviliario = new Moviliario();
moviliario.addMueble(new Silla());
moviliario.addMueble(new Mesa());
Gua de ejercicios
Para asegurarse de que la identidad de cada objeto sea la que se espera, puede utilizar su
nmero identificatorio al momento de devolver su informacin. Redefina el mtodo toString() de
manera anloga a la siguiente:
public class Silla extends Mueble
{
public String toString()
{
return "Silla N: " + String.valueOf(this.hashCode());
}
}
/* ... */
Gua de ejercicios
3.
a. En un tablero de ajedrez de 8 x 8 casilleros se desplaza un caballo de la forma usual, dos
casillas vertical u horizontalmente y luego, una en direccin perpendicular en cualquier sentido.
Determine una combinacin con las posiciones sucesivas del caballo si se pretende que
recorra todas y cada una de las casillas sin pasar ms de una vez por el mismo punto. Utilice las
funciones recursivas y los mtodos propios de un modelo con manejo dinmico de memoria.
b. Se encuentran 3 hobbits y 3 orcos en una costa del ro. Todos pretenden pasar hacia el otro
lado por lo que cooperaran en lo sucesivo. Los orcos, si se observan en mayor nmero que los
hobbits se los devoran.
Al borde del ro encuentran un bote con capacidad de hasta dos navegantes.
Indique la secuencia de viajes que deben hacerse en el bote para que todos pasen al otro
lado del ro.
NOTAS:
Tenga en cuenta que el bote no puede atravesar el ro si no tiene al menos un conductor y
que la cantidad de orcos debe ser mayor que la de hobbits en todo momento, inclusive cuando
estn desembarcando nuevos navegantes.
El enunciado surte el mismo efecto si se utilizan exploradores-canbales, alumnosprofesores o cualquier otro par antagnico.
Gua de ejercicios
4. Una importante fbrica de embutidos se encuentra auspiciando una competencia entre clientes.
El torneo consiste en comer cierta cantidad de panchos en el menor tiempo posible.
Se establece una unidad de bocado estndar y, en base a esta se determinan las cantidades de
bocados necesarias para consumir el pancho con los siguientes valores: 4 bocados para la
salchicha y 6 bocados para el pan.
Hay 3 competidores por mesa de los cuales slo uno pasa a la prxima ronda, inicialmente
hay 6 mesas y la eliminacin es directa. Cada competidor cuenta con 3 bandejas o fuentes de 7
panchos cada una.
La cantidad de bocados que un participante puede comer es un nmero decimal que se
establece antes de cada ronda, de acuerdo al estado fsico del sujeto. Esta capacidad disminuye
a medida que el participante avanza sobre una bandeja pero se restaura en el momento en que
ste consigue terminar la fuente.
Simularemos la simultaneidad de acciones mediante turnos en los cuales cada participante
tendr la posibilidad de comer los bocados que pueda. La cantidad de bocados que un
participante puede consumir por turno se calcula aleatoriamente al principio de la ronda con
nmeros decimales de entre 0,70 y 1,20; disminuye en 0,002 luego de cada turno pero es
restablecida al valor determinado al cambiar de bandeja.
a. Simule el torneo de acuerdo a lo descrito.
b. Realice el diagrama de secuencia para el proceso que realizara un participante si tuviera los
turnos continuos.
Puede basarse en el siguiente algoritmo simular la simultaneidad si as lo desea:
bool hayGanador = false;
while (! hayGanador)
{
// turno para un participante que determinamos aleatoriamente
int indexActual = random.Next(0,participantes.Length);
Participante partActual = participantes[indexActual];
/* ... Acciones para un participante ... */
}
5.
En un paquete adquirido por su empresa se recibi un juego de clases de las cuales no se
posee documentacin. La utilizacin de estos tipos se torna por dems compleja debido al pobre
desempeo del intellisense que posee el IDE que Uds. emplean.
Se requiere una utilidad que genere documentacin mnima sobre clases. Debe listar por
pantalla todos los mtodos y atributos para una determinada clase incluyendo clases ancestro e
informacin acerca de cuales fueron las caractersticas heredadas.
Las clases a listar puede ser pedidas al usuario en forma secuencial o pueden ser
introducidas como argumento de ejecucin del programa..
6.
a. Implemente una clase de utilidades que posea una funcin que, al recibir cualquier lista y
un nombre de atributo, ordene la coleccin utilizando la interfaz de comparacin
correspondiente. Eleve las excepciones que crea convenientes en caso de no existir el
atributo o cuando se encuentren objetos que no puedan ser ordenados.
b. Agregue una sobrecarga a la funcin anterior para que admita un nombre de mtodo y la
lista de argumentos para su invocacin. El objeto que este mtodo retorne ser el indicador
del orden para la lista.
Gua de ejercicios
c. Cree una funcin que filtre los objetos de una lista por un atributo o resultado de un mtodo
y devuelva una nueva lista con todos los objetos que cumplan el criterio. Agregue la
posibilidad de filtrado por atributos anidados es decir, por atributos que posean los atributos.
Implemntela para cualquier nivel de anidamiento.
7.
El gerente del departamento de sistemas en el cual trabajas descuid una extensin a su
sistema de inventario de stock en una consultora de software. Debido a la impericia de los
analistas de la misma, una gran parte de los mtodos de consulta a la base de datos fueron
invocados con los argumentos invertidos o en orden no definido.
No conforme con el producto, tu gerente pidi a la consultora que modifique el cdigo y
controle el orden de los argumentos de llamada. El resultado fue psimo: no slo se mantuvo la
inversin de parmetros para algunos mtodos sino que se aument el nmero de mtodos
involucrados.
La clase original de acceso a datos se llama StockDataAccess y la estructura de sus
mtodos es la siguiente:
public static String getNombreProducto(Integer idProducto,Region regionDeVenta);
public static List getAllProductosInRegion(Region regionDeVenta, Boolean faltante);
public static Integer getCantidadDisponible(Integer idProducto, Region regionDeVenta);
public static Integer getCantidadDisponible(Producto producto, Region regionDeVenta);
public static void setCantidadDisponible(Integer cantidad, Producto producto, Region region);
La estructura de los Productos y Regiones -clases contenedoras, sin mayor importanciaest dada por el siguiente esquema:
public class Producto
{
private int id;
private String nombre;
private int familia;
private String descripcion;
private float precio;
/* ... getters y setters ... */
}
public class Region
{
private int id;
private String nombre;
/* ... getters y setters ... */
}
usar esa combinacin de tipos de argumentos como correcta. La semana de prueba comienza
maana por lo que su gerente est algo inquieto.
b. Formule un registro estadstico de lo pedido, ubique archivo y lnea de las funciones que no
cumplan con el nuevo patrn para el orden de tipos para una modificacin selectiva y gnese un
bonus de fin de mes.
8.
a. Implemente una herramienta de construccin que devuelva una lista de instancias de acuerdo
a la informacin que obtenga de un archivo de texto.
El archivo de texto contendr en cada lnea, las caractersticas de un objeto a instanciar.
Para cada objeto se incluir el nombre de la clase a construir ms, en forma sucesiva y
separados por tabulados, la informacin acerca de cada atributo del objeto. Para esto ltimo se
establece la siguiente sintaxis: <nombre-atributo> = <valor-atributo>.
Para simplificar, suponga que los atributos son solamente de tipos primitivos y que las
clases que pueden ser instanciadas siempre tienen constructor sin parmetros. Puede elevar
las excepciones que considere necesario.
b. Aada una funcin llamada cloneIt que reciba cualquier objeto y devuelva una copia
clonada aunque su clase no implemente la interfaz Cloneable. En este caso considere que el
objeto puede tener atributos de tipos no primitivos.
9.
Un concepto interesante para el manejo de funcionalidades agregadas a un modelo de
objeto est dado por los interceptores: funciones que se disparan cuando ocurre un cambio en
determinada propiedad o se invoca determinado mtodo. Brindan, generalmente, la posibilidad de
agregar funcionalidad extra sin modificar las ya programadas. Ciertos lenguajes soportan tablas
donde se puede vincular funciones a ejecutar con mtodos que las disparan al momento de ser
invocados.
Un ejemplo sencillo se observa al poder realizar bsquedas de un producto en distintos
medios: en una base de datos, en archivos de texto o en servicios web y pretender loguear cada
consulta realizada. Se puede agrupar todos los mtodos de bsqueda y asociarles el interceptor
Logueo. Cuando se ejecute cualquier elemento de este conjunto se debe loguear una lnea con
la informacin pertinente.
Se pretende una implementacin de estos conceptos para nuestros lenguajes de trabajo
mediante un pequeo framework. Se requiere una estructura que permita manejar interceptores
en forma centralizada en detrimento de performance de procesamiento y para unos casos
particulares de invocacin, como ser: mtodos cuyo nombre es igual o comienza con una cadena
dada u otros.
Para testear el framework realizado, implemente un modelo MINIMO de clases y agrupe
algunos mtodos en conjuntos indicando la accin a realizar cuando los mismos se ejecuten.
Puede tomar el ejemplo brindado si lo desea y simular todas las acciones mediante impresiones
en pantalla.
Para llevar a cabo la implementacin pedida se permite imponer restricciones sobre las
clases que pertenecern al framework y su codificacin. Puede, por ejemplo, exigir que todos las
clases hereden de una comn o que todo mtodo que admita agrupamiento bajo aspectos
invoque una funcin como primera accin. Si desea conocer la lista de mtodos que se han
invocado puede utilizar la sentencia Thread.currentThread().getStackTrace();
El siguiente ejemplo ilustra el modelo citado:
Gua de ejercicios
import InterceptorFrame.*;
public class BuscadorWS extends InterceptorFrame.AbstractClass
{
public String getNombre(int idProducto)
{
//aseguro la posibilidad de ejecutar funciones antes de este
//mtodo en caso de ser necesario.
this.preInvoke();.
/*... funcionalidad ...*/
}
/* ... */
//idem despus.
this.postInvoke();
return nombre;
/* ... */
public class Principal
{
public static void main(String[] args)
{
//obtenemos el manejador para loguear los accesos a base de
//datos.
Logger logger = new Logger();
//argumentos para el logueo:
Object[] logArgs = new Object[]
/*creamos un interceptor que puede asociarse a varios mtodos de varias clases. Indicamos
su nombre y el mtodo que lo resolver junto con su objeto y argumentos.*/
Interceptor loguearInterc = new Interceptor("Interceptor de Logueo, logger, "logMethod"
,logArgs);
//agregamos aspectos con (nombre_mtodo, interceptor)
Relations.setInterceptor( getNombre, loguearInterc);
Relations.setInterceptor ( getPrecio, loguearInterc);
Relations.setInterceptor ( conectar, loguearInterc);
//una vez establecidos las relaciones se pueden usar las clases normalmente.
BuscadorWS busc = new BuscadorWS();
System.out.println(busc.getNombre(10));
/* ... */
Gua de ejercicios
Gua de ejercicios
ICajaDeTexto
agregarParrafo(IParrafo)
quitarParrafo(int)
limpiar()
Gua de ejercicios
Captulo 8: Persistencia
Serializacin
1) Crear una coleccin que sea capaz de persistirse junto con los objetos que contiene
2) Crear una coleccion de objetos que pueda persistirse en formato xml. Los objetos
tambin deben poder serializarse en xml
3) Dado una clase que tiene los mtodos de servicios
Gua de ejercicios
3) Dado un objeto que posee un mtodo Siguiente() que cambia su posicin interna dentro
de una lista y un mtodo EsFin() que indica si se lleg al final de la lista, crear un mtodo que
indique si al mover al siguiente elemento se llega al final sin alterar la posicin actual.
Gua de ejercicios
Gua de ejercicios