BBDD&POO

Bases de Datos y
Programación Orientada a Objetos.

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

Calendario

Octubre
LMMJV
[4]23456
[5]9
17:00-19:00
(0.11)
10
17:00-19:00
(0.11)
111213
[6]16
12:00-14:00
(0.26)
17181920
[7]2324252627
[8]3031   
Noviembre
LMMJV
[8]  123
[9]678910
[10]13141516
15:00-17:00
(0.11)
17
[11]20
12:00-14:00
(0.26)
2122
17:00-19:00
(0.11)
23
15:00-17:00
(0.11)
24
[12]27282930 
Diciembre
LMMJV
[12]    1
[13]45678
[14]11
17:00-19:00
(0.11)
12
15:00-17:00
(0.11)
13
15:00-17:00
(0.11)
14
17:00-19:00
(0.11)
15
12:00-14:00
(0.1)
[15]1819
17:00-19:00
(0.11)
20
12:00-14:00
(0.1)
20
15:00-17:00
(0.11)
2122
 2526272829
 N  no lectivo,  N  fiesta,  N  estudio,  N  exámenes, NN BBDD, NN POO, nuestra clase.

Programa

Temario

Evaluación

Nota: antes de entregar el proyecto hay que, por lo menos, "adecentar" el código. Lo correcto sería incluso escribir la documentación, pero por lo menos hay que dejar lo hecho "listo para revista": eliminar ficheros abandonados, lineas de código de prueba, etc...
Ejercicio propuesto
(zip con enunciado, datos y ayuda)
Nota sobre detalle de formato del fichero de datos (en sección NSFAQ)
Para cualquier consulta respecto a esto o todo lo demás: e-mail
Ejercicio extra

La propuesta de ejercicio extra consiste simplemente en montar la base de datos para bibliografía con MySQL y procesar los datos y cargarlos directamente en ella desde Java (en vez de generar ficheros como se ha propuesto en el ejercicio original). No es obligatorio realizarlo, pero podrá ayudar a la nota final (que en todo caso se combinará con la parte de bases de datos).

        Mensaje enviado por e-mail el 18/01/2018
        Hola a todos,

La fecha de entrega para el ejercicio está determinada por la de entrega de actas en la universidad que primero
las solicita.

Para que me de tiempo a evaluar me  pondré a ello sin falta el lunes 29 a las 7:30am, por lo que os pido que para
ese momento hayáis hecho todos el envío.

------------------------------------------------

Por otro lado, tengo que pediros disculpas por un error en el enunciado que ha detectado uno de vosotros.
Los que habéis entregado no os preocupéis del tema porque (y esto es para todos) me vale la solución tanto teniendo
en cuenta lo que os comento ahora como sin tenerlo en cuenta.

El asunto es que en la lista de tablas a generar falta una: Publicaciones.txt.
Publicaciones.txt: dos columnas separadas por “,”. La primera un número de orden dado por el programa
y la segunda una publicación sacada del campo 5 de DB1.txt.

De este modo en la tabla info-articulo se entiende que la publicación va codificada.

Info-articulo.txt: 5 columnas separadas por “,”. La primera un número de orden, la segunda el
título, la tercera el año, la cuarta el código de la publicación y la quinta columna la dirección web, que en caso
de no estar disponible se consignará “null”


Esto es consistente con lo que os cuento en el pdf de ayuda, donde indico que, del mismo modo que con autores y
filiaciones, podemos hacer un conjunto de publicaciones.
De ese conjunto generamos la tabla (por lo demás resulta innecesario).


Disculpad el fallo, y en todo caso insisto en que podéis tener esto en cuenta o no. En cuanto a la dificultad del
ejercicio, prácticamente no varía.
Un saludo.
            
Ejercicio propuesto 2º convocatoria
(zip con enunciado y datos)
Nota sobre detalle de formato del fichero de datos (en sección NSFAQ)
Para cualquier consulta respecto a esto o todo lo demás: e-mail
Ejercicio extra

