Segunda práctica de Programación 2



Documentos relacionados
Problemas de Programación Orientada a Objetos

Prof. Dr. Paul Bustamante

GESTINLIB GESTIÓN PARA LIBRERÍAS, PAPELERÍAS Y KIOSCOS DESCRIPCIÓN DEL MÓDULO DE KIOSCOS

MANUAL DE USUARIO DEL MÓDULO TPV

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

V Manual de Portafirmas V.2.3.1

MANUAL DE AYUDA MODULO TALLAS Y COLORES

Práctica 1 - Pista de Carreras Programación II

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

Manual del Alumno de la plataforma de e-learning.

ICARO MANUAL DE LA EMPRESA

Introducción a Netbeans

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Capítulo 1. MANUAL DE USUARIO

Examen Septiembre Curso Programación en C++ Pág. 1

PANEL DE CONTROL (Zona de Administración) MANUAL DE USO Por conexanet. Revisión 1.1 Fecha

Gestión de Retales WhitePaper Noviembre de 2009

Mantenimiento Limpieza

Año: 2008 Página 1 de 18

GENERACIÓN DE ANTICIPOS DE CRÉDITO

Guía nuevo panel de clientes Hostalia

SOROLLA2 GUÍA PRÁCTICA SIMPLIFICADA. Relaciones de transferencias. Marzo del 2014

Manual de uso. Manual de uso - citanet 1

Estructura de datos y de la información Boletín de problemas - Tema 7

Introducción a la programación orientada a objetos

Uso de Visual C++ Pre-Practica No. 3

Manual de ayuda para crear y gestionar Tareas, como actividad evaluable

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

UAM MANUAL DE EMPRESA. Universidad Autónoma de Madrid

GUÍA PARA INICIAR UN TRÁMITE DESDE LA OFICINA VIRTUAL

GENERACIÓN DE TRANSFERENCIAS

Manual de Procedimiento

1. El sistema de registro para la evaluación de estudiantes, es una herramienta que se encuentra disponible para todos

Versión Página 2 de 29

QUE ES UN CUPO? Cupos 1

RESUMEN. Solución web usable para la gestión de dispositivos móviles en empresas

MANUAL DE USUARIO ARCHIVO

Práctica 2: Simón dice

MINI MANUAL PARA CREAR FORMULARIOS CON PHP Marzo 2007

Aplicación informática de Optimización de Facturas Eléctricas (O.F.E)

Manual de rol gestor de GAV para moodle 2.5

Gestión de usuarios en la web educativa del centro con JOOMLA!

Manual de usuario. Tramitación de inspecciones periódicas de ascensores: La visión de las empresas conservadoras

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Oficina Online. Manual del administrador

MANUAL DE LA HERRAMIENTA GENERADOR DE HORARIOS

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: Fax.:

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente.


Manual de usuario de Parda Programa de Almacenamiento y Recuperación de Datos Automático

Manual SBR. Pero antes de explicar las actividades que principalmente podemos desarrollar vamos a dar una visión global de la aplicación.

Vamos a crear nuestro primer juego en el que tendremos que coger la comida que esta protegida por los gatos

Manual de usuario Noticias y Accesos Directos en Facultades ÍNDICE

Prototipo de un sistema. interactivo de soporte y ayuda a los compradores de un centro. comercial de equipamiento del hogar

Práctica 2 de Microsoft Access

Concesionario de coches

MANUAL DE USUARIO SISTEMA PEAJE

GESTIÓN DE VISADO TELEMÁTICO Manual de usuario Web (rev 1.1)

5.4. Manual de usuario

CIERRE DE PERÍODOS DE LIQUIDACIÓN

Cómo instalar el software de CRM Personas en un alojamiento web remoto

Pruebas de unidad con JUnit

Manual de Usuario de la Herramienta SICRES-Tester. SIR Sistema de Interconexión de Registros. Tipo de documento. Fecha de entrega 08/04/2014

Cobian Backup. Inguralde [Enero 2011]

Programando con Enchanting

MANUAL DE USUARIO DE LA HERAMIENTA CONFIGURACION DE PRESUPUESTOS PARA DISTRIBUIDORES

TPVFÁCIL. Caja Real. Definiciones.

Resumen ÁREA DE FACTURACIÓN::INFORMES::Pedidos Detalle Resumen ÁREA DE

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Introducción FACULTAD DE INGENIERÍA. Ordenación

Roberto Quejido Cañamero

PAGOS DOMICILIADOS - GESTIÓN DE PAGOS PAGOS DOMICILIADOS Y GESTIÓN DE PAGOS

MANUAL BASICO DE WEBEX

5.2.- Configuración de un Servidor DHCP en Windows 2003 Server

Programación de Sistemas

Manual de Usuario Internet UTRERATICKET. UTRERATICKET Manual de Usuario Internet

Internet como herramientas de comunicación: El correo electrónico

Ejemplo de tipo fijo CALCULADOR CONTABLE

GESTIÓN DOCUMENTAL PARA EL SISTEMA DE CALIDAD

