Plan de trabajo hasta final de curso

El plan de trabajo para los próximos días


FechaActividad
16/4/2018Clase teoría y comienzo trabajos
17/4/2018Trabajos
23/4/2018Trabajos
24/4/2018Examen
7/5/2018Trabajos
8/5/2018Entrega trabajos

A partir del día 7 se propondrán nuevas actividades, con el objetivo de poder subir nota.


Correo para las prácticas: juanluis.profesor@gmail.com

Asignación de trabajos

Intentando respetar todo lo posible vuestras elecciones, la suerte ha querido que la asignación de trabajos quede de la siguiente manera

GrupoOrdenadorAlumno 1Alumno 2Trabajo
17SARANOAGhost
28BLANCA PAULAGrapes
315ENRIQUE MARCOSGhost
416MARIOARKAITZSpeedometer
514MARCOSANDREAGhost
613JAVIERVÍCTORGrapes
712MARINARUBÉNSpeedometer
810CARLOTANEREAGrapes
95JOSE RAMÓNLAURAGhost
106YARA OMARMÓNIKA Speedometer
111DERLY DAYANALUCIAGrapes
12SERGIOSpeedometer

Una vez finalizados los trabajos, un alumno de cada grupo enviará un email a la dirección juanluis.profesor@gmail.com indicando claramente los componentes del grupo y adjuntando los ficheros a evaluar.

Java. Arrays y bucle for

Llamamos arrays a listas de variables del mismo tipo. La sintaxis para definir un array es la siguiente:

tipoDato [] nombreLista;

Los arrays, al igual que los objetos, hay que crearlos con la palabra reservada new. La sintaxis se muestra a continuación.

nombreLista new tipoDado [tamañoLista];

El primer elementos de la lista es el 0 y el último tamañoLista-1. La sintaxis para acceder a ellos es:

nombreLista[0] = dato1;
nombreLista[1] = dato1;
...
nombreLista[ tamañoLista-1] = datoN;

En realidad los arrays, son un tipo de objetos especiales de Java. De hecho tienen atributos. Concretamente, el atributo length informa del número de elementos del array.

tamañoLista == nombreLista.length;


En Java existen diferentes formas de realizar bucles. Una de las más utilizadas es el bucle for. Su sintaxis es la siguiente:

for (sentenciaUnicaInicial; condición; sentenciaFinalBucle) {
   //Aquí dentro se pone el código que se quiere repetir
}

Hay que tener en cuenta varias cosas:

  • sentenciaUnicaInicial, condición, sentenciaFinalBucle van separadas por punto y coma. 
  • sentenciaUnicaInicial: Se ejecuta siempre, una única vez al principicio de todo.
  • condición: Siempre que se cumple la condición (condición vale "true") se ejecutará el código que hay entre las llaves del bucle for. En caso contrario el bucle acaba.
  • sentenciaFinalBucle: Se ejecuta a continuación de la última línea de código ejecutada dentro de las llaves.
En la siguiente imagen se muestra una equivalencia con un bucle de Scratch. Fíjate como en la sentenciaUnicaInicial  se crea una variable auxiliar (se suele emplear como nombre de variable la letra i, de "iterator")


Los bucles for son ampliamente utilizados para recorrer arrays.

El siguiente ejemplo utiliza la clase Ball de la práctica anterior. 
Pincha en este enlace para obtener el código.

En la práctica de hoy se pide modificar el código para:
  • Que se pinten 5 bolas
  • Que las bolas se pinten de color verde si no son tocadas con el ratón y de color rojo si son tocadas por el ratón. Recomendación: Fíjate en el código de la práctica anterior y adaptalo en esta.
  • Que las bolas aumenten de tamaño (de 10 a 12) a la vez que se pintan de rojo.
En este enlace se deja el código con la solución de la práctica anterior.







Java. Clases y Objetos

Antes de empezar la lección de hoy, en este enlace puedes descargar la solución al objeto anterior. Puedes comprobar como funciona de la manera esperada.

Volviendo al tema que nos trata. Como hemos podido observar en estos días, según los programas van creciendo en complejidad, va aumentando las líneas de código. Aunque el uso de variables, constantes y funciones ayuda (programación estructurada) cada vez resulta más difícil entender lo que hace el programa solo echando un vistazo a su código. Imagínate lo que puede ser esto en un entorno profesional donde 10 o 12 programadores trabajan diariamente en el mismo proyecto.

