BBDD&POO

Bases de Datos y
Programación Orientada a Objetos.

Máster Universitario en Modelización e Investigación Matemática, Estadística y Computación
Curso: 2024/25.

Calendario
(Aula 2.1)

Septiembre
LMMJV
[1]30
14..16
    
Octubre
LMMJV
[1] 1
14..16
18..20
234
16..18
[2]7
16..18
891011
[3]1415
18..20
1617
16..18
18
[4]2122232425
[5]28293031
14..16
 
Noviembre
LMMJV
[5]    1
[6]456
14..16
78
[7]11
16..18
12
18..20
131415
[8]18192021
18..20
22
[9]2526272829
Diciembre
LMMJV
[10]2
14..16
3
18..20
4
18..20
56
[11]910111213

Sección POST CURSO

 N  no lectivo,  N  fiesta,  N  estudio,  N  exámenes, NN POO, (NN BBDD).

Programa

Dadas las características de este curso (la limitación del número de horas y encontrarse asociado "de algún modo" a las Bases de Datos) El enfoque va a ser diferente al clásico para el aprendizaje desde cero de los conceptos de la Orientación a Objetos, que sería básicamente aprender un lenguaje "ordenadamente". Vamos a plantear un par de casos generales a resolver con Orientación a Objetos que pueden ser de interés. Usaremos un lenguaje adecuado (Java) pero con un cierto (des)orden ligado a los casos planteados.
Esta manera de proceder, sin serlo exactamente (porque deberámos plantear muchos casos más simples), podemos aproximarla lo que se conoce como "problem solving"... podemos mencionar a Elon Musk, ya que está de moda ahora, 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

Ejercicios propuestos


Una vez acabadas las clases "en pizarra", para cualquier duda, aclaración, comentario... estaremos en contacto via email (german.bordel@ehu.es). Si tenéis problemas concretos con el desarrollo de los ejercicios propuestos lo mejor es que me envieis el proyecto netbeans siguiendo las instrucciones de este video Enviar proyecto
Si hay consultas particulares que sean de interés general, lo haré saber a través de un mensaje en el foro de eGela, y si es precisa alguna explicación elaborada, la pondré al final de esta web en el apartado "POSTCURSO".
Ejercicio 1 [3 puntos] Clase básica

Escribir la clase Matriz basadada en un array bidimensional de doubles, con el esqueleto que se muestra en la figura. Se especifican unos cuantos métodos de los muchos que podrían plantearse, pero nos limitamos a algunos que no se compliquen en exceso (p.ej. la inversión -y de ahí, la división- será un método imprescindible que no añadimos por complejo. Otro ejemplo similar es el cálculo del determinante)

La implementación "directa" es bastante trivial, pero han de tenerse en cuenta los posibles errores y tratarlos con el mecanismo basado en objetos arrojables visto en clase.

Se recomienda que se escriba otra clase -con un main()- para hacer pruebas de funcionamiento, ya que la clase entregada se someterá a un chequeo automático mediante un proyecto evaluador que las contenga a todas (no hay que olvidar establecer un espacio de nombres propio para que las soluciones entregadas no "colapsen")

nota: El proyecto evaluador instanciará mediante el constructor Matriz(File filename) matrices que antes se hayan guardado con el método guardaEnDisco(File filename), por lo que el formato del fichero puede ser el elegido por los alumnos.

Ejercicio 2 [4 puntos] Gui de acceso a base de datos.

Ampliar la aplicación desarrollada en clase para que la funcionalidad actual se aloje en una pestaña, y en otra pestaña podamos introducir nuevas referencias en la base de datos mediante un formulario que contenga todos los campos necesarios (función executeUpdate() de Statement)

La base de datos contra la que trabajará la aplicación es la de bibliografía. Por si hubiese cualquier variación con la manejada en la primera parte del curso, tenéis aquí la que usaré para evaluar el ejercicio. Podéis importarla con el MySQL Workbench (menú Server -> Data import ... Import from Self-Contained File)

Al pulsar "Enviar registro" se realizarán una serie de consultas para determinar si el título ya está, o no, en la base de datos; para localizar a los autores y su código numérico o darlo de alta si no existen; y una vez determinada la viabilidad de la acción, se actualizarán las tablas. Se informará con un cuadro de diálogo de cualquier causa de imposibilidad de llevar a cabo la acción.

