T.A.P.

Técnicas Actuales de Programación

Curso: 2016/17

Calendario

SeptiembreOctubreNoviembreDiciembre
LMMJV
   12
56789
[1]1213141516
[2]19202122 23
[3]26272829 30
LMMJV
[4]34567
[5]1011121314
[6]1718192021
[7]242526lab2728
[8]31    
LMMJV
[8]  1234
[9]789lab1011
[10]1415161718
[11]212223lab2425
[12]282930lab  
LMMJV
[12]    12
[13]567lab89
[14]1213141516
[15]1920212223
2627282930
 N  no lectivo,  N  fiesta,  N  estudio,  N  exámenes,

Programa

Temario

Evaluación

Convocatoria ordinaria

(sí, esto pasa de 100, pero es que en programación los errores son inevitables y por tanto hay que darles un margen)

15/12/2016.- En coordinación con el grupo de euskera, se cambia la evaluación para que el proyecto sea optativo. El factor de peso en la nota final del examen de ordenador para quien decida no realizarlo será por tanto del 95% (manteniendo la suma de pesos en el 115%)

Resultado de la evaluación

Convocatoria extraordinaria

Convocatoria oficial: día 30 de junio a las 10:00 AM. AULA 0.22 (no en las 0.19S y 0.20S asignadas por la facultad)
100% ejercicio con ordenador.

Desarrollo

SEPTIEMBRE

Jueves 15 de septiembre de 2016
Viernes 16 de septiembre de 2016

Introducción

Jueves 22 de septiembre de 2016
Viernes 23 de septiembre de 2016
Jueves 29 de septiembre de 2016
Viernes 30 de septiembre de 2016

OCTUBRE

Jueves 6 de octubre de 2016
Jueves 13 de octubre de 2016
Viernes 14 de octubre de 2016
  • Continuamos con Elementos básicos del lenguaje [pdf]
  • 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
  • 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:
    1 = 1
    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
  • Y pasamos ya a Orientación a objetos [pdf] 7
Jueves 20 de octubre de 2016
Viernes 21 de octubre de 2016
  • Vemos el patrón MVC y planteamos cuestiones relacionadas con el ejercicio del laboratorio del próximo miércoles;
  • Siguiendo con la reordenación planteada ayer, pasamos a ver el patrón "Delegation Event Model" ("Observer") y su aplicación en Comunicación entre componentes de AWT y Swing [pdf]
Miércoles 26 de octubre de 2016 [LABO 0.22, 15:00-17:30]
Jueves 27 de octubre de 2016
Viernes 28 de octubre de 2016

NOVIEMBRE

Jueves 3 de octubre de 2016
Viernes 4 de noviembre de 2016
Miércoles 9 de noviembre de 2016 [LABO 0.22, 15:00-17:30]
Jueves 10 de noviembre de 2016

Sobre el laboratorio de ayer:

  • Hablaremos de espacios de nombres para el nombrado de paquetes
  • Y de clases de test
Viernes 11 de noviembre de 2016

Sobre el laboratorio de anteayer:

  • Estudiamos a fondo el constructor fallido
  • Vemos porqué el método toString() planteado es "muy malo" (aunque funcione) //-> clases inmutables
  • Plantearemos una solución al interfaz e implementaremos los métodos
  • ¿Tiene sentido el interfaz?... breve iniciación a genéricos (ver más adelante 7.4)

Continuamos con la biblioteca de clases:

  • (7.2) Lang //-> hashing StringBuffer y StringBuilder
Jueves 17 de noviembre de 2016

EXAMEN DE TEST [pdf]

Las barras de "error" representan el intervalo completo de calificaciones
Se ha anulado la pregunta 7 (constructor por defecto)
Las barras rojas y azules representan las calificaciones antes y despues de la eliminación de la pregunta 7.

Pendiente acceso a calificaciones personales y revisión

Viernes 18 de noviembre de 2016
  • Comentamos el examen de ayer
  • Continuamos con la biblioteca de clases:
    siguiendo con (7.2) Lang
    y con (7.3) Util comienzo de colecciones
Miércoles 23 de noviembre de 2016 [LABO 0.22, 15:00-17:30]
Jueves 24 de noviembre de 2016
  • Continuamos con la biblioteca de clases:
    Pasamos a (7.3) Util
Viernes 25 de noviembre de 2016
Miércoles 30 de noviembre de 2016 [LABO 0.22, 15:00-17:30]

Diciembre

Jueves 1 de diciembre de 2016
  • Desarrollamos la práctica de laboratorio de ayer. resolver la primera parte.
