BBDD&POO
Bases de Datos y
Programación Orientada a Objetos.
Curso: 2022/23. Parte POO
Máster en Modelización e Investigación Matemática, Estadística y Computación
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
N no lectivo, N fiesta, N estudio, N exámenes, NN BBDD, NN POO, nuestra clase. |
Vamos a seguir un enfoque diferente al seguido en ediciones anteriores de este curso.
En lugar de desarrollar un curso de aprendizaje de un lenguaje Orientado a Objetos (Java) para entender su "filosofía",
vamos a orientarnos a resolver un par de problemas que pueden ser de interés, y para ello necesitaremos de las herramiantas que,
con Orientación a Objetos, nos proporcionará el lenguaje. De este modo se irán viendo en un (des)orden diferente al de un
curso "organizado", pretendiendo que resulte más natural.
Este es un planteamiento realizado en muchas ocasiones pero, ya que está de moda ahora, podemos mencionar a Elon Musk como un defensor
destacado del mismo: lo explicaba en este video.
Pensando en el uso de la programación con Orientación a Objetos en relación con el manejo de bases de datos (BBDDs) en ciencia y tecnología vamos a plantear dos casos: la construcción de interfaces gráficos (GUIs - Graphic User Interface) específicos para acceso a BBDDs, y el procesamiento de datos en bruto para adaptarlos a los requerimientos de una BBDD:
Ejercicio propuesto
Aquí explico con un video cómo terminar el ejercicio que dejamos a medias en clase,
y aquí podeis bajar el proyecto (podeis abrir el zip y buscar los fuentes, o hacer "exportar" desde el menu de "file" -en ese caso lo tendreis con mi espacio de nombres, que estará bien que cambieis-)
No os olvideis de cambiar en todo caso el usuario y la clave que estan en una linea de la clase que conecta con la base de datos.
Generar un GUI que permita hacer búsquedas en la base de datos que se ha planteado como ejercicio en el curso. Puede ser algo similar a la siguiente figura (cuando menos deberá ser algo parecido, donde incluso podría no tener el desplegable, y como máximo... no hay límite 😀).
Esto supone manejar los componentes JTextField, JButton y JTextarea (más JComboBox en el caso de la figura), así como acceder a la base de datos para solicitar información y manejar la respuesta adecuadamente.
La salida en el área de texto deberá ser toda información de las referencias encontradas que encajen con el término de búsqueda (p.ej. a modo de párrafos, separando las distintas referencias por una línea en blanco). En caso de atreverse con un GUI más elaborado, una sugerencia puede ser usar JTable en lugar de JTextArea para dar una referencia por fila con una columna para cada campo.
OCTUBRE
(si alguien quiere trabajar con Java en su última versión, puede descargar JDK 19, instalarla, e incorporarla a Netbeans posteriormente -menu tools->plataformas-)
---------- Antes de pasar a lo siguiente, no dejaremos de ver cómo decir "Hola Mundo" en Java ----------
Comentario: confirmado con Carlos que los ejercicios se realizarán por parejas diferentes para cada parte de la asignatura.
Avanzamos el enunciado del ejercicio a desarrollar (aunque primero deberemos aprender algunas cosas)
Enunciado
Vamos a procesar datos de referencias bibliográficas que se tienen en un fichero con una determinada estructura y cierto desorden. El fichero puede desacargarse de http://gtts.ehu.es/German/Docencia/assets/DB.txt o ser accedido directamente desde esa dirección por el programa.
Analisis de los datos:
Observando las primeras lineas del fichero veremos datos bibliográficos (obtenidos de scholar.google.es) donde cada línea aporta un dato,
que estará precedido por un número de referencia asignado previamente, y un carácter que indica el tipo de dato (t=título, y=año, p=publicación, r=referencias, a=autor, l=link).
La información correspondiente a autores(a) puede aparecer varias veces, de modo que en cada ocasión se referirá a un autor y
llevará siempre asociada la filiación del mismo entre comillas.
El número de referencia y el carácter que indica el tipo de información van juntos y seguidos por un
espacio en blanco. El número de referencia no tiene una longitud determinada.
No hay un orden predeterminado para las líneas, de modo que la información referente a los distintos artículos podrá
intercalarse sin restricciones. Tampoco se asegura que todos los campos de un mismo artículo aparezcan seguidos, sino que
puede haber cierto desorden en este sentido.
Objetivos:
Tendremos que (1) asimilar del mejor modo posible toda esa información, y (2) almacenarla posteriormente en una base de datos con las tablas mostradas más abajo.
Observacion:
Una referencia bibliográfica podrá estar completa o no. En concreto, puede que no haya referencias o "link" para algunos registros.
En el caso de la falta de referencias bastará con ignorarlo (simplemente no aparecerán referencias en la tabla correspondiente de la base de datos a generar),
y en el caso del "link", en el campo correspondiente de la tabla deberá decir "UNKNOWN".
Estrategia:
Para el objetivo 1: definiremos una clase que "soporte" referencias bibliográficas, cada una en un objeto,
y según éstos se vayan generando, iremos almacenándolos en en una colección.
Para el objetivo 2: dada la estructura de tablas de la base de datos,
cumplimentaremos cada una de ellas mediante métodos de una clase que sea la responsable de interaccionar con ella.
Información que iremos necesitando para el desarrollo del ejercicio que se ha planteado:
Temas:
(sin orientación a objetos)
Tipos de datos,
Operadores,... Hemos llegado a ver los operadores relacionales
NOVIEMBRE
Información que iremos necesitando para el desarrollo del ejercicio que se ha planteado:
Temas:
(sin orientación a objetos)
...Continuamnos tras los operadores relacionales
Operadores,
Sentencias.
(con orientacióna objetos) Escritura de una clase y fijación de Herencia y Polimorfismo, Hemos llegado a clases abstractas
Información que iremos necesitando para el desarrollo del ejercicio que se ha planteado:
Temas:
(con orientacióna objetos)
...Continuamnos llegando a los Interfaces
Escritura de una clase y fijación de Herencia y Polimorfismo,
Encapsulamiento,
El atributo final y un poco más de "static".
(no para el ejercicio, pero por completar)
Enumeraciones,
Visión general de la definición de Clases.
(de bibliotecas)
Entradas/Salidas,... Hemos visto origenes/destinos y Buffered
DICIEMBRE
Información que iremos necesitando para el desarrollo del ejercicio que se ha planteado:
Temas:
(de bibliotecas)
Entradas/Salidas,
Tratamiento de errores,
Colecciones (visión general),... Mencionadas las listas
En cuanto terminemos con las colecciones comenzaremos a hacer el programa para resolver el ejercicio, y el resto de enlaces de abajo los veremos conforme se necesiten al desarrollar la solución
Información que iremos necesitando para el desarrollo del ejercicio que se ha planteado:
Temas:
(de bibliotecas)
Colecciones (visión general),
Aquí los dos ficheros del ejercicio como han quedado
Intentaremos completar el ejercicio, para lo que necesitamos usar una colección para almacenar los objetos Referencia, y enviar la información como tablas a la base de datos.
Información que iremos necesitando para el desarrollo del ejercicio que se ha planteado:
Temas:
(de bibliotecas)
Acceso a bases de datos.
El driver puede descargarse de aquí. El "Platform independent" nos vale a todos.
Al pedir descargar sugiere hacerse una cuenta en Oracle, pero puede descargarse sin hacerlo. El driver está en el fichero ".jar" que viene en el ".zip".
Clases de interés especial:
System.
Object.
Formatter.
Otras:
Expresiones regulares
Aquí los tres ficheros del ejercicio como han quedado
POST-CURSO
Han quedado algunas cosas pendientes. Con un poco de tiempo irán a videos en la página enlazada en eGela.
Información que iremos necesitando para el desarrollo del ejercicio que se ha planteado:
Temas: (...que han quedado sin ver. No son esenciales, pero sí de interés para realizar programas en Java correctamente... añadiré algo más con un poco de tiempo. )
(de bibliotecas)
Clases de interés especial:
System.
Object.
Formatter.
Otras:
Expresiones regulares
Aquí explico con un video cómo terminar el ejercicio que dejamos a medias en clase,
y aquí podeis bajar el proyecto (podeis abrir el zip y buscar los fuentes, o hacer "exportar" desde el menu de "file" -en ese caso lo tendreis con mi espacio de nombres, que estará bien que cambieis-)
No os olvideis de cambiar en todo caso el usuario y la clave que estan en una linea de la clase que conecta con la base de datos.
La versión del proyecto subida inicialmente hace un par de días contenia un error: los índices de autores estaban mal. La causa era esta (un copy-paste sin completar... donde dice "filiaciones" debe decir "autores):
He aprovechado para hacer un cambio menor:
En el main, en lugar de hacer un "try" (con bd) dentro de un "try" (con el stream) he puesto ambos recursos en un solo try...
...y en lugar de dejar escapar las excepciones del main, las he recogido y he hecho que salga un mensaje en un cuadro de dialogo
El mensaje se genera con un objeto de Swing en una aplicación sin JFrame (por eso el null) y con un mímino de html para hacer un paso de linea (break <br>)
He sacado además la dirección url del fichero de datos a una constante y he anulado la posibilidad de generar objetos "Solución" con un constructor privado (algo meramente formal)
Otros temas interesantes para el tipo de aplicaciones que podrían interesarnos y que no pueden abordarse en el curso por su extensión. (Enlaces a los tutoriales de Oracle)