24
11 Feb. 2011 César Vaca Rodríguez, Dpto. de Informática, UVa 1 Paradigmas de Programación Primer Seminario Departamento de Informática Universidad de Valladolid Curso 2010-11 Grado en Ingeniería Informática Grado en Ingeniería Informática de Sistemas

Paradigmas de Programación Primer Seminario

Embed Size (px)

DESCRIPTION

Paradigmas de Programación Primer Seminario. Departamento de Informática Universidad de Valladolid Curso 2010-11 Grado en Ingeniería Informática Grado en Ingeniería Informática de Sistemas. Objetivos. - PowerPoint PPT Presentation

Citation preview

Page 1: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 111 Feb. 2011

Paradigmas de Programación

Primer Seminario

Departamento de Informática

Universidad de Valladolid

Curso 2010-11

Grado en Ingeniería Informática

Grado en Ingeniería Informática de Sistemas

Page 2: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 211 Feb. 2011

Objetivos Crear una “aplicación” que simula algunas características

del “mecanismo de Antikythera”: Mostrar posiciones del sol, la luna y algunos planetas en la esfera celeste para una determinada fecha.

Se realizará mediante HTML, CSS y JavaScript (es decir, vamos a crear una página web dinámica)

Resultados de aprendizaje: Conceptos de HTML, CSS y JavaScript Orientación a objeto Orientación a eventos Modelo MVC: Separación de contenido, presentación y

respuesta a eventos.

Page 3: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 311 Feb. 2011

1. Contenido El contenido está definido por el lenguaje HTML, que

describe los elementos de la página.

Estos elementos consistirán en imágenes y “controles” que permiten mostrar y pedir datos al usuario.

Aquellos elementos que se van a referenciar en el código se les asigna un identificador

Podeis descargar el esquema de página en la siguiente dirección:

http://www.infor.uva.es/~cvaca/asigs/docpar/eclipse01.zip

Y las imágenes utilizadas en:

http://www.infor.uva.es/~cvaca/asigs/docpar/imgsem1.zip

Page 4: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 411 Feb. 2011

Estructura de una página HTML

<HTML>

<HEAD>

<TITLE>

<SCRIPT>

<STYLE>

<BODY>

Bloque

<DIV>

<TABLE>

Inline

<SPAN>

<BR>

<IMG>

<FORM>

<INPUT type ="text">

<INPUT type ="button">

Page 5: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 511 Feb. 2011

Página inicial<HTML><HEAD> <TITLE>Paradigmas de Programacion - Seminario #1</TITLE></HEAD><BODY id="cuerpo"> <DIV id="controles"> <FORM> <B>Fecha:</B><BR> <INPUT type="text" size="10" id="fecha_ent" /><BR> <INPUT type="text" size="10" id="hora_ent" /><BR><BR> <SPAN id="txt_int"><B>Intervalo: Detenido</B></SPAN><BR><BR> <INPUT type="button" value=" + " />&nbsp; <INPUT type="button" value=" - " />&nbsp; <INPUT type="button" value=" <-> " /><BR><BR> </FORM> </DIV> <DIV id="img_zod"><IMG src="zodiaco.png"></DIV> <DIV id="img_som1"><IMG src="minisombra.png"></DIV>

Page 6: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 611 Feb. 2011

Página inicial <DIV id="img_lun1"><IMG src="luna.png"></DIV> <DIV id="img_sol1"><IMG src="sol.png"></DIV> <DIV id="img_ven1"><IMG src="venus.png"></DIV> <DIV id="img_mar1"><IMG src="marte.png"></DIV> <DIV id="img_jup1"><IMG src="jupiter.png"></DIV>  <DIV id="img_som2"><IMG src="sombra.png"></DIV> <DIV id="img_lun2"><IMG src="luna.png" id="fase_lunar"></DIV> <DIV id="img_sol2"><IMG src="sol.png"></DIV> <DIV id="img_ven2"><IMG src="venus.png"></DIV> <DIV id="img_mar2"><IMG src="marte.png"></DIV> <DIV id="img_jup2"><IMG src="jupiter.png"></DIV>  <DIV id="img_map"><IMG src="mapamundi.gif"></DIV> <DIV id="img_cur"><IMG src="cursor.png"></DIV></BODY></HTML>

Page 7: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 711 Feb. 2011

2. Presentación La presentación se puede ajustar haciendo uso de los

estilos CSS

Cada elemento HTML tiene asociada una serie de propiedades

Nos interesa sobre todo la posibilidad de usar el posicionamiento absoluto de elementos.

Los estilos se definen en el apartado style de la cabecera del documento, y se asocian a los elementos modificando la propiedad class.

Podeis descargar la página modificada en:

http://www.infor.uva.es/~cvaca/asigs/docpar/eclipse02.zip

Page 8: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 811 Feb. 2011