Centro de Profesorado Luisa Revuelta (Córdoba) TEMA 2 CREAR, GUARDAR, CERRAR, ABRIR y VISUALIZAR PRESENTACIONES

CRM para ipad Manual para Usuario

PUESTA EN MARCHA PROGRAMA GESTION DE OPTICAS. Junio

MANUAL PROGRAMA PARA PIZZERIAS Y COMIDAS PARA LLEVAR

Hacer clic sobre la figura, para extraer todos los registros o presionar la tecla F2.

SICAE S.L.L. Almansa nº Pozuelo de Alarcón (Madrid) Manual general de C. de Inventario/Ordenador V.1 Pag.

Contenido. cursos.cl / Teléfono:

Race Manager by Master Timing Guía del usuario GUIA RACE MANAGER. Eventronic, SL

MANUAL APLICACIÓN. SOFTWARE GESTIÓN DE CLÍNICAS DENTALES

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

Introducción al lenguaje Java Práctica Editor de Línea

ÍTEMS DEL MENÚ CREACIÓN Y GESTIÓN (Última revisión: lunes, 9 de marzo de 2009)

Manual Gran Hotel. N. Res: Número de Reserva que el programa le ha adjudicado de forma automática

Región de Murcia Consejería de Educación, Ciencia e Investigación. Manual Usuario FCT

Gestor de Expedientes 28/09/2010

Universidad de Zaragoza Manual de Usuario

NORMA 34.14(SEPA) 05/11/2013

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

Combinar correspondencia (I)

Transcripción:

Segunda práctica de Programación 2 La segunda práctica consistirá en el diseño y posterior implementación como proyecto de Netbeans de dos versiones sobre el mismo problema. El tema central de ambas versiones será la programación orientada a objetos y, en ambas, no solamente usaremos clases predefinidas sino que tendremos que definir nuevas clases. La diferencia entre las dos versiones es que en la primera de ellas la interfaz será en base a un ConsoleProgram y en la segunda en un GraphicsProgram. La primera parte valdrá 7 puntos y la segunda 3, siendo esta última optativa. Introducción El enunciado de la práctica está inspirado en el siguiente problema que apareció en la revista Communications of the ACM, Vol. 52, No. 8 de Agosto de 2009: Cien personas embarcan en un avión cuyas plazas han sido vendidas en su totalidad. Desgraciadamente, la primera persona de la cola ha perdido su tarjeta de embarque al entrar en el avión y se sienta en un asiento elegido al azar. Los pasajeros siguientes se sentarán en el asiento indicado por su tarjeta si éste está libre o bien harán como el primer pasajero y elegirán un asiento libre al azar. Cuál es la probabilidad de que el último pasajero encuentre el asiento correspondiente a su tarjeta de embarque libre? Diseño orientado a objetos En esta parte del enunciado presentaremos algunas de las clases que deberéis implementar, indicando su nombre, constructor y algunos de los métodos que deberán tener (obviamente podréis añadir todos los métodos privados adicionales que queráis) y daremos indicaciones sobre su funcionamiento y algunas pistas sobre su implementación. Tened en cuenta que el diseño será ligeramente diferente a la historia original en la que está inspirado. Clase Passenger Representará a cada uno de los pasajeros.

