BBDD&POO

Bases de Datos y
Programación Orientada a Objetos.

Curso: 2020/21. Parte POO
Máster en Modelización Matemática, Estadística y Computación

You can see this page translated into english by Google. Vous pouvez voir cette page traduite en français par Google.
(optimizado para Chrome)

Enlace a sesiones movido al final de la sección "Programa"

Calendario

Octubre
LMMJV
[1]5
12..14 & 18..20
(0.16)
6
16..18..20
(0.16)
7
14..16
(0.08)
8
16..18..20
(0.5)
9
14..16..18
(0.5)
[2]1213141516
[3]19
14..16
(0.5)
20212223
[4]2627282930
Noviembre
LMMJV
[5]23456
18..20
(0.5)
[6]910111213
[7]1617181920
[8]2324
16..18
(0.5)
252627
[9]30    
Diciembre
LMMJV
[9] 1
14..16
(0.5)
234
16..18
(0.5)
[10]7891011
18..20
(0.5)
[11]1415161718
 N  no lectivo,  N  fiesta,  N  estudio,  N  exámenes, NN BBDD, NN POO, nuestra clase.

Programa

TemaContenido
1INTRODUCCIÓN
2ELEMENTOS BÁSICOS DEL LENGUAJE
  - Introducción.
  - Tipos de datos, identificadores y literales.
  - Operadores.
  - Sentencias.
3ELEMENTOS RELACIONADOS CON LA ORIENTACIÓN A OBJETO
  - Objetos y clases.
  - Estructura de la definición de una clase.
  - Herencia.
  - Encapsulamiento (ámbitos de accesibilidad).
  - El bloque static y los atributos static y final.
  - Instanciación, inicialización y eliminación de objetos.
  - Clases y métodos abstractos.
  - Interfaces.
  - Polimorfismo.
  - Enumeraciones.
  - Clases dentro de clases y métodos. Clases anónimas.
  - Arrays.
4MECANISMO DE TRATAMIENTO DE EXCEPCIONES Y ERRORES
  - Introducción.
  - Control de excepciones.
  - Generación excepciones.
  - Definición de nuevas excepciones.
  - Aserciones
5BIBLIOTECA DE CLASES (clases de interés)
  - Los paquetes java.lang y java.util. Genéricos y colecciones.
  - Clases para entradas y salidas
PrácticaProcesamiento orientado a Bases de Datos
  - Ejercicio en grupo de acceso a bases de datos.

Documento de programación de las sesiones
Enlaces a las sesiones de BBC
Clases: https://eu.bbcollab.com/guest/eb18aef6f7854d43bd686cf265ac87d5
Tutorias: https://eu.bbcollab.com/guest/95cad51970f74434bc6b1674da4d3121

Evaluación

Acceso a las calificaciones

Fechas de entrega del segundo ejercicio:

Método de entrega:

Nota: antes de entregar el ejercicio hay que -por lo menos- "adecentar" el código fuente. Lo correcto sería incluso escribir la documentación embebida, pero sin duda hay que dejar el código "listo para revista": eliminar elementos abandonados, lineas de código de prueba, etc...

Ejercicio Final

El ejercicio propuesto, con los datos a utilizar, puede descargarse aquí. Consiste básicamente en definir una clase que "soporte" referencias bibliográficas en objetos, y generar multiples objetos de esa clase almacenándolos en en una colección. Una vez recogida toda la información tendremos una colección de objetos (referencias bibliográficas) que podremos usar para llevar esa misma información a una base de datos.
Hay dos detalles a tener en cuenta:
  • Como la información de cada referencia no llega en bloque, no pueden construirse los objetos inicializados completamente, sino que lo razobable será inicializarlos vacíos y disponer de la posibilidad de añadirles los datos que se van obteniendo posteriormente. La colección que los almacene debe permitir un acceso sencillo a ellos para esta necesidad de añadir información cada vez que se disponga de un dato nuevo.
  • Cuando la entrada se haya procesado completamente tendremos una colección de objetos. Esta fase no ha de presentar demasiado problema más allá de manejar la colección que elijamos. Posteriormente, adecuar la información para cumplimentar las distintas tablas de la base de datos, puede ser muy sinple en algunos casos y no tanto en otros, requiriendo de estructuras intermedias para elaborarse.

Desarrollo

OCTUBRE

Martes 6 de octubre de 2020 (4h. 16:00..20:00)

TEMA 1 - Introducción

La siguiente introducción pretende dar una aproximación muy general a la Orientación a Objetos, y poner en contexto y justificar el uso de Java como lenguaje para concretar el aprendizaje.

Aparecen algunos datos/ideas/conceptos relacionados y de interés que no se volverán a tocar, ya que no son estrictemente necesarios si nos centramos en el objetivo de entender la Orientación a Objetos. Principalmente me estoy refiriendo con esto a las Máquinas Virtuales (la JVM -Java Virtual Machine- en nuestro caso y como precursora), y al patrón MVC de "estructuración" de aplicaciones.