Viernes 2 de diciembre de 2016
  • Continuamos con la práctica de laboratorio. (Así queda al final el ejercicio: proyecto netbeans [zip])
    9/12/2016.- Dije que pondría la solución usando un comparador que "se resistió" en clase. Hablando con Mikel Peñagarikano de distintas alternativas para resolver el problema, tuvo la iniciativa de desarrollar unas cuantas, que van desde la correspondiente al enunciado de la práctica hasta otras bastante más elaboradas. Sus soluciones se encuentran en un package añadido a la solución anterior en este proyecto netbeans [zip]
  • Vemos la solución al ejercicio de los números perfectos. (subir). Sólo ejecutamos.
Miércoles 7 de diciembre de 2016 [LABO 0.22, 15:00-17:30]
Viernes 9 de diciembre de 2016
  • en relación con la práctica de ayer comentamos los patrones "Factory", "Proxy" y "Singleton"
  • Revisamos la solución al ejercicio de los números perfectos. (subir)
  • Volvemos uno de los puntos que dejamos atrás el viernes 25N:
    (7.4) Genéricos: no jerarquía y notación <?>,<? extends E> y <? super E> . Para profundizar más este tutorial [pdf]
  • Pasamos a Hilos [pdf] 6
Jueves 15 de diciembre de 2016
  • Vemos una solución al ejercicio de laboratorio "Tipografías": proyecto netbeans [zip])
  • Continuamos con Hilos [pdf] (vemos "sychronized")
Viernes 16 de diciembre de 2016
  • Continuamos con Hilos [pdf] (repitiendo "sychronized" y viendo ejemplo)
  • Sockets y cliente/servidor ?
  • Volvemos al segundo de los puntos que dejamos atrás el viernes 25N:
    (7.5) uso de bibliotecas externas
Jueves 22 de diciembre de 2016
Viernes 23 de diciembre de 2016
  • ANULADA

Extras

Java Magazine

2011: premiere, nov.-dic.
2012: ene.-feb., mar.-abr., may.-jun., jul.-ago., sep.-oct., nov.-dic.
2013: ene.-feb., mar.-abr., may.-jun., jul.-ago., sep.-oct., nov.-dic.
2014: ene.-feb., mar.-abr., may.-jun., jul.-ago., sep.-oct., nov.-dic.
2015: ene.-feb., mar.-abr., may.-jun., jul.-ago., sep.-oct., nov.-dic.
2016: ene.-feb., mar.-abr., may.-jun., jul.-aug., sep.-oct., nov.-dic.
2017: ene.-feb., mar.-abr., may.-jun.,
Cusiosidades sobre lenguajes e ingeniería del software
No son pocos los alumnos con inquietudes relacionadas con el desarrollo de video juegos

Not So Frequently Asked Questions

En ocasiones no tengo respuesta inmediata a alguna pregunta por no ser frecuente o sencilla. En estos casos, si puede ser de interés general, queda reflejada aquí.

He diseñado mi propio tipo de letra. ¿Cómo puedo incluirlo en mi aplicación?

El mundo del diseño de "Fonts" (cosa de las Bellas Artes) y su uso en computadoras no es trivial. Todo lo necesario para el uso con Java se encuentra en el correspondiente tutorial de Oracle. Como respuesta concreta a cómo contar con un tipo de letra propio, se puede entresacar del mismo este sencillo código:

try { GraphicsEnvironment. getLocalGraphicsEnvironment(). registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("A.ttf")); } catch (IOException|FontFormatException e) { /*Handle exception*/ }

donde se añade al entorno gráfico una nueva "font" que, en concreto, es de tipo "trueType" y se lee de un fichero (puede ser de otro tipo y en general leerse de cualquier "Stream" -véase documentación de Font.createFont-)

Quiero hacer un GUI de calculadora que pueda cambiar entre estándar y científica. ¿Cómo lo hago?

La manera más razonable puede ser agrupar en un par de paneles los botones que deben aparecer y desaparecer en cada caso para proceder a quitar y poner dichos paneles cuando se seleccione un modo u otro.

La siguiente imagen muestra una estructura sencilla de ejemplo: el "frame" lleva un "menuBar" donde se encuentran las dos opciones de paso de un modo a otro. Además hay un panel ("contenedorComun") para los botones que no varian entre ambos modos (componentes no visibles en la imagen) y un contenedor para intercambiar botoneras ("contenedorParaIntercambios"). Inicialmente este contenedor lleva dentro el panel de la calculadora estandar, pero se podrá intercambiar con el contenedor de la botonera cientifica que está "aparcado" en la sección "Other Components".

El modo de hacer el intercambio es extremadamente sencillo: basta con asociar a cada opción de menú su acción correspondiente como se ve en la siguiente imagen. No es otra cosa que sacar todo lo que haya en el panel (la botonera actual) y meter la botonera seleccionada. Una vez hecho esto terminamos con un "pack()" que le dice al "layoutManager" que haga su labor (que "empaquete" convenientemente el contenido)

(nota.- en sentido estricto el panel "contenedorParaIntercambios" es innecesario, pero se ha puesto por clarificar el ejemplo.)