Imagen de una planicie como lienzo en blanco para nuestro desarrollo de software a medida

Prácticas Java - Guía Javañol

//Arteco - Tecnologías de la información

  • :)
  • :0
  • :D
  • ;)
  • :]
foto Ramón Arnau

Ramón Arnau

Gerente de Arteco Consulting SL

PRÁCTICAS de programación para aprender a programar en Java descritas en el libro de Java GUÍA JAVAÑOL

¡Da el primer paso hacia tu futuro en el mundo de la programación con nuestro innovador libro, "Guía Javañol" para aprender a Programar en Java! Este no es solo otro libro de programación; es tu portal a una carrera llena de oportunidades y creatividad. Javañol está diseñado específicamente para hablantes de español, rompiendo barreras lingüísticas y técnicas, y permitiéndote dominar Java desde cero hasta avanzado. No dejes pasar la oportunidad de convertirte en un experto en uno de los lenguajes de programación más demandados y versátiles del mundo. ¡Compra tu copia hoy y comienza a transformar tus ideas en realidad!

Aprender a Programar en Java - PRÁCTICA 1

El objetivo de esta práctica es la realización de un intérprete de comandos que permita al usuario introducir sentencias desde el teclado de forma interactiva. A través de esos comandos el usuario podrá ejecutar instrucciones que permitan manipular el sistema de ficheros de forma básica.

Requisitos de la Práctica 1

Las operaciones que debe poder ejecutar el usuario a través del terminal son:

  • ls > listar los ficheros del directorio actual.
  • cd arg → cambiar de directorio.
  • cat arg → imprimir el contenido de un fichero.
  • rm arg → eliminar el fichero o directorio indicado.
  • mkdir arg → crea el directorio indicado en el nivel actual.
  • cp arg1 arg2 → copiar el fichero de arg1 en la ubicación arg2.
  • append arg1 arg2 → añade el contenido de arg2 al final del archivo indicado en arg1.
  • replace arg1 arg2 arg3 → reemplaza el contenido del fichero indicado en arg1 buscando las referencias de arg2 para sustituirlas por arg3.

Para poder llevar a cabo esta tarea, el programador primero deberá crear un proyecto Maven mono-módulo, usando las instrucciones indicadas en el capítulo Construcción con Maven. El asistente dejará a disposición de éste una clase conteniendo el método public static void main que se usará para crear el bucle principal.

El aplicativo deberá leer la entrada del usuario mediante System.in mientras que el usuario no escriba exit. Hasta entonces, se ejecutará cada uno de los comandos escritos por el usuario. El bucle principal delegará la ejecución de la acción solicitada en una clase determinada. Se deberán crear tantas clases específicas como comandos enumerados.

Para validar el desarrollo, debe haber tantos test unitarios como los necesarios para alcanzar una cobertura por encima del 90 % del código fuente.

Aprender a Programar en Java - PRÁCTICA 2

El objetivo es crear un sistema que permita jugar a hundir la flota contra la CPU en modo consola a través de órdenes introducidas por el usuario en el terminal de comandos.

Requisitos de la Práctica 2

El juego debe consistir en la elección de casillas del tablero del oponente mediante un sistema de turnos y organizado en dos fases. La primera fase es la de colocación de los barcos en una matriz y la segunda fase comienza el sistema de turnos para lanzar misiles contra el oponente.

El proyecto también deberá ser generado con Maven y con todos los casos de test unitarios que permitan validar el 90 % del código fuente escrito.