Segunda iteración<HTML><HEAD> <TITLE>Paradigmas de Programacion - Seminario #1</TITLE> <STYLE type="text/css"> .objMovible1 { position:absolute; z-index:1; } .objMovible2 { position:absolute; z-index:2; } .objMovible3 { position:absolute; z-index:3; } .objMovible4 { position:absolute; z-index:4; } .objMovible5 { position:absolute; z-index:5; } body { color: #FFFFFF; background: #0000A0; font: 13px Arial, sans-serif; } </STYLE></HEAD>

Page 9: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 911 Feb. 2011

Segunda iteración<BODY id="cuerpo"> <DIV class="objMovible5" style="top:205;left:712;" id="controles"> <FORM> <B>Fecha:</B><BR> <INPUT type="text" size="10" id="fecha_ent" /><BR> <INPUT type="text" size="10" id="hora_ent" /><BR><BR> <SPAN id="txt_int"><B>Intervalo: Detenido</B></SPAN><BR><BR> <INPUT type="button" value=" + " />&nbsp; <INPUT type="button" value=" - " />&nbsp; <INPUT type="button" value=" <-> " /><BR><BR> </FORM> </DIV>

<DIV class="objMovible4" style="top:10;left:15;" id="img_zod"> <IMG src="zodiaco.png"> </DIV> <DIV class="objMovible5" style="top:99;left:340;" id="img_som1"> <IMG src="minisombra.png"></DIV>

Page 10: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 1011 Feb. 2011

Segunda iteración <DIV class="objMovible5" style="top:335;left:576;" id="img_lun1“>.. <DIV class="objMovible5" style="top:571;left:340;" id="img_sol1“>.. <DIV class="objMovible5" style="top:335;left:104;" id="img_ven1">.. <DIV class="objMovible5" style="top:325;left:114;" id="img_mar1">.. <DIV class="objMovible5" style="top:345;left:94;" id="img_jup1">..

<DIV class="objMovible3" style="top:335;left:370;" id="img_som2">.. <DIV class="objMovible2" style="top:335;left:340;" id="img_lun2">.. <DIV class="objMovible1" style="top:335;left:280;" id="img_sol2">.. <DIV class="objMovible1" style="top:275;left:340;" id="img_ven2">.. <DIV class="objMovible1" style="top:395;left:340;" id="img_mar2">.. <DIV class="objMovible1" style="top:385;left:360;" id="img_jup2">..

<DIV class="objMovible1" style="top:10;left:712;" id="img_map">.. <DIV class="objMovible2" style="top:53;left:882;" id="img_cur">..</BODY></HTML>

Page 11: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 1111 Feb. 2011

3. Cálculos El cálculo de las posiciones del sol, luna y planetas requiere

conocimientos de mecánica celeste...

Page 12: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 1211 Feb. 2011

3. Cálculos .. que se han codificado en un módulo javascript:

http://www.infor.uva.es/~cvaca/asigs/docpar/astro.js

RA (Ascensión Recta)

DE

C (

Dec

linac

ión)

Eclípticatpo -> tipo Date, fecha actuallat, lon -> gradosr = calcAstro(tpo,lat,lon);r[0].RA -> RA del solr[0].DEC -> Dec del solr[0].late -> Latitud eclíptica del solr[1] -> Sombra tierrar[2] -> Lunar[2].fase -> Fase luna (0-1)r[3] -> Venusr[4] -> Marter[5] -> Júpiter

Page 13: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 1311 Feb. 2011

Elementos de Javascript

Tipos de datos No es necesario declarar las variables (salvo en el bloque ppal, con var)

y no tienen un tipo de datos asociado. Conversión automática entre tipos de datos. Operador de asignación (=), comparaciones (==, !=), lógicos

(!,&&,||) Los arrays pueden indexarse por cualquier valor, pueden almacenar

valores de tipos distintos y se pueden asignar fuera de rango.

var v = [1,[2,3.14],”hola”];v[1][2] 3.14

“Registros”:

var r = {nombre:”pedro”, edad:25};r.edad 25

Cadenas de caracteres: Se puede usar indistintamente comillas simples o dobles. No son arrays.

Page 14: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 1411 Feb. 2011

Elementos de Javascript Estructuras de control:

Las sentencias terminan en punto y coma. Bloques: { s1; s2; } Condicional: if(cond) { ... } else { ... } Bucles: for(inicio; cond; paso) { ... }

inicio es una sentencia (tipicamente una asignación) ejecutada una sóla vez antes de comenzar el bucle.

cond representa la condición de permanencia en el bucle. paso es una sentencia (tipicamente de incremento) ejecutada al final de

cada iteración. Operadores especiales:

Autoincremento ( x++; y--;) Autoasignación ( x += 5; y /= 2; ) Condicional

Definición de funciones:

function min(a,b) { return(a < b ? a : b); }

Page 15: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 1511 Feb. 2011

Elementos de Javascript

Orientación a objeto: Los objetos son elementos dinámicos que contienen tanto

propiedades (“campos”) como métodos (“funciones” que modifican propiedades del objeto o devuelven valores asociados al objeto)

El acceso/invocación de propiedades/métodos se realiza mediante el operador punto

