Applet

Una Applet es un programa realizado en lenguaje Java y guardado en un servidor de hosting (servidor de páginas web). Cuando el cliente de una web, haciendo uso del navegador web existente en su ordenador, solicita el acceso a una página web, que se encuentra hospedada en un servidor de hosting, si esta web contiene una Applet instalada, el archivo asociado a la misma será descargado al equipo cliente para, desde su navegador ejecutar el código Java asociado a esta Applet.

Resumiendo, las Applet ofrecen la posibilidad de ejecutar, en los navegadores clientes, aplicaciones escritas en Java que se encuentran guardas en un servidor web.

Solicitud de página web desde el navegador de un equipo cliente y respuesta del servidor enviándoles la página web más el Applet Java contenido en ella.

Lenguajes de servidor y de cliente

Ya habéis finalizado el proceso de diseño de una página web, en aras de aportar mayores funcionalidades en este documento web, os planteáis insertar en él algún código de programación que consiga que la web pueda realizar unas determinadas acciones.

Existen una amplia variedad de lenguajes de programación, no obstante, en el mundo de la programación web, una posible clasificación podría consistir en diferenciar los lenguajes dependiendo de en dónde se ejecutará su código. Así que, teniendo en cuenta esto, es decir, el lugar desde dónde se ponen en funcionamiento, nos encontramos con dos posibles ubicaciones: el servidor en el que se guardan los archivos y códigos de la página web o bien, en cada uno de los ordenadores clientes que en diferentes momentos accederán a un contenido web.

En el primer caso, estaremos hablando de lenguajes de servidor. Algunos ejemplos de los mismos son: Php, Perl, ASP, Node-js.

En el segundo, algunos ejemplos de lenguajes cuyo código se ejecuta en cada uno de los ordenadores clientes que acceden al sitio web podrían ser: Javascript, VBscript, etc.

Solamente os queda valorar las ventajas o inconvenientes del uso de uno u otro tipo de lenguajes. Todo esto lo veremos de una forma pormenorizada en el tema que acabamos de iniciar.

Saludos.

Jesús Albert

Profesor del Ciclo Formativo de Desarrollo de Aplicaciones Web

Programación dinámica

Si ya conocéis el funcionamiento y utilidad de los arrays o arreglos en programación, quizás os hayáis percatado del principal inconveniente que ocurre a la hora de guardar datos en ellos durante su ejecución y, si así no fuese, ahora mismo os lo comento yo:

Supongamos que estamos implementando un programa que guarda edades de personas en un array de números enteros con capacidad fija y máxima para guardar 100 edades. En estas circunstancias podría ocurrir que durante la ejecución del programa el número de edades que finalmente tuvieran que ser guardadas fuera superior a la capacidad máxima del array que, en nuestro ejemplo es de 100, en este caso, resulta evidente que no será posible almacenar cualquier edad que supere el límite máximo de almacenamiento de números enteros definido en tiempo de programación cuando se especificó el array de las edades necesitado.

Dado el problema presentado, podríamos plantearnos el aumentar la capacidad del array para así, solventar la insuficiencia de espacio que a priori ofrecía. El inconveniente de esta decisión estriba en el uso poco óptimo de la memoria. Quizás en muchos casos no se ocupe, ni por aproximación, todos los espacios del array para guardar cada una de las edades, desperdiciando mucha memoria RAM finalmente no utilizada, por otra parte, en otras ejecuciones del programa, nuevamente nos quedemos cortos y no se puedan guardar todas las edades necesarias, pudiéndose producir un error de ejecución por este motivo.

Como solución al problema que presentan los arrays estáticos de datos aparece la programación dinámica, en ella, las estructuras de datos implementadas, a diferencia de las estructuras estáticas como los arrays, aumentan o disminuyen la cantidad de espacio reservado durante la ejecución de la aplicación, ofreciendo la posibilidad de reservar o liberar memoria mientras se ejecuta la aplicación y así, en todo momento, gestionar un uso óptimo de la memoria adapatado en todo momento a las necesidades de memoria del programa durante su funcionamiento. De esta forma, siguiendo el ejemplo de las edades, conforme se guarde una nueva edad se reservará o aumentará la memoria estrictamente necesaria para guardar la nueva edad, pero si se debe borrar una edad previamente introducida, se liberará la memoria que ocupaba.