Las últimas páginas se dedican a las herramientas que usaremos. En los párrafos siguientes se proporciona el acceso para descargarlas.

Necesitaréis el entorno de desarrollo de Java (JDK - Java Development Kit). Ha salido hace un mes la versión JDK15 (recientemente se ha establecido en 6 meses el periodo de publicación de versiones -una técnica de desarrollo acual-). De todos modos, trabajaremos "a nivel" de la versión 7, porque todas las actualizaciones desde entonces caen fuera del ámbito de este curso. En realidad, la versión 8 es la mejor opción ahora mismo para quien no quiera profundizar en Java más adelante (de todos modos nos limitaremos a trabajar con los recursos proporcionados en la 7, pporque las capacidades funcionales de la 8 nos pueden confundir en el IDE del que hablamos más abajo). Descargad e instalad de aquí.

Además usaremos como entorno de ayuda al desarrollo (IDE) el de Netbeans (es el que mejor se adapta a nuestras necesidades siendo 100% gratuito). Descargad de aquí la última versión (12.1).

TEMA 2 - Elementos básicos del lenguaje

En este tema aprendemos todo lo necesario para programar en Java sin Orientación a Objetos (ignorando por el momento todo aquello que sí lo es y nos vemos obligados a incluir sin dominar). Para quien domine C encontrará más similitudes que diferencias (siempre a mejor). En general tampoco es muy diferente a programar en cualquier otro lenguaje imperativo. Es cuestión de "hacerse" con una sintaxis concreta.

Como puntos a destacar: la absoluta portabilidad de los tipos primitivos; algunos operadores no demasiado comunes: el ternario (cond ? exp1 : exp2), los incrementos y decrementos (++x, --x, x++, x--), los combinados (+=, -=, %=, etc.)

Como decíamos, hay ciertos elementos que se mencionan aquí aunque pertenecen al "mundo de los objetos" (operadores new e instanceof, o la sentencia throw) que se estudiarán más adelante

//Nos quedamos a falta de ver las sentencias

Miércoles 7 de octubre de 2020 (2h. 14:00..16:00) [video de la clase]

//Continuamos donde lo dejamos...

Sin necesidad de programación a objetos ya deberíamos poder resolver el siguiente ejercicio:

Obtención del número Pi mediante aproximación por serie.

Se trata de calcular el número π con precisión de cuatro decimales mediante la serie:

La especificación de cuatro decimales hace referencia al criterio de parada en la suma de términos de la serie, no a la presentación de la solución, que se hará normalmente mediante System.out.println(.) y que nos mostrará un número de decimales que no podemos controlar por ahora.

Una solución: TBD

El siguiente ejercicio lo dejamos planteado "sin más", y veremos soluciones al finalizar el curso porque nos mostrará algunas capacidades "avanzadas" que nos permiten obtener más soluciones que las que están por ahora en nuestra mano.

Obtención de números Perfectos

Escriba una RUTINA que determine si un número dado es perfecto o no.

static boolean isPerfect(long n) {
            //TODO hacer lo necesario para que "isPerfect" retorne "true" o "false" si n es perfecto o no.
            }

Un número perfecto es un entero positivo igual a la suma de sus divisores propios. Los divisores propios de un entero positivo son todos sus divisores a excepción de sí mismo. (Ejemplo de número perfecto: el 6, porque sus divisores propios son 1, 2 y 3 y 6=1+2+3.)

Utilizando dicha rutina debera obtener una lista de números perfectos entre el 1 y el 100.000

Resultado de la ejecución:
6 = 1+2+3
28 = 1+2+4+7+14
496 = 1+2+4+8+16+31+62+124+248
8128 = 1+2+4+8+16+32+64+127+254+508+1016+2032+4064

Listado de Números Perfectos [pdf]

Una solución: TBD

TEMA 3 - Elementos relacionados con la Orientación a Objetos

En este tema encontramos los conceptos importantes de la Orientación a Objetos. Todos son importantes, pero hay que destacar la Herencia, y más aún el Polimorismo.

//Nos quedamos a punto de hablar de getters y setters (en encapsulamiento)

Viernes 9 octubre de 2020 (4h. 14:00..18:00) [video BBC de la primera parte clase] [video BBC de la segunda parte clase]

//Continuamos donde lo dejamos...

TEMA 4 - Mecanismo de control de Excepciones y Errores

En este tema vemos una parte de Java que, siendo parte de la estructura básica del lenguaje, comienza a hacer uso de las capacidades que nos da la orientación a objetos. La gestión de errores obedece a un modelo de separación de caminos de éxito y resolución de problemas, que está soportada por el lenguaje mediante una sentencia específica así como por clases que heredan la capacidad de ser "arrojables"

Lunes 19 de octubre de 2020 (2h. 14:00..16:00)

TEMA 5 - Biblioteca de Clases

Hemos visto todo lo que se refiere al lenguaje (bueno, excepto el soporte puntual que da a un par de características con los términos "transient" y "volatil", las dos que nos quedan por marcar en el cuadro de palabras reservadas). A partir de aquí todo son bibliotecas. Como ya se ha mencionado, el elenguaje es absolutamente incapaz de hacer nada sin bibliotecas, y se han usado desde el primer instante (System.out.println("Hola mundo");).