En este contexto de creciente complejidad, surge la idea de la programación orientada a objetos. La idea que subyace es la siguiente: En lugar de crear y utilizar funciones para mover, cambiar de color, pintar,... un Mickey, ¿qué tal si tenemos un objeto Mickey que se pinta, cambia de color o mueve cuando se lo ordene?

En programación orientada a objetos, cada objeto es una entidad software independiente que tiene:
  • Atributos: Son variables del objeto que contienen el estado del mismo.
  • Métodos: Son funciones que podremos utilizar que determinan el comportamiento del objeto

En la programación orientada a objetos tendremos dos elementos relacionados:
  • Clase: Define los atributos y los métodos del objeto. El equivalente con las funciones es cuando defino y programo una función.
  • Objeto: Es una "instancia" de una clase. El símil con las funciones es cuando llamo o utilizo una función que previamente me he creado.

La sintaxis básica de una clase es la siguiente:

class NombreClase {
   //Zona para los atributos

  //Zona para los constructores

  //Zona para los métodos

Aunque está permitido poner una clase dentro del fichero principal, lo normal ponerlo en ficheros independientes con el fin de que el código sea más claro.

Veamos un ejemplo. La clase Ball. Aquí puedes obtener el código. Crea una nueva pestaña llamada Ball en un sketch de Processing y copia el código en ella.


Y su utilización en un programa (o sketch). Pincha en este enlace para obtener el código y copialo en la primera pestaña.


Modifica el código del sketch anterior para que:
  • La bola aumente de tamaño (radio = 30) cuando tenemos el ratón encima.
  • La bola 2 haga lo mismo que la bola 1.


Vídeotutorial de Processing

En la web tienes muchos tutoriales y videotutoriales muy prácticos de Processing.

Yo he recopilado (reduciendo algún vídeo que me parecía demasiado extenso) un taller sobre Processing realizado por el profesor José León que, aunque inconcluso, me parece tiene bastante calidad. Está ubicado en la pestaña Processing

Evidentemente, no se ajusta 100% al temario del curso, pero viene muy bien como aporte complementario.

Os recuerdo que Processing es totalmente gratuito. Te lo puedes descargar desde su página web.

Espero que sea de vuestro interés.

Resultados control

Más allá de los resultados de la prueba, lo interesante es conocer como va a ser parte de las preguntas del examen de la tercera evaluación y haber comprendido el porqué de las respuestas correctas.

YARA 0,000,00
JOSE RAMÓN 0,000,00
MARCOS0,000,00
MARIO 2,500,50
DERLY 4,000,80
MARINA4,000,80
LUCÍA3,500,70
CARLOTA0,000,00
ENRIQUE 0,000,00
PAULA1,000,20
BLANCA 5,001,00
SARA0,000,00
MARCOS 0,000,00
MÓNIKA5,501,10
VÍCTOR1,000,20
RUBÉN4,000,80
ANDREA 0,000,00
NEREA3,500,70
JAVIER2,500,50
ARKAITZ 0,000,00
NOA1,500,30
LAURA 6,001,20
SERGIO1,000,20



Processing. Control del teclado

En Processing la variable predefinida keyPressed, de tipo boolean, nos informa si hay una tecla pulsada. Además, la variable especial key indica la última tecla que ha sido presionada (o soltada). Dicha variable es de un tipo nuevo para nosotros, el tipo de datos char.

Pulsa aquí para obtener este código.

Processing nos permite también controlar el teclado mediante eventos (de forma asíncrona). Observa como este código realiza una función similar. Processing llama de manera automática a la función keyPressed() cuando se pulsa una tecla. Es importante que te fijes como funciona de forma ligeramente diferente.


Pulsa aquí para obtener este código.

En esta práctica moveremos el Mickey pulsado distintas teclas del teclado. El siguiente programa controla el Mickey de la siguiente forma:
  • Con las teclas de las flechas se controla la dirección
  • Con la tecla 'a' se pone en movimiento el Mickey
  • Con la tecla 's' se para el Mickey
En esta práctica tienes que modificar el código para que:
  1. Sea un programa controlado por eventos: Para ello mueve la parte del código que controla el teclado dentro de la función keyPressed() que, previamente, habrás de definir.
  2. Cuando se pulse la tecla 'c' (constante CENTRAR) el Mickey vuelva al centro de la pantalla.
  3. Cada vez que se pulsa la letra 'a' (constante ANDAR) se incremente la velocidad con la que se mueve el Mickey.