- La imagen es orientativa.
- Cualquier añadido o variación significativa respecto a lo indicado deberá ser informada mediante un documento adjunto para que pueda ser tenida en cuenta.
- Se valorará que el código sea legible (sin restos de pruebas llevadas a cabo en el desarrollo, y mínimamente comentado si hay alguna sección compleja)

Cómo hacer que el JFrame tenga paneles con "pestañas" [2,5 min.]

Desarrollo

Noviembre

miércoles 06 de noviembre de 2024

Introducción: planteamiento del curso basado en el desarrollo de dos casos. Herramientas a utilizar. Inicio del desarrollo del caso 1, con introducción de los conceptos de Clase y Objeto, Herencia, polimorfismo, etc.


  • Sobre el kit de desarrollo con Java [descargar Oracle JDK 23].
    Comentamos versiones... es necesario desde que SUN 😇 fue comprada por Oracle 👿: vamos por la 23, la 8 es la más "común", nos basta con la 7.
  • Sobre el Entorno Integrado de Desarrollo [descargar Netbeans 23]
proceso de instalación de JDK y Netbeans [2.5 min.]

Hemos visto cómo descargar las herramientas. Hemos echado un vistazo a la demo de Swing y comenzado a usar Netbeans para poner componentes en un JFrame y entender clase como "tipo complejo con estado y comportamiento". Para esto hemos hablado también de la biblioteca, los paquetes y los espacios de nombres, así como de la documentación y su generación con javadoc.

lunes 11 de noviembre de 2024

El objetivo para hoy es entender la estructura de componentes para construir un GUI y de ese modo entender la herencia y otros elementos propios de la Orientación a Objetos.


  • Entender la Herencia en primera aproximación

Para diseñar el JFrame nos ayudamos de este material:
Generar un nuevo proyecto con Netbeans [5 min.]
Iniciar un GUI con Netbeans [8 min.]

Emplazamiento de componentes en GUIs [pdf]
How to Use Various Layout Managers
Componentes gráficos para el GUI [24 min.] ← herencia
Layout managers [27 min.]

  • Echaremos un vistazo al código fuente de la clase JButton para reforzar lo visto (herencia, campos y métodos, comentarios, documentación...) y comentar todo lo no comentado aun y que resulte pertinente ( estructura de la clase, constructores, el "this" y el "super", getters y setters, clases internas, etc.).

Hemos hecho lo previsto quedando en una vista rápida de las clases y los métodos abstractos.

martes 12 de noviembre de 2024

El objetivo para hoy es revisar la idea de clase abstracta para pasar a ver Interface y con todo ello hablar de polimorfismo. Esto nos permite ver el patrón observador y su uso en la atención a los elementos de un GUI. Con ello empezaremos a hacer una aplicación que enviará queries a una base de datos,y esto nos irá llevando a estudiar otros conceptos.


  • Ampliar la visión de 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.

Para "dar vida" a nuestro GUI nos ayudamos de estos materiales:
Comunicación entre componentes de AWT y Swing [pdf]
donde vemos el patrón "Delegation Event Model" ("Observer")
(Patrones en Wikipedia)
Interacción con el GUI [32 min.] ← uso del polimorfismo

  • Comenzaremos a desarrollar el GUI de la aplicación y de este modo iremos aprendiendo a usar el IDE para encontrar con su ayuda lo que se necesita de un modo intuitivo.

Hemos hecho lo previsto, hasta el punto en que hemos preparado el GUI de la aplicación con todos sus componentes.

jueves 21 de noviembre de 2024

Hecho el interfaz gráfico, escribiremos el resto de la aplicación. Para ello hay que ver conceptos generales de Java


Dejamos un momento la aplicación, no sin antes definir un espacio de nombres y separar en dos clases el GUI y el arranque.


Hemos retocado la aplicación y hemos visto casi todo lo referente a elementos no orientados a objetos (nos falta break, return y ejemplos)

Diciembre

lunes 02 de diciembre de 2024

Veremos lo poco que falta del dia anterior, y pasaremos a ver todo lo que nos falta en relación a orientación a objetos.



Hemos visto los elementos previstos, a falta de ver la posibilidad de arrojar excepciones fuera de los métodos y generar las que necesitemos.
Ah! y no estaba previsto, pero comentaremos la existencia de las enumeraciones.

martes 03 de diciembre de 2024