Hemos de estudiar las clases imprescindibles, las de más frecuente uso, y las específicas para nuestros intereses particulares.

  • Un vistazo general a las bibliotecas
  • Material de biblioteca de uso general (java.lang y java.util)
    • Empezamos con Object, ha de tenerse en cuenta... siempre forma parte de nuestra herencia
    • System, es la máquina sobre la que se ejecuta el programa...
    • Otras clases en java.lang, son básicas e interesantes. -Imagen resumen-
    • Clases en java.util, no son "imprescindibles", pero a poco que hagamos las necesitaremos.
    • Las colecciones (aplicable el for "iterativo" -es un patrón-)
      (en las colecciones se usan intensivamente los "Genéricos" aquí un "tutorial"
    • Algunas otras clase de interés en java.util (muy por encima):
      • Formatter (en java.util facilita métodos en String y en Streams de salida entre otras clases)
      • Scanner (en java.util pero muy usada con streams de entrada)
      • Pattern y Matcher(en java.util.regex -expresiones regulares- facilita métodos en String y otras clases)
  • Material de biblioteca de uso específico (sólo java.IO en nuestro caso) -Imagenes resumen: 1, 2, 3-
    • Un vistazo general en pizarra:
      • los Streams soportados por las clases de cuatro sub-árboles del árbol de herencia.
      • El patrón "Wrapper".(Patrones en Wikipedia)
    • Otras clases File, RandomAccessFile
    • El paquete java.nio.file aporta más material de IO para trabajo con ficheros

Publicado en la sección "Evaluación" el primer ejercicio (20% de la nota)

NOVIEMBRE

Viernes 6 de noviembre de 2020 (2h. 16:00..18:00) [video BBC de la clase] [video terminando el ejercicio]

El último día nos quedamos sin tiempo,y además vimos hacial el final todo demasiado rápido. Como hoy vamos a hacer un ejercicio de acceso a base de datos, en realidad vamos a ver un poco de todo lo que se pretendía ver el día anterior sobre bibliotecas, así que, si podemos ver la "filosofía" de desarrollo, lo daremos por bueno. No será un ejercicio en el que la arquitectura de la solución sea importante, pero para eso ya os habéis enfrentado al primer ejercicio evaluable.

Antes de nada, y muy rápido:

  • Continuamos con una visión muy rápida de IO para pasar a hacer un ejercicio completo.

PRÁCTICA - Procesamiento orientado a Bases de Datos

Para trabajar con bases de datos necesitaremos una en nuestra máquina o acceso a una remota. Lo fácil es lo primero (para los accesos remotos desde la universidad encontrariamos firewalls cerrando el paso). Elegimos MySQL en la asignatura, pero eso es casi indiferente... sólo influye en el driver que necesitaremos. Para MySQL es MySQL-JDBC (Java DataBase Connector) [elegir "platform independent"]. Desde el mismo enlace podeis acceder al instalador completo ("daemon", y "workbench") si no teneis ya MySQL

Desarrollaremos el ejercicio en clase y lo compartiré después aquí

  • La idea es ponernos en la situación de que queremos llevar a una base de datos el resultado de un procesamiento más o manos complejo de cierta información disponible.
  • Tomaremos unos ficheros resultantes de un procesamiento de audio (voz) correspondientes a sesiones del Parlamento Vasco de los días: 1, 11, 14, 15 de diciembre de 2017. No es preciso "bajarlos", accederemos a ellos directamente desde el programa.
  • que muestran duraciones de fonemas y queremos obtener y almacenar unos estadísticos básicos (media y desviación de las duracciones) para sólo determinados casos.
  • La base de datos tendrá tan sólo una tabla y se corresponde con la que genera el siguiente script (puede existir previamente o podemos crearla desde nuestro programa):
    DROP DATABASE IF EXISTS actaspv;
    CREATE DATABASE actaspv;
    USE actaspv;
    CREATE TABLE estadisticas (
      `id` VARCHAR(8) NOT NULL,
      `numPalabras` INT NOT NULL,
      `validas` INT NOT NULL,
      `media` DOUBLE NOT NULL,
      `desviacionTipica` DOUBLE NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE INDEX `id_UNIQUE` (`id` ASC));
Una vez terminadas las clases...
  • Video con lo que faltó por ver en clase el último día.
  • Aquí está el proyecto en formato "zip"
  • El tiempo ha sido muy excaso... algo que quedó pendiente fue echar un vistazo a diferentes soluciones al problema de los números Perfectos. He desbloqueado la solución para que podais verla y ejecutar el proyecto. Creo que os puede resultar interesante
  • En un par de días os pondré, en la sección de Evaluación de esta página, el enunciado de un ejercicio a realizar para la evaluación del curso

Extras

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

"Not So Frequently Asked Questions"
En ocasiones alguna pregunta nada habitual puede ser de interés general....