Tendrá un constructor con un parámetro que sea un número que indicará el asiento que tiene asignado. Tendrá tres métodos públicos: o int getassignedseat() que devolverá el asiento que tiene asignado o void loseboardingticket() que hará que ese pasajero pierda la tarjeta de embarque o boolean haslostboardingcard() que responderá si ese pasajero ha perdido o no la tarjeta de embarque. Clase Passengers Esta clase representará al grupo de pasajeros (pasaje) que están esperando el avión. Tendrá un constructor con un parámetro entero (n) que indicará el número de pasajeros a considerar. Internamente lo que hará el constructor será: o Crear un array de n referencias a Passenger o Inicializar cada elemento del array con un Passenger (asignado a un asiento diferente). o Desordenar el array de pasajeros usando lo que se comenta en el apéndice de la práctica. o Indicando que el primer pasajero ha perdido la tarjeta de embarque. Como los pasajeros entrarán en el avión de uno en uno, nos inspiraremos en la clase StringTokenizer, e implementaremos dos métodos públicos: o boolean hasmorepassengers() para saber si aún quedan pasajeros por embarcar o Passenger nextpassenger() que devuelve el siguiente pasajero por embarcar. Clase Plane Representará el avión y será quien se encargue de gestionar los asientos. Tendrá un constructor con un parámetro entero que indicará el número de asientos del avión y otro que será el programa principal (su porqué lo explicaremos más adelante). o Internamente mantendrá un vector de Passenger en el que el índice del vector indicará el asiento (menos uno, ya que no seremos frikis y los asientos irán numerados desde uno) y el valor será el pasajero que lo ocupa (o null si el

asiento está libre). Inicialmente todos los asientos estarán libres. Definirá el siguiente método público: o void board(passengers) que ejecutará el embarque del pasaje en el avión, asignando a cada pasajero un asiento. Para ello usará el método assignseat. Como mínimo tendremos los siguientes métodos privados (ya que como alguno de ellos es complejo, lo descompondremos en métodos más pequeños 1 ): o int assignseat(passenger) es quien asigna un asiento al pasajero dado en función de si éste ha perdido la tarjeta de embarque o no y de si el asiento que le corresponde está libre u ocupado. Es quién llamará a los diferentes métodos que vayan mostrando la ejecución. Parte obligatoria (7 puntos) En esta parte los métodos de visualización simplemente escriben mensajes en la Pantalla. Por ello tendremos la clase: Clase ConsoleBoarding Que será el programa principal y que extenderá ConsoleProgram. Ademán contendrá los métodos que vayan mostrando la traza de la ejecución, que serán: void showassignedcorrectseat(passenger) que sirve para indicar que se ha asignado al pasajero el asiento que le correspondía. void showassignedrandomseat(passenger, int) que sirve para indicar que se ha asignado al pasajero un asiento al azar indicado por el entero. Para que podamos usarlos dentro de la clase Plane, pasaremos la instancia correspondiente al programa principal cuando creemos la instancia de Plane en el método run, es decir: 1 public class ConsoleBoarding extends ConsoleProgram { 2... 3 public void run() { 4... 1 La evaluación tendrá en cuanta si habéis realizado diseño descendente (descomposición en submétodos más pequeños), si el código es legible, nombres de variables, etc, etc.

5 int size = readint( Número de pasajeros: ); 6 Plane plane = new Plane(size, this); 7... 8 } 9 public void showassignedcorrectseat(passenger p) { 10... 11 } 12 public void showassignedrandomseat(passenger p, int s) { 13... 14 } 15 } Así que dentro de la clase Plane, nos guardaremos una referencia a esta instancia, es decir: 1 public class Plane { 2... 3 private ConsoleBoarding program; 4 public Plane(int n, ConsoleBoarding program) { 5... 6 this.program = program; 7 } 8... 9 } Y usaremos esta referencia dentro del método que asigna el asiento para que el programa muestre qué ha pasado, es decir: 1 public int assignseat(passenger passenger) { 2... 3 this.program.showassignedcorrectseat(passenger); 4... 5 } Implementando de esta manera este método el programa irá indicando a qué pasajero se le asigna un asiento y si dicho asiento es el que le correspondía o bien se le ha asignado al azar. Parte optativa (3 puntos) En esta parte sustituiremos la interfaz console por una que muestre visualmente qué está pasando.

Os comento una posible interfaz sencilla que podéis complicar o modificar 2 (p. ej. mostrando cómo se mueve un pasajero por el avión desde la entrada hasta su asiento) a vuestro antojo: Cada asiento estará representado por un rectángulo que será verde si está libre, rojo si está asignado a un pasajero al que no le tocaba y amarillo si está asignado al pasajero que le tocaba. En la zona inferior de la pantalla habrá un GLabel que usaremos para mostrar el texto de lo que está pasando (a modo similar a lo que hacíamos en la parte obligatoria). Esperaremos a que el usuario pulse el botón del ratón (con el método waitforclick() de la clase GraphicsProgram) entre asignaciones, para ir viendo cómo se modifican los asientos. Clase GraphicsBoarding Que será el programa principal y extenderá GraphicsProgram. En el run creará los elementos de la interfície (los que representan los asientos, etc, etc) e implementará los métodos: void showassignedcorrectseat(passenger) void showassignedrandomseat(passenger, int) que ahora mostrarán gráficamente qué está pasando. Para que todo funcione, deberéis modificar ligeramente las clase Plane de la solución del apartado anterior: Ahora lo que Plane guarda es una referencia a GraphicsBoarding Dentro del método que va asignando los pasajes añadiremos una llamada a waitforclick sobre esta referencia. Apéndice: El algoritmo de desordenamiento Para desordenar el vector de pasajeros podéis usar el Algortimo de Fisher- Yates: 1 // Desordenar un array a de n elementos 2 for (int i = n- 1; i > 0; i- - ) { 3 int j = número al azar tal que 0<=j<=i 4 intercambiar a[i] con a[j] 5 } 2 Un consejo: comenzad por una simple como ésta que os permitirá familiarizaros con los elementos gráficos e id complicándola poco a poco. Si en algún momento os quedáis encallados (p.e. simulando el movimiento de los pasajeros en el avión), tendréis al menos una versión correcta para entregar.

Para generar el número al azar (y de hecho para asignar asientos al azar) usaréis la clase RandomGenerator explicada en los apuntes. Formato de la entregas: La entrega se hará vía sakai y consistirá en un archivo (comprimido con ZIP) que contenga: los proyectos de netbeans que solucionen los problemas un pequeño informe (máximo 5 páginas) en PDF explicando los aspectos relevantes de vuestra implementación y qué partes os han costado más, qué problemas habéis encontrado, en qué os habéis encallado, así como una explicación de la implementación de vuestras clases (p.e. usando diagramas que muestren cómo modificáis los vectores, etc.), etc. cada clase deberá tener la documentación en javadoc para cada uno de los métodos públicos. la práctica se realiza individualmente. la práctica es un 20% de la nota de la asignatura. la fecha límite es el lunes 6 de junio a las 8 de la mañana.