Sie sind auf Seite 1von 21

Gua de ejercicios

Algoritmos y programacin III FIUBA 75.07 Cursos 1 y 2 segundo cuatrimestre 2005

(versin preliminar) Autores: Nicols Pez Nicols Ferretti Eugenio Yolis Pablo Roca Ignacio Waitoller Marcio Degiovaninni
Compilacin: Pablo Surez

Gua de ejercicios

Algoritmos y Programacin III (75.07) cursos 1 y 2

Capitulo 1: Objetos, clases y encapsulamiento


1. Programe una clase CalculadoraDeMatrices que permita realizar las siguientes operaciones con matrices: sumar, restar, traza y determinante. Debe permitir operar con matrices de dos dimensiones, de cualquier tamao. Recuerde que para poder realizar algunas operaciones es necesario que primero verificar que las matrices sobre las que se va a operar sean compatibles. 2. Escriba las clases que considere necesarias para representar un juego de Truco que permita jugar a dos personas. Como modificara su diseo si deberia permitir que una persona juegue contra la mquina? 3. Escriba el cdigo correspondiente al siguiente diagrama de clases (no escriba el cuerpo de los metodos, sino solo su declaracin):
ReproductorDiscos reproducir(int) detener() siguiente() anterior() cargarCD(Disco) usa Disco titulo fechaEdicion obtenerDuracionTotal() obtenerCancion(int) contiene Cancion titulo duracion

4. Dibujar un posible diagrama de clases para el siguiente fragmento de cdigo:


Compas unCompas = new Compas(); Circulo unCirculo = unCompas.dibujarCirculo(5); Pincel unPincel = Cartuchera.getPinceles().getItem(2); unPincel.setColor(new Color("#336677")); unPincel.pintar(unCirculo); int superficie = unCirculo.getSuperficie();

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 Algoritmos y Programacin III (75.07) cursos 1 y 2

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.

: usuario 1: buscar()

: Buscador

: ServidorArchivos

: Archivo

2: listarArchivos() 3: 4: 5: descargar() 6: obtenerArchivo() 7: 8: 9: cambiarNombre( )

9. Dibuje un posible diagrama de secuencia para el fragmento de cdigo del ejercicio 4. 10.Dibuje los diagramas de secuencia y clases correspondientes al siguiente fragmento de cdigo.
Connection connection = new Connection(localhost/mydb); Command command = new Command(); command.setConnection(connection); command.setText("SELECT * FROM USERS"); connection.open(); DataReader reader = command.execute();
Gua de ejercicios Algoritmos y Programacin III (75.07) cursos 1 y 2

connection.close(); while(int i < reader.getResultSize()) { Printer.write(reader.getRow(i)); i++; } connection.close();

Gua de ejercicios

Algoritmos y Programacin III (75.07) cursos 1 y 2

Unidad 2: Herencia, Polimorfismo e Interfaces


1. Codifique una clase abstracta "Numero" con los siguientes mtodos: a. sumar(Numero n): suma a ste nmero el nmero "n" b. restar(Numero n): resta a ste nmero el nmero "n" c. multiplicarPor(Numero n): multiplica a ste nmero por el nmero "n" d. dividirPor(Numero n): divide a ste nmero por el nmero "n" e. toString(): (redefinicin del mtodo definido en "Object") devuelve un String que representa al nmero 2. Modifique la calculadora de matrices programada en el ejercicio 1 de la unidad 1 para que trabaje con matrices cuyas posiciones contengan objetos del tipo "Numero". 3. Codifique las clases "NumeroEntero", "NumeroReal" y "NumeroComplejo", descendientes de "Numero", que implementen los mtodos abstractos de "Numero" mediante aritmtica entera, real y compleja respectivamente. Agregue en cada clase el constructor apropiado para poder crear instancias de cada uno de los nmeros. 4. Codifique una funcin de prueba que utilice la calculadora programada en el punto 2) con matrices de cada una de las clases numricas programadas en el punto 3) e imprima los resultados. 5. Busque la definicin de la interface "Comparable" en la API de Java, y escriba una funcin que reciba un array con objetos de tipo "Comparable" y lo devuelva ordenado, haciendo uso del mtodo "compareTo" definido en dicha interfaz. 6. Modifique las clases "NumeroEntero", "NumeroReal" y "NumeroComplejo" para que implementen la interface "Comparable" y escriba una funcin de prueba que utilice la funcin programada en el punto 5) para ordenar arrays de cada una de esas clases e imprima los resultados. 7. Las clases de la API de Java "java.lang.String" y "java.util.Date" tambin implementan la interface "Comparable". Escriba una funcin de prueba que utilice la funcin programada en el punto 5) para ordenar arrays de cada una de estas 2 clases e imprima los resultados.