Los requisitos del sistema son:

  • La interacción del usuario con el sistema de juego se hará mediante comandos por consola. Así que se debe crear un intérprete de comandos que lea la entrada del usuario. Posibilidad de usar librerías como commons-cli para tal fin.
  • Las operaciones que debe ofrecer ese intérprete como mínimo son: comenzar par- tida, lanzar misil, imprimir partida (tablero e inventario) y salir.
  • La colocación de los barcos en el tablero, tanto para el jugador como para la CPU será aleatoriamente mediante tres variables aleatorias a través de Math.random(). Las variables indicarán posición X e Y y si es horizontal o vertical. Se permite que los barcos se toquen, dejando opcional la inclusión de algún mecanismo para evitarlo.
  • Se debe crear un log en un fichero de texto conteniendo las acciones que se realizan en todas las partidas, tanto las acciones del jugador como las de la CPU, marcando claramente el momento de inicio y fin de las partidas y su resultado.
  • Tanto el tamaño de la matriz como el inventario de barcos debe ser configurable. Se supondrá una matriz cuadrada N x N. La variable global N determina el tamaño. El inventario vendrá dado por una instancia de List<Flota>. Siendo la clase Flota = {nombre, numero, tamanyo}. Ambas determinarán cuantos barcos se deberán colocar en cada partida. Se deja opcional que el usuario pueda cambiar la configuración por comandos.
  • Una configuración posible es:
    • Tamaño de matriz por defecto: N = 10
    • 1 portaaviones que ocupe 5 casillas
    • 2 cruceros, que ocupen 4 casillas
    • 3 destructores, que ocupen 3 casillas
    • 2 fragatas, de 2 casillas
    • 4 submarinos, de 1 casilla
  • Si pasado un tiempo el usuario no indica su lanzamiento en medio de una partida en marcha, se le devuelve el turno automáticamente a la CPU para que ejecute su turno.

Aprender a Programar en Java - PRÁCTICA 3

El objetivo de esta práctica es crear un servicio accesible por red que permita reservar plazas hoteleras sobre un hotel imaginario durante un mes. Este servicio será consumido por una segunda aplicación Java que actuará de cliente y que interactivamente permitirá al usuario realizar operaciones sobre el sistema de reservas.

Requisitos funcionales de la Práctica 3

Las reservas siempre serán sobre días completos desde las 12 am hasta las 12 am del día siguiente. Aunque una reserva implique dos días, sólo se considerará que hay una reserva por día y es aquella que tiene la habitación reservada, por ejemplo a las 19h. Se entenderá que todas las habitaciones son dobles, con un único precio base por habitación.

El hotel tendrá dos tipos de habitaciones, normal o suite, con precios diferentes por tipo. También con dos tipos de régimen cada una de ellas: media pensión o completa.

El régimen representará un % de incremento sobre el precio de la habitación. Una reserva será para sólo una habitación. Actualmente el hotel sólo dispone de 5 habitaciones regulares y 2 suites.

Requisitos técnicos de la Práctica 3

El cliente y el servicio intercambiarán información mediante algún sistema de serialización de objetos, por ejemplo JSON. Tanto el servidor como el cliente usarán Sockets TCP/IP para establecer la conexión y poder intercambiar documentos. Los datos de las habitaciones disponibles, reservas y precios provendrán de una base de datos SQL usando JPA y QueryDSL.

Para la gestión de disponibilidad se debe implementar un calendario usando cualquier estructura de información que permita saber qué habitaciones hay libres cada día de agosto. Se debe incorporar algún mecanismo de sincronización que garantice que NO se hacen dos reservas sobre la misma habitación en los mismos días.