En el lenguaje Java, la clase que permite la implementación de estucturas dinámicas de datos objeto de estudio en el tema del curso que vamos a iniciar, recibe el nombre de ArrayList.

Tratamiento de excepciones en un programa

Antes de mencionar el concepto de excepción, muy propio del lenguaje de programación Java, os hago referencia a los errores de ejecución tan frecuentes en las aplicaciones, os pongo un ejemplo:

Imaginaros un programa que solicita una serie de datos de un producto que finalmente habrá que guardar en un registro de una tabla de una base de datos, supongamos que la solicitud e inserción de los mismos por parte del usuario se realizó de forma correcta. Inicialmente estos datos fueron guardados en variables de memoria para su posterior almacenamiento en un registro de una tabla productos de la base de datos. A continuación, la aplicación intenta conectarse a la base de datos ubicada en un servidor pero este ha caído. Como consecuencia de esto, el alta del nuevo registro en la tabla de la base de datos no pudo realizarse y consiguientemente el programa finaliza inexperádamente abortando, emitiendo seguramente algún mensaje en ingles relacionado con el error de ejecución que se acaba de producir y ante el desconcierto evidente del usuario de la aplicación.

Para solventar o corregir los efectos no deseados en un programa por los errores de ejecución como los anteriormente mencionados, lenguajes de programación como Java aportan código para el tratamiento de errores, o dicho con otras palabras, código para el tratamiento de excepciones, de forma que, una vez se ha producido un error de ejecución, en lugar de abortar, el programa informará al usuario sobre el tipo de problema o error habido de una forma más entendible y, a continuación, proseguirá con su ejecución por otros senderos.

Programación paralela

La programación paralela consiste en subdividir un programa en bloques bien diferenciados, también conocidos como hilos en algunos lenguajes como Java. Una vez creado los hilos, cada uno de ellos será ejecutado de forma paralela en un procesador diferente teniendo en cuenta que podrá existir un canal de comunicación bidireccional entre el programa principal y sus diferentes hilos.

Los hilos de una aplicación se podrán ejecutar a la vez de forma paralela de formas posibles:

  1. En cada uno de los procesadores existentes en un equipo informático poseedor de más de un núcleo o procesador haciendo todos ellos uso de los mismos recursos informáticos (memórias, discos, etc) existentes en el equipo.
  2. En diferentes procesadores existentes en cada uno de los equipos, conectados todos ellos entre sí mediante un software cluster.

Recursividad directa versus recursividad indirecta

Un programa o función recursiva es aquella que se define en términos de si misma, es decir, la misma función recursiva es llamada desde ella misma de forma repetida un determinado número de veces hasta la resolución del problema planteado.

Existen dos formas de plantear un algoritmo recursivo: mediante la recursividad directa o la indirecta. En el primer caso, desde la función se llama a la misma función de forma reiterativa un determinado número de veces hasta que se obtiene la solución. En el segundo caso, recursividad indirecta, en lugar de la función llamarse a sí misma, esta llama a otra función, la cual, nuevamente llamará a la función inicial.

Variable global versus variable local

En programación modular, en la que existe una aplicación que contiene subprogramas, existen dos tipos de variables: variables locales y variables globales. Una variable local está declarada en un determinado subprograma y su ámbito de ejecución es exclusivamente el subprograma en el que se encuentra definida, es decir, desde el programa principal o desde cualquier otro subprograma no será posible el acceso a dicha variable local. Por otra parte, una variable global podrá ser utilizada desde cualquier lugar de la aplicación: programa principal, subprogramas…

Subprogramas: parámetros por valor y por referencia

En programación se utilizan subprogramas, los cuales adquieren diferentes denominaciones según el lenguaje: funciones, procedimientos, métodos…