Los arrays, “registros”, strings y elementos de la página HTML son objetos.

Para este seminario no es necesario crear objetos. Objeto Math

Es un objeto preexistente (clase estática) Math.PI Math.round(expr) Math.sqrt(expr)

Page 16: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 1611 Feb. 2011

Elementos de Javascript Objetos de tipo Date

Creación (fecha actual): fecha = new Date(); Acceso y modificación del dia, mes, año, hora, minutos:

min = fecha.getMinutes();fecha.setMinutes(35);

Los meses se numeran de 0 a 11. Incremento de una fecha (x es el número de milisegundos)

fecha.setTime(fecha.getTime() + x); Objetos de tipo String

Acceso a carácter: “Hola”.charAt(2) “l” Parsing: “12/8/2010”.split(“/”) [“12”,”8”,”2010”]

Objetos de tipo Array Longitud (propiedad): [1,2,3,4].lenght 4 Indices comienzan en cero.

Page 17: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 1711 Feb. 2011

Document Object Model (DOM)

<INPUT>

Page 18: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 1811 Feb. 2011

Trabajando con DOM Acceso a un elemento de la página web:

Acceso y modificación del texto de un <INPUT>:

Modificación del texto de un elemento inline (<SPAN>):

Modificación de una imagen (<IMG>);

e = document.getElementById(“identificador”);

e.value

e.innerHTML

e.src = “fichero”

Page 19: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 1911 Feb. 2011

Cambio de propiedades CSS Posicionamiento absoluto (pixels):

Ocultar y hacer visible un elemento:

Cambiar el color de fondo (aplicado a <BODY>):

Los colores se especifican en hexadecimal, en orden RGB.

e.style.left

e.style.visibility = ‘hidden’;

e.style.backgroundColor = ‘#FFA0B8’

e.style.top

e.style.visibility = ‘visible’;

Page 20: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 2011 Feb. 2011

Orientación a Eventos

Para que una página web sea dinámica, es necesario que pueda cambiar cuando el usuario interactua con sus elementos.

Javascript tiene acceso al documento (via el modelo DOM) y puede cambiar su contenido.

Es necesario poder asociar código javascript a la ocurrencia de eventos del usuario sobre elementos del documento.

También debe ser posible mantener un estado (variables globales) durante la visualización del documento.

Page 21: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 2111 Feb. 2011

Tercera iteración<HTML><HEAD> <TITLE>Paradigmas de Programacion - Seminario #1</TITLE> <SCRIPT SRC="astro.js"></SCRIPT> <SCRIPT type="text/javascript"> // --- Variables globables --- var fecha; // fecha mostrada var lat = 41.75; // latitud (grados) var lon = -4.74; // longitud (grados) ... Otras funciones, variables y constantes ... function onIniciar() { ... } function cambiarFecha(event) { ... } function cambiarHora(event) { ... } function cambiarLatLon(event) { ... } function animar(incr) { ... } function invertir() { ... } </SCRIPT> <STYLE type="text/css“> ... </STYLE></HEAD>

Page 22: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 2211 Feb. 2011

Tercera iteración<BODY id="cuerpo" onload="iniciar()"> <DIV class="objMovible5" style="top:205;left:712;" id="controles"> <FORM> <B>Fecha:</B><BR> <INPUT ... id="fecha_ent" onkeypress="cambiarFecha(event)"/><BR> <INPUT ... id="hora_ent" onkeypress="cambiarHora(event)"/><BR><BR> <SPAN id="txt_int"><B>Intervalo: Detenido</B></SPAN><BR><BR> <INPUT type="button" value=" + " onclick="animar(true)" />&nbsp; <INPUT type="button" value=" - " onclick="animar(false)" />&nbsp; <INPUT type="button" value=" <-> " onclick="invertir()" /><BR><BR> </FORM> </DIV> ... <DIV class="objMovible1" id="img_map"> <IMG src="mapamundi.gif" onmousedown="cambiarLatLon(event)“> </DIV> <DIV class="objMovible2" id="img_cur"> <IMG src="cursor.png“ onmousedown="cambiarLatLon(event)"></DIV></BODY></HTML>

Page 23: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 2311 Feb. 2011

Concurrencia

A veces es necesario que un proceso se ejecute en paralelo a otro. En nuestro caso deseamos mostrar una animación pero seguir siendo capaces de responder a eventos del usuario.

Javascript tiene un modelo de concurrencia muy sencillo, basado en temporizadores y acceso no restringido a las variables globales.

Podemos pedir que una función se ejecute continuamente a intervalos periódicos (medidos en milisegundos):

Para detener la repetición:

id = setInterval(“función”,msegs);

clearInterval(id);

Page 24: Paradigmas de Programación Primer Seminario

César Vaca Rodríguez, Dpto. de Informática, UVa 2411 Feb. 2011

Su turno!

Rellene las funciones que faltan en la página siguiente para poder ver en funcionamiento la simulación del mecanismo de Antikythera!

http://www.infor.uva.es/~cvaca/asigs/docpar/eclipse.zip