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

Trigger

disparador

Un trigger o disparador es un bloque de código almacenado en el Sistema Gestor de Base de Datos (SGBD).

De la misma forma que en una base de datos ubicada en un SGBD se guardan tablas, vistas, formularios, informes; también se pueden guardan en ella los triggers.

La intención en la creación de un trigger es conseguir que durante el funcionamiento del SGBD, automáticamente se active, se ponga en ejecución su código cuando ocurra o suceda algo determinado. Es decir, no se llama de forma explícita al trigger para que ejecute su código, sino que este se activará de forma automática a consecuencia de un determinado suceso.

Y, ¿ Qué es lo que puede ocurrir para que que automáticamente se ejecute el código asociado a un trigger?

Si conocéis el lenguaje SQL entenderéis que existen múltiples comandos cada uno de los cuales empleados para una determinada acción. De todos estos comandos existen tres que provocan una alteración en el contenido de las tablas de una base de datos: INSERT, DELETE y UPDATE. El primero de ellos da de alta un nuevo registro en una tabla de la base de datos, el segundo borra algún registro de la tabla y UPDATE modifica el contenido de los registros de una tabla.

Pués bien, en un determinado SGBD podemos crear un trigger bajo tres premisas distintas, teniendo en cuenta que su código se podrá activar antes o después de utilizarse alguna de las tres instrucciones SQL anteriormente mencionadas. Por ejemplo, podría programar un trigger de forma que se activaría automáticamente su código justo antes de ejecutarse el comando del SQL DELETE sobre una determinada tabla, de forma que antes de ser borrado un registro, este, el trigger que se ha activado a consecuencia de la ejecución de esta instrucción DELETE, lo guardará en una tabla dedicada a tener una copia de cada uno de los registros que se han eliminado de otra tabla.

No todos los SGBD admiten la creación y uso de los triggers. El Sistema Gestor de Base de Datos MySQL, objeto de estudio en este tema del curso sí lo admite. A la creación y uso de los triggers en un entorno MySQL dedicaremos nuestro tiempo en el tema que ahora iniciamos.

Jesús Albert

Profesor de Base de Datos en el diclo de DAW

Java

El lenguaje de programación objeto de estudio a lo largo del curso que hemos iniciado es el Java. Como todos los lenguajes de programación tiene sus ventajas e inconvenientes.

El empleo de un determinado lenguaje de programación a la hora de la realización de una aplicación estará supeditado a las características del programa que pretendamos desarrollar.

Java es un lenguaje de programación orientado a objetos puro.

Con el adjetivo puro pretendo recalcar el hecho que para el desarrollo de cualquier aplicación únicamente podemos hacer uso del paradigma de la programación orientada a objetos. Por lo tanto, si queremos conocer y avanzar en el conocimiento de este lenguaje deberemos entender los principales aspectos de la técnica de programación orientada a objetos. Conceptos como los de clase, objeto, método, constructor, herencia, etc deberán sernos familiares para el desarrollo de aplicaciones en Java.

El uso del lenguaje de programación Java requiere la instalación previa de una máquina virtual Java sobre la que se ejecutarán sus aplicaciones. Esta máquina virtual hará de intermediaria entre el código inicialmente creado y el sistema operativo empleado en un determinado equipo. Como consecuencia de esto, se puede entender que Java no es un lenguaje compilable que genere un código ejecutable en el equipo, será la herramienta utilizada para programar en Java (Eclipse, Netbeans, etc) que genere un pseudocódigo ejecutable sobre la máquina virtual Java y esta, a partir de este pseudocódigo ponga en funcionamiento la aplicación.

Una consecuencia de todo esto es el hecho que las aplicaciones Java son siempre multiplataforma ya que teniendo por debajo su máquina virtual Java no interactuarán directamente con el sistema operativo del equipo.

Hasta donde llegan mis conocimientos sobre este lenguaje entiendo que el lenguaje Java es muy adecuado en la creación de aplicaciones que vayan a funcionar en sistemas monopuesto o en red pero no tanto en el desarrollo de aplicaciones web en donde lenguajes de programación como PHP o Javascript nacieron específicamente para el mundo web.

Y nada más, solamente me queda por decir que independientemente del lenguaje de programación a estudiar en el curso que ahora iniciamos, pretendo enseñaros las características o fundamentos básicos de cualquier lenguaje de programación con el ánimo que aprendáis y quizás os apasionéis por:

¡ El arte de programar !

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ó.