Casos Practicos
Casos Practicos
PRÁCTICOS
PROGRAMACIÓN - B
Caso práctico 1
Para un programador es fundamental saber manejar las funciones
matemáticas, así como elaborar las ecuaciones utilizando los tipos
de variables más adecuados en cada caso. Imagina que necesitas
programar la ecuación para calcular el tiempo que ha permaneci-
do un objeto en caída libre. Por un lado, sabemos que el objeto ha
empezado su caída a una altura de 1450 metros y se ha detenido a
350 metros del suelo. Por otro lado, conocemos que la aceleración
de la gravedad es de 9,8 m/s2. Finalmente, sabemos que la fórmula
a aplicar es, en este caso, la siguiente:
Caso práctico 2
Modifica el programa anterior para que, en lugar de realizar un
solo cálculo con valores fijos, nos pregunte una altura inicial y cinco
valores de altura finales. Utiliza matrices para almacenar las alturas
finales y los cálculos resultantes en cada caso.
2 Casos prácticos
TEMA 7
Desarrollo de programas
organizados en clases
Caso práctico 1
Tomando como punto de partida el programa anterior, tenemos
ahora que comprobar que los valores introducidos no son negati-
vos (los objetos no pueden empezar su caída o caer a menos de
0 metros). En el caso de los valores de altura finales, tampoco es
posible que estos sean superiores a la altura inicial. Resuelve este
problema utilizando al menos un método.
Caso práctico 2
Toma el código resultante de la práctica anterior y realiza las si-
guientes actividades:
Programación - B 3
TEMA 8
Utilización avanzada de clases en el
diseño de aplicaciones
Caso práctico 1
Indica qué cambios realizarías en el código resultante de las prác-
ticas anteriores para aplicar el concepto de herencia de clases.
Caso práctico 2
Supongamos ahora que, además de asegurarnos de que la altura
a la que se detiene nuestro objeto no es negativa ni es mayor que
la altura de la que ha partido, queremos rechazar cualquier altura,
inicial o final, situada entre los 1000 y 2000 metros, ambos inclusi-
ve. Añade esta función de comprobación utilizando la herencia de
clases multinivel.
Caso práctico 3
El ejemplo anterior presupone que, a lo largo del código, nunca
estará permitido usar valores dentro del intervalo. Responde a la
pregunta “¿cómo flexibilizaríamos el código para realizar esta com-
probación fuera de las relaciones de herencia?” si no quisiéramos
que fuera ese el caso.
TEMA 9
Aplicación de estructuras de
almacenamiento en la programación
orientada a objetos
Caso práctico 1
En este ejercicio vamos a poner a prueba nuestra capacidad para
manejar matrices multidimensionales. En concreto, deberemos ma-
nejar los siguientes datos procedentes de un inventario informático:
4 Casos prácticos
N.º de PC Conjuntos de componentes Tipo de componente
1 Procesador
Placa base
RAM
2
Tarjeta gráfica
Expansión
3 Capacidad SSD
Como vemos, cada matriz simple (es decir, cada columna) forma
una matriz bidimensional con la matriz adyacente: para cada PC in-
ventaríamos dos conjuntos de componentes, y para cada conjunto
dos tipos de componente.
Caso práctico 2
Muestra en pantalla los valores de la matriz anterior.
Programación - B 5
Caso práctico 3
Dispones de unos archivos procedentes de una base de datos de
libros donde figuran los títulos (tí[Link]) y los autores (autores.
txt) de todos los libros de una biblioteca. Has importado los datos
de los 10 primeros libros a sendas listas ArrayList. Los datos son los
siguientes:
TEMA 10
Control de excepciones
Caso práctico 1
Tomando como punto de partida el código resultante del ejercicio
anterior, añade una rutina para puntuar cada uno de los títulos del
1 al 10. Implementa la captura de excepciones para evitar que se
introduzcan números decimales o letras.
Caso práctico 2
Podemos simplificar el código del ejercicio anterior creando una
nueva excepción que maneje los números fuera del rango admiti-
do. Explica cómo lo harías.
6 Casos prácticos
TEMA 11
Lectura y escritura de información
Caso práctico 1
Para practicar la lectura y escritura de archivos, vamos a tomar
como punto de partida el programa [Link] de la actividad
anterior. Modifícalo para que la lista de los autores (listaAutores)
que presentamos al final se vuelque en un archivo de texto en lugar
de hacerlo en el terminal.
TEMA 12
Interfaces gráficas de usuario
Caso práctico 1
Utiliza cualquier entorno de desarrollo que permita el trabajo con
la interfaz gráfica de Java, y diseña un JFrame para un formulario
similar al de la imagen.
Programación - B 7
TEMAS 13 / 14 / 15
Caso práctico 1
Para resolver los ejercicios que te planteamos a continuación,
deberás tener una instalación de la base de datos Oracle configu-
rada en tu equipo. Una vez configurada apropiadamente, utiliza
la consulta siguiente para crear una tabla vacía llamada puntua-
ciones:
Caso práctico 2
En esta última práctica, y partiendo de la práctica anterior, debes
almacenar las puntuaciones de los libros en la base de datos de
Oracle.
8 Casos prácticos
Programación - B 9
SOLUCIONARIO
TEMA 6
Programación orientada a objetos
(POO). Fundamentos
2. De entre todas las variables que vamos a manejar, hay una que
nunca cambiará de valor, por lo que podemos definirla como
final. Además, dado que, potencialmente, tendremos que usarla
a lo largo del programa en diferentes métodos, sería preferible
declararla como variable de clase fuera del método principal.
El resto de las variables las declararíamos, en principio, como
variables locales dentro de main.
class TiempoCLibre {
final static double gravedad = 9.8;
Programación - B 11
Solución del caso práctico 2
Lo primero que haremos es importar, al principio de nuestro có-
digo, la clase Scanner del paquete [Link], ya que la necesitamos
para poder introducir los diferentes valores desde la consola:
import [Link];
12 Solucionario
del suelo, permaneciendo “ + tiempo[i]
+ “ segundos en el aire.”);
}
[Link]();
TEMA 7
Desarrollo de programas
organizados en clases
Programación - B 13
A continuación, escribimos el método que comprueba que los valo-
res finales no sean mayores que la altura inicial:
14 Solucionario
import [Link];
class Comprobaciones {
public static double Comprobar(double num) {
while (num < 0) {
[Link](“El valor no puede ser menor que 0. Introduzca
otro valor:”);
num = [Link]();
}
return num;
}
class Programa {
public final static double gravedad = 9.8;
public static Scanner entrada=new Scanner([Link]);
[Link]/3Ap6a3N
Programación - B 15
TEMA 8
Utilización avanzada de clases en el
diseño de aplicaciones
class Negativos {
public double neg(double num) {
while (num < 0) {
[Link](“El valor no puede
ser menor que 0. Introduzca otro valor:”);
num = [Link]();
}
return num;
}
}
16 Solucionario
A continuación, realizaremos los cambios en las llamadas del blo-
que principal. Primero creamos el nuevo constructor a partir de la
subclase MaxAltura:
Programación - B 17
class Negativos {
public double neg(double num) {
while (num < 0) {
[Link](“El valor no puede
ser menor que 0. Introduzca otro valor:”);
num = [Link]();
}
return num;
}
}
18 Solucionario
[Link](“Altura inicial en metros:”);
double altInicial = [Link]([Link]-
g([Link]()));
class IntervaloAltura {
public static double inter(double num, Double
altura) {
Negativos negat = new Negativos();
MaxAltura maxalt = new MaxAltura();
Programación - B 19
Fíjate que, al no tratarse ya de una extensión de negativos, no po-
demos utilizar el método neg directamente. Tampoco es posible
referenciarlo de forma estática, al no estar declarado como tal,
pero sí podemos agregarlo utilizando un constructor, en este caso,
Negativos(). Y lo mismo sucede con el cálculo de la altura máxima,
para lo cual usaremos el constructor MaxAltura().
20 Solucionario
for (int i = 0; i < 5; ++i){
[Link](“Introduzca la altura final
nº “ + (i + 1) + “ en metros:”);
altFinal [i] = [Link](compro-
[Link](([Link]([Link]())), al-
tInicial), altInicial);
}
Programación - B 21
TEMA 9
Aplicación de estructuras de
almacenamiento en la programación
orientada a objetos
inventario[0][0][0] = “Intel”;
inventario[0][0][1] = “16 GB”;
inventario[0][1][0] = “ATI”;
inventario[0][1][1] = “1 TB”;
inventario[1][0][0] = “Intel”;
inventario[1][0][1] = “16 GB”;
inventario[1][1][0] = “NVIDIA”;
inventario[1][1][1] = “512 GB”;
inventario[2][0][0] = “AMD”;
inventario[2][0][1] = “32 GB”;
inventario[2][1][0] = “ATI”;
inventario[2][1][1] = “1 TB”;
String[][][] inventario = {
{ { “Intel”,”16 GB”}, {“ATI”,”1 TB”}
},
{ { “Intel”,”16 GB” }, { “NVIDIA”,
“512 GB” } },
{ { “AMD”,”32 GB” }, { “ATI”, “1 TB” }
}
};
22 Solucionario
Solución del caso práctico 2
Para recorrer todos los valores de una matriz tridimensional, nece-
sitaremos anidar tres bucles de la siguiente manera:
if (conjunto == 0)
[Link](“Placa base”);
else
[Link](“Expansión”);
[Link](“Componentes:”);
[Link](inventario[pc][con-
junto][componentes]+”\t”);
}
[Link]();
}
[Link]();
}
Programación - B 23
Solución del caso práctico 3
La forma más sencilla de obtener una lista ordenada alfabética-
mente y sin duplicados es utilizando TreeSet. Partimos del siguiente
código en el que las listas ya están inicializadas:
import [Link];
import [Link];
24 Solucionario
Por último, presentamos el listado por el terminal usando un bucle
de tipo for each:
TEMA 10
Control de excepciones
import [Link];
import [Link];
import [Link];
import [Link];
class Rango {
public static int r(int num, String titulo) {
while ( num < 1 || num >10) {
[Link](“¡Valor fuera de
rango!”);
[Link](titulo + “: “);
num = [Link]();
}
return num;
}
}
Programación - B 25
A continuación, declaramos una nueva lista de enteros, llamada
puntuaciones, y la rutina de entrada de datos:
int pos = 0;
while (pos < [Link]()) {
try {
[Link]([Link](pos) + “: “);
int num = Rango.r([Link](), titu-
[Link](pos));
[Link](num);
[Link]();
pos++;
} catch (InputMismatchException ex) {
[Link](“¡No introduzca letras
o decimales!”);
[Link]();
}
}
[Link]/3Khs3H3
Como ves, es necesario vaciar entrada con nextLine() si no quere-
mos que se nos muestre el mensaje de error en bucle. El código
completo lo encontrarás en este enlace.
26 Solucionario
Solución del caso práctico 2
Primero es necesario transformar clase Rango en una excepción:
int pos = 0;
while (pos < [Link]()) {
try {
[Link]([Link](pos) + “: “);
int num = [Link]();
if (num < 1 || num > 10) throw new Ran-
go();
[Link](num);
[Link]();
pos++;
}
catch (InputMismatchException ex) {
[Link](“¡No introduzca letras
o decimales!”);
[Link]();
}
catch (Rango ex) {
[Link](“¡Valor fuera de ran-
go!”);
[Link]();
}
}
[Link]/3wuc0Qt
Como podemos observar, si el número introducido está fuera del
rango, arrojamos la excepción Rango(). Revisa el código en el ar-
chivo de este enlace.
Programación - B 27
TEMA 11
Lectura y escritura de información
import [Link];
import [Link];
Fíjate en que las rutas deben utilizar las barras normales como se-
paradores, ya que la contrabarra se usa como carácter de escape.
Recuerda que estas acciones sobre ficheros son susceptibles de
generar excepciones, por lo que tendrás que utilizar try-catch.
28 Solucionario
PrintWriter (ten en cuenta que debes también reemplazar java.
[Link] por [Link]):
try {
File archivoAutores = new File(“D:/archivoAu-
[Link]”);
[Link]();
Lo que hemos hecho es, por un lado, utilizar IOException para captu-
rar cualquier error que se produzca durante la creación del archivo,
y por otro, el método checkError() de PrintWriter para comprobar [Link]/3cneaum
si se producen errores de escritura, en cuyo caso escribeArchivo.
checkError() adoptará el valor true. Puedes ver el código final en el
archivo de este enlace.
Programación - B 29
Solución del caso práctico 2
Lo primero que debes hacer es crear la rutina que nos permita leer
nuestro archivo de texto. Una posibilidad es utilizar, para ello, Fi-
leInputStream. Examinemos el siguiente código:
30 Solucionario
<Integer>();
try{
File biblioteca = new File(“D:/Biblioteca.
txt”);
if (![Link]()){
[Link]();
[Link](“El archivo “ + biblio-
teca + “ no existe.\nSe ha creado uno vacío.”);
}
Scanner leeArchivo = new Scanner(new Fi-
leInputStream(biblioteca), “UTF-8”);
while ([Link]()) {
String[] texto = [Link]().
split(“[;]”, 0);
for(String mitexto : texto) {
[Link](mitexto);
}
}
}
catch (IOException ex) {
[Link](“Se ha producido un
error.”);
[Link]();
}
Lo siguiente es trasladar los datos a las dos listas que vamos a ma-
nejar en adelante, la de títulos y la de autores. Para ello recorremos
la lista datos y vamos almacenando cada una de sus posiciones en
una y otra lista, de forma alternativa:
int pos = 0;
while (pos < [Link]()){
[Link]([Link](pos));
pos++;
[Link]([Link](pos));
pos++;
}
Programación - B 31
Para finalizar, mostramos los datos de ambas listas en el terminal:
TEMA 12
[Link]/3TjbT3O
Interfaces gráficas de usuario
Enlace 2
TEMA 13 / 14 / 15
import [Link].*;
import [Link].*;
32 Solucionario
class Rango extends Exception {}
try {
[Link](“[Link]-
cleDriver”);
Connection conec = [Link]-
Connection(
“jdbc:oracle:thin:@localhos-
t:1521:xe”, “sys as SYSDBA”, “contraseña”);
Statement stat = [Link]-
ment();
Programación - B 33
Finalmente, mostramos el contenido de las listas:
catch (Exception e) {
[Link](e);
}
int pos = 0;
while (pos < [Link]()) {
[Link]([Link](pos) + “: “);
int num = [Link]();
if (num < 1 || num > 10) throw new Rango();
[Link](“update puntuaciones set
puntuacion = ‘” + num + “’ where id = ‘” + (pos +
1) +”’”);
pos++;
}
[Link]();
34 Solucionario
Programación - B 35
CASOS
PRÁCTICOS
PROGRAMACIÓN - B
DESARROLLO DE
APLICACIONES WEB
Centro integral de
formación profesional