necesito ayuda para hacer un programa
Hola necesito ayuda para crear este proyecto en java, no tengo ni idea de como empezarlo, ni como hacer nada, si alguien podría ayudarme, estaría muy agradecida.
Se desea modelar un sistema de gestión destinado a tiendas dedicadas a la venta de
instrumentos musicales; en este caso concreto, de guitarras. Dentro de este primer apartado el
alumno debe completar los siguientes requisitos:
Una guitarra se define por:
•Un identificador numérico.
•Un precio (en euros, es decir, debe admitir decimales)
•Su anchura en centímetros.
•Su longitud en centímetros.
•Su fondo en centímetros.
•Si se le pueden poner o no pastillas.
•El tipo de cuerdas que puede llevar: NYLON, ACERO o AMBAS.
•El número de cuerdas.
Para modelar la clase Guitarra necesitaremos hacer uso de un tipo enumerado que
establezca el conjunto de valores que puede tomar el tipo de cuerdas. Podemos definirlo
como sigue, dentro de un fichero al que llamaremos CuerdasSoportadas.java:
package es.uned.lsi.gestiontienda.guitarras;
public enum CuerdasSoportadas {NYLON, ACERO, AMBAS};
El nombre del paquete sigue la política de nombrado habitual en Java, primero se coloca
la URL de la organización en sentido inverso (lsi.uned.es) y, a continuación, utilizamos el
nombre de la aplicación y un paquete llamado “guitarras” ideado para almacenar todas
las clases que tengan que ver con dichos instrumentos.
Una vez hemos definido el tipo enumerado debemos diseñar la clase Guitarra siguiendo la
especificación anterior:
Guitarra
- id: int
# precio: double
- anchura: int
- longitud: int
- fondo: int
- admitePastillas: boolean
- cuerdasSoportadas: CuerdasSoportadas
- numeroCuerdas: int
+ Guitarra(id: int; precio: double;
anchura: int; longitud: int;
admitePastillas: boolean;
cuerdasSoportadas: CuerdasSoportadas;
numeroCuerdas: int)
+ getId(): Int
+ setId(int id): void
...
Se pide:
1. Completar el diseño e implementación de la clase Guitarra. Puede tomarse la siguiente
implementación como punto de partida:
package es.uned.lsi.gestiontienda.guitarras;
public class Guitarra {
private int id;
protected double precio;
private int anchura;
private int longitud;
private int fondo;
private boolean admitePastillas;
private CuerdasSoportadas cuerdasSoportadas;
private int numeroCuerdas;
// Método constructor
public Guitarra(int id, double precio, int anchura,
int longitud, boolean admitePastillas,
CuerdasSoportadas cuerdasSoportadas,
int numeroCuerdas) {
this.id = id;
this.precio = precio;
this.anchura = anchura;
this.longitud = longitud;
this.admitePastillas = admitePastillas;
this.cuerdasSoportadas = cuerdasSoportadas;
this.numeroCuerdas = numeroCuerdas;
}
// Métodos de consulta de atributos
public int getId() {
return id;
}
public double getPrecio() {
return precio;
}
// Lo mismo para cada uno de los demás atributos de la clase
// Métodos para modificación de atributos
public void setId(int id) {
this.id = id;
}
public void setPrecio(double precio) {
this.precio = precio;
}
// Lo mismo para el resto de atributos de la clase
}
2. Diseñar e implementar una nueva clase llamada Funda, dentro del paquete
es.uned.lsi.gestiontienda.accesorios, que tenga como atributos:
•Un identificador numérico.
•Un nombre.
•Un precio en euros (con decimales).
•La longitud mínima y máxima de guitarra permitida en centímetros.
•La anchura mínima y máxima de guitarra permitida en centímetros.
•El fondo de guitarra mínimo y máximo permitido en centímetros.
3. Implementar una clase llamada Test dentro del paquete llamado es.uned.lsi.
gestiontienda.util y que no incluirá ningún método constructor ni ningún atributo; sólo
se implementará el método main que nos permitirá la ejecución de la clase. En dicho
método se deberán incluir las sentencias necesarias para la realización de las siguientes
acciones:
•Creación de una Guitarra con identificador “400”, precio 295 €, que admita
pastillas, soporte únicamente las cuerdas de acero, tenga 6 cuerdas, anchura 40
cm, longitud 80 cm y fondo 7 cm.
•Creación de una Funda con identificador “1”, nombre “Fender Telecaster”, precio
250 €, anchuras mínima y máxima permitidas: 32 cm y 36 cm, alturas mínima y
máxima permitidas: 80 y 85 cm; y fondo máximo y mínimo permitido: 5 y 7 cm.
•Imprimir por pantalla todos los datos referentes a los objetos creados, de un modo
similar al siguiente:
1. “La guitarra con identificador [identificador] se corresponde con una
guitarra de [número de cuerdas] cuerdas y tiene un precio de [precio]
euros”.
2. “La funda [nombre de la funda] con identificador [identificador] puede
usarse con guitarras de longitud entre [longitud mínima de guitarra
permitida] y [longitud máxima de guitarra permitida] cm, anchura entre
[anchura mínima de guitarra permitida] y [anchura máxima de guitarra
permitida] y fondo entre [fondo mínimo de guitarra permitida] y [fondo
máximo de guitarra permitida]. ¡ Pruébela sin compromiso !”.
1.2 PARTE 2
1.2.1 OBJETIVOS
En esta segunda parte se introducirá el concepto de herencia, que nos permitirá reutilizar una
clase existente extendiendo su funcionalidad, y veremos cómo utilizar estructuras de control.
Esta parte requiere haber estudiado los temas 4 y 5 del programa detallado de la Unidad
Didáctica II, correspondientes con los capítulos 4 y 5 del libro de referencia.
1.2.2 ENUNCIADO
Una vez implementada la clase Guitarra en la Parte 1, vamos a trabajar con el mecanismo
denominado herencia para poder implementar un tipo más concreto de Guitarra, aquellas que se
encuentren en oferta.
La diferencia entre una guitarra en oferta y una Guitarra normal es que el precio de la guitarra en
oferta se calculará como el precio establecido en el atributo precio menos un porcentaje de
descuento. Por ello está justificado reutilizar todo el código anteriormente desarrollado,
extendiéndolo para soportar la nueva característica, ya que el resto de atributos permanecerán
inalterados y los métodos heredados seguirán siendo utilizables desde la clase hija, al no ser que
alguno de ellos sea reescrito.
Se pide:
4. Desarrollar la nueva clase GuitarraOferta de tal modo que al crear un objeto de dicha
clase se pueda especificar (en construcción) el porcentaje de descuento que tendrá en el
precio y que, además, permita la modificación de este porcentaje una vez instanciado un
objeto de esta clase. El porcentaje de descuento deberá oscilar entre un 1% y un
99%. Esta nueva clase deberá devolver el precio una vez aplicado el descuento
correspondiente.
Guitarra
- id: int
...
+ Guitarra(...)
+ getPrecio(): double
...
GuitarraOferta
- descuento: int
+ GuitarraOferta(id: int; precio: double;
anchura: int; longitud: int;
admitePastillas: boolean;
cuerdasSoportadas: CuerdasSoportadas;
numeroCuerdas: int; descuento: int)
+ getPrecio(): double
...
Para la implementación de la clase puede utilizarse el siguiente esqueleto:
package es.uned.lsi.gestiontienda.guitarras;
public class GuitarraOferta extends Guitarra {
private int descuento;
// Método constructor
...
// Métodos redefinidos
...
// Métodos de consulta de atributos
...
}
5. Implementar dentro de la clase Funda un método que devuelva, dada una guitarra, si la
funda es compatible con esa guitarra.
6. Diseñar e implementar una clase Soporte que deberá recibir un valor mínimo y máximo
para la anchura de guitarra que admite dicho soporte. Debe tenerse en cuenta que el
Soporte es un Accesorio compatible sólo con algunos tipos de guitarras.
7. Diseñar una clase Accesorio, clase padre de Funda y Soporte (si es necesario, estas clases
deberán modificarse para ajustarse al nuevo diseño), que contenga las características y
funcionalidades comunes de ambas. Por defecto, un accesorio que no sea funda ni
soporte siempre será válido para cualquier tipo de guitarra
8. Dentro de la clase Test creada en la primera parte de la práctica, añadir las siguientes
pruebas:
•Comprobar e imprimir por pantalla si la funda llamada “Fender Telecaster”, creada
en la primera parte de la práctica, es válida para la guitarra con identificador
“400”.
•Creación de una nueva Guitarra, esta vez en oferta, con un 20% de descuento. La
guitarra tendrá como identificador “5050”, un precio de 295€, admitirá pastillas,
tendrá una altura de 70 cm, anchura de 40 cm y fondo de 10 cm, soportará todos
los tipos de cuerdas y tendrá 6 cuerdas.
•Comprobar e imprimir por pantalla si la funda llamada “Fender Telecaster” es
válida para esta nueva guitarra.
1.3 PARTE 3
1.3.1 OBJETIVOS
En esta tercera parte de la práctica se trabajará con estructuras de almacenamiento para
mantener en memoria los objetos que vamos creando sin necesidad de utilizar un atributo
diferente para cada uno de ellos. Los conceptos que se deben comprender en este apartado
incluyen la creación de estructuras (dependiendo del tipo de objeto que se vaya a almacenar), la
inserción de objetos en este tipo de estructuras y la iteración sobre éstas. También trabajaremos
con el concepto de polimorfismo, ya que las estructuras de datos que utilizaremos contendrán
instancias de diferentes clases, las cuales tienen métodos comunes (heredados), pero con
implementaciones diferentes. Se pretende que el alumno sea capaz de aplicar lo aprendido a lo
largo de la práctica, así como la correcta reutilización del código implementado en apartados
previos.
Esta etapa requiere haber estudiado el capítulo 6 del programa de la Unidad Didácticfa II,
correspondiente con el capítulo 6 del libro de referencia, así como el resto de temas de las
etapas anteriores.
1.3.2 ENUNCIADO
Queremos completar la arquitectura incluyendo una clase Catálogo que nos permita almacenar
todos los productos disponibles en la tienda, recuperar su información, añadir nuevos productos
o eliminar productos que por una razón u otra dejan de formar parte del Catálogo.
Se desea incluir en un Catálogo dos tipos de accesorios. En primer lugar tenemos las fundas de
guitarra, definidas anteriormente y que sólo serán validas para guitarras con unas medidas
determinadas (anchura y longitud).
Se pide:
9. Diseñar e implementar una clase llamada Catálogo que contenga como atributos 2
estructuras de datos encargadas de almacenar tanto accesorios y guitarras (tanto las
guitarras normales como las que están en oferta deben almacenarse en una estructura
común) respectivamente.
10. Implementar (dentro de la clase Catalogo) los métodos necesarios para añadir y borrar
tanto guitarras como accesorios al catálogo. ¿Qué pasaría si quisieras insertar una
guitarra o un accesorio que ya está dentro del catálogo? ¿Y si quisieras borrar una
guitarra o un accesorio que no está en el catálogo? Responde razonadamente.
11. Implementar métodos (dentro de la clase Catalogo) que devuelvan:
 Las guitarras disponibles en el catálogo.
 Los accesorios disponibles en el catálogo.
 El catálogo completo.
 Las guitarras que tengan un tipo de cuerdas determinado (en la llamada al método
debe poder especificarse el tipo de cuerdas para el que se desea obtener el
listado)
 La lista de guitarras para las que el Accesorio es válido.
