You are on page 1of 7

Ejercicio de laboratorio Tema 1

Gua para alumnos de ADSW


Jos A. Maas y Juan Antonio de la Puente - 09/02/2012

Esta obra est bajo licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported.

Introduccin
En este documento se describen las actividades que hay que realizar en la clase de laboratorio del tema 1 (introduccin) de la asignatura Anlisis y diseo de software. Los objetivos de este ejercicio son: Repasar el uso de Eclipse - bajar un proyecto de GitHub - compilar y ejecutar el cdigo Modicar el cdigo - refactorizacin: extraer una interfaz - hacer una nueva implementacin Probar el cdigo - ejecutar las pruebas dadas - aadir algunas pruebas

Eclipse
La versin de Eclipse con la que trabajaremos este ao es Eclipse IDE for Java Developers (Indigo). Esta versin est instalada en los ordenadores del laboratorio, y se recomienda instalarla tambin en los ordenadores personales de cada alumno. El documento Instalacin de Eclipse contiene informacin adicional sobre el proceso de instalacin.

Bajar un proyecto de GitHub


Github /'thb/ es un servicio de alojamiento basado en web para proyectos de software. Est organizado en repositorios, cada uno de los cuales aloja todos los archivos de un proyecto de software. En la asignatura ADSW utilizaremos una cuenta de GitHub denominada adsw-upm, que contiene varios repositorios con ejemplos de clase y ejercicios de las distintas partes de la asignatura. Para descargar estos ejemplos no es necesario darse de alta en GitHub.

GitHub est basado en Git /t/, un sistema de control de versiones muy utilizado para gestionar proyectos de software. Aunque se estudia en la asignatura, no es necesario conocerlo en detalle para descargar el cdigo de los ejemplos desde GitHub. Git est integrado en el entorno de desarrollo de software Eclipse mediante el plugin EGit, que est incluido en la versin de Eclipse que se recomienda utilizar para la asignatura, Eclipse IDE for Java Developers. En este ejercicio descargaremos el repositorio adsw-upm/Laboratorio_1. El documento Cmo descargar el cdigo de los ejemplos contiene instrucciones detalladas para ello, que se pueden resumir en: Obtener la URI del repositorio: git://github.com/adsw-upm/Laboratorio_1.git Clonar (copiar) el repositorio desde la vista de repositorios de Eclipse. Importar el proyectos del repositorio a Eclipse. Si todo va bien la vista de navegacin de Eclipse debe tener un aspecto semejante a ste:

El proyecto gusano
El cdigo descargado contiene varias clases agrupadas en un proyecto denominado gusano. La nalidad de este programa es pintar un gusano de una cierta longitud que se mueve a lo largo de un camino denido por una funcin paramtrica.

Anlisis Se dibujan una serie de puntos usando el resultado de una funcin denida para diferentes valores del tiempo t: t0, t0 + dt, t0 + 2dt, t0 + 3dt, ... t_nal Para cada valor de t, la funcin paramtrica da valores de x e y x = 2cos(t) + cos(8t) y = 2sen(t) + sen(8t) Los sucesivos puntos se van aadiendo a una lista de puntos, si bien cuando se supera la longitud, debe eliminarse el primer punto de la lista. O sea, el mtodo start(desde, hasta, delta): 1. se crea una lista de puntos 2. inicia t al valor desde 3. mientras t es menor que hasta 1. se calcula fx(t)
3

2. se calcula fy(t) 3. se construye un punto 4. se aade el punto al nal de la lista 5. si la lista es ms larga que "longitud", se elimina el primer punto de la lista 6. se llama al mtodo pinta(list) 7. se retarda la ejecucin llamando a sleep(...) 8. t se incrementa en "delta" Y el mtodo pinta(lista): 1. borra el papel 2. recorre la lista 1. saca un punto P1 2. saca el punto siguiente, P2 3. pinta en papel una lnea de P1 a P2 3. le dice al papel que pinte en la pantalla los trazos. Clases Tenemos objetos de varias clases: Ventana: clase para pintar en una ventana en la pantalla Papel: recubre la clase Ventana para trabajar sobre las dimensiones que quiera el usuario. Punto2D: puntos en un espacio bidimensional. Funcion00: funcin paramtrica Gusano: simula un gusano en la pantalla, usando una serie nita de puntos de una funcin denida paramtricamente. Ejercicio: clase inicial que contiene el mtodo main().

Ejecutar el programa desde Eclipse


Para ejecutar el programa se empieza creando una conguracin de ejecucin (run conguration):

Y a continuacin se pulsa en run.

Modicar el cdigo
Refactorizar Dada la clase class Funcion00 { ... } Se trata de extraer una interfaz interface FuncionP { ... } De manera que la clase original quede implemente esta interfaz: class Funcion00 implements FuncionP { ... } Para ello hay que seleccionar la declaracin de la clase y hacer Refactor > Extract en el men de Eclipse:

El resultado es una interface y una nueva denicin de la clase: public interface FuncionP { ! double fx(double t); ! double fy(double t); } class Funcion00 implements FuncionP { double fx(double t) {...} double fx(double t) {...} }

Y ahora en todos los sitios donde se haca referencia a Funcion00 aparecer una referencia a FuncionP. Por ejemplo, en la clase Ejercicio, donde pona Funcion00 funcion = new Funcion00(); pondr FuncionP funcion = Gusano(..., pondr Gusano(..., FuncionP funcion, ...) new Funcion00(); y en la clase Gusano, donde pona Funcion00 funcion, ...)

Implementar otra funcin El siguiente paso es implementar una nueva funcin paramtrica que pueda usarse en vez de Funcion00:

interface%FuncionP%{% %%%double%fx(double%t)%{...}% %%%double%fx(double%t)%{...}% }%

class%Funcion00%% %%implements%FuncionP%{% %%%double%fx(double%t)%{...}% %%%double%fx(double%t)%{...}% }%


Por ejemplo, podra ser:

class%Funcion01%% %%implements%FuncionP%{% %%%double%fx(double%t)%{...}% %%%double%fx(double%t)%{...}% }%

(tomada de http://www.ies.co.jp/math/java/calc/sg_para/sg_para.html)

Casos de prueba
Ejecutar las pruebas proporcionadas La clase TestCola trae pruebas para construir para meter hasta el lmite para ver que estn los puntos esperados Para ejecutar las pruebas se selecciona la clase y se hace Run as > JUnit Test en el men de Eclipse.

Aadir nuevas pruebas Se proponen las siguientes actividades: a) Bsqueda de errores en Cola.saca() Aadir otro mtodo de prueba para: 1. crear una cola de tamao 2 2. meter dos 3 datos: p1, p2 y p3 3. sacar un dato, que debe ser p2 4. sacar un dato, que debe ser p3 5. sacar un dato, que debe lanzar una excepcin Entre paso y paso, vericar el tamao. b) Bsqueda de errores en Cola.saca() 1. Aadir otro mtodo de prueba para: 2. crear una cola de tamao 0 3. meter un dato: p1 4. sacar un dato, que debe lanzar una excepcin entre paso y paso, vericar el tamao c) Pasar todos los casos de prueba

You might also like