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.
|
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
N no lectivo, N fiesta, N estudio, N exámenes, NN POO, (NN BBDD). |
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:
Ejercicios propuestos
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.
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)
Noviembre
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.
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.
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.
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.]
Hemos hecho lo previsto quedando en una vista rápida de las clases y los métodos abstractos.
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.
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
Hemos hecho lo previsto, hasta el punto en que hemos preparado el GUI de la aplicación con todos sus componentes.
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
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.
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.
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.
Terminaremos la aplicación y veremos todo lo posible de los temas pendientes listados aquí abajo.
POST CURSO
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.