La propuesta de ejercicio extra consiste simplemente en montar la base de datos para bibliografía con MySQL y procesar los datos y cargarlos directamente en ella desde Java (en vez de generar ficheros como se ha propuesto en el ejercicio original). No es obligatorio realizarlo, pero podrá ayudar a la nota final (que en todo caso se combinará con la parte de bases de datos).

Desarrollo

OCTUBRE

Lunes 9 de octubre de 2017
Lunes 16 de octubre de 2017
  • Elementos básicos del lenguaje (sin orientación a objetos). 16
  • 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:
    public class Pi {
    
        //Esto de la precisión es algo aproximado por no ser trivial.
        private static final double PRECISION=1E-5;
    
        public static void main(String args[]){
            double pi=pi();
            System.out.println(pi+ "\t"+Math.PI+"\tdiferencia: "+(Math.PI-pi));
        }
    
        static double pi(){
            double piCuartos=0.0, denominador=-1, incr=1.0;
            while (Math.abs(incr)>PRECISION/4)
                piCuartos += 1 / (denominador+=2) - (incr = 1/ (denominador+=2));
            return 4*piCuartos;
        }
    
    }
                                            
    Algunos consejos usando este ejercicio... (video)
  • 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) {
            boolean esPerfecto=false;
            //TODO hacer lo necesario para que "isPerfect" refleje si n es perfecto o no.
            return esPerfecto;
        }

    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]

Cómo enviar un proyecto netbeans por email (video)

NOVIEMBRE

Lunes 20 de noviembre de 2017
Jueves 23 de noviembre de 2017
  • Aclaración sobre métodos en interfaces (correción a lo dicho el día anterior)
  • Comentario sobre los ejercicios planteados...

DICIEMBRE

Martes 12 de diciembre de 2017
  • Material de biblioteca imprescindible (muy rápido)
Jueves 14 de diciembre de 2017
  • Respuesta a pregunta: argumentos variables...

Todo lo anterior, muy resumido, aquí.

Miercoles 20 de diciembre de 2017
Ejercicio práctico
Haremos un procesamiento de datos ejercitando los conocimientos generales adquiridos -en particular los de lectura de ficheros-, y probaremos también el acceso a una base de datos
  • Los ficheros de texto a procesar son los del alineamiento fonético de voz y actas de las 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.
  • Es necesario el driver JDBC para MySQL
  • La base de datos se ha construido con:
    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 solución como proyecto Netbeans, y su javadoc.

Extras

"Not So Frequently Asked Questions"

En ocasiones alguna pregunta nada habitual puede ser de interés general....

(NOTA sobre formato del fichero de datos del ejercicio final) Al abrir los ficheros de datos del ejercicio final no veo más que una sola linea inmensamente larga.

Es una "ilusión óptica" :-) ...abre el fichero con otro editor (estarás usando Notepad probablemente)

No tendrás problemas al procesar el fichero con Java.

Me explico...

Para separar una linea de otra, en los ficheros de texto, tiene haber "algo" que lo indique. Resulta que hay dos maneras diferentes de hacerlo dependiendo de qué máquina uses. En el "mundo Windows" se usan dos caracteres no imprimibles seguidos: "CR" (carriage return) que indica desplazarse al principio de la linea actual, y "LF" (Line Feed) que indica darla por consumida y bajar a la linea siguiente. En el mundo UNIX se decidió que sólo se usaría "LF" con el significado conjunto de pasar a la linea siguiente llevando el punto de escritura al punto inicial.

Con esto, al abrir un documento de texto con un editor, este debe ser lo suficientemente "listo" como para contemplar ambas posibilidades. En realidad casi siempre bastaría con ignorar los "CR" e interpretar los "LF" al modo UNIX, porque no es normal que queramos interpretarlos como sólo bajar a la linea de abajo sin ir al principio.

El problema viene con los editores de texto que no hacen esto. Notepad ignora los "LF" e interpreta los "CR" como los "LF" de UNIX. Una inconsistencia incluso con el estándar de Microsoft que provoca lo que ves: como no hay "CR"s en el fichero, no ve pasos de linea.

Cuando leas lineas con Java [x.readLine()] la cosa va a ir bien, porque el método es lo suficientemente listo como para funcionar siempre bien.