Gua de ejercicios

Algoritmos y Programacin III (75.07) cursos 1 y 2

Unidad 3: Excepciones y colecciones


1. Indicar dnde se encuentran los errores en el siguiente cdigo en Java y reescribalo correctamente
public class eTemperaturaErronea{ } public class Ejercicio1(){ public int ObtenerTemperatura(int provincia) throw new eTemperaturaErronea{ if ((provincia < 0) || (provincia > 23)) throw eTemperaturaErronea; else return 20; } public static void main (String[] args){ Thread.sleep(1000); //(Investigar si este metodo arroja excepcion ObtenerTemperatura(15); } }

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

Algoritmos y Programacin III (75.07) cursos 1 y 2

3. Codifique una clase NumeroNatural, descendiente de la clase NumeroEntero codificada en el ejercicio 3 de la gua 2, en la que en su constructor reciba un int, y que arroje eNumeroInvalido (tambin la debe codificar) si ste es menor a 0, y escriba un fragmento de cdigo en el que se instancie un nuevo NumeroNatural, y en el caso que haya excepcion se imprima la traza de la pila de llamados a mtodos. 4. En una clase accesoria que contenga un mtodo main llene un ArrayList con 20 Numeros (Enteros, Naturales, etc.) usando las clases ya codificadas en la gua 2 y en sta. a. Imprima los elementos cargados en la coleccin usando un ciclo for. b. Imprima los elementos cargados en la coleccin usando un iterador. c. Cargue el NumeroComplejo 3 + 4i en la posicin 14 de la coleccin. d. Imprima el elemento 14 de la lista. e. Itere la lista imprimiendo slo los nmeros complejos. 5. Implemente una clase ListaDeNumeros, en la que se encuentre restringida la posibilidad de cargar elementos que no sean Numero (entiendase que tambin acepta sus descendientes). 6. Confeccione un diagrama de clases con la lista del punto 5, y las clases que representan los numeros. 7. Implemente una clase ArrayListExtendida, que permita mediante el mtodo add(tipo_primitivo i) agregar a la lista elementos de tipos primitivos int, float y double, y que automaticamente los cargue con sus respectivas clases envolventes. 8. Se necesita implementar un sistema en el que se puedan cargar alumnos, a los cuales los caracterizan el nombre y apellido, el padrn, el sexo, condicin (regular o condicional) y la nota final. Estos alumnos se deben cargar en una asignatura, llamada Algoritmos y Programacion III. Implemente las clases y mtodos necesarios para esta situacin, teniendo en cuenta lo que se pide a continuacin: a. Mostrar en pantalla todos los alumnos que se encuentren en la asignatura. b. Mostrar en pantalla los alumnos que se encuentren como condicional y su cantidad. c. Ordenar los alumnos de acuerdo a su nota (de mayor a menor) y mostrarlo en pantalla. d. Ordenar los alumnos de acuerdo a su nota (de menor a mayor) y mostrarlo en pantalla. e. Ordenar los alumnos por nombre y apellido y mostrarlo en pantalla Nota: para los ordenamientos utilizar las facilidades provistas por la plataforma. 9. Se necesita una clase Matriz de dos dimensiones en la que sus elementos queden restringidos a los del tipo Numero utilizado en ejercicios anteriores. La Matriz debe poder ser recorrida usando un iterador, que recorra fila por fila. Implementar las clases y mtodos necesarios para sto. 10. Implementar una lista circular, y su iterador. 11. Para el juego de la Batalla de Botes (similar a Batalla Naval, pero con barcos que ocupan un solo casillero), se requiere una cuadrcula con filas numeradas de 1 a 8 y letras de A hasta la H. Implementar las clases Botes y Tablero con los siguientes mtodos, que provea las siguientes funcionalidades: a. Agregar un bote en un casillero b. Saber si un casillero est ocupado o no c. Sacar un bote de un casillero (hundido) d. Reiniciar el tablero con todos los casilleros vacios e. Ubicar 8 botes en lugares aleatorios del tablero

Gua de ejercicios

Algoritmos y Programacin III (75.07) cursos 1 y 2

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

Algoritmos y Programacin III (75.07) cursos 1 y 2

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

Algoritmos y Programacin III (75.07) cursos 1 y 2

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

Algoritmos y Programacin III (75.07) cursos 1 y 2

Habitacion prototipo = new Habitacion(moviliario); for(int i = 0; i < 3; ++i) { prototipo.addInstalacion(new Pared(prototipo)); } Habitacion quincho, comedor; quincho = (Habitacion) prototipo.clone(); comedor = (Habitacion) prototipo.clone(); comedor.addInstalacion(new Techo(comedor)); System.out.println("Habitacin plantilla: " + prototipo.toString()); System.out.println("Quincho: " + quincho.toString()); System.out.println("Comedor: " + comedor.toString()); } }

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()); } } /* ... */