Desde una linea de código del programa se puede llamar a un determinado subprograma, en esta llamada se envían al subprograma los parámetros o valores necesarios para que este pueda realizar sus operaciones. Estos parámetros o argumentos que son utilizados por el subprograma pueden ser de dos tipos: parámetros por valor y por referencia. En el caso de hacer uso de un parámetro por valor, si el subprograma lo modifica, una vez finalice la ejecución del mismo, si el programa principal quisiera acceder a dicho parámetro por valor, su contenido no se verá afectado por la modificación realizada en el subprograma. Por otra parte si el parámetro que se hizo llegar al subprograma hubiese sido por referencia, la modificación del mismo realizada durante su ejecución sí tendría vigencia posterior en el programa principal que lo llamó.

Funciones

Una función o método en Java, es un subprograma que, es llamado desde el programa principal o desde otro subprograma y, antes de finalizar su ejecución, devuelve un resultado en la linea de código desde la que se llamó.

En el siguiente esquema se representa un programa principal que actúa como calculadora llamando a las funciones suma, resta y producto, pasándole los valores de cálculo x, y. Cada una de estas funciones devolverá (return) el correspondiente resultado: TOTAL-SUMA, TOTAL-RESTA, TOTAL-PRODUCTO:

Tipos de datos, variables y la Entrada/Salida en Java

Iniciamos el tema 2 de la asignatura programación, del primer curso del Ciclo Formativo de Desarrollo de Aplicaciones Web, con los iniciales conceptos relativos al desarrollo de programas mediante el empleo de un determinado lenguaje de programación, en el caso de esta asignatura nos limitaremos al lenguaje Java aunque, por extensión, lo comentado a continuación podría ser aplicable a cualquier otro lenguaje de programación.

Un programa informático es un conjunto de lineas de código en las que el programador va indicando los pasos que debe realizar la aplicación en aras de lograr un determinado objeto.

Muy probablemente el programa deberá guardar datos para posteriormente utilizarlos con una finalidad u otra. Estos datos son almacenados en lo que comúnmente se conoce en programación como variable. Una variable es una sección de la memoria RAM de nuestro ordenador identificada por una dirección, dentro de la cual se podrá guardar, durante el tiempo que funcione el programa, un determinado valor que podrá ir variando (de hay procede el nombre de variable) en el transcurso de la ejecución del programa. Si por contra, el dato a guardar en una dirección de la memoria RAM no puede variar o alterarse mientras dure la ejecución de la aplicación, en lugar de variable tendremos que referirnos al concepto de constante.

Dependiendo del tipo de dato (número entero, número real, carácter, texto, etc) a guardar, en una sección de la memoria RAM (variable) se reservará más o menos espacio en la misma con el objetivo de dar cabida a ese dato. Es por este motivo que en este tema que iniciamos haremos referencia a los diferentes tipos de datos que podemos hacer uso en Java a la hora de declarar variables en el programa.

Otro punto a tratar en el tema 2 de la asignatura de programación es la Entrada/Salida de la información en un programa.

En la mayoría de las situaciones, en todo programa informático debe de haber una comunicación bidireccional entre este y el usuario del mismo. Es por ello que todos los lenguajes de programación ofrecen instrucciones para, por una parte, mostrar al usuario algún tipo de mensajes o información que le pueda interesar (flujo de salida) y, por otra, posibilitar que el usuario pueda aportar información o datos al programa (flujo de entrada). Sin estos dos tipos de instrucciones no sería posible la comunicación entre programa y usuario y por lo tanto no se podrían crear aplicaciones como las que actualmente utilizamos.

A lo largo de este tema trataremos estos dos bloques de información:

1. Tipos de datos, variables y constantes.

2. La entrada y salida de la información.

Y nada más. A partir de ahora empezáis a iniciaros en el mundo de la programación. Con ilusión y esfuerzo os iréis adentrando en un conocimiento que deseo y espero os cautive.

Saludos a todos.

Jesús Albert Magro

Profesor de programación en el Ciclo Formativo de Grado Superior de DAW