Tabla de contenidos
Punto
.Un punto en el plano se puede representar mediante un par de coordenadas x e y, ambas tomando valores en el conjunto de los números reales. En Java podemos representar un punto en el plano mediante una instancia de la siguiente clase:
public class Punto {
private double x;
private double y;
/* métodos */
/* a completar en el resto de apartados */
}
En Java, el constructor de la clases sirve para inicializar los valores de los atributos a la hora de instanciarse un objeto de la misma en tiempo de ejecución.
Programa un constructor para la clase Punto
. Debe recibir como parámetros
las dos coordenadas del punto.
El método toString()
tiene un significado especial en los objetos Java. Es el método que
se utiliza para obtener una representación como cadena de texto de dicho objeto.
Programa el método toString()
para que devuelva una cadena de texto con la representación
del punto con el siguiente formato:
(x, y)
donde x e y deben ser reemplazados por sus respectivos valores. El prototipo de dicha función se especifica a continuación:
public String toString() { /* ... */ }
Recuerda que el operador "+", aplicado a cadenas de texto, permite concatenarlas. Si se concatenan números a cadenas, Java los convierte automáticamente a cadenas de texto para realizar la concatenación.
main
.Ahora debes crear clase para probar el código anterior.
Programa una clase llamada Prueba
que tenga un método main
.
Este método debe recibir como argumentos de línea de comandos las coordenadas x e y, crear un
nuevo objeto Punto
con dichas coordenadas e imprimir en su
salida estándar (la pantalla en este caso) la representación textual de dicho objeto.
El programa debe comprobar que el número de argumentos de línea de comandos recibido sea el correcto.
El método parseDouble
de la clase
Double
(consulta su API pinchando en el enlace) transforma una cadena de texto a un tipo
primitivo double.
Es habitual que los atributos de un objeto se declaren como privados
(private
) para evitar accesos incontrolados desde otros puntos del código. Si es
necesario que desde el exterior se acceda a estos atributos, se proporcionan métodos cuyo
nombre empieza, por convenio, con las cadenas "get
" (acceso en lectura) y "set
"
(acceso en escritura).
Programa en la clase Punto
los siguientes métodos, que devuelven
el valor de las coordenadas x e y. El prototipo de dichos métodos se muestra a continuación:
public double getX() { /* ... */ } public double getY() { /* ... */ }
Modifica el código de tu clase Prueba
para comprobar que su
comportamiento es correcto.
En este apartado vamos a implementar dos métodos auxiliares que nos permitirán calcular distancias entre puntos.
Programa un método de la clase Punto
que devuelva la distancia del punto
al origen de coordenadas. El prototipo del método se muestra a continuación:
public double distanciaAlOrigen() {
/* completar */
}
Modifica el código de tu clase Prueba
para comprobar que su
comportamiento es correcto.
Programa un método en Punto
que devuelva la distancia entre el
punto representado por la instancia actual del objeto y otra instancia de
Punto
que se recibe como parámetro. El prototipo del método se muestra a continuación:
public double calcularDistancia(Punto otroPunto) {
/* completar */
}
Modifica el código de tu clase Prueba
para comprobar que su
comportamiento es correcto.
Programa un método de la clase Punto
que devuelva el cuadrante en el que se
encuentra el punto.El prototipo del método se muestra a continuación:
Devuelve 0 si está en el origen de coordenadas o sobre alguno de los ejes.
Devuelve 1 si está en el primer cuadrante (x e y positivos).
Devuelve 2 si está en el segundo cuadrante (x negativo e y positivo).
Devuelve 3 si está en el tercer cuadrante (x e y negativos).
Devuelve 4 si está en el cuarto cuadrante (x positivo e y negativo).
El prototipo del método se muestra a continuación:
public int calcularCuadrante() {
/* completar */
}
Modifica el código de tu clase de prueba para comprobar que su comportamiento es correcto.
En este apartado tienes que basarte en los métodos de los apartados anteriores.
Programa un método en Punto
que reciba como parámetro un array de objetos de la clase
Punto
y devuelva una referencia al objeto de dicho array que esté más cercano al punto actual.El prototipo
del método se muestra a continuación:
public Punto calcularMasCercano(Punto[] otrosPuntos) {
/* completar */
}
Modifica el código de tu clase Prueba
para comprobar que su
comportamiento es correcto.
Triangulo
.Un triángulo está plenamente definido por sus tres vértices. Estos vértices se pueden
representar como objetos de la clase Punto
.
En este apartado tienes que basarte en los métodos de los apartados anteriores.
Programa la clase Triangulo
con sus atributos y un constructor
que reciba como parámetro tres puntos del plano.
Programa una clase para probarlo.
Programa el método calcularLongitudLados()
de la clase Triangulo
,
que debe devolver un array de tres posiciones, cada una de las cuales debe ser la longitud
de uno de los lados del triángulo. El prototipo del método se muestra a continuación:
public double[] calcularLongitudLados() {
/* completar... */
}
En este ejercicio, vamos a crear una clase Fecha
que nos permita trabajar con fechas. La clase debe
almacenar una serie de atributos y debe definir una serie de métodos para realizar distintas operaciones básicas.
Antes de escribir código, piensa cuidadosamente el diseño de la clase Fecha
.
¿Qué información debe almacenar cada objeto? Si un mismo dato puede almacenarse en distintos formatos, ¿usarías varios atributos para representar la misma información? ¿Por qué? ¿Qué formato crees que es más conveniente?
¿Qué constructores proporcionarías? Observa que los constructores tendrán que inicializar los datos internos del objeto.
Piensa qué métodos crees que sería útil incluir.
¿Se te ocurre alguna información que sería conveniente incluir en la clase, común para todos los
objetos Fecha
?
Define los atributos de la clase Fecha
.
La clase Fecha debe proporcionar dos constructores que inicialicen objetos de tipo Fecha
:
Un constructor con tres enteros que indican el día, mes y año respectivamente.
Un constructor con tres cadenas de caracteres, que indican el día, el mes y el año.
Los atributos del objeto conviene que se declaren de acceso privado para evitar errores en su
modificación. Programa los métodos get
y set
necesarios para leer y modificar
la información encapsulada en los objetos Fecha
.
toString()
de representación del objeto.El método toString()
tiene un significado especial en los objetos Java. Es el método
que se utiliza para obtener una representación como cadena de texto de dicho objeto mostrando los
valores de los atributos en un instante determinado.
compareTo()
para comparar fechas.El método compareTo()
tiene un significado especial en los objetos Java. Es el método que se utiliza
para comparar dos objetos.
LECTURA RECOMENDADA: Consulta el API del interfaz Comparable para comprobar qué valor debe devolver en los distintos casos: según si el objeto con el que comparamos el objeto actual es mayor, menor o igual que éste.
Programa el método compareTo()
que tiene la siguiente declaración:
public int compareTo(Fecha fecha) {
/* ... */
}
El método compara la fecha almacenada en el objeto con la que se le pasa como parámetro, devolviendo como resultado:
-1 si la fecha contenida en el objeto actual es anterior a la que se pasa por parámetro.
0 si son iguales.
1 si la fecha contenida en el objeto actual es posterior a la que se pasa por parámetro.
Recuerda que en una clase pueden aparecer varios métodos con el mismo nombre, siempre que tengan distintos parámetros de entrada. A esto se le denomina sobrecarga de métodos (en inglés, overload).
Programa un método auxiliar que devuelve el número de días que tiene el mes que se le pasa como parámetro. Sobrecarga el método de modo que pueda utilizarse el número o el nombre del mes. Los métodos tienen las siguientes declaraciones:
... int getDiasMes(int mes) {
/* completar */
}
... int getDiasMes(String mes) {
/* completar */
}
Practicar la declaración de clases y la creación de objetos.
La clase Album
va a representar la producción musical de un determinado cantante o grupo, que se caracteriza por los siguientes atributos:
title
: El título del Album
author
: El nombre del cantante o grupo
year
: Año de publicación
elements
: Número de cds o DVDs que incluye el Album
price
: Precio recomendado de venta al público, sin incluir IVA
genre
: Un caracter indicando el tipo de música (D: Dance, P: Pop, R: Rock, C: Classical, J: Jazz, O: Other)
isSpanish
: True si el álbum es de un cantante español
Razona de qué tipo sería cada uno de los atributos y los modificadores de acceso. Luego escribe la clase Album en Java
Ahora programa una clase llamada AlbumTest
, que únicamente contenga un método main
y sirva para probar cómo funciona la clase Album
. La clase de prueba debe realizar lo siguiente:
Crear dos objetos de tipo Album
llamados album1
y album2
Dar valor a los atributos de ambos objetos con los datos de dos álbumes que te gusten
Imprimir los datos de cada álbum correctamente tabulados, como se presentan a continuación
Album:
Titulo: Crazy Hits
Autor: Crazy Frog
Año: 2005
Num: 1
Precio: 14.99
Género: D
Español: False
Practicar la encapsulación de objetos y el acceso mediante métodos públicos a atributos privados.
Añade al programa métodos para rellenar y leer todos los campos de la clase. En el caso del atributo genre
antes de asignar valor al atributo, comprueba que el caracter utilizado es un caracter válido.
Modifica el main
de la clase AlbumTest
para que utilice los metodos de acceso definidos. Comprueba que imprime el resultado correcto.
Practicar el uso de operadores aritméticos.
Modifica AlbumTest.java
para que calcule el precio total de los dos álbumes e imprima un mensaje en pantalla como este:
Precio total (sin IVA): 29.98 euros
Precio total (con 16% IVA): 34.7768 euros
Practicar el uso de constructores y su relación con los métodos de acceso.
Hasta ahora no hemos escrito ningún constructor para la clase Album
. Después de crear un objeto usando el constructor por defecto se llama a los métodos de acceso setTitle
o setAuthor
para dar valor a los atributos del objeto creado. Esto tiene el inconveniente de que si nos olvidamos de rellenar algún atributo pueden quedar objetos Album
con valores inconsistentes. Para solucionarlo, escribe un constructor para la clase Album
que de valor a todos los atributos del objeto. Para hacerlo debes pasarle al constructor una lista de parámetros para rellenar todos los atributos del objeto. Esto nos permitirá llamar al constructor de la siguiente forma para crear un objeto:
new Album("Crazy Hits","Crazy Frog",2005,1,14.99,'D',false);
Practicar el uso de las constantes y de la sentencia de selección switch.
Crea una constante para identificar cada uno de los distintos generos musicales y asígnales el valor indicando en el enunciado por ejemplo ROCK='R'
. Modifica el método setGenre
para que utilice estas constantes para realizar las comprobaciones necesarias y asignar valor al atributo genre
Practicar el uso de las clases como tipos de referencia en la declaración de atributos
El precio de un álbum es algo que puede cambiar en el tiempo dependiendo de nuestras políticas de precios, ofertas de temporada, etc. vamos a cambiar el atributo price
para gestionar mejor estos cambios. En lugar de utilizar un tipo basico (double) para representarlo vamos a crear un tipo específico de datos que llamaremos Rate
(tarifa). De este modo podemos declarar una clase Rate
y encapsular en ella un conjunto de datos y comportamientos específicos que nos permitirán calcular dicho precio.
Crea una clase Rate
que contenga la siguiente información:
3 constantes numéricas para los diferentes tipos de tarifa (NORMAL=0, REDUCED=1, INCREASED=2)
Un atributo llamado base
para representar el precio sin ofertas ni recargos
Un atributo plus
que indica la cantidad que hay que sumar o restar al precio básico dependiendo de que se trate de una tarifa aumentada o reducida
Un método getPrice
que calcule el precio según la siguiente fórmula y devuelva su val:
Precio normal = base*num
Precio rebajado (ejemplo oferta de temporada) = base*num*(1-plus)
Precio aumentado (ejemplo edición especial) = base*num*(1+plus)