12. Dentro de la clase Test creada en la primera parte de la práctica, añadir las siguientes
pruebas:
 Añadir 5 guitarras más al catalogo, de las cuales 2 deben estar en oferta. Añadir
también 2 fundas y dos soportes, así como un accesorio nuevo (afinador) que no
sea ni Funda ni Soporte.
 Imprimir por pantalla las guitarras que son válidas para cada uno de los accesorios
del Catalogo, especificando primero los datos del accesorio y a continuación los de
las guitarras válidas.
 Imprimir por pantalla las guitarras que tienen cuerdas de nylon.
 Borrar del catálogo una guitarra con un identificador que no corresponda con
ninguno de los guardados y capturar el error que se produzca.
Nota: El formato de salida debe ser legible, es decir, debe poder distinguirse entre los
diferentes elementos listados de manera uniforme y clara.
Se desea modelar un sistema de gestión destinado a tiendas dedicadas a la venta de
instrumentos musicales; en este caso concreto, de guitarras. Dentro de este primer apartado el
alumno debe completar los siguientes requisitos:
Una guitarra se define por:
•Un identificador numérico.
•Un precio (en euros, es decir, debe admitir decimales)
•Su anchura en centímetros.
•Su longitud en centímetros.
•Su fondo en centímetros.
•Si se le pueden poner o no pastillas.
•El tipo de cuerdas que puede llevar: NYLON, ACERO o AMBAS.
•El número de cuerdas.
Para modelar la clase Guitarra necesitaremos hacer uso de un tipo enumerado que
establezca el conjunto de valores que puede tomar el tipo de cuerdas. Podemos definirlo
como sigue, dentro de un fichero al que llamaremos CuerdasSoportadas.java:
package es.uned.lsi.gestiontienda.guitarras;
public enum CuerdasSoportadas {NYLON, ACERO, AMBAS};
El nombre del paquete sigue la política de nombrado habitual en Java, primero se coloca
la URL de la organización en sentido inverso (lsi.uned.es) y, a continuación, utilizamos el
nombre de la aplicación y un paquete llamado “guitarras” ideado para almacenar todas
las clases que tengan que ver con dichos instrumentos.
Una vez hemos definido el tipo enumerado debemos diseñar la clase Guitarra siguiendo la
especificación anterior:
Guitarra
- id: int
# precio: double
- anchura: int
- longitud: int
- fondo: int
- admitePastillas: boolean
- cuerdasSoportadas: CuerdasSoportadas
- numeroCuerdas: int
+ Guitarra(id: int; precio: double;
anchura: int; longitud: int;
admitePastillas: boolean;
cuerdasSoportadas: CuerdasSoportadas;
numeroCuerdas: int)
+ getId(): Int
+ setId(int id): void
...
Se pide:
1. Completar el diseño e implementación de la clase Guitarra. Puede tomarse la siguiente
implementación como punto de partida:
package es.uned.lsi.gestiontienda.guitarras;
public class Guitarra {
private int id;
protected double precio;
private int anchura;
private int longitud;
private int fondo;
private boolean admitePastillas;
private CuerdasSoportadas cuerdasSoportadas;
private int numeroCuerdas;
// Método constructor
public Guitarra(int id, double precio, int anchura,
int longitud, boolean admitePastillas,
CuerdasSoportadas cuerdasSoportadas,
int numeroCuerdas) {
this.id = id;
this.precio = precio;
this.anchura = anchura;
this.longitud = longitud;
this.admitePastillas = admitePastillas;
this.cuerdasSoportadas = cuerdasSoportadas;
this.numeroCuerdas = numeroCuerdas;
}
// Métodos de consulta de atributos
public int getId() {
return id;
}
public double getPrecio() {
return precio;
}
// Lo mismo para cada uno de los demás atributos de la clase
// Métodos para modificación de atributos
public void setId(int id) {
this.id = id;
}
public void setPrecio(double precio) {
this.precio = precio;
}
// Lo mismo para el resto de atributos de la clase
}
2. Diseñar e implementar una nueva clase llamada Funda, dentro del paquete
es.uned.lsi.gestiontienda.accesorios, que tenga como atributos:
•Un identificador numérico.
•Un nombre.
•Un precio en euros (con decimales).
•La longitud mínima y máxima de guitarra permitida en centímetros.
•La anchura mínima y máxima de guitarra permitida en centímetros.
•El fondo de guitarra mínimo y máximo permitido en centímetros.
3. Implementar una clase llamada Test dentro del paquete llamado es.uned.lsi.
gestiontienda.util y que no incluirá ningún método constructor ni ningún atributo; sólo
se implementará el método main que nos permitirá la ejecución de la clase. En dicho
método se deberán incluir las sentencias necesarias para la realización de las siguientes
acciones:
•Creación de una Guitarra con identificador “400”, precio 295 €, que admita
pastillas, soporte únicamente las cuerdas de acero, tenga 6 cuerdas, anchura 40
cm, longitud 80 cm y fondo 7 cm.
•Creación de una Funda con identificador “1”, nombre “Fender Telecaster”, precio
250 €, anchuras mínima y máxima permitidas: 32 cm y 36 cm, alturas mínima y
máxima permitidas: 80 y 85 cm; y fondo máximo y mínimo permitido: 5 y 7 cm.
•Imprimir por pantalla todos los datos referentes a los objetos creados, de un modo
similar al siguiente:
1. “La guitarra con identificador [identificador] se corresponde con una
guitarra de [número de cuerdas] cuerdas y tiene un precio de [precio]
euros”.
2. “La funda [nombre de la funda] con identificador [identificador] puede
usarse con guitarras de longitud entre [longitud mínima de guitarra
permitida] y [longitud máxima de guitarra permitida] cm, anchura entre
[anchura mínima de guitarra permitida] y [anchura máxima de guitarra
permitida] y fondo entre [fondo mínimo de guitarra permitida] y [fondo
máximo de guitarra permitida]. ¡ Pruébela sin compromiso !”.
1.2 PARTE 2
1.2.1 OBJETIVOS
En esta segunda parte se introducirá el concepto de herencia, que nos permitirá reutilizar una
clase existente extendiendo su funcionalidad, y veremos cómo utilizar estructuras de control.
Esta parte requiere haber estudiado los temas 4 y 5 del programa detallado de la Unidad
Didáctica II, correspondientes con los capítulos 4 y 5 del libro de referencia.
1.2.2 ENUNCIADO
Una vez implementada la clase Guitarra en la Parte 1, vamos a trabajar con el mecanismo
denominado herencia para poder implementar un tipo más concreto de Guitarra, aquellas que se
encuentren en oferta.
La diferencia entre una guitarra en oferta y una Guitarra normal es que el precio de la guitarra en
oferta se calculará como el precio establecido en el atributo precio menos un porcentaje de
descuento. Por ello está justificado reutilizar todo el código anteriormente desarrollado,
extendiéndolo para soportar la nueva característica, ya que el resto de atributos permanecerán
inalterados y los métodos heredados seguirán siendo utilizables desde la clase hija, al no ser que
alguno de ellos sea reescrito.
Se pide:
4. Desarrollar la nueva clase GuitarraOferta de tal modo que al crear un objeto de dicha
clase se pueda especificar (en construcción) el porcentaje de descuento que tendrá en el
precio y que, además, permita la modificación de este porcentaje una vez instanciado un
objeto de esta clase. El porcentaje de descuento deberá oscilar entre un 1% y un
99%. Esta nueva clase deberá devolver el precio una vez aplicado el descuento
correspondiente.
Guitarra
- id: int
...
+ Guitarra(...)
+ getPrecio(): double
...
GuitarraOferta
- descuento: int
+ GuitarraOferta(id: int; precio: double;
anchura: int; longitud: int;
admitePastillas: boolean;
cuerdasSoportadas: CuerdasSoportadas;
numeroCuerdas: int; descuento: int)
+ getPrecio(): double
...
Para la implementación de la clase puede utilizarse el siguiente esqueleto:
package es.uned.lsi.gestiontienda.guitarras;
public class GuitarraOferta extends Guitarra {
private int descuento;
// Método constructor
...
// Métodos redefinidos
...
// Métodos de consulta de atributos
...
}
5. Implementar dentro de la clase Funda un método que devuelva, dada una guitarra, si la
funda es compatible con esa guitarra.
6. Diseñar e implementar una clase Soporte que deberá recibir un valor mínimo y máximo
para la anchura de guitarra que admite dicho soporte. Debe tenerse en cuenta que el
Soporte es un Accesorio compatible sólo con algunos tipos de guitarras.
7. Diseñar una clase Accesorio, clase padre de Funda y Soporte (si es necesario, estas clases
deberán modificarse para ajustarse al nuevo diseño), que contenga las características y
funcionalidades comunes de ambas. Por defecto, un accesorio que no sea funda ni
soporte siempre será válido para cualquier tipo de guitarra
8. Dentro de la clase Test creada en la primera parte de la práctica, añadir las siguientes
pruebas:
•Comprobar e imprimir por pantalla si la funda llamada “Fender Telecaster”, creada
en la primera parte de la práctica, es válida para la guitarra con identificador
“400”.
•Creación de una nueva Guitarra, esta vez en oferta, con un 20% de descuento. La
guitarra tendrá como identificador “5050”, un precio de 295€, admitirá pastillas,
tendrá una altura de 70 cm, anchura de 40 cm y fondo de 10 cm, soportará todos
los tipos de cuerdas y tendrá 6 cuerdas.
•Comprobar e imprimir por pantalla si la funda llamada “Fender Telecaster” es
válida para esta nueva guitarra.
1.3 PARTE 3
1.3.1 OBJETIVOS
En esta tercera parte de la práctica se trabajará con estructuras de almacenamiento para
mantener en memoria los objetos que vamos creando sin necesidad de utilizar un atributo
diferente para cada uno de ellos. Los conceptos que se deben comprender en este apartado
incluyen la creación de estructuras (dependiendo del tipo de objeto que se vaya a almacenar), la
inserción de objetos en este tipo de estructuras y la iteración sobre éstas. También trabajaremos
con el concepto de polimorfismo, ya que las estructuras de datos que utilizaremos contendrán
instancias de diferentes clases, las cuales tienen métodos comunes (heredados), pero con
implementaciones diferentes. Se pretende que el alumno sea capaz de aplicar lo aprendido a lo
largo de la práctica, así como la correcta reutilización del código implementado en apartados
previos.
Esta etapa requiere haber estudiado el capítulo 6 del programa de la Unidad Didácticfa II,
correspondiente con el capítulo 6 del libro de referencia, así como el resto de temas de las
etapas anteriores.
1.3.2 ENUNCIADO
Queremos completar la arquitectura incluyendo una clase Catálogo que nos permita almacenar
todos los productos disponibles en la tienda, recuperar su información, añadir nuevos productos
o eliminar productos que por una razón u otra dejan de formar parte del Catálogo.
Se desea incluir en un Catálogo dos tipos de accesorios. En primer lugar tenemos las fundas de
guitarra, definidas anteriormente y que sólo serán validas para guitarras con unas medidas
determinadas (anchura y longitud).
Se pide:
9. Diseñar e implementar una clase llamada Catálogo que contenga como atributos 2
estructuras de datos encargadas de almacenar tanto accesorios y guitarras (tanto las
guitarras normales como las que están en oferta deben almacenarse en una estructura
común) respectivamente.
10. Implementar (dentro de la clase Catalogo) los métodos necesarios para añadir y borrar
tanto guitarras como accesorios al catálogo. ¿Qué pasaría si quisieras insertar una
guitarra o un accesorio que ya está dentro del catálogo? ¿Y si quisieras borrar una
guitarra o un accesorio que no está en el catálogo? Responde razonadamente.
11. Implementar métodos (dentro de la clase Catalogo) que devuelvan:
 Las guitarras disponibles en el catálogo.
 Los accesorios disponibles en el catálogo.
 El catálogo completo.
 Las guitarras que tengan un tipo de cuerdas determinado (en la llamada al método
debe poder especificarse el tipo de cuerdas para el que se desea obtener el
listado)
 La lista de guitarras para las que el Accesorio es válido.
12. Dentro de la clase Test creada en la primera parte de la práctica, añadir las siguientes
pruebas:
 Añadir 5 guitarras más al catalogo, de las cuales 2 deben estar en oferta. Añadir
también 2 fundas y dos soportes, así como un accesorio nuevo (afinador) que no
sea ni Funda ni Soporte.
 Imprimir por pantalla las guitarras que son válidas para cada uno de los accesorios
del Catalogo, especificando primero los datos del accesorio y a continuación los de
las guitarras válidas.
 Imprimir por pantalla las guitarras que tienen cuerdas de nylon.
 Borrar del catálogo una guitarra con un identificador que no corresponda con
ninguno de los guardados y capturar el error que se produzca.
Nota: El formato de salida debe ser legible, es decir, debe poder distinguirse entre los
diferentes elementos listados de manera uniforme y clara.