El servidor debe exponer las siguientes operaciones:

  • availability Devuelve el listado de TIPOS de habitaciones disponibles entre dos fechas. Cada registro devuelto debe contener el TIPO de habitación al que hace referencia y una lista de los regímenes posibles para la habitación indicando el precio estándar por día para ese régimen (y ese tipo de habitación). Si no hay ninguna habitación disponible de un tipo, obviamente ese tipo se debe omitir en la respuesta. Entradas:

    • from LocalDate

    • to LocalDate

    • roomType Tipo de habitación (opcional)Salidas:

    • Objeto de tipo HotelAvailResponse con la disponibilidad contenida dentro.

  • valuate Valorar una disponibilidad. Es decir, dadas dos fechas, el tipo de habitación y el régimen solicitado, obtiene el precio total de la posible reserva. Devuelve error si no está disponible. Entradas:

    • Objeto validado del tipo PreBookingRequest con todos los campos obligatorios.

      • from LocalDate
      • to LocalDate
      • roomType Tipo de habitación
      • mealPlan Tipo de régimenSalidas:
    • Objeto de tipo PreBookingResponse conteniendo los parámetros de entrada, más un timestamp de cuándo se realizó la operación y el precio de la posible reserva.

  • confirmation Realiza la reserva. Dadas dos fechas, el tipo de habitación, el régimen escogido y el código de cliente (un String cualquiera). Ejecuta de nuevo una valoración y si tiene éxito bloquea dicha habitación durante los días indicados. Devuelve información acerca de la reserva: el precio final, el identificador de la habitación y el identificador de la reserva. Esta operación debe modificar el calendario y la tabla de reservas. Entradas:

    • Objeto validado del tipo BookingRequest con todos los campos obligatorios.

      • from LocalDate
      • to LocalDate
      • roomType Tipo de habitación
      • mealPlan Tipo de régimen
      • customer Tipo de String que identifica al clienteSalidas:
    • Objeto de tipo BookingResponse que contiene toda la información de la reserva.

  • cancellation Dado un identificador de una reserva, libera la habitación para las fechas de la reserva dejando el calendario y la base de datos actualizada. Entradas:

    • bookingId Identificador de la reservaSalidas:

    • Confirmación de la operación realizada correctamente o error si no se encuentra la reserva en el sistema.

  • bookings Listado de reservas, con posibilidad de indicar un rango de fechas opcional como filtro. Devuelve el listado de reservas confirmadas no canceladas. Produce la misma información que la confirmación, pero con aquellas reservas que estén en el intervalo. Entradas:

    • from LocalDate para el inicio del rango

    • to LocalDate para el fin del rangoSalidas:

    • Listado de reservas en forma de Collection<BookingResponse>.

Notas de implementación de la Práctica 3

Para facilitar el inicio del proyecto, el programador deberá definir cómo serán los documentos que intercambiarán el servidor y el cliente. Como guía se deja una posible definición del documento de respuesta de disponibilidad en JSON indicando qué clases Java producen tal documento.

La respuesta de disponibilidad esperada por el servidor debe contener el siguiente formato:

    {  "availability" : [
       {
         "roomType" : "regular",
         "prices" : [
            {
              "mealPlan" : "MP",
              "dayPrice": 100
            },
            {
              "mealPlan" : "PC",
              "dayPrice": 150
            }
          ]
        }, {
          "roomType" : "suite",
          "prices" : [
            {
               "mealPlan" : "MP",
               "dayPrice": 170
            },
            {
               "mealPlan" : "PC",
               "dayPrice": 200
            }
           ]
        }
      ]
    }

El anterior mensaje JSON será generado automáticamente de la serialización del siguiente modelo Java:

    public class HotelAvailResponse{
        private List<RoomAvail> availability;
        /* getters and setters */
    }

    public class RoomAvail{
        private String roomType;
        private List<RoomPrice> prices;
        /* getters and setters */
    }

    public class RoomPrice{
        private String mealPlan;
        private Float dayPrice;
        /* getters and setters */
    }

Mantente Conectado

Newsletter

¡Mantente al día con lo último en tecnología y negocios! Suscríbete a nuestra newsletter y recibe actualizaciones exclusivas directamente en tu correo.

Reunión Online

No dejes pasar la oportunidad de explorar nuevas posibilidades. ¡Agenda una reunión online con nosotros hoy y comencemos a construir juntos el futuro de tu negocio!

  • :D
  • :)
  • ;]
  • :0
  • :}
  • ;)
  • :>

Únete al Equipo

Contamos con una gran cartera de noveles que compaginan su formación académica con la experiencia en Arteco, aprendiendo de la mano de los que están en primera línea. Realizamos un programa intensivo de formación cara a la rápida incorporación en equipos de desarrollo reales.

Persona corriendo por el desierto representando el Team Building de Arteco Consulting
  • :)
  • :0
  • :D
  • ;)
  • :]