Veremos lo poco que falta del dia anterior, y pasaremos a continuar con el desarrollo de la aplicación de acceso a la base de datos. Para ello usaremos los conocimientos adquiridos en las últimas clases, y necesitaremos de algunos nuevos que pueden verse en los enlaces posteriores.


    Temas relacionados con la biblioteca:
  • ---adelantamos esto por ser necesario en el ejercicio--- 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"; lo dejaremos en nuestro disco (en Windows sugiero c:/program files/Java/libs/). y lo incluiremos en nuestro proyecto seleccionando "add jar" en el menú que obtenemos sobre la carpeta "libraries"
  • ...

Hemos visto lo pendiente de ayer, y hemos avanzado en la aplicación incluyendo parámetros de conexión, y comenzando con el controlador y adjuntando el driver JDBC como libreria.
Nos hemos quedado a punto de suscribir el objeto controlador al GUI.

miércoles 04 de diciembre de 2024

Terminaremos la aplicación y veremos todo lo posible de los temas pendientes listados aquí abajo.


    Temas relacionados con la biblioteca:
  • ...
  • ---deberíamos empezar por Object, System, java.lang, java.util sin colecciones; pero lo retrasamos porque hay cosas más urgentes---
  • ---adelantamos esto por ser necesario en el ejercicio--- java.util (colecciones) (genéricos)[28 min.],...
  • ---también adelantamos esto porque no se puede dejar sin ver--- ... Entradas/Salidas
  • Object, System, Java.lang, java.util (sin colecciones)
  • ---con tiempo podríamos ver muchos más temas soportados por la biblioteca: uso de hilos, clientes-servidor en red, aplicaiones distribuidas, etc. etc. etc.

POST CURSO

viernes 06 de diciembre de 2024

Os dejo aquí el ejercicio desarrollado en clase para poder ejecutarlo frente a vuestra base de datos (es un ZIP que podéis importar en Netbeans con la opción de menú "File->Import Project->from Zip"). Debéis cambiar los valores de los campos definidos en la clase Demo. Además, esto que os paso no incluye el driver JDBC, por lo que para poder ejecutarlo tenéis que incluir como librería vuestro propio driver JDBC. Ya sabéis que eso podéis hacerlo con el menú que aparece pulsando el botón derecho del ratón sobre la carpeta de librerías y seleccionando el ".jar" del JDBC.

    He añadido algunas cosas a lo que quedó en clase en el último momento...
  • Os indiqué que añadiría un botón para poder guardar la tabla en un fichero de texto en el disco, y que de esa manera vieseis un trozo de código de salida de datos. He hecho esto, pero en vez de poner un botón, lo que he hecho ha sido añadir una opción en el menú DB. La atención al evento de esta acción de menú se realiza en el mismo GUI, yempieza por sacar un diálogo para que el usuario elija dónde poner su fichero de texto, y luego delega en un método de una clase nueva para que se encargue de escribir efectivamente el fichero. Esto lo he hecho así porque la clase gráfica se responsabiliza de todo aquello que tiene que ver con la interacción del usuario, pero no le añadimos la responsabilidad de trabajar frente al disco. Para eso se delega en una clase de control que por el momento es una clase maleta, es decir, no está orientada a que se generen objetos, sino que es un lugar donde se pueden incluir diversos métodos estáticos de utilidad.
  • He añadido numerosos comentarios de documentación para que podáis ver cómo resultan después de pasar por el programa javadoc. Esto lo podéis hacer con el menú que sale al pulsar el botón derecho del ratón en la ventana de proyectos, sobre la raíz del mismo, y seleccionando la opción javadoc. Netbeans ejecutará el programa javadoc para generar la documentación y abrirá el navegador que tengáis instalado por defecto con la primera página HTML de la documentación de proyecto generada. Normalmente se genera documentación para los elementos public y protected, que son los que un programador podría utilizar en un desarrollo propio, pero en este caso he especificado que se vean también los elementos package y private, lo que puede ser de utilidad para entender todo lo que se ha hecho.
  • En el controlador he añadido también el método destructor (rescritura del finalize() heredado de Oject ), porque nuestro objeto mantiene una conexión con la base de datos que tendrá que ser cerrada cuando el objeto desaparezca.
  • Como hay una opción de menú que permite cambiar de base de datos, he añadido una etiqueta con el nombre de la base de datos activa justo delante del botón de enviar. Esta etiqueta se actualiza al establecer el objeto de clase DemoControl que conecta con la bae de datos. No es la solución más elegante desde el punto de vista gráfico, pero lo he puesto ahí por no hacer demasiados cambios en el GUI.