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

Calendario
(Aula 2.1)

Octubre
LMMJV
[1]3
14..16
4
14..16
567
16..18
[2]1011
16..18..20
(0.8)
1213
18..20
14
16..18
[3]17
14..16
18
14..16
192021
18..20
[4]2425262728
[5]31    
Noviembre
LMMJV
[5] 12
18..20
34
[6]7891011
[7]1415161718
[8]2122232425
[9]28
18..20
2930  
Diciembre
LMMJV
[9]   12
[10]56789
[11]12
18..20
13
18..20
14
16..18
1516
 N  no lectivo,  N  fiesta,  N  estudio,  N  exámenes, NN BBDD, NN POO, nuestra clase.

Programa

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:

Evaluación

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.

Desarrollo

OCTUBRE

lunes 17 de octubre de 2022
  • Sobre el kit de desarrollo con Java [descargar Oracle JDK 8].
    Comentamos versiones... es necesario desde que SUN 😇 fue comprada por Oracle 👿: vamos por la 19, la 8 es la más "común", nos basta con la 7.
  • (si alguien quiere trabajar con Java en su última versión, puede descargar JDK 19, instalarla, e incorporarla a Netbeans posteriormente -menu tools->plataformas-)

  • Sobre el Entorno Integrado de Desarrollo [descargar Netbeans 12.5]

    Diseñaremos un JFrame (un GUI) para:
  • Aprender a hacer GUIs con la ayuda del IDE (todo lo que puede hacerse lo vemos con la demo de Swing)
  • Entender los conceptos Clase y Objeto, y ver la estructura de la biblioteca de clases de Java y su documentación.
  • Entender la Herencia (directa y de "obligaciones", es decir los Interfaces pasando por las clases abstractas), y el Polimorfismo
    dejaremos de ver de este modo muchos detalles puntuales que tendremos que abordar posteriormente, pero hemos de hablar ya de reescritura de métodos.
  • Aprender a usar el IDE para encontrar con su ayuda lo que se necesita de un modo intuitivo
  • Echaremos un vistazo al código fuente de la clase JButton para reforzar lo visto (herencia, campos y métodos,...) y comentar todo lo no comentado aun y que resulte pertinente ( estructura de la clase, comentarios y documentación, constructores, el "this" y el "super", getters y setters, clases internas, etc.).
martes 18 de octubre de 2022

---------- Antes de pasar a lo siguiente, no dejaremos de ver cómo decir "Hola Mundo" en Java ----------


viernes 21 de octubre de 2022

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

miércoles 02 de noviembre de 2022

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

lunes 28 de noviembre de 2022

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

lunes 12 de diciembre de 2022

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

martes 13 de diciembre de 2022

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

miércoles 14 de diciembre de 2022

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

miércoles 14 de diciembre de 2022

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

martes 20 de diciembre de 2022

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.

jueves 22 de diciembre de 2022

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)

Extras

Páginas con ejercicios en la Web (aportaciones realizadas por varios alumnos a lo largo del tiempo -un agradecimiento general a ellos-).

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)