a. De acuerdo a la siguiente extensin al diagrama anterior, implemente los mtodos necesarios para la clonacin de una casa.

Gua de ejercicios

Algoritmos y Programacin III (75.07) cursos 1 y 2

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

Algoritmos y Programacin III (75.07) cursos 1 y 2

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 Algoritmos y Programacin III (75.07) cursos 1 y 2

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 ... */ }

Milagrosamente, te diste cuenta de que en la lista de parmetros para cada mtodo, en forma individual, no se repite ningn tipo; por lo que se podra modificar el nombre de la clase StockDataAccess original y colocar en su lugar una clase adaptadora que acepte cualquier orden de parmetros y llame a la funcin adecuada. Luego de evaluar el costo de aplicar otra de sus brillantes ideas y ante presiones de la superioridad, tu gerente decidi que Ud. lo sacara del apuro. a. Por favor, evite el despido de su gerente implementando una clase adaptadora que reemplace la original e invoque correctamente los mtodos indicados. Llegaron ordenes de modificar cada una de las llamadas con parmetros incorrectos, sin embargo, ha cambiado el concepto de orden incorrecto: se debe determinar cuales funciones fueron llamadas ms frecuentemente durante una semana de utilizacin constante del aplicativo,
Gua de ejercicios Algoritmos y Programacin III (75.07) cursos 1 y 2

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

Algoritmos y Programacin III (75.07) cursos 1 y 2

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[]

{Log - se efectu un acceso.};

/*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

Algoritmos y Programacin III (75.07) cursos 1 y 2

Capitulo 5: Pruebas unitarias


(en desarrollo) Nota: Los ejercicios de este captulo son para realizar utilizando las herramientas JUnit o NUnit, segn el lenguaje con el cual se est desarrollando.
1. Escriba las pruebas necesarias para probar el la clase Numero del ejercicio 1 del captulo 2 de esta gua. 2. Escriba las pruebas necesarias para probar la lista circular programada en el ejercicio 10 del captulo 3 de esta gua.

Gua de ejercicios

Algoritmos y Programacin III (75.07) cursos 1 y 2

Capitulo 6: diseo, patrones y arquitectura


1. Se desea desarrollar un software para edicin de texto. Si bien an no sea decidido la plataforma de implementacin se sabe que la plataforma proveer componentes que implementen las siguientes interfaces.
IParrafo agregarCaracter(char) quitarCaracter(int) setFuente(IFuente) getFuente() : IFuente getTexto() : string setTexto(string)

ICajaDeTexto agregarParrafo(IParrafo) quitarParrafo(int) limpiar()

El software debe cumplir con los siguientes requisitos: Soporte de distintas tipografias Herramienta de correcin ortogrfica Adicionalmente debe permitir crear, editar y leer documentos en distintos formatos (rtf, doc y sxi). Se sabe que se utilizar una arquitectura MVC. Disee las clases del modelo y el contralador utilizando diagramas UML de clases, secuencia y estado.

2. Disee un compresor/descompresor de archivos que soporte varios formatos de compresin. Abstraigase de los detalles algortimicos de implementacin. Debe funcionar en modo consola. En el caso de la compresin debe recibir como parametro el nombre del archivo a comprimir el nombre del archivo de salida y el formato de compresin. Para la descompresin solo recibir como parametro el archivo a descomprimir. 3. Dadas las arquitecturas en Capas y MVC: Mencione sus componentes de cada junto con una breve descripcin. Muestre esquemticamente mediante un diagrama la interaccin entre los distintos componentes de cada arquitectura. 4. Disee un sistema que permita administrar el alquiler de peliculas en un video club. Concentrese en el la disponibilidad de peliculas y no en la parte de facturacin. Que arquitectura resultar ms conveniente en Capas o MVC? Justifique su eleccin. 5. El departamento de computacin desea desarrollar un aplicacin para permitir a los profesores de las distintas materias del departamento llevar el control de notas de sus alumnos. Para ello ha elegido utilizar un arquitectura en capas y le ha encargado a cada una de las ctedras de algoritmos 3 la implementacin de una capa. La ctedra Perez Berro se encargar de la presentacin, mientras que Mandrafina se encargar de la capa de datos y finalmente Fontela implementar la capa de negocio. Los desarrolladores de la capa de datos han decidido implementar la persistencia utilizando el patrn ActiveRecord, es por eso que todas las clases persistentes debern heredar la clase ActiveRecordBase. En base a estas consideraciones disee la capa de negocio, haga todas las hipotesis que considere necesarias.

Gua de ejercicios

Algoritmos y Programacin III (75.07) cursos 1 y 2

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

Enviar recibe un objeto serializable y lo convierte a string e invoca al mtodo protegido enviarString EnviarString toma la clase serializada y la enva a al transportador destino. RecibirString transforma el string de entrada en el objeto original y notifica a los observadores enviandoles el objeto recibido Implementar los mtodos de dicha clase y escribir un ejemplo de programa que la utilize. 4) La clase Crculo tiene los atributos radio, superficie y permetro. Aunque superficie y permetro se pueden calcular cada vez que se los pide, es necesario hacer uso de operaciones de punto flotante que son significativamente ms costosas que una simple asignacin. Por este motivo, el clculo se realiza una sola vez y el resultado se guarda en atributos. Como modificara la clase Circulo para evitar serializar estos atributos calculables y lograr que solo guarde la mnima informacin necesaria? Clonacin 1) Crear un mtodo llamado ModificarLista(List L) que tome una coleccin de objetos, ejecute y el mtodo modificar() de cada uno. Modificar es un mtodo que cambia el estado de objetos y no existe un mtodo que le devuleva el estado anterior. El mtodo lanzar una excepcin CouldNotExcecuteException si no se pudo completar su ejecucin. El mtodo modificarLista debe ser transaccional, es decir, o se modifican todos los objetos o no se modifica ninguno.

Gua de ejercicios

Algoritmos y Programacin III (75.07) cursos 1 y 2

2) El patrn creacional prototype permite crear objetos iguales a partir de un objeto inicializado con ciertos valores en sus atributos. Implementar el patrn prototype usando clonacin utilizando como base el siguiente esquema

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

Algoritmos y Programacin III (75.07) cursos 1 y 2

Captulo 10: Aplicaciones distribuidas


1) Xmethods es una web en la que se listan servicios webs simples que se pueden consumir gratuitamente. Crear una aplicacin de consola que consuma el ws que convierte temperaturas a diferentes escalas. La informacin necesaria se encuentra en www.xmethods.net buscando el ws que se llama Temperature Convert. Al seleccionarlo se mostrarn los detalles del ws como por ejemplo su WSDL que en este caso es http://java.hpcc.nectec.or.th:1978/axis/TemperatureConvert.jws?wsdl 2) Google posee una api para acceder a su sistema de bsqueda y del sistema de sugerencias por errores de ortografa. Generar dos aplicaciones de consola. a. La primera debe devolver, dado una cadena de bsqueda, los 20 primeros resultados indicando Ttulo, URL y Tamao de la pgina. b. La segunda aplicacin debe, dado una cadena, sugerir su correccin en caso que google crea que xiste una palabra mal escrita. Google posee un API que se descarga gratuitamente desde http://www.google.com/apis/. Es necesario registrarse para obtener una clave que debe pasarse como parmetro obligatorio en cada invocacin de sus servicios. El paquete que se descarga cdigo de ejemplo, informacin de la WSDL documentacin para poder desarrollar. 2) Construir una aplicacin que exponga un WebService de tal manera que los clientes que se conectan puedan consultar los datos de un libro a partir de su isbn

3) Construir el cliente correspondiente a dicha aplicacin 4) Construir un WS que permita almacenar objetos persistentes de manera remota y un cliente que le enve la coleccin serialable realizada en el ejercicio de serializacin y que tambin permita recuperarla 6) Generar una aplicacin que utilize RMI en el objeto BolsaValores que tiene el mtodo BigDecimal getCotizacin(int codAccion); 5) Construir una aplicacin de CHAT con RMI

Gua de ejercicios

Algoritmos y Programacin III (75.07) cursos 1 y 2

Das könnte Ihnen auch gefallen