Está en la página 1de 105

[AFO018349] IFCT103PO SERVIDORES WEB

[MOD016540] IFCT103PO SERVIDORES WEB


[UDI096308] SERVIDOR APACHE-TOMCAT.

Introducción

A lo largo de este tema iremos adquiriendo los conceptos necesario para conocer fondo el servidor

Apache Tomcat usado como un contenedor de servlets de JSP de Oracle Corporation.

t
ne
e.
in
nl
ao
ul
ia
m
c.
ci

cic.miaulaonline.net
1 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Objetivos

Ser capaces de instalar y configurar un sevidor Apache Tomcat.

Conocer de qué manera se puede mantener un sevidor Apache Tomcat.

t
ne
e.
in
nl
ao
ul
ia
m
c.
ci

cic.miaulaonline.net
2 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Mapa Conceptual

[[[Elemento Multimedia]]]

t
ne
e.
in
nl
ao
ul
ia
m
c.
ci

cic.miaulaonline.net
3 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Instalación y Configuración

Para instalar Tomcat utilizaremos el instalador de Windows para realizar fácilmente la instalación.

Su interfaz y funcionalidad es similar a otros instaladores basados asistente, con sólo unos pocos

elementos de interés.

t
ne
Para comenzar la instalación debemos de bajarnos primero Java JRE para Windows 32/64 bit:

https://www.java.com/es/download/ie_manual.jsp

e.
in
nl
ao
ul
ia
m
c.
ci

A continuacion debemos descargar el paquete de instalación de tomcat apache para Windows 32-

bit/64-bit Windows Service Installer (pgp, md5, sha1):

cic.miaulaonline.net
4 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

http://tomcat.apache.org/download-80.cgi

Una vez descargado lo ejecutamos:

t
ne
e.
in
nl
ao
ul

Pulsamos en siguietne y aceptamos los términos y licencias:


ia
m
c.
ci

cic.miaulaonline.net
5 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

t
ne
e.
in
nl
Seleccionamos los componentes:
ao
ul
ia
m
c.
ci

En la configuración la dejamos la que viene por defecto la cual es la adecuada:

cic.miaulaonline.net
6 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

t
ne
e.
in
nl
Aquí le indicamos donde se ecuentra el fichero JRE para la virualización:
ao
ul
ia
m
c.
ci

Y por último pulsamos en instalar:

cic.miaulaonline.net
7 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

t
ne
e.
in
nl
Una vez finalizada la instalación nos aparecerá el siguiente mensaje:
ao
ul
ia
m
c.
ci

Si pulsamos en finalizar se ejecutará apache Tomcat. Si todo ha ido bien podremos acceder a la

cic.miaulaonline.net
8 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

dirección http://localhost:8080/ “8080 es el puerto que le hemos indicado en la instalación”

y como vemos, nos indica que se ha instalado correctamente

t
ne
e.
in
nl
ao
ul
ia
m
c.
ci

cic.miaulaonline.net
9 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Despliegue de una aplicación web con Java

Un JDK|SDK ofrece las herramientas para compilar y ejecutar programas en Java. Podemos

compilar las clases sin necesidad de tener un entorno gráfico sobre el que desarrollar, pero dicha

tarea sería muy costosa dependiendo del tipo de proyecto, ya que existen multitud de

configuraciones posibles dependiendo del tipo de aplicación empresarial que estemos desarrollando.

Un IDE o entorno de trabajo de Java, ofrece un ambiente de trabajo para proyectos complejos,

t
es decir, si compilamos una o dos clases en un paquete o individualmente, es posible que el

ne
comando javac ofrecido en los JDK/SDK sea suficiente, pero si nuestros proyecto está

compuesto por 100 o 200 clases, javac sería muy lento y costoso.

e.
Los IDE's (Integrated Development Environment) ofrecen un entorno gráfico en el que se tiene

in
acceso a mayor número de herramientas no ofrecidas en los SDK's.
nl
Ofrece complidarores más elaborados, check-points dentro de la compilación, creación de WAR's

(Web-Archives), "Wizards" para acelerar desarrollo, entre otras cosas.


ao

Los entornos de desarrollo más utilizados hoy en día son:


ul

NetBeans (http://www.netbeans.org) Open-Source.


ia

Eclipse (http://www.eclipse.org) Open-Source


m

Sun Java Studio (http://developers.sun.com/jsenterprise/index.jsp) de Sun

JBuilder (http://www.codegear.com/products/jbuilder) de Borland


c.

WebSphere Studio (http://www306.ibm.com/software/awdtools/developer/application/) de IBM

JDeveloper (http://www.oracle.com/technology/products/jdev/index.html) de Oracle


ci

Vamos a comenzar con una introducción de Java, para después continuar con el procedimiento del

desarrollo con este lenguaje.

Introducción

cic.miaulaonline.net
10 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Sun Microsystems es la empresa que ha inventado el lenguaje Java, en un intento de resolver

simultáneamente todos los problemas que se planteaban a los desarrolladores de software por la

proliferación de arquitecturas incompatibles en los siguientes aspectos:

Diferentes máquinas desde el punto de vista del hardware.

Diferentes sistemas operativos.

Diferentes sistemas de ventanas que funcionan sobre una misma máquina.

t
ne
Estos problemas se han agravado aún más con la expansión de Internet en la cual debe comunicarse

plataformas heterogéneas, y donde las aplicaciones distribuidas son el corazón del sistema.

e.
El éxito de Java reside en su arquitectura y las características que esta arquitectura le confiere.

[[[Elemento Multimedia]]]
in
nl
Transcripción de audio:
ao

Ampliando la potencia de Java mediante la tecnología JavaFx

JavaFx es una familia de productos y tecnologías de Same Microsystem adquirida por


ul

Oracle Corporation para la creación de Rich Internet Application, es decir, aplicaciones de


internet enriquecidas, que no son más que una aplicación web que tienen la mayoría de
ia

las características de las aplicaciones de escritorio tradicionales, incluyendo aplicaciones


m

multimedia interactivas. Estas aplicaciones utilizan un navegador web estandarizado para


ejecutarse, y por medio de complementos o mediante una máquina virtual, se agregan las
c.

características adicionales. Las richs se apoyan en un desarrollo cliente-servidor en vez de


ci

un desarrollo web tradicional en donde el estado se mantiene en el servidor en sesiones,


así la parte cliente maneja la interacción entre el usuario y la interfaz, mientras que el
servidor se encarga de procesar las peticiones de la aplicación cliente y de devolver los
datos en el formato solicitado, por tanto, cuando hablamos de JavaFx hacemos referencia
a una tecnología software que, combinada con Java, permite crear aplicaciones con un
aspecto vanguardista y contenidos avanzados con audio y vídeo, ya que permite a los
desarrolladores integrar gráficos vectoriales, animación, sonido y activos web de vídeo en
una aplicación interactiva, completa y atractiva. Una de las características principales que

cic.miaulaonline.net
11 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

se otorga al uso de esta tecnología, es que amplía la tecnología Java, permitiendo el uso
de cualquier biblioteca de Java en una aplicación JavaFx, además de permitir el
mantenimiento de un eficaz flujo de trabajo entre diseñador y desarrollador. Su
lanzamiento fue en dicimiento de 2008 y a partir de Java Se7, Oracle JavaFx forma parte
de la implantación de Java Se de Oracle, de manera, que para poder ejecurtar las
aplicaciones realizadas con JavaFx es necesario tener JRE, es decir, Java Runtime
environment o máquina virtual de Java y JavaFx Runtime instalado, ya que JavaFx es
compilado a código Java.

t
ne
La creación de aplicaciones JavaFx se hace a través del lenguaje encriptado JavaFX Script,
desarrollado por Same Microsystem, al que originalmente se le llamó F3, Fond Follow

e.
Function y se convirtió en código abierto en la conferencia de desarrolladores Java One en

in
mayo de 2007. Entre las características de JavaFx Script podemos destacar que se trata
de un lenguaje scripting compilado, detipado, estático y declarativo que proveé
nl
ocultamiento de datos automáticos y que soporta modo de gráficos vectorizados, vídeos y
componentes swing a través de los apis de JavaFx.
ao

En las propias palabras del padre de lenguaje Java, James Gosling, la mayoría de
ul

lenguajes de script están orientados a la página web, este está orientado a las interfases
que son altamente animadas.
ia

En conclusión, podemos decir que JavaFx al estar orientado con Java Runtime
m

Environment JRE se puede ejecutar en cualquier navegador con soporte JRE como
c.

también en móviles que dispongan de Java ME, que es la tecnología creada para paliar las
limitaciones asociadas a la creación de aplicaciones para pequeños dispositivos con
ci

memoria, visualización y potencia limitada.

1. Cuando hablamos de JavaFX hacemos referencia a la creación de aplicaciones de


Internet enriquecidas

2. Cuando hablamos de JavaFX hacemos referencia a una tecnología software

3. Cuando hablamos de JavaFX hacemos referencia a la programación con F3 (Form


Follows Function)

cic.miaulaonline.net
12 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

En la arquitectura de Java es donde se encuentra la solución al problema planteado en la

introducción. El siguiente dibujo intenta resumir dicha arquitectura:

t
ne
e.
in
nl
ao

Los programas se compilan a un fichero (*.class) intermedio, en un lenguaje creado por Sun
ul

(bytecodes). Este fichero luego es interpretado por una máquina virtual java (JVM). Por tanto,

java es compilable-interpretable.
ia
m

La máquina virtual Java (JVM)


c.
ci

La Especificación de la Máquina Virtual Java la define como:

Una máquina imaginaria implementada mediante la emulación por software en una máquina real. El

código para la máquina virtual Java se almacena en archivos .class, cada uno de los cuales contiene,

al menos, el código para una clase pública.

La especificación de la máquina virtual java proporciona las especificaciones de hardware para las

que se compila toda la tecnología java. Esta especificación permite al software en java ser

independiente de la plataforma ya que la compilación se hace para una máquina genérica conocida

cic.miaulaonline.net
13 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

como la máquina virtual java (JVM). Esta puede ser emulada por software para poder ser ejecutada

en los diferentes sistemas informáticos existentes, o bien ser implementada en hardware.

A partir del código fuente el compilador genera bytecodes. Estos bytecodes son instrucciones de

código máquina para la JVM. Cada intérprete de java tiene una implementación de la JVM.

La especificación de la JVM proporciona definiciones muy concretas para la implementación de:

Conjunto de instrucciones (equivalente al de la CPU).

t
ne
Registros del sistema.

Formato de los archivos de clase.

e.
Pila.

Garbage-collected heap.

Área de memoria.

in
nl
El Garbage collector
ao
ul

Gran parte de los lenguajes de programación permiten la reserva de memoria en tiempo de

ejecución. El proceso de reserva de memoria varía según la sintaxis del lenguaje, pero siempre
ia

involucra el retorno de un puntero al inicio del bloque de memoria reservado.


m

Una vez la memoria reservada deja de necesitarse (el puntero que la referencia esta "out of scope"),
c.

el programa o el entorno de ejecución debería liberar esa memoria.


ci

En C, C++, y otros lenguajes, el programador es responsable de la gestión de la liberación de

memoria. Esta es una tarea complicada a veces porque no siempre se sabe a priori cuando se puede

liberar la memoria. Los programas que no liberan la memoria utilizada pueden generar errores de

ejecución cuando ya no queda memoria disponible en el sistema. Se dice que estos programas tienen

fugas de memoria ("memory-links").

Java libera al programador de la responsabilidad de liberar la memoria. El lenguaje java proporciona

una hebra de ejecución, o proceso en paralelo, a nivel de sistema que rastrea las operaciones de

reserva de memoria. Durante los ciclos muertos de la JVM, la hebra de "garbage collector" verifica

cic.miaulaonline.net
14 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

qué memoria puede liberarse y realiza dicha operación.

El proceso de "Garbage collector" se realiza automáticamente durante el ciclo de vida de un

programa java, eliminando la necesidad de liberar memoria y evitando las pérdidas de memoria. Sin

embargo, la implementación del gestor de "garbage collection" puede variar sustancialmente en las

diferentes implementaciones de la JVM.

Seguridad del código

t
ne
Ya hemos visto que el código fuente de Java se compila en el sentido de que se convierten a un

e.
conjunto de bytecodes.

in
En el momento de la ejecución, los diferentes archivos bytecodes que componen el programa a

ejecutar se cargan, se verifican y se ejecutan en el intérprete. La función del intérprete es doble:


nl
Por un lado ejecuta los bytecodes y por otro gestiona las llamadas al hardware del sistema.
ao

El entorno de ejecución que ejecuta el código compilado para una JVM realiza tres tareas

principales:
ul

Carga el código: Lo realiza el cargador de clases.


ia

Verificación del código: Lo realiza el verificador de bytecode.

Ejecución del código: Lo realiza el intérprete de bytecode.


m
c.

El cargador de clases:
ci

Su función es cargar todas las clases necesarias para la ejecución de un programa.

Además, mantiene separadas aquellas clases cargadas a partir del sistema de archivos local y

aquellas otras cargadas a través de los recursos de la red. Esto permite limitar la acción de posibles

aplicaciones dañinas, ya que las clases locales son las primeras en ser cargadas.

Una vez que todas las clases han sido cargadas, se determina el mapa de memoria de la aplicación.

En este momento se asigna direcciones de memoria reales a las referencias simbólicas del código y

se rellena la tabla de asignación de memoria. Debido a que el proceso de asignación de memoria se

cic.miaulaonline.net
15 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

realiza en el momento de la ejecución, el intérprete de java añade protección contra acceso no

autorizado a las áreas de código.

Verificador de bytecode:

El código de java se verifica mediante diferentes test antes de ejecutarse en la máquina. La JVM

verifica el formato de los diferentes fragmentos de bytecode en busca de código ilegal - código que

utilice punteros, que viola los permisos de acceso de los objetos o intenta cambiar los tipos de los

t
objetos. Todas las clases importadas por la red pasan obligatoriamente por el verificador de

ne
bytecode.

En el proceso de verificación se resuelve si el código cumple las especificaciones de la JVM y no

e.
viola la integridad del sistema. Si la verificación se completa con éxito, se puede asegurar lo

in
siguiente:
nl
Las clases cumplen con el formato de archivo de clase de la especificación JVM.

No hay violaciones de acceso restringido.


ao

El código no provoca desbordamientos de la pila.

Los tipos de parámetros para todo el código es correcto y no se modificará durante la


ul

ejecución.
ia

No existen conversiones ilegales de datos, por ejemplo, convertir enteros a referencias a

objetos.
m

Los accesos a los campos de los objetos están autorizados.


c.

Introducción:
ci

La arquitectura presentada en el punto anterior proporciona unas características a Java que ningún

otro lenguaje de programación tiene:

Robusto:

Java realiza verificaciones en busca de problemas tanto en tiempo de compilación como en tiempo de

ejecución. En tiempo de compilación no tiene ningún misterio porque todos los lenguajes realizan

esas verificaciones, sin embargo, en tiempo de ejecución, la JVM, que realiza la interpretación de los

cic.miaulaonline.net
16 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

bytecodes, detecta cuando existe algún problema en la ejecución del programa, y lanza excepciones

que pueden ser recogidas por el programador con el propósito de recuperarse de dichos errores.

Arquitectura neutral (multiplataforma):

Gracias a que la compilación se realiza a un código objeto independiente de la arquitectura de la

máquina (bytecodes), tan solo necesitamos utilizar el intérprete adecuado para que nuestro

programa funcione sobre cualquier plataforma. El lema de Sun es "escribir una vez, ejecutar en

t
cualquier parte".

ne
Seguro:

e.
Como toda la ejecución la realiza la JVM, los programas Java pueden ser sometidos a muchas

comprobaciones antes de ejecutarse en la máquina. En concreto:

in
El código se pasa a través de un verificador de ByteCodes que comprueba el formato de los
nl
fragmentos de código y detecta fragmentos de código ilegal (código que falsea punteros, viola
ao

derechos de acceso sobre objetos, etc.).

El cargador de clases separa el espacio de nombres del sistema de ficheros local del de los
ul

recursos procedentes de la red. Esto limita cualquier aplicación del tipo Caballo de Troya, ya

que las clases se buscan primero entre las locales y luego entre las procedentes del exterior.
ia

Respecto a la seguridad del código fuente, el propio JDK proporciona un desensamblador de


m

ByteCodes, que hace que cualquier programa pueda ser convertido a código fuente a partir de

sus bytecodes. Utilizando javap no se obtiene el código fuente original, aunque si desmonta el
c.

programa mostrando su estructura. Este problema de seguridad del código fuente es algo
ci

todavía pendiente de subsanar.

Portable:

Más allá de la portabilidad básica por ser de arquitectura independiente, Java implementa otros

estándares de portabilidad para facilitar el desarrollo.

Los enteros son de 32 bits en complemento a 2.

Java construye sus interfaces de usuario a través de un sistema abstracto de ventanas de forma que

cic.miaulaonline.net
17 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

estas puedan ser implantadas en entornos UNIX, Mac o Pc.

Desarrollo con Java:

Para poder desarrollar software con Java necesitamos una serie de herramientas que nos

proporciona Sun a través de su JDK (Java Development Kit).

Al igual que el lenguaje natural que utilizamos para comunicarnos, ya sea de forma oral o por

escrito, cualquier lenguaje de programación dispone de unos elementos y reglas que deben

t
conocerse a la hora de programar.

ne
Los elementos del lenguaje natural nos permiten designar cosas (nombres), expresar cualidades de

e.
esas cosas (adjetivos), expresar acciones (verbos), etc.

in
Las reglas sintácticas (estructura) y semánticas (significado) permiten el entendimiento entre las

partes que forman la comunicación.


nl
En los lenguajes de programación también encontramos unas reglas sintácticas que debemos
ao

respetar a la hora de confeccionar los programas y una semántica encargada de resolver el

problema que queremos programar.


ul

Elementos y reglas sintácticas de los lenguajes de programación:


ia

Aunque todos los conceptos que aprenderemos a continuación aparecen en todos los lenguajes de
m

programación existen diferencias en la implementación en cada uno de ellos lo que obliga a un

estudio individual en cada uno de ellos.


c.

Comentarios en los programas:


ci

Un aspecto importante a la hora de confeccionar un programa es comentar lo más detalladamente

posible lo que significa cada una de las órdenes que forman parte del programa, con el propósito de

poder recordar en un futuro la función que realiza cada una de ellas, y facilitar su estudio a personas

ajenas al programa.

Identificadores:

En todo lenguaje de programación surge la necesidad de utilizar una serie de elementos que

cic.miaulaonline.net
18 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

debemos designar con algún nombre, por ejemplo:

ELEMENTO DESCRIPCIÓN
- Elementos utilizados para referenciar posiciones de memoria dónde podremos
Variables
almacenar datos necesarios para el programa.
- Elementos utilizados para referenciar posiciones de memoria dónde reside el código
Funciones
del programa.
- Elementos que encapsulan variables (propiedades) y funciones (métodos) de manera
Objetos que resulta más sencillo modelar los problemas que queremos resolver simplificando
el diseño de programas complejos.
- Conforme avancemos iremos conociendo más elementos de los lenguajes de
etc.

t
programación.

ne
A la hora de asignar nombre a todos estos elementos hay que seguir unas reglas.

Tipos de datos básicos:

e.
El modelo mental más sencillo que se puede tener de una aplicación informática es el de una caja

in
negra que recibe unos datos de entrada, los procesa y entrega unos datos de salida representados de
nl
alguna manera.
ao

Estos datos de entrada, los cuáles deben ser albergados en memoria y referenciados mediante

alguna variable, pueden ser de diferente naturaleza (numéricos, alfanuméricos, etc.).


ul

Cada lenguaje de programación dispone de unos tipos de datos básicos a los cuáles nos tenemos que

amoldar a la hora de realizar el análisis de los datos que necesitamos en nuestra aplicación.
ia

Variables:
m

Este elemento juega un papel muy importante en el programa porque es el mecanismo que pone a
c.

nuestra disposición el lenguaje de programación para gestionar de una manera sencilla los datos de
ci

la aplicación.

Al declarar una variable en el programa estamos reservando una zona de memoria para

posteriormente albergar un dato. Existen lenguajes que necesitan que especifiquemos el tipo de dato

que se va a albergar (java) y otros que no lo necesitan (javascript).

Al asignar un valor a la variable lo que estamos haciendo es almacenar el dato en la posición de

memoria que se reservó para dicha variable.

En todo momento tenemos que tener presente que al usar la variable realmente estamos usando el

cic.miaulaonline.net
19 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

dato al que representa.

Operadores:

Una de las primeras aplicaciones de los ordenadores fue el cálculo de matemático y, aunque ahora

ha pasado a un segundo plano, los lenguajes de programación ofrecen una serie de elementos que

permiten realizar operaciones con los datos.

Estas operaciones no solo se limitan a operaciones aritméticas. Disponemos también de operaciones

t
lógicas, comparaciones, etc.

ne
Sentencias de control:

e.
Sin embargo, la característica que confiere al ordenador su potencia es la capacidad de

in
procesamiento de la que dispone.
nl
Aunque esto nos pueda asustar, el tipo de procesamiento que puede realizar es muy básico,

limitándose a:
ao

Tomar decisiones sobre la ejecución o no de determinadas tareas en base al cumplimiento o no de


ul

una o varias condiciones (sentencias de decisión). En dichas condiciones siempre estarán implicados

datos (o si se quiere, sus representantes las variables).


ia

Alterar el flujo de ejecución normal del código del programa (sentencias de salto o bucles). También
m

estas alteraciones estarán controladas por variables.


c.

La combinación adecuada de este tipo de sentencias es la que definirá la estructura que resuelve un

determinado problema.
ci

Almacenamiento de datos mediante Arrays:

Hemos visto el uso de variables como mecanismo básico para almacenar y acceder a datos en

memoria. Sin embargo, en la mayoría de aplicaciones este tipo de almacenamiento de información se

queda corto por ser demasiado simple y necesitamos a sistemas de almacenamiento más complejos

pero también más potentes.

Uno de estos sistemas, que aparece en todos los lenguajes de programación, es el de los Arrays.

cic.miaulaonline.net
20 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Excepciones:

Todos los lenguajes de programación avisan de los errores que cometamos en tiempo de

compilación, pero pocos son los que han sido diseñados para seguir avisando de posibles errores en

tiempo de ejecución. Las aplicaciones Java, gracias a que se ejecutan bajo la supervisión de la

máquina virtual (JVM), están siendo controladas constantemente. En caso de que ocurra algún error

de ejecución, se lanza una excepción que puede ser recogida y tratada por el programador en su

aplicación. De esta manera, lo que antes solía terminar en una ejecución anormal del programa, con

t
java puede ser resuelto.

ne
Objetos:

e.
Java es un lenguaje de programación orientado a objetos. La importancia de este tema es tal que le

in
dedicamos el siguiente capítulo entero.
nl
ao

Instalación Y Configuración Del Kit De Desarrollo De Sun (JDK)

Para poder desarrollar software con Java necesitamos una serie de herramientas que nos
ul

proporciona Sun a través de su JDK (Java Development Kit).


ia

Existen otras empresas, como IBM y Microsoft, que también tienen entornos de programación
m

para Java. Salvo el de Microsoft, todos son compatibles al 100% con las especificaciones que

estableció Sun para su lenguaje de programación.


c.

[[[Elemento Multimedia]]]
ci

Transcripción de audio

Primeros pasos con Java

Desde el inicio de la informática, en el campo del desarrollo software siempre ha existido un

problema: ¿cómo reutilizar el software para los dintintos sistemas que existen? Presisamente, con la

idea de resolver este problema, surge Java. Este lenguaje, asume que las aplicaciones creadas se

terminan de compilar en la máquina en la que se van a ejecutar, con lo que es en ese momento, en el

que se genera el fichero en lenguaje máquina en el que se ejecutará, para eso, se incorpora la idea

cic.miaulaonline.net
21 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

de máquina virtual de Java, que es propia de cada sistema. De este modo, un programador escribe

su programa en Java, lo compila en su máquina de desarrollo y lo que obtiene es un programa

compilado que no es ejecutable aún. Para obtener el ejecutable, cogemos ese programa compilado

dentro de la máquina del usuario final y será ahí donde se realice la última adaptación que creará el

programa para que ese usuario concreto lo pueda ejecutar. Ahora bien, para que este proceso

funcione correctamente, ¿qué debemos tener instalado? Pues bien, en esta exposición hemos

hablado de dos figuras, en primer lugar, desde el punto de vista de los desarrolladores de software,

necesaremos instalar un paquete denominado JDK que es el quit de desarrollo de Java que incluye el

t
ne
compilador de Java, todas las librerías de Java, la máquina virtual de Java y el entorno de ejecución.

Con este paquete, y un editor de texto, ya podríamos comenzar a escribir aplicaciones Java. Lo

e.
normal, será que usemos algún entorno de desarrollo como Eclipse que facilitarán la escritura de

aplicaciones Java. Por su parte, los usuarios finales deben tener instalado el paquete llamado JRE o

in
entorno de ejecución de Java que contiene la máquina virtual de Java más las librerías y

componentes necesarios para ejecutar la aplicación.


nl
Estos paquetes JDK para desarrolladores y JRE para usuarios podemos obtenerlos gratuitamente
ao

desde la zona de descargas de Same Microsystem o de Oracle, que es en la actualidad la nueva

propietaria de Java.
ul

Instalación del JDK de Sun.


ia

Lo primero será descargarnos la herramienta de desarrollo JDK (Java Development Kit) de la


m

siguiente dirección:
c.

http://java.sun.com/
ci

Tras la ejecución del programa de instalación, obtendremos en el directorio que hayamos

especificado para tal fin, la siguiente estructura de directorios:

cic.miaulaonline.net
22 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

t
ne
A continuación, describimos los directorios y ficheros más importantes:

e.
Directorios

in
nl
bin: en este directorio se encuentran todos los ficheros ejecutables del JDK. En su interior se

encuentran los ficheros más importantes para el desarrollo de la tecnología Java. Los más
ao

importantes son:
ul

javac.exe (Es el compilador de Java, permite compilar los ficheros con extensión java y crear
ia

clases para el desarrollo).

java.exe (Intérprete (JVM). Permite poder ejecutar los ficheros compilados (extensión class) y
m

ejecutarlos).

javadoc.exe (Generador de documentación para las clases y librerías de Java).


c.

jdb.exe (Depurador).
ci

Los programas de este directorio los usaremos conforme los vayamos necesitando.

demo: En este directorio hay una serie de ejemplos que Sun ha desarrollado con propósitos

didácticos. En concreto encontraremos ejemplos sobre:

Applets.

JFC --> Java Foundation Classes. En la plataforma Java 2 (última versión de Java), Sun.

cic.miaulaonline.net
23 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

docs: En este directorio está la documentación del API de Java. No viene por defecto con el JDK y

hay que instalarlo por separado.

lib: En este directorio se encuentran las clases de Java proporcionadas por Sun, y que conforman el

API que utilizaremos en nuestros programas. las clases que nos interesan están comprimidas en un

fichero que se llama:

tools.jar

t
jre: Java Run Environment. Entorno de Ejecución de Java proporciona las herramientas básicas para

ne
la ejecución de aplicaciones Java, sin incluir todas las herramientas que se proporcionan para su

desarrollo (compilador, depurador, ...).

e.
Configuración del sistema.

in
El JDK no necesita ninguna configuración específica, sin embargo, si queremos que nuestras
nl
aplicaciones funcionen debemos configurar unas variables de entorno que dependerán del
ao

sistema operativo sobre el que estemos trabajando. Vamos a configurar las variables de

entorno para el sistema operativo Windows:


ul

PATH: En esta variable debemos poner el camino hasta los ejecutables del JDK
ia
m

El propósito de hacer esto es el poder ejecutar los ficheros ejecutables (javac, java...) desde

cualquier directorio.
c.

CLASSPATH: Debe aparecer el camino hasta las clases que importemos en nuestros programas. En
ci

concreto debe aparecer el fichero tools.jar (toda la ruta al directorio).

El propósito es que el compilador (javac) encuentre las clases que importemos en nuestros

programas.

No olvidar introducir también el propio directorio (.) de lo contrario tendremos errores.

Vamos a mostrar como instalar y configurar las variables de entorno de Java para poder utilizar el

kit de desarrollo de Java.

cic.miaulaonline.net
24 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Lo primero será instalarnos el kit de desarrollo de Java:

t
ne
e.
in
A continuación y cada vez que queramos compilar y ejecutar nuestras prácticas debemos de realizar
nl
la siguiente configuración.
ao

Vamos a asignar por consola la variable path y classpath.


ul

Vamos a inicio y ejecutamos cmd.


ia

Nos aparecerá la consola de Windows ahora debemos de asignarle el valor a path y classpath

debemos de apuntar siempre a nuestra versión del jdk.


m

Escribimos lo siguiente en la consola:


c.

set CLASSPATH=%CLASSPATH%;C:\Program Files\Java\jdk1.7.0_25\lib\tools.jar


ci

set path=%path%;C:\Program Files\Java\jdk1.7.0_25\bin

Debemos recordar que cada vez que iniciemos la consola para compilar y ejecutar las prácticas

debemos de asignar de nuevo los valores a estas variables.

Procesos para crear un programa en Java

cic.miaulaonline.net
25 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Antes de explicar el proceso de creación de un programa, conviene explicar que en Java vamos a

manejar tres tipos de aplicaciones:

Aplicación en modo texto: En este tipo de aplicaciones la interacción con el usuario (entrada

de datos y presentación de resultados) se realiza en modo texto (no existirán cajas de texto,

botones,...). El ratón no tendrá uso en estas aplicaciones. Son las aplicaciones que realizaremos

en el primer bloque donde nuestro objetivo será aprender los conceptos básicos de Java.

También es interesante cuando realizamos los prototipos de nuestros programas debido a que

t
ne
la depuración es más sencilla.

e.
Aplicación en modo gráfico: En este tipo de aplicaciones la interacción con el usuario se

realiza en modo gráfico. Estas aplicaciones pueden ser de todo tipo y no hay que pensar solo en

Internet:
in
nl
Procesador de texto, bases de datos, entorno de programación, tratamiento de

gráficos...
ao
ul

Miniaplicaciones (applets): Pequeños programas que no pueden ejecutarse de forma

independiente sino que necesitan el soporte de un navegador. Estos programas están pensados
ia

para que sean invocados desde una página HTML, viajen a través de la red y se ejecuten en la
m

máquina del cliente.


c.

Crear el código fuente: Para crear el código fuente de Java podemos utilizar:
ci

Un editor de texto plano como el Bloc de Notas.

El editor de algún entorno de desarrollo.

El fichero con el código fuente se guardará con extensión ".java"

Compilar el código fuente: La compilación del código fuente se realizará a través del compilador

proporcionado por Sun en su JDK (Java Development Kit). El compilador se llama javac.exe y la

sintaxis básica es:

cic.miaulaonline.net
26 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

C:\javac.exe FicheroFuente.java

NOTA: El fichero llamado FicheroFuente.java debe llamarse igual que la clase y es imprescindible

poner la extensión ".java" en el momento de escribir en la línea de comandos. Veremos el ejemplo

práctico más adelante para entender el concepto de clase.

La compilación se realiza desde una ventana de MS-DOS o desde el propio entorno que estemos

usando, el cual nos ocultará la ejecución de javac. El proceso de compilación requiere que el sistema

t
tenga configurada adecuadamente las variables de entorno para el correcto funcionamiento del

ne
comando anterior. Como resultado de la compilación obtenemos el fichero de bytecodes que tiene

extensión ".class".

e.
Ejecutar la aplicación: Para ejecutar el fichero de bytecodes es necesario pasarlo por el

in
intérprete adecuado. El intérprete depende del tipo de programa java que hayamos

implementado:
nl
Miniaplicaciones (applets) ( Es el navegador el intérprete y nosotros tenemos que
ao

preocuparnos tan solo de incluir el applet en una página HTML.

Aplicación (texto o gráfica) ( Utilizaremos el intérprete proporcionado por el JDK de Sun que se
ul

llama java.exe. Su sintaxis es:


ia

C:\java.exe FicheroBytecodes.class
m

NOTA: Cuando llamamos al intérprete java.exe y al fichero ".class" no escribiremos el nombre de la


c.

extensión "class", solamente debemos escribir el nombre del fichero compilado, pero manteniendo la

diferencia entre mayúsculas y minúsculas.


ci

Utilizando la ventana MS-DOS para compilar aplicaciones Java

JAVAC es el compilador, debemos indicarle toda la ruta y el nombre del fichero con extensión ".java"

que deseamos compilar. Diferenciación entre mayúsculas y minúsculas.

JAVA es el intérprete de archivos con extensión class, debemos decirle toda la ruta y el nombre del

archivo ".class" pero sin la extensión. Diferenciación de mayúsculas y minúsculas.

cic.miaulaonline.net
27 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

NOTA: Para poder probar este primer ejemplo debemos tener configuradas las variables de entorno

que nos llevan al JDK de java y nos permiten compilar los ficheros.

Todos los ficheros de Java son clases. Dentro de dichas clases escribiremos el código para crear

nuestra "solución" a un problema que hayamos planteado.

Para comenzar, utilizaremos un método llamado main que es el "arranque" de las clases no gráficas

de Java. Simplemente esto quiere decir que toda "lógica" tiene un entorno y un lugar para probar

t
dicho entorno, por ejemplo, si queremos hacer una página Web, el entorno para dicha clase web

ne
sería un navegador de Internet. Pues en nuestro caso, nuestro entorno será la ventana de Ms-Dos y

para probar las aplicaciones necesitamos crearnos un método main para arrancar dicho entorno y

e.
generar nuestra lógica en la clase.

in
Como podemos comprobar, vamos a hacer un ejemplo sencillo para visualizar nuestra primera

aplicación de Java y comprobar que tenemos todo listo para continuar.


nl
Código JAVA de ejemplo
ao
ul

public class ClaseJava


ia

{
m

public static void main(String args[])


c.

{
ci

System.out.println("MI PRIMERA APLICACION");

Vamos a abrir un bloc de notas y escribiremos el código de nuestra primera clase.

Debemos recordar que Java es un lenguaje de programación "Case Sensitive", es decir, diferencia

entre mayúsculas y minúsculas, por lo que escribiremos literalmente el contenido de nuestro primer

cic.miaulaonline.net
28 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

ejemplo en el bloc de notas.

A continuación vamos a guardar el fichero de nuestro bloc de notas con la extensión ".java" en la

ubicación que vayamos a probar nuestros ejemplos. Es recomendable crearnos una carpeta para

poder ubicar todas nuestras prácticas. Podemos utilizar cualquier otro editor de caracteres, pero es

imprescindible que solo almacene texto, no nos valdrían editores de texto del estilo Word o

WordPad, ya que almacenan más información además del texto escrito, un ejemplo de estos editores

puede ser UltraEdit o algún bloc de notas "free" que existen por internet y que tienen más

t
características que el bloc de notas tradiciones de Windows.

ne
El nombre de nuestro fichero "java" debe tener el mismo nombre que nuestra clase, incluida la

e.
diferenciación de mayúsculas y minúsculas, en nuestro ejemplo debemos llamarlo ClaseJava.java.

in
Voy a crear una carpeta en la unidad C:\ llamada PracticasJava y almacenaré las prácticas en dicha

ubicación. En el bloc de notas seleccionaremos como Tipo: "Todos los archivos" y escribiremos la
nl
extensión ".java" para nuestra primera clase.
ao

NOTA: Podremos guardar las prácticas en cualquier ubicación, pero es conveniente guardarlas en

alguna "ruta" fácilmente accesible ya que posteriormente tendremos que escribir dicha ruta en
ul

nuestra ventana de comandos de Ms-Dos.


ia
m
c.
ci

cic.miaulaonline.net
29 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

A continuación abriremos una nueva ventana de comandos de Ms-dos. Para ello nos iremos al Inicio

de Windows y pulsaremos sobre "Ejecutar" y escribiremos el comando cmd.exe. Esto depende del

sistema operativo en el que estemos trabajando. Se nos abrirá una nueva ventana de comandos.

Ahora debemos tener unas nociones básicas de Ms-Dos para trabaja y poder compilar nuestras

clases de Java.

Recordar que debemos asignar los valores a path y classpath como vimos anteriormente.

t
Sobre la ventana de comandos escribimos:

ne
cd C:\PracticasJava

e.
Con el comando cd de Ms-Dos podremos entrar en cualquier directorio, según nuestra práctica yo

in
he almacenado el fichero "java" de nuestra clase en dicha ubicación. Debemos posicionarnos en

dicha ubicación. También podemos escribir "cd.." o "cd\" para ir a la raíz dónde hayamos
nl
almacenado los ficheros. Si queremos cambiar de unidad, bastaría con escribir la letra de la unidad
ao

seguida de dos puntos: "D:". Con el comando "dir" veremos todos los ficheros que existen dentro de

un directorio, aunque podemos complementar nuestras prácticas con las ventanas propias de

Windows.
ul

Ya estamos posicionados sobre el lugar dónde tenemos almacenada la clase ".java", ahora debemos
ia

utilizar el compilador javac.exe para poder compilar la clase. Escribiremos la llamada al compilador
m

desde la ventana de comandos.


c.

C:\PracticasJava>javac ClaseJava.java
ci

Si no existen errores en la clase, no nos dará ningún mensaje y simplemente volverá a aparecer el

símbolo de la unidad donde estemos ubicados.

cic.miaulaonline.net
30 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Ahora veremos que nos ha creado un fichero con extensión ".class", que es el resultado de un fichero

compilado con extensión ".java", podemos verlo fácilmente si nos posicionamos en Windows dentro

de nuestra carpeta de prácticas.

t
ne
e.
in
También podemos escribir el comando "dir" desde la ventana de comandos de Ms-Dos.
nl
ao
ul
ia
m
c.

Es el momento de utilizar el intérprete de ficheros ".class", nuestro intérprete es el comando

java.exe. Para poder ejecutarlo debemos escribir desde la ruta dónde se encuentre la clase
ci

compilada la siguiente instrucción:

java ClaseJava

Ahora ya podremos visualizar la lógica que tengamos dentro de la clase compilada:

cic.miaulaonline.net
31 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Programación orientada a objetos

[[[Elemento Multimedia]]]
El programador debe conocer cuál es su situación respecto a la máquina que va a programar y qué

personajes, junto con él, son importantes a la hora de desarrollar una aplicación. Cada uno de estos

personajes tiene un punto de vista diferente que describimos a continuación:

t
ne
Desarrollador del lenguaje de programación. Su conocimiento de la máquina es profundo debido a

que debe desarrollar la aplicación que ayudará al programador a realizar su trabajo. En un principio

e.
se desarrollaban los lenguajes de programación utilizando el lenguaje de ensamble del

microprocesador. Esto dio lugar a lenguajes como C, Pascal, etc.

in
Posteriormente, estos lenguajes se han podido utilizar para el desarrollo de tecnologías de
nl
programación más potentes como C++, y éste a su vez es el que se ha utilizado en el desarrollo de

Java. El lenguaje de programación proporciona las herramientas necesarias (API, entorno de


ao

desarrollo, etc.) al siguiente personaje: el programador de aplicaciones.


ul

Programador de aplicaciones. Su conocimiento suele centrarse en el lenguaje de programación que

utiliza para el desarrollo de sus aplicaciones. No necesita conocer la máquina tan en profundidad
ia

como el desarrollador de lenguajes de programación, sin embargo, ese conocimiento extra ayuda a
m

comprender lo que se está realizando y, por tanto, facilita el desarrollo de aplicaciones. Su función

principal es utilizar todas las herramientas que le ofrece un lenguaje de programación para
c.

desarrollar aplicaciones fáciles de usar (usabilidad) destinadas al siguiente personaje: el usuario.


ci

Usuario. Su conocimiento del ordenador suele ser escaso, por no decir nulo, y su función es la de

utilizar las aplicaciones que ha desarrollado el programador.

Un ejemplo puede aclarar todo lo expuesto anteriormente. Veamos cómo realiza el acceso a la hora

cada uno de estos personajes.

Desarrollador del lenguaje de programación. Este personaje conoce la manera que se ha diseñado en

la máquina para contabilizar el tiempo. El reloj de tiempo real (RTC) incorpora un contador dónde se

almacenan los milisegundos que han transcurrido desde el 1-1-1970 a las 00:00:00 hasta este

cic.miaulaonline.net
32 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

momento. Conocido el origen de coordenadas y los milisegundos que han transcurrido, se puede

obtener mediante la aplicación de un algoritmo matemático el día, mes y año en el que nos

encontramos, y la hora con una precisión de milisegundos. Por tanto, el desarrollador de un lenguaje

de programación, para acceder hasta la hora del sistema, tendría que acceder al dato almacenado en

el RTC mediante la lectura del puerto dónde está situado e implementar el algoritmo de conversión,

lo que requiere un conocimiento del funcionamiento de la máquina determinado.

Programador. Aprovechando que el desarrollador del lenguaje de programación ha implementado el

t
código de más bajo nivel para acceder a la hora del sistema, puede ofrecer este código al

ne
programador para simplificarle la forma de acceso. Una parte fundamental de un lenguaje de

programación es el API que ofrece al programador. En él se encuentra todo el código que ha

e.
desarrollado el desarrollador del lenguaje de programación y que puede utilizar el programador en

in
sus aplicaciones. La evolución de las tecnologías de programación ha dado lugar a dos tipos de

lenguaje de programación (y por tanto a dos tipos de API).


nl
API orientado a funciones.
ao

API orientado a objetos. Por ejemplo, el objeto Date es que se debe utilizar para acceder a la

hora del sistema.


ul
ia

Usuario. Simplemente visualizará la hora del sistema tal y como el programador haya realizado la

representación en la aplicación.
m

En este tema aprenderemos los conceptos de la programación orientada a objetos.


c.

El desarrollador de lenguajes de programación debe pensar en facilitar al programador su


ci

trabajo, el desarrollo de aplicaciones informáticas, ofreciéndole unas herramientas que le

ofrezcan.

Clases

Las diferentes tecnologías de programación se diferencian en la manera que ofrecen de estructurar

los datos y el código que forman una aplicación.

cic.miaulaonline.net
33 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

A la hora de plantear el análisis del problema que se quiere resolver por software, todas las

tecnologías han optado por dividir dicho problema en parte más pequeñas. La estrategia a seguir es

conseguir una estructura en la que cada una de esas partes realice una tarea única e indivisible,

coordinadas por una parte principal que obtiene la información de lo que hay que hacer de su

interacción con el usuario. En la actualidad esta interacción se realiza a través de un entorno gráfico

y las órdenes se generan mediante eventos.

En los lenguajes procedimentales, orientados a funciones, la estructura se realiza tomando como

t
referencia el código. Cada una de esas partes se denomina subrutina, procedimiento o función

ne
dependiendo del lenguaje en el que nos encontremos.

e.
En los lenguajes orientados a objetos, la estructura se realiza tomando como referencia los datos.

Cada una de esas partes se denomina objeto.

in
En Java una clase se suele representar con la siguiente estructura:
nl
public class NombreClase{
ao

// Definición de propiedades --> Características del elemento que describimos con la clase.
ul

// Definición de los métodos --> Comportamiento y funcionalidades del elemento.


ia

}
m

Analizaremos algunos conceptos básicos para poder comprender el concepto de propiedad

(variables), métodos (funciones) y lógicas de funcionamiento.


c.

En este primer ejemplo podemos observar que creamos una clase coche.
ci

Las propiedades de la clase representan características del coche: estado, velocidad actual,

velocidad máxima,...

Los métodos representan acciones que podemos realizar sobre el coche: montar, bajar, salir,...

La lógica de funcionamiento se implementa en el código de cada método.

import java.io.BufferedReader;

cic.miaulaonline.net
34 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

import java.io.InputStreamReader;

import java.io.IOException;

public class Coche{

static boolean estado=false;

static int velocidad=0;

t
static int VMAXIMA=120;

ne
public static void menu(){

e.
System.out.println("1.- Montar en el coche");

System.out.println("2.- Comenzar");
in
nl
System.out.println("3.- Parar");
ao

System.out.println("4.- Salir del coche");


ul

System.out.println("");
ia

System.out.println("Introduzca una opción");


m

}
c.

public static void montar(){


ci

if (estado==false){

System.out.println("Ya estás encima del coche.");

estado=true;

else{

System.out.println("Ya estabas arriba, no intentes subir otra vez.");

cic.miaulaonline.net
35 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

menu();

public static void comenzar (){

if(estado==false){

t
System.out.println("Primero sube al coche");

ne
}

e.
else if (velocidad== VMAXIMA){

System.out.println("Ya no puedes acelerar más");


in
nl
}
ao

else{
ul

++velocidad;
ia

System.out.println("Velocidad actual= "+velocidad);


m

}
c.

menu();
ci

public static void parar(){

if (velocidad==0){

System.out.println("Si estás parado porque frenas");

else{

cic.miaulaonline.net
36 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

System.out.println("El frenado se realiza de golpe");

velocidad=0;

menu();

t
public static void salirCoche(){

ne
if(estado==false){

e.
System.out.println ("No te has subido y ya te bajas");

}
in
nl
else if(velocidad!=0){
ao

System.out.println("Primero frena y luego baja");


ul

}
ia

else {
m

System.out.println("Acabas de bajar del coche.");


c.

}
ci

menu();

public static void main(String args[])throws IOException{

BufferedReader i=new BufferedReader(new InputStreamReader(System.in));

String opcion;

menu();

cic.miaulaonline.net
37 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

do{

opcion=i.readLine();

try{

switch(Integer.parseInt(opcion)){

case 1: montar();

t
break;

ne
case 2: comenzar();

e.
break;

case 3:parar();
in
nl
break;
ao

case 4: salirCoche ();


ul

System.exit(0);
ia

default:System.out.println("No existe la opción");


m

}
c.

}
ci

catch( NumberFormatException e){

System.out.println("La opción debe ser un número");

}while (true);

cic.miaulaonline.net
38 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Tipos de clases

abstract

Una clase abstract tiene al menos un método abstracto. Una clase abstracta no se instancia, sino que

se utiliza como clase base para la herencia.

t
final

ne
Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar

de una clase final. Por ejemplo, la clase Math es una clase final.

e.
public

in
Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son
nl
accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes,
ao

primero tienen que ser importadas.

synchronizable
ul

Este modificador especifica que todos los métodos definidos en la clase son sincronizados, es decir,
ia

que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de

colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se
m

puedan modificar las mismas variables sin que haya problemas de que se sobrescriban.
c.

Variables de instancia
ci

La declaración de una variable dentro de la definición de una clase por defecto es una variable de

instancia. Con esto queremos decir que todo objeto que instanciemos de esa clase contiene su propia

copia de dicha variable.

Se pueden acceder a las variables de instancia de un objeto de la siguiente manera:

Nombreobjeto.nombrevariabledeinstancia

Estas variables deben ser declaradas fuera de los métodos y dentro de la clase, y son del tipo global

cic.miaulaonline.net
39 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

por lo que las pueden utilizar cualquier método no estático de esa clase, pero para acceder desde

métodos estáticos es necesario instanciar la clase.

Variables estáticas

Si al definir una variable le anteponemos la palabra static conseguimos que todos los objetos de

dicha clase compartan dicha variable. Es decir existe una única copia de dicha variable, por tanto, si

algún objeto modifica la variable, quedará modificada para todos los objetos.

t
Si queremos acceder a una variable de clase no es necesario instanciar ningún objeto de dicha clase,

ne
basta con usar:

e.
Nombredeclase.nombredevariableestática

in
En este ejemplo definimos una variable estática para la velocidad máxima a la que puede ir un

coche, accederemos al valor de la variable sin necesidad de crear una variable de instancia:
nl
public class Coche{
ao

...
ul

...
ia

...
m

static int VMAXIMA=120;//Velocidad máxima a la que podemos circular.


c.

...
ci

...

...

public class Conductor {

public static void main(String args[]){

cic.miaulaonline.net
40 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

System.out.prinln(Coche.VMAXIMA);

Variables finales

En Java se usa la palabra clave final para indicar que una variable debe comportarse como si fuese

una constante. Por tanto, no se permitirá su modificación una vez que sea declarada e inicializada.

t
Poniendo la palabra final con una variable o clase estática, se crean constantes de clase.

ne
Si intentamos modificar el valor de la variable nos dará error.

e.
En este ejemplo intentaremos modificar la velocidad máxima a la que puede ir un coche. Como la

variable que controla la velocidad máxima es final comprobaremos que nos saltará un error:

public class Coche{ in


nl
...
ao

...
ul

...
ia

static final int VMAXIMA=120;//Velocidad máxima a la que podemos circular.


m

...
c.

...
ci

...

public class Conductor {

public static void main(String args[]){

Coche.VMAXIMA=180;

cic.miaulaonline.net
41 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

System.out.prinln(Coche.VMAXIMA);

Métodos de clase

Los métodos son funciones que pueden ser llamados dentro de la clase o por otras clases.

t
La implementación siempre será de dos partes: la declaración y el cuerpo:

ne
[ModificadoresAcceso] TipoRetorno nombreMétodo ([lista_de_argumentos]) [excepciones]{

e.
CuerpodelMétodo

}
in
nl
La lista de argumentos es opcional. Los parámetros o argumentos se usan para pasar información al
ao

cuerpo del método. Los parámetros se pararán a la hora de llamarlos.

El tipo de retorno es obligatorio e indica el tipo de dato que devuelve tras realizar su tarea. Si no
ul

devuelve nada se indica mediante la palabra void. Lo recibe la aplicación que realizó la llamada.
ia

Para devolver un valor se utiliza la palabra clave return.


m

Si se declara un método anteponiendo la palabra static, este se convierte en un método estático o de


c.

clase. Las características de estos métodos son:


ci

Pueden ser invocados sin necesidad de que haya que instanciar ningún objeto de la clase.

NombreClase.nombreMétodo(...)

Los métodos estáticos solo tienen acceso a variables de clase o estáticas; no tienen acceso a las

variables de instancia a no ser que se cree un objeto y se acceda a las variables de instancia a través

de ese objeto.

Sobrecarga de métodos o polimorfismo

cic.miaulaonline.net
42 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

En Java es posible definir dos o más métodos dentro de la misma clase que compartan el mismo

nombre pero las declaraciones de sus parámetros deben ser diferentes. A esto es a lo que se conoce

como Sobrecarga de Métodos.

La Sobrecarga es uno de los procedimientos mediante el cual Java implementa el polimorfismo(en

programación orientada a objetos es la capacidad que tienen los objetos de una clase de responder

al mismo mensaje o evento en función de los parámetros utilizados durante su invocación).

t
En este ejemplo definimos una clase con 3 métodos sobrecargados:

ne
class Principal{

e.
public void Metodo1()

in
{
nl
System.out.println("Metodo sin Argumentos");
ao

public void Metodo1(int edad) // Sobrecarga con un parámetro


ul

{
ia

System.out.print("Metodo con un Argumento:");


m

System.out.println(" edad= " +edad);


c.

}
ci

public void Metodo1(double edad, double año, double mes) //Sobrecarga con tres parámetros

System.out.print("Metodo con tres Argumentos:");

System.out.println(" edad= " +edad+ " año= " + año + " mes= " + mes );

cic.miaulaonline.net
43 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

class Prueba{

public static void main (String [] var)

Principal objeto= new Principal(); //Se crea un Objeto de nombre Objeto para llamar a los Métodos

t
Sobrecargados

ne
objeto.Metodo1();

e.
objeto.Metodo1(30);

objeto.Metodo1(30.2,76.0,8.6);

in
nl
}
ao

Variables
ul
ia

Dentro de cualquier lógica de negocio necesitamos almacenar información para poder realizar una
m

aplicación. Dicha información se almacena en variables, que son espacios en la memoria y que
c.

permiten asignar y recuperar valores.


ci

Para trabajar con variables existen múltiples tipos de datos, dependiendo de lo que necesitemos

realizar, pudiera ser que necesitemos realizar operaciones, por lo que almacenaríamos números, o

pudiera ser que nuestro dato sea un nombre, por lo que almacenaríamos textos. Existen varios tipos

de datos primitivos que aprenderemos a lo largo del módulo.

Además, al igual que el lenguaje natural que utilizamos para comunicarnos, ya sea de forma oral o

por escrito, cualquier lenguaje de programación dispone de unos elementos y reglas que deben

conocerse a la hora de programar.

cic.miaulaonline.net
44 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Los elementos del lenguaje natural nos permiten designar cosas (nombres), expresar

cualidades de esas cosas (adjetivos), expresar acciones (verbos), etc.

Las reglas sintácticas (estructura) y semánticas (significado) permiten el entendimiento entre

las partes que forman la comunicación.

En los lenguajes de programación también encontramos unas reglas sintácticas que debemos

respetar a la hora de confeccionar los programas y una semántica encargada de resolver el

t
problema que queremos programar.

ne
Java tiene como todos los lenguajes de programación sus propias características para describir

código, es decir sus propios comentarios y herramientas del lenguaje.

e.
Un elemento importante en el momento de crear una clase es comentar las acciones que estamos

in
realizando. Dichos comentarios nos van a servir para dos propósitos, comprender las acciones que
nl
estamos realizando y documentar dichas acciones.
ao

Imaginemos que no trabajamos en un proyecto en un año y tenemos que retomarlo para

implementar algunas características. Si no hemos puesto comentarios de las acciones que estamos
ul

realizando, la tarea de volver a revisar las acciones o de "saber" para qué sirve cada acción puede

llevarnos mucho tiempo.


ia

Otra de las ventajas de incluir comentarios se debe a que podemos encontrarnos con un código que
m

otro programador ha realizado y no sabemos cómo ha hecho la funcionalidad de las acciones ni en

qué orden. Si el programador ha documentado su código, nos será mucho más sencillo adaptarnos a
c.

un código que no es nuestro para poder implementarlo.


ci

Para poner comentarios en nuestro código fuente java tenemos tres opciones:

Comentario Descripción
//.......... Comentario para una sola línea.
/* ........ */ Comentario de una o más líneas
/** ........*/ Comentario de documentación de una o más líneas.
Una línea de comentario que empiece por //

// Esto es un comentario

cic.miaulaonline.net
45 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

System.out.println ("Hola mundo");

Varias líneas encerradas entre /* y */

/* Todo esto

también es un

comentario */

t
System.out.println ("Hola mundo");

ne
Por último, podemos hacer varias líneas de comentario entre /** y */

e.
/** Todo esto

es un
in
nl
comentario de documentación */
ao

public void miMedodo (int parametro) {


ul

CODIGO DEL MÉTODO


ia

}
m

La diferencia entre el comentario que empieza por /** y el que empieza por /* es que el primero sale

en la documentación generada por javadoc y en la mayoría de herramientas que hacen


c.

documentación a partir del código. El comentario que empieza por /* no sale en la documentación y
ci

es solo para el programador.

Hay unos detalles, sin embargo, que hay que tener en cuenta para comentarios que van a salir en la

documentación. Conviene poner uno de estos comentarios delante de cada clase, cada método y

cada atributo, de esta forma, en la documentación aparecerán convenientemente documentados las

clases, métodos y atributos. El siguiente código nos sirve como ejemplo:

package Mates;

/**

cic.miaulaonline.net
46 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Clase con funciones matemáticas.

Realiza operaciones trigonométricas, ecuaciones diferenciales

e integrales */

public class ClaseMatematicas

t
/** Constante PI.

ne
Valor de PI=3.141618 */

e.
public static final double PI = 3.1416;

in
/** Devuelve el seno del ángulo que se le pasa como parámetro.
nl
El ángulo debe estar en radianes y es un double. */
ao

public double senoAngulo(double angulo)


ul

{
ia

return 19.21;
m

}
c.

}
ci

Una vez que tenemos la clase escrita, podemos utilizar la herramienta javadoc para crear la

documentación con el comando:

javadoc.exe ClaseMatematicas.java

cic.miaulaonline.net
47 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

t
ne
Veremos que nos ha creado en el directorio donde hemos creado la clase, una serie de páginas html

e.
y css que "copia" el formato de documentación de la API de Java.

in
Si pulsamos sobre el fichero ClaseMatematicas.html, veremos la documentación ya creada:
nl
ao
ul
ia
m
c.
ci

Es importante tener en cuenta que dentro de cada comentario, la primera frase -hasta el primer

cic.miaulaonline.net
48 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

punto- saldrá como resumen de la clase, método o atributo. Conviene, por tanto, que esa frase tenga

sentido por sí sola.

Los comentarios de documentación, colocados inmediatamente antes de una declaración de variable

o función, indican que ese comentario ha de ser colocado en la documentación que se genera

automáticamente cuando se usa la herramienta javadoc.exe.

Identificadores

t
ne
En todo lenguaje de programación surge la necesidad de utilizar una serie de elementos que

e.
debemos designar con algún nombre, por ejemplo:

in
ELEMENTO DESCRIPCIÓN
- Elementos utilizados para referenciar posiciones de memoria dónde podremos
Variables
almacenar datos necesarios para el programa.
nl
- Elementos utilizados para referenciar posiciones de memoria dónde reside el código
Funciones
del programa.
ao

- Elementos que encapsulan variables (propiedades) y funciones (métodos) de manera


Objetos que resulta más sencillo modelar los problemas que queremos resolver simplificando
el diseño de programas complejos.
ul

- Conforme avancemos iremos conociendo más elementos de los lenguajes de


etc.
programación.
Los identificadores nombran variables, funciones, clases y objetos, cualquier cosa que el
ia

programador necesite identificar.


m

En la siguiente tabla se muestran las características de los identificadores


c.
ci

Palabras reservadas

En la siguiente tabla tenemos las palabras claves proporcionadas por la documentación de SUN y

cic.miaulaonline.net
49 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

que no podrán ser utilizadas como identificador pues generarán conflictos.

t
ne
e.
Convenios para asignar nombres de las clases, variables y métodos.

in
Existe un convenio, no obligatorio, a la hora de nombrar las clases, las variables y métodos. Es
nl
recomendable seguirlo debido a que ayuda a dar claridad a los programas.
ao

- Deberían ser un nombre o una concatenación de ellos. (FacturaEnero)


Clases e interfaces
- Poner en mayúscula la primera letra de cada nombre utilizado.
- Deberían ser verbos con nombres. (calcularImporte)
ul

Métodos - Mismo regla que en clases pero poniendo con minúscula la primera letra de
verbo. Se aconseja no usar el símbolo de subrayado.
ia

- En mayúsculas.
Constantes - Si se usan varias palabras se aconseja separarlas mediante el símbolo de
subrayado.
m

- Deberían ser un nombre o una concatenación de ellos. (cantidadVariable)


Variables
- El primero de ellos comenzaría en minúscula y el resto en mayúsculas.
c.
ci

Separadores

cic.miaulaonline.net
50 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

t
ne
e.
in
nl
Existe un convenio, no obligatorio, a la hora de nombrar las clases, las variables y métodos:
ao

Tipos de datos primitivos y variables


ul
ia

Java utiliza cuatro tipos de elementos para abarcar todos los posibles datos básicos que podemos
m

necesitar en el desarrollo de una aplicación.


c.

Enteros, reales en coma flotante, booleanos y caracteres.


ci

La siguiente tabla lista los tipos de datos primitivos soportados por Java, sus tamaños y su formato.

TIPO TAMAÑO/FORMATO DESCRIPCIÓN


(enteros)
byte 8-bit en complemento a 2 Entero con un byte de longitud.
short 16-bit en complemento a 2 Entero corto (de 16 bits)
int 32-bit en complemento a 2 Entero.
long 64-bit en complemento a 2 Entero largo.
(reales en coma
flotante)
float 32-bit IEEE 754 Coma flotante de simple precisión.
double 64-bit IEEE 754 Coma flotante de doble precisión.

cic.miaulaonline.net
51 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

(Texto)
Un único carácter o carácter aislado.
char Carácter Unicode de 16 bits sin signo. - Un valor tipo char debe ir entre
comillas simples.
- No es un dato primitivo sino una clase
pero por su naturaleza lo incluimos
como tipo de dato.
- Se utiliza para representar secuencias
Cadena de caracteres codificados en
String de caracteres y suele traducirse como
Unicode.
cadena.
- Un dato de este tipo se delimita entre
comillas dobles.

t
"Nombre \t Pepe"

ne
(Lógicos)
boolean true o false Un valor booleano (true or false).

e.
in
nl
ao
ul
ia
m

Al definir una variable se debe indicar su tipo y se deben respetar las siguientes normas con
c.

respecto al nombre que elijamos:


ci

Vamos a ver un ejemplo práctico sobre declaración e inicialización de variables.

Nos vamos a declarar una serie de variables e imprimiremos el resultado en una ventana de Ms-Dos.

public class EjemploVariables

public static void main(String args[])

cic.miaulaonline.net
52 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

byte b=-128;

short s=32767;

int i=-2147483648;

long l=9223372036854775807L;

t
System.out.println("El valor de b es: " + b);

ne
System.out.println("El valor de s es: " + s);

e.
System.out.println("El valor de i es: " + i);

System.out.println("El valor de l es: " + l);


in
nl
}
ao

}
ul

Podremos comprobar el resultado de asignar diferentes tipos de datos en variables:


ia
m
c.
ci

Alcance de las variables

El alcance de una variable viene acotado por la zona entre llaves { } en la cual se ha definido la

variable. El siguiente dibujo lo representa:

cic.miaulaonline.net
53 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

t
ne
e.
in
Dependiendo dónde voy a declarar una variable, la variable tendrá una "visibilidad" u otra.
nl
Vamos a ver un ejemplo en el que declararemos una variable en la clase y otra en el método main:
ao

public class ClaseAmbitoVariables


ul

{
ia

int i = 25;
m

public static void main(String args[])


c.

{
ci

int i=19;

System.out.println("El valor de i es " + i);

Podemos comprobar que las dos variables pueden coexistir a pesar de que su nombre sea el mismo

debido a que están declaradas en diferentes "secciones" o ámbitos de la clase.

cic.miaulaonline.net
54 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Si declarásemos la misma variable dentro del mismo método main produciría una excepción

indicándonos que la variable ya se ha declarado dentro del mismo método.

t
public class ClaseAmbitoVariables

ne
{

e.
public static void main(String args[])

{
in
nl
int i = 25;
ao

int i=19;

System.out.println("El valor de i es " + i);


ul

}
ia

}
m
c.
ci

Declarando variables

Al declarar una variable de un tipo e inicializarla con un valor, el compilador normalmente sabe de

cic.miaulaonline.net
55 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

qué tipo se trata. Sin embargo, hay ocasiones en la que el tipo es ambiguo y hay que guiar al

compilador proporcionándole información adicional. Estos casos se reflejan en la siguiente tabla:

t
ne
e.
in
nl
ao
ul
ia

Antes de usar una variable en Java, debemos declararla, especificando su tipo.


m

A continuación se indica cómo se declaran las variables en Java:


c.

tipodato nombre = valor;


ci

Ahora, podemos ver cómo se declara una variable de tipo int, es decir, contiene un entero:

public class PrimeraClase

public static void main(String[] args)

cic.miaulaonline.net
56 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

int dias = 31;

System.out.println("Numero de dias: "+ dias);

Declaración de variables de tipo entero

t
Java utiliza cuatro tipos de datos para almacenar enteros, cada uno con su propio número de bytes

ne
alojados en memoria: byte (un byte), short (dos bytes), int (cuatro bytes) y long (ocho bytes).

e.
Utilizar un tipo de dato entero u otro depende de los valores de datos que deseamos almacenar, así

como de otras consideraciones, como cuánta memoria hay disponible.

in
Vamos a mostrar un ejemplo práctico en el que utilizamos todos los tipos de datos enteros y
nl
posteriormente mostramos su valor por pantalla:
ao

public class PruebaVariables


ul

{
ia

public static void main(String[] args)


m

{
c.

byte byte1;
ci

short short1;

int int1;

long long1;

byte1 = 1;

short1 = 100;

int1 = 10000;

cic.miaulaonline.net
57 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

long1 = 100000000;

System.out.println("Valor de byte1 = " + byte1);

System.out.println("Valor de short1 = " + short1);

System.out.println ("Valor de int1 = " + int1) ;

System.out.println("Valor de long1 = " + long1);

t
}

ne
}

e.
Y el resultado de la aplicación:

in
nl
ao
ul
ia

Declaración de variables de coma flotante


m

Java incluye dos tipos de variables en coma flotante, cada uno con su propio número de bytes para

aplicar en memoria. Los dos tipos que tenemos son float (cuatro bytes) y double (ocho bytes).
c.

Vamos a visualizar un ejemplo en el que vamos a declararnos los tipos de datos float y double para
ci

mostrarlos por pantalla.

public class PruebaVariables

public static void main(String[] args)

cic.miaulaonline.net
58 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

float float1;

double double1;

float1 = 21.1231157111;

double1 = 19.11437687311E+9;

System.out.println("Valor de float1 = " + float1);

t
System.out.println("Valor de double1 = " + double1);

ne
}

e.
}

Resultado de la compilación
in
nl
ao
ul
ia
m

Podremos comprobar que en la compilación nos aparece una excepción que indica que podemos
c.

perder precisión en los datos. Esto sucede porque en Java todos los tipos de datos con decimales son

double. Si queremos especificar un tipo de dato float, debemos hacerlo con F al final del número a
ci

asignar.

public class PruebaVariables

public static void main(String[] args)

cic.miaulaonline.net
59 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

float float1;

double double1;

float1 = 21.1231157111F;

double1 = 19.11437687311E+9D;

System.out.println("Valor de float1 = " + float1);

t
System.out.println("Valor de double1 = " + double1);

ne
}

e.
}

Resultado de la aplicación ya compilada:


in
nl
Podremos comprobar que en la compilación nos aparece una excepción que indica que podemos

perder precisión en los datos. Esto sucede porque en Java todos los tipos de datos con decimales son
ao

double. Si queremos especificar un tipo de dato float, debemos hacerlo con F al final del número a

asignar.
ul

public class PruebaVariables


ia

{
m

public static void main(String[] args)


c.

{
ci

float float1;

double double1;

float1 = 21.1231157111F;

double1 = 19.11437687311E+9D;

System.out.println("Valor de float1 = " + float1);

cic.miaulaonline.net
60 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

System.out.println("Valor de double1 = " + double1);

t
ne
e.
in
Declaración de variables de tipo carácter char
nl
Se pueden declarar variables de tipo carácter con la palabra reservada char.
ao

Los posibles valores que se pueden almacenar en una variable char son caracteres Unicode del 0 al

65535, pero el código ASCII sólo tiene caracteres dentro del rango de 0 a 255.
ul

Para asignar un dato carácter a un char, se realiza mediante el símbolo de la comilla simple.
ia

Vamos a comprobar una aplicación en la que asignaremos valores de tipo carácter e int a un tipo de

datos char. Comprobaremos que el resultado es la "traducción" del código ASCII a una
m

representación de letra en la aplicación.


c.

public class PruebaVariables


ci

public static void main(String[] args)

char char1, char2;

char1 = 88;

cic.miaulaonline.net
61 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

char2 = 'B';

System.out.println("Valor de char1 (Entero ASCII) = " + char1);

System.out.println("Valor de char2 (Letra) = " + char2);

t
Y vemos que como resultado de la compilación muestra el carácter X como resultado del valor del

ne
código ASCII 88.

e.
in
nl
ao

Declaración de variables de tipo boolean


ul

Las variables de tipo verdadero o falso se declaran con la palabra clave boolean.
ia

En Java, las variables de tipo booleano sólo pueden tener dos valores: verdadero o falso, no pudiendo
m

guardar valores numéricos como 0 o 1 como sucede en otros lenguajes de programación.


c.

Dichas variables se utilizan para almacenar información y poder realizar un análisis de nuestro
ci

código dependiendo del resultado de verdadero o falso. Se utilizan para realizar bifurcaciones en

nuestro código, de forma que el código no sea lineal, sino que entre por alguna de las bifurcaciones.

Los valores de true o false en la asignación a estas variables deben ir en minúscula.

Vamos a visualizar un ejemplo en el que asignaremos valores a dos variables de tipo boolean:

public class PruebaVariables

cic.miaulaonline.net
62 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

public static void main(String[] args)

boolean boolean1, boolean2;

boolean1 = true;

boolean2 = false;

t
System.out.println("Valor de boolean1 = " + boolean1);

ne
System.out.println("Valor de boolean2 = " + boolean2);

e.
}

}
in
nl
Y el resultado de la compilación es:
ao
ul
ia
m

Creando y usando objetos


c.
ci

Como hemos ido aprendiendo a lo largo del módulo, podemos declararnos variables para almacenar

valores simples (números, letras, decimales). Pero el problema lo podemos encontrar si deseamos

almacenar algo más complejo, por ejemplo, los datos de una factura o los datos de un determinado

registro de compra.

Dentro de dicho supuesto, una factura está compuesta por múltiples valores simples que conforman

un conjunto, el precio, el iva, el descuento, el destinatario...

cic.miaulaonline.net
63 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Gracias a la tecnología de Java, podemos declararnos objetos, llamados Clases, que nos permiten

almacenar gran cantidad de objetos simples desde un mismo lugar, o lo que es lo mismo, nos

permite definir un objeto compuesto para manejar y utilizar sus objetos simples.

A lo largo del módulo vamos a aprender a crearnos objetos propios y a manejar un objeto ya creado

como es la clase String, con sus métodos y miembros de objeto.

Declarar, instanciar e inicializar variables de referencia de objeto

t
ne
Una clase es una agrupación de datos (miembros o campos) y de funciones (métodos) que operan

e.
sobre esos datos.

in
La definición de una clase se hace de la siguiente forma:
nl
public class NombreClase
ao

// definición de variables y métodos


ul

}
ia

La palabra public es opcional, si no se pone, la clase tiene la visibilidad por defecto, esto significa
m

que solo es visible para las demás clases del package. Todos los métodos y variables deben ser

definidos dentro de las llaves bloque {...} de la clase.


c.
ci

Un objeto es un elemento concreto para usar de una clase.

Las clases son la definición de los elementos de un objeto, mientras que los objetos son variables

concretas de un tipo determinado de una clase.

NombreClase MiObjeto;

Vamos a enumerar algunas características importantes de las clases:

Todas las variables y funciones de Java deben pertenecer a una clase. No hay variables y

cic.miaulaonline.net
64 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

funciones globales para todo el entorno.

Si una clase deriva de otra, hereda todas sus variables y métodos.

Java tiene una jerarquía de clases estándar de la que pueden derivar las clases que crean los

usuarios.

Una clase solo puede heredar de una única clase (en Java no existe herencia múltiple). Si al

declarar una clase no se especifica de qué clase deriva, por defecto dicha clase hereda de

Object. La clase Object es la base de toda la jerarquía de clases de Java.

En un fichero se pueden definir varias clases, pero en un fichero no puede existir más que una

t
ne
clase public. Dicho fichero se debe nombrar como la clase public que contiene con extensión

*.java. Con algunas excepciones, lo normal es escribir una sola clase por fichero.

e.
Si una clase incluida en un fichero no contiene el ámbito public, no es imprescindible que el

fichero se nombre como la clase.

in
Los métodos de una clase pueden referirse de modo global al objeto de esa clase al que se

aplican por medio de la palabra clave this. Dicha palabra clave hace referencia al objeto sobre
nl
el que se está creando la clase.
ao

Las clases se pueden unir en packages, incluyendo una sentencia al principio del fichero

(package NombrePaquete;). Esta unión en packages está relacionada con la jerarquía de


ul

directorios y ficheros en la que se almacenan las clases.


ia

Todos estos conceptos nos llevan a la creación de objetos de referencia, dichos objetos de referencia
m

son clases creadas con unos métodos y características concretas.


c.

Para crearnos objetos de referencia no se realiza sobre la propia clase Factura, digamos que la clase

Factura es una definición de clase y para su utilización se realiza sobre cualquier otra clase de Java.
ci

Para visualizar un objeto de referencia vamos a mostrar un ejemplo y su utilización. Nos vamos a

crear una nueva clase llamada Factura. Una factura está compuesta por un nombre de titular, un

concepto, un precio, el iva y el total de la factura.

public class Factura

public String NombreTitular;

cic.miaulaonline.net
65 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

public String ConceptoFactura;

public double Precio;

public double Total;

public double Iva;

t
Acabamos de crearnos una clase en la que podemos almacenar una serie de datos primitivos en su

ne
conjunto. Dicha clase contiene una serie de miembros que almacenará cada objeto creado de ese

tipo concreto de clase.

e.
Cada objeto Factura, es decir cada instancia de la clase, tiene su propia copia de las variables

in
miembro. Las variables miembro de una clase (también llamadas campos) pueden ser de tipos
nl
primitivos (boolean, int, long, double) o referencias a objetos de otra clase (composición).
ao

En nuestro ejemplo, hemos creado cinco variables miembro de la clase factura, dichas variables

miembro son elementos que pertenecen a la clase Factura y solo pueden ser utilizadas por objetos
ul

de la clase Factura. Cada Factura que creemos tendrá unos valores diferentes para cada miembro.

public class UtilizacionFactura


ia

{
m

public static void main(String[] args)


c.
ci

Factura f1 = new Factura();

f1.NombreTitular = "Adrian Ramos";

f1.ConceptoFactura = "IPad";

f1.Precio = 540;

f1.Iva = 30;

cic.miaulaonline.net
66 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

f1.Total = 570;

System.out.println("Datos de la factura numero 1");

System.out.println("Nombre Titular: " + f1.NombreTitular);

System.out.println("Concepto Factura: " + f1.ConceptoFactura);

System.out.println("Precio: " + f1.Precio);

t
System.out.println("Iva: " + f1.Iva);

ne
System.out.println("Total: " + f1.Total);

e.
System.out.println("-------------------------------------");

Factura f2 = new Factura();


in
nl
f2.NombreTitular = "Lucia Serrano";
ao

f2.ConceptoFactura = "PSP";
ul

f2.Precio = 169;
ia

f2.Iva = 15;
m

f2.Total = 184;
c.

System.out.println("Datos de la factura numero 2");


ci

System.out.println("Nombre Titular: " + f2.NombreTitular);

System.out.println("Concepto Factura: " + f2.ConceptoFactura);

System.out.println("Precio: " + f2.Precio);

System.out.println("Iva: " + f2.Iva);

System.out.println("Total: " + f2.Total);

cic.miaulaonline.net
67 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Como podemos comprobar, cada objeto referenciado de la clase factura contiene unos datos

diferentes para cada elemento. Es decir, cada miembro de la instancia de Factura almacena unos

datos diferentes en cada objeto.

t
ne
e.
in
nl
ao

Un aspecto muy importante del correcto funcionamiento de los programas es que no haya datos sin

inicializar. Por eso las variables miembro se inicializan siempre de modo automático, incluso antes
ul

de llamar al constructor. Sin embargo, lo más adecuado es inicializar las variables miembro dentro

del constructor.
ia

Un constructor, como veremos más adelante, es un método de inicio de la clase. Cuando llamamos a
m

la palabra clave new al crear la instancia, estamos llamando al constructor de la clase sobre la que
c.

estamos instanciando un objeto.


ci

Un constructor se define con el mismo nombre de la clase y es el primer lugar que el código lee en

una clase. Vamos a comprobarlo modificando el ejemplo Factura:

Para hacer referencia a los objetos que pertenecen a la clase sobre la que estamos escribiendo se

utiliza la palabra clave this. Dicha palabra hace referencia a cualquier elemento declarado en la

clase.

public class Factura

cic.miaulaonline.net
68 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

public String NombreTitular;

public String ConceptoFactura;

public double Precio;

public double Total;

public double Iva;

t
//CONSTRUCTOR DE FACTURA

ne
public Factura()

e.
{

//VAMOS A INICIALIZAR LOS MIEMBROS DE LA CLASE


in
nl
this.NombreTitular = "sin titular";
ao

this.ConceptoFactura = "sin concepto";


ul

this.Precio = 0.0;
ia

this.Iva = 0.0;
m

this.Total = 0.0;
c.

}
ci

Si ahora utilizamos un objeto de la clase Factura, solamente instanciando un objeto, los valores

iniciales se han creado desde el constructor.

public class UtilizacionFactura

public static void main(String[] args)

cic.miaulaonline.net
69 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Factura f1 = new Factura();

System.out.println("Datos de la factura CONSTRUIDA");

System.out.println("Nombre Titular: " + f1.NombreTitular);

System.out.println("Concepto Factura: " + f1.ConceptoFactura);

t
System.out.println("Precio: " + f1.Precio);

ne
System.out.println("Iva: " + f1.Iva);

e.
System.out.println("Total: " + f1.Total);

}
in
nl
}
ao

Como resultado vemos los valores iniciales creados desde el constructor:


ul
ia
m
c.
ci

Variables static de clase

Una clase puede tener variables propias de la clase y no de cada objeto. A estas variables se les

llama variables de clase o variables static. Las variables static se suelen utilizar para definir

constantes comunes para todos los objetos de la clase o variables que solo tienen sentido para toda

la clase.

cic.miaulaonline.net
70 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Las variables de clase se crean anteponiendo la palabra static a su declaración. Para llamarlas se

utiliza el nombre de la clase.

public static int VariableEstatica;

Las variables static se llaman desde la clase y no pueden hacer referencia al objeto, es decir, no

pueden utilizar la palabra this, debido a que todas las instancias de la clase tendrán el mismo valor.

Como ejemplo, podemos visualizarlo fácilmente incluyendo una variable static dentro de nuestro

t
ejemplo de factura:

ne
public class Factura

e.
{

public static String TipoIva = "Iva del 16%";


in
nl
public String NombreTitular;
ao

...
ul

}
ia

Ahora vamos a utilizar la clase Factura:


m

public class UtilizacionFactura


c.

{
ci

public static void main(String[] args)

Factura f1 = new Factura();

Factura f2 = new Factura();

f1.NombreTitular = "Adrian Ramos";

f2.NombreTitular = "Lucia Serrano";

cic.miaulaonline.net
71 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

System.out.println("Nombre Titular Factura 1: " + f1.NombreTitular);

System.out.println("Nombre Titular Factura 2: " + f2.NombreTitular);

System.out.println("Tipo Iva: " + Factura.TipoIva);

Factura.TipoIva = "Iva 18%";

System.out.println("Tipo Iva: " + Factura.TipoIva);

t
}

ne
}

e.
Como podemos comprobar, las variables miembro tienen un valor diferente para cada instancia del

in
objeto, mientras que la variable static TipoIva no hace referencia a ninguno de los dos objetos (f1 y

f2), sino que hace referencia directamente sobre la clase, lo que quiere decir que todos los objetos
nl
de la clase Factura tendrán el mismo valor. Si modificamos el contenido de la variable static, se
ao

modifica para toda la clase.


ul
ia
m
c.
ci

Las variables miembro static se crean en el momento en que pueden ser necesarias: cuando se va a

crear el primer objeto de la clase, en cuanto se llama a un método static o en cuanto se utiliza una

variable static de dicha clase. Lo importante es que las variables miembro static se inicializan

siempre antes que cualquier objeto de la clase.

Variables final o constantes

cic.miaulaonline.net
72 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Una variable de un tipo primitivo declarada como final no puede cambiar su valor a lo largo de la

ejecución del programa, es una constante.

Java permite separar la definición de la inicialización de una variable final. La inicialización puede

hacerse más tarde, en tiempo de ejecución, llamando a métodos o en función de otros datos.

La variable final definida es constante, pero no tiene por qué tener el mismo valor en todas las

ejecuciones del programa, pues depende de cómo haya sido inicializada.

t
Además de las variables miembro, también las variables locales y los propios argumentos de un

ne
método pueden ser declarados como final.

e.
Para declarar una variable constante, bastaría con incluir la palabra final en la declaración de la

variable:

public final int NombreConstante; in


nl
Vamos a mostrar un ejemplo:
ao

public class Factura


ul

{
ia

public static String TipoIva = "Iva del 16%";


m

public final double PI;


c.

public String NombreTitular;


ci

public String ConceptoFactura;

public double Precio;

public double Total;

public double Iva;

//CONSTRUCTOR DE FACTURA

cic.miaulaonline.net
73 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

public Factura()

//VAMOS A INICIALIZAR LOS MIEMBROS DE LA CLASE

this.PI = 3.1416;

this.NombreTitular = "sin titular";

t
this.ConceptoFactura = "sin concepto";

ne
this.Precio = 0.0;

e.
this.Iva = 0.0;

this.Total = 0.0;
in
nl
}
ao

}
ul

Como podemos comprobar, hemos declarado una variable final y la hemos inicializado en el

constructor, lo que no podemos hacer es cambiar su valor posteriormente, ni en el uso de un objeto


ia

Factura, ni en la propia clase factura.


m

public class UtilizacionFactura


c.

{
ci

public static void main(String[] args)

Factura f1 = new Factura();

System.out.println("Valor de la constante PI: " + f1.PI);

cic.miaulaonline.net
74 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

t
ne
Constructores

e.
in
Es un tipo específico de método que siempre tiene el mismo nombre de la clase y se utiliza para

construir objetos de esa clase.


nl
No tiene tipo de dato específico de retorno, ni siquiera void. Esto se debe a que el tipo que debe
ao

devolver un constructor de clase es el propio tipo de clase.


ul

Los constructores pueden sobrecargarse.


ia

Si el programador no declara un constructor el sistema siempre crea un constructor por defecto.


m

Para inicializar un objeto basta con llamar a su constructor después de la palabra reservada new y

asignarlo a una referencia declarada previamente. Un constructor es un método que se ejecuta cada
c.

vez que se crea un objeto, el propósito de este procedimiento es el de inicializar los datos del objeto.

El nombre del constructor siempre es igual al nombre de la clase.


ci

Declaración

class facturar {

int total, importe;

facturar () { total=0; importe=0; } // el constructor

cic.miaulaonline.net
75 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Constructor con parámetros

class facturar {

int total, importe;

facturar (String cliente) { total=0; importe=0; }

t
Varios constructores

ne
class facturar {

e.
int total, importe;

in
facturar () { total=0; importe=0; } // el constructor
nl
facturar (String cliente) { total=0; importe=0; }
ao

}
ul

Herencia
ia
m

Java permite el empleo de la herencia, característica muy potente que permite definir una clase

tomando como base a otra clase ya existente. Esto es una de las bases de la reutilización de código y
c.

especialización.
ci

Dentro de un mismo tipo de objetos (por ejemplo, los empleados), existe una variedad de modelos

(administrativos, programador, gerente, etc) que dificulta la definición de la clase genérica. Por

ejemplo, si defino los métodos incentivos() y vacacionesNavidad(), estos métodos solo se podrán

aplicar a aquellos empleados que tengan incentivos y vacaciones en navidad.

Para resolver este tipo de problemas, la programación orientada a objetos hace uso de la herencia.

La herencia consiste en definir una clase a partir de otra ya existente. De esta forma podemos

definir un empleado genérico y mediante herencia crear otras clases más especializadas que

cic.miaulaonline.net
76 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

respondan a las necesidades de cada tipo de empleado. La profundidad en la jerarquía de clases no

tiene límite.

La herencia se consigue mediante el uso de extends.

Una clase sólo puede heredar de una única superclase directamente (no existe la herencia múltiple).

Los interfaces (estudiados más adelante) permitirán simular la herencia múltiple.

public class Empleado {

t
ne
String rut;

String nombre;

e.
boolean perfil;

String colorperfil; in
nl
Empleado()
ao

{
ul

}
ia

Empleado(String nombre){
m

this.nombre = nombre;
c.

}
ci

public String getNombre()

return this.nombre;

public void setNombre(String nombre)

cic.miaulaonline.net
77 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

this.nombre = nombre;

public class Programador extends Empleado{

t
String apellido;

ne
public Programador() {

e.
super();

}
in
nl
public Programador(String nombre)
ao

{
ul

super(nombre);
ia

}
m

void setApellido(String apellido) {


c.

this.apellido = apellido;
ci

public String getNombre() {

return this.nombre+" "+this.apellido;

public static void main (String args[]) {

Programador Programador = new Programador();

cic.miaulaonline.net
78 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Programador.setNombre("Pepe");

Programador.setApellido("Gómez");

Programador ProgramadorDos = new Programador("Pepe");

ProgramadorDos.setApellido("Pillos");

System.out.println("Programador 1 ->\t"+Programador.getNombre());

t
System.out.println("Programador 2 ->\t"+ProgramadorDos.getNombre());

ne
}}

e.
Variables y métodos en las subclases

in
nl
Las subclases heredan el estado (propiedades) y el comportamiento (métodos) de la superclase.
ao

Sin embargo, las subclases no están limitadas al estado y comportamiento de la superclases. Las

subclases pueden añadir variables y métodos que las diferenciaran de las otras subclases.
ul

Además, las subclases pueden sobrescribir los métodos que heredan de la superclases, si lo
ia

necesitan, para especializar más su funcionalidad. Para sobrescribir un método basta con definir en
m

la subclase uno que se llame igual, tenga el mismo tipo de retorno y la misma lista de parámetros.
c.

Clases abstractas
ci

Una clase abstracta es una clase que ha dejado alguno de sus métodos definido pero no lo ha

implementado. La definición de un método consiste en especificar su nombre, el tipo de retorno y los

argumentos de entrada.

public abstract class Empleado{

// variables que heredarán las subclases.

cic.miaulaonline.net
79 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

//Métodos comunes que sí se implementan en la clase abstracta.

//Métodos abstractos que deberán implementar las subclases.

// Estamos obligando a que todos los empleados

// tengan vacaciones y pagas

public abstract void Vacaciones();

t
public abstract void pagas();

ne
}

e.
Otros métodos sí pueden estar implementados.

in
Si una clase tiene un método abstracto, ella también tiene que ser declarada abstracta.
nl
De una clase abstracta no se pueden crear objetos porque el compilador no sabría qué hacer con los
ao

métodos que no están implementados. Por eso no tiene sentido el constructor.

Las clases abstractas no pueden tener métodos estáticos porque hemos visto que estos quedan tal
ul

cual en el proceso de herencia y no son sobrescritos. El compilador no da error.


ia

No tiene sentido declarar variables privadas en una clase abstracta porque no se podrán usar nunca.
m

Paquetes
c.
ci

Cuando se necesita establecer seguridad, o simplemente cuando el número de clases que aparecen

es muy grande, resulta necesario organizarlas de alguna manera que no sea el puro azar.

Java utiliza para ello los paquetes. Un paquete es un conjunto de clases e interfaces relacionados

que proporcionan protección en el acceso y gestión de nombres.

Las clases se agrupan en paquetes por varios motivos:

Los programadores pueden determinar fácilmente que clases e interfaces están relacionados.

cic.miaulaonline.net
80 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Se facilita la búsqueda de una clase determinada.

Se evitan conflictos con los nombres de las clases.

Se pueden establecer restricciones de seguridad.

Sintaxis

Para decirle al compilador que una clase o un interface pertenece a un paquete en concreto, basta

con indicarlo al comienzo mediante la sentencia package.

t
ne
package Empleados

En este ejemplo agrupamos las clases empleado y programador en un paquete llamado empleados.

e.
package empleado;

public class Empleado { ..... in


nl
}
ao

package empleado;
ul

public class Programador extends Empleado{ ......


ia

}
m

Modificadores de acceso
c.

Método Propiedad Clase


de - Cada objeto creado de una clase
- Para poder invocar al método es - No tiene
ci

instancia tiene su propia copia de la


necesario crear objeto. sentido.
(no static). propiedad.
- Todos los objetos creados a
- Se puede invocar al método a - No se puede
static partir de la clase comparten las
través del nombre de la clase. usar.
propiedades declaradas así.
- Se puede
- El método puede ser sobre - La variable puede modificar su extender por
No final
escrito en el proceso de herencia. valor. herencia dicha
clase.
- La clase no se
- El método no puede ser
- La variable es una constante y puede extender
final sobrescrito en el proceso de
su valor no puede ser modificado. más por
herencia.
herencia.

cic.miaulaonline.net
81 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

- El acceso al método sólo se - El acceso a la variable sólo se


- No se puede
private puede realizar desde la propia puede realizar desde la propia
usar.
clase. clase.
- El acceso al método sólo se - El acceso a la propiedad sólo se
- No se puede
protected puede realizar desde las clases puede realizar desde las clases
usar.
que se encuentren en el paquete. que se encuentre en el paquete.
- El acceso a la propiedad se
- El acceso al método se puede
puede realizar desde cualquier - El que debe
realizar desde cualquier otra
public otra clase independientemente aplicarse sobre la
clase independientemente del
del paquete en el que se clase.
paquete en el que se encuentre.
encuentre.
- Se aplica sobre

t
- Este método no tiene cuerpo y las clases que

ne
abstract deberá ser implementado en las - No está permitido. tienen alguno de
subclases. sus miembros
abstractos.

e.
Interfaces

in
nl
Un interface declara lo métodos de una clase sin implementarlos (nombres de métodos, listas de

argumentos, tipos de retorno) los cuales serán implementados por otra clase.
ao

La diferencia entre una interface y una clase abstracta es que la interface es simplemente una lista

de métodos no implementados, además puede incluir la declaración de constantes. Una clase


ul

abstracta puede incluir métodos implementados y no implementados o abstractos, miembros dato


ia

constantes y otros no constantes.


m

Una clase solamente puede derivar extends de una clase base, pero puede implementar varios

interfaces. Los nombres de los interfaces se colocan separados por una coma después de la palabra
c.

reservada implements.
ci

Creación interface

En este ejemplo creamos una interface con los métodos que queremos que se implementen.

interface InterfazCoche{

public void montar();

public void comenzar();

cic.miaulaonline.net
82 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

public void bajar();

public int verVMaxima();

public void cambiarVMaxima(int VMAXIMA);

public void usar() throws IOException;

public void menu();

t
}

ne
Implementación de la interface

e.
Si una clase quiere implementar un interface debe usar la palabra clave implements. Si queremos

in
heredar e implementar al mismo tiempo, debemos colocar primero extends seguido del nombre de la

clase y a continuación implements seguido del nombre de la clase.


nl
Sintaxis:
ao

public class NombreClase extends SuperClase implements Interfaz1, Interfaz2,... {


ul

//Cuerpo de la clase
ia

}
m

Ejemplo:
c.

public abstract class Conductor implements InterfazCoches{


ci

..............

Analizando un problema y diseñando una solución

La plataforma Java, es una plataforma de programación para desarrollar y ejecutar software de

aplicaciones en Lenguaje de programación Java con arquitectura de N capas distribuidas y que se

cic.miaulaonline.net
83 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

apoya ampliamente en componentes de software modulares ejecutándose sobre un servidor de

aplicaciones.

t
ne
e.
Las características más importantes de esta plataforma son:

in
Heterogénea: Debe permitir múltiples plataformas, sistemas operativos y lenguajes de
nl
desarrollo.

Fiable: Tiene que dar la confianza de que cumplirá su cometido.


ao

Segura: Debe controlar el acceso, la autorización y el transporte

Robusta: Debe ser tolerante a fallos.


ul

Escalable: Tiene que facilitar la ampliación y modificación necesarias


ia

Alta disponibilidad: Debe ser fácil su adquisición, formación y actualización.

Fácil mantenimiento: Debe ser fácil mantener el sistema mediante la actualización de sus
m

componentes.
c.

SUN libera en el Java EE:


ci

Especificaciones de cada tecnología incluida.

Test de compatibilidad (Compatibility Test Suite)

Implementación de referencia. Para desarrollo de aplicaciones, pero de uso

no libre. (Sun Java System Application Server Platform Edition ..)

Las tecnologías que incluye Java EE 5 son las siguientes:

Enterprise JavaBeans (EJB).

Servlet

cic.miaulaonline.net
84 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

JavaServer Page (JSP)

JavaServer Pages Standard Tag Library (JSTL).

JavaServer Faces

Java Message Service (JMS).

Java Transaction API (JTA).

JavaMail API y JavaBeans Activation Framework (JAF).

Tecnologías XML (JAXP, JAX-RPC, JAX-WS, JAXB, SAAJ, JAXR)

JDBC API

t
ne
Java Naming and Directory Interface (JNDI)

Java Authentication and Authorization Service (JAAS)

e.
Definir la tecnología servlet

in
nl
[[[Elemento Multimedia]]]
ao

Los servlets (al igual que los applet) se ejecutan en una caja restringida (sandbox) lo que protege al

servidor de cualquier mal funcionamiento del servlet. Esto permite a los proveedores de Internet que

sus clientes depositen servlets sin temor de que sean maliciosos. Se incrementa la seguridad
ul

respecto a cualquier otra tecnología notablemente.


ia

Al estar escritos en Java, tienen todas las ventajas de este lenguaje (pueden hacer uso de cualquier
m

paquete de Java). Como es un lenguaje altamente escalable surgirán paquetes de una forma muy

rápida.
c.

Los servlets son portables entre plataformas ("escribir una vez, ejecutar en cualquier lugar"). Los
ci

servidores Web más populares, dicen soportar los servlets.

Los servlets son componentes de la parte del servidor de Java EE, encargados de generar respuestas

a las peticiones recibidas de los clientes.

En la mayoría de las páginas Web se van a introducir los llamados formularios, los cuales sirven para

recoger datos aportados por los clientes. Estos formularios van a ser una mezcla de código HTML y

de Scripts ( son programas que se ejecutan en el servidor y su función fundamental es la de recoger

los datos que el cliente ha introducido a través de un formulario y, en base a ellos, construir una

cic.miaulaonline.net
85 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

página dinámicamente para responder a la petición. Estas páginas se llaman dinámicas porque no

van a existir en el disco duro del servidor sino que se van a generar como respuesta a una petición

hecha desde el cliente a través de un formulario.

Estos Scripts aún se usan mucho por varios motivos:

Se van a encontrar en el servidor por lo que son totalmente independientes del navegador que

use el cliente.

t
La respuesta que generar va a ser mucho más rápida debido a su ubicación en el servidor.

ne
La seguridad aumenta mucho debido a que los programas van a correr bajo el control directo

del administrador del servidor.

e.
Los Scripts más extendidos son los denominados CGI (Common Gateway Interface). Estos CGI

tienen una gran desventaja: son poco eficientes debido a que el servidor ejecuta una copia de

in
los mismos por cada petición que le llega. Así, si el sitio Web es bastante popular, supone una
nl
pérdida considerable de rendimiento. Para solventar este problema, los fabricantes han

desarrollado alternativas: Microsoft ( ISAPI; NetScape ( NSAPI; JavaSoft ( Servlets.


ao

Las ventajas de los Servlets en comparación con las CGI son:


ul

Los Servlets no se van a ejecutar en un proceso separado, por lo que no necesita ejecutarse cada vez
ia

que recibe una petición.


m

Una vez que se ha invocado, quedan almacenados en memoria por lo que consumen menos recursos,

aunque se le esté invocando constantemente. Esto significa que una sola instancia de un Servlet
c.

responde a todas las peticiones con lo que, además del ahorro de recursos, se pueden gestionar, de
ci

modo más adecuado, los datos que le llegan.

Los Servlets van a ser aplicaciones que van a ser ejecutados, al igual que los Applets de Java, por un

motor Servlet en una caja restringida (lo que se conoce con el nombre de Sandbox) por lo que se

aumenta la seguridad enormemente. Los proveedores de Internet, debido a este motivo, no van a

tener ningún temor a que los usuarios puedan introducir Servlet en el servidor, ya que se

encuentran protegidos frente a código malicioso.

Al estar escritos en Java, tienen todas las ventajas de este lenguaje (pueden hacer uso de cualquier

cic.miaulaonline.net
86 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

paquete de Java). Como es un lenguaje altamente escalable surgirán paquetes de una forma muy

rápida (por ejemplo, ya existen paquetes para la gestión de documentos XML).

Los Servlets son portables entre plataformas (siguen la premisa de Java "escribir una vez, ejecutar

en cualquier lugar"). Netscape, Apache e IIS, los tres servidores Web más populares, soportan los

Servlets.

En esta imagen podemos apreciar el esqueleto básico de una aplicación Servlet:

t
ne
e.
in
nl
ao
ul
ia

Las sentencias import indican al compilador de Java la inclusión de todas las clases públicas e
m

interfaces de los paquetes java.io y javax.servlet en la compilación.

La clase extiende (extends), es heredera de la clase HttpServlet. Esta clase proporciona la interfaz
c.

para que el servidor le pase las peticiones al servlet y el mecanismo para controlar el ciclo de vida
ci

del servlet.

Definir la tecnología JavaServer Pages

[[[Elemento Multimedia]]]
Las JavaServer Pages (JSP) permiten separar la parte dinámica de tus páginas de la parte HTML

estática. Para ello, basta con:

cic.miaulaonline.net
87 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Escribir la parte estática HTML de la manera habitual.

Encerrar el código Java que genera la parte dinámica de la página entre unos delimitadores

especiales, la mayoría de los cuales empiezan por:

style="margin-left: 0">Si quieres tener en la salida estática HTML el conjunto de caracteres:

t
ne
e.
En esta imagen podemos apreciar las directivas que utilizaremos en aplicaciones JSP:

in
nl
ao
ul
ia
m
c.
ci

Una página JSP cuando se ejecuta el servidor de base de datos genera un servlet. El ejemplo

anterior generará un servlet como el de la imagen siguiente:

cic.miaulaonline.net
88 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

t
ne
e.
in
El motor de las páginas JSP está basado en los servlets de Java -programas en Java destinados a
nl
ejecutarse en el servidor-, aunque el número de desarrolladores que pueden afrontar la
ao

programación de JSP es mucho mayor, dado que resulta mucho más sencillo aprender que los

servlets.
ul
ia

En JSP creamos páginas de manera parecida a como se crean en ASP o PHP -otras dos tecnologías

de servidor-. Generamos archivos con extensión .jsp que incluyen, dentro de la estructura de
m

etiquetas HTML, las sentencias Java a ejecutar en el servidor. Antes de que sean funcionales los

archivos, el motor JSP lleva a cabo una fase de traducción de esa página en un servlet,
c.

implementado en un archivo class (Byte codes de Java). Esta fase de traducción se lleva a cabo
ci

habitualmente cuando se recibe la primera solicitud de la página .jsp, aunque existe la opción de

precompilar en código para evitar ese tiempo de espera la primera vez que un cliente solicita la

página.

JSTL

JSTL es una biblioteca que implementa funciones de uso frecuente en aplicaciones JSP. En concreto,

cic.miaulaonline.net
89 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

JSTL proporciona cinco bibliotecas de etiquetas JSP:

Funciones comunes de iteración sobre datos, operaciones condicionales, e importación de otras

páginas.

Internacionalización y formateo de texto.

Funciones de manipulación de cadenas.

Procesamiento de XML.

Acceso a bases de datos.

t
ne
Un lenguaje de expresión para referenciar objetos y sus propiedades sin necesidad de código

Java.

e.
Validadores de bibliotecas de etiquetas (Tag Library Validators, TLVs).

JSTL requiere un contenedor de JSP 2.0.

Definir la tecnología EJB in


nl
ao

Un EJB (Enterprise JavaBean) es un objeto seguro, transaccional y quizás persistente, pueden ser
ul

remoto o local, oculta las APIs de seguridad, transacciones y persistencia ,usa IIOP e

interoperabilidad con CORBA.


ia

Un ejemplo práctico sería el siguiente:


m

Customer.java: es en este ejemplo el "remote interface" que define los métodos de negocio que
c.

puede invocar el cliente. En este caso podéis comprobar que existen sólo un método
ci

getInformation, que permite obtener la información asociada a un usuario de la tienda de venta

de Logos. Este método se implementa en la clase del bean.

CustomerHome.java: es en este ejemplo el "home interface" que define los métodos que le

permiten al cliente crear, buscar y eliminar el bean. En este caso podéis comprobar que esta

interfaz proporciona un método que permite crear el bean a partir de los datos asociados a un

usuario, devolviendo un objeto que implementa la interfaz remota definida en Customer.java,

de esta forma se crea un nuevo usuario en nuestro sistema que se almacenará de manera

persistente en la base de datos. En esta interfaz también existe un método que permite buscar

cic.miaulaonline.net
90 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

una instancia del bean a partir de la clave primaria, que en este caso es el nombre del usuario.

CustomerBean.java: es en este ejemplo el código del "enterprise bean" que implementa los

métodos de negocio definidos en el interfaz remoto Customer, además de todos los métodos

definidos en la interfaz EntityBean.

CustomerTO.java: es una clase auxiliar que representa la información asociada a un usuario, es

una clase serializable ya que el método de negocio definido en la interfaz remota devuelve un

objeto de este tipo.

t
ne
Definir la tecnología Struts

e.
Struts inicialmente pertenecía al proyecto Jakarta de la fundación Apache, pero se independizó y

in
pasó a conocerse como Apache Struts. Básicamente, se presenta como un framework de soporte de

desarrollo de aplicaciones web siguiendo el conocido patrón MVC (Modelo-Vista-Controlador)


nl
corriendo bajo J2EE. Este patrón arquitectónico separa los datos de una aplicación software, su
ao

interfaz de usuario y la lógica de cada uno de las entidades conceptuales que la forman, en tres

componentes distintos y es muy extendido y recomendable su uso en el desarrollo de aplicaciones


ul

web, siendo uno de los más fuertes pilares sobre los que se sustentan actualmente las buenas

prácticas de diseño de aplicaciones software para la web donde la vista se centra al HTML de la
ia

página contenedora del servicio.


m

Bajo esta idea, Struts se presenta como un enorme aliado a la hora de construir aplicaciones web de
c.

una forma elegante y con un diseño basado en una de las corrientes más influyentes dentro de las

buenas prácticas del desarrollo web.


ci

El desarrollo de una aplicación web mediante Struts se puede subdividir en varias tareas, en primer

lugar tendremos que definir la lógica de control de una entidad, persistente o no, que necesitemos

para implementar la funcionalidad del servicio o aplicación que estemos desarrollando. Por ejemplo,

supongamos que deseamos desarrollar un sistema de e-venta de entradas o tickets para

determinados eventos culturales. Después de un proceso de elicitación y análisis del software

podremos ser capaces de identificar que necesitamos una serie de objetos o entidades en nuestra

aplicación capaces de representar los conceptos que manejamos en ese dominio, como pueden ser

cic.miaulaonline.net
91 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

una entrada, un evento o el mismo usuario de la web que actuará de comprador, y que estos a su

vez, deberán almacenar la información necesaria para representar eficazmente a cada uno de ellos.

Una vez implementados estos elementos como clases Java con sus correspondientes constructores, y

métodos de acceso y consulta a los atributos de estas, los conocidos como getters y setters,

necesitaremos mantener una relación con la base de datos que soportará el almacenamiento de cada

uno de los registros que se adecuen a esas entidades persistentes. Por lo que generaremos, si es

necesario, las correspondientes clases para tal fin, una buena práctica es hacer uso de patrones

DAO. El cómo la arquitectura apunta a un determinado JDBC para acceder a una base de datos se

t
ne
lleva a cabo mediante la configuración de un simple fichero de properties.

e.
in
nl
ao
ul
ia
m
c.
ci

Definir La Tecnología Java Server Faces

JavaServer Faces (JSF) es una tecnología y framework para aplicaciones Java basadas en web que

simplifica el desarrollo de interfaces de usuario en aplicaciones Java EE. JSF usa JavaServer Pages

(JSP) como la tecnología que permite hacer el despliegue de las páginas, pero también se puede

cic.miaulaonline.net
92 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

acomodar a otras tecnologías como XUL.

JSF incluye:

Un conjunto de APIs para representar componentes de una interfaz de usuario y administrar su

estado, manejar eventos, validar entrada, definir un esquema de navegación de las páginas y

dar soporte para internacionalización y accesibilidad.

Un conjunto por defecto de componentes para la interfaz de usuario.

t
Dos bibliotecas de etiquetas personalizadas para JavaServer Pages que permiten expresar una

ne
interfaz JavaServer Faces dentro de una página JSP.

Un modelo de eventos en el lado del servidor.

e.
Administración de estados.

Beans administrados.

in
nl
El objetivo de la tecnología JavaServer Faces es desarrollar aplicaciones web de forma parecida a

como se construyen aplicaciones locales con Java Swing, AWT (Abstract Window Toolkit), SWT
ao

(Standard Widget Toolkit) o cualquier otra API similar.


ul

Tradicionalmente, las aplicaciones web se han codificado mediante páginas JSP (JavaServer Pages)

que recibían peticiones a través de formularios y construían como respuesta páginas HTML (Hiper
ia

Text Markup Language) mediante ejecución directa o indirecta -a través de bibliotecas de etiquetas-
m

de código Java, lo que permitía, por ejemplo, acceder a bases de datos para obtener los resultados a

mostrar amén de realizar operaciones marginales como insertar o modificar registros en tablas
c.

relacionales, actualizar un carrito de la compra, etc.


ci

JavaServer Faces pretende facilitar la construcción de estas aplicaciones proporcionando un entorno

de trabajo (framework) vía web que gestiona las acciones producidas por el usuario en su página

HTML y las traduce a eventos que son enviados al servidor con el objetivo de regenerar la página

original y reflejar los cambios pertinentes provocados por dichas acciones.

En definitivas cuentas, se trata de hacer aplicaciones Java en las que el cliente no es una ventana de

la clase JFrame o similar, sino una página HTML.

Como el lector puede imaginar, cualquier evento realizado sobre una página JSF incurre en una

cic.miaulaonline.net
93 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

carga sobre la red, ya que el evento debe enviarse a través de ésta al servidor, y la respuesta de este

debe devolverse al cliente; por ello, el diseño de aplicaciones JavaServer Faces debe hacerse con

cuidado cuando se pretenda poner las aplicaciones a disposición del mundo entero a través de

Internet. Aquellas aplicaciones que vayan a ser utilizadas en una intranet podrán aprovecharse de

un mayor ancho de banda y producirán una respuesta mucho más rápida.

Una de las ventajas de que JSF sea una especificación estándar es que pueden encontrarse

implementaciones de distintos fabricantes. Esto permite no vincularse exclusivamente con un

t
proveedor concreto, y poder seleccionar el que más interese en cada caso según el número de

ne
componentes que suministra, el rendimiento de éstos, soporte proporcionado, precio, política de

evolución, etc.

e.
JSF trata la vista (la interfaz de usuario) de una forma algo diferente a lo que estamos

in
acostumbrados en aplicaciones web, ya que este tratamiento es mucho más cercano al estilo de Java

Swing, Visual Basic o Delphi, donde la programación de la interfaz se hace a través de componentes
nl
y está basada en eventos (pulsación de un botón, cambio en el valor de un campo, etc.).
ao

JSF es muy flexible. Por ejemplo nos permite crear nuestros propios componentes, y/o crear nuestros

propios renderizadores para pintar los componentes en la forma que más nos convenga.
ul

Una de las grandes ventajas de la tecnología JavaServer Faces es que ofrece una clara separación
ia

entre el comportamiento y la presentación. Las aplicaciones Web construidas con tecnología JSP
m

conseguían parcialmente esta separación. Sin embargo, una aplicación JSP no puede mapear

peticiones HTTP al manejo de eventos específicos de los componentes o manejar elementos UI como
c.

objetos con estado en el servidor. La tecnología JavaServer Faces permite construir aplicaciones
ci

Web que introducen realmente una separación entre el comportamiento y la presentación,

separación sólo ofrecida tradicionalmente por arquitecturas UI del lado del cliente.

Separar la lógica de negocio de la presentación también permite que cada miembro del equipo de

desarrollo de la aplicación Web se centre en su parte asignada del proceso diseño, y proporciona un

modelo sencillo de programación para enlazar todas las piezas. Por ejemplo, personas sin

experiencia en programación pueden construir páginas JSF usando las etiquetas de componentes UI

que esta tecnología ofrece, y luego enlazarlas con código de la aplicación sin escribir ningún script

ni nada.

cic.miaulaonline.net
94 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Otro objetivo importante de la tecnología JavaServer Faces es mejorar los conceptos familiares de

componente-UI y capa-web sin limitarnos a una tecnología de script particular o un lenguaje de

marcas. Aunque la tecnología JavaServer Faces incluye una librería de etiquetas JSP personalizadas

para representar componentes en una página JSP, las APIs de JavaServer Faces se han creado

directamente sobre el API JavaServlet. Esto nos permite, teóricamente, hacer algunas cosas

avanzadas: usar otra tecnología de presentación junto a JSP, crear nuestros propios componentes

personalizados directamente desde las clases de componentes, y generar salida para diferentes

dispositivos cliente, entre otras.

t
ne
En definitivas cuentas, la tecnología JavaServer Faces proporciona una rica arquitectura para

manejar el estado de los componentes, procesar los datos, validar la entrada del usuario, y manejar

e.
eventos.

Definir la tecnología Java Message Service


in
nl
ao

La API Java Message Service (en español servicio de mensajes Java), también conocida por sus siglas

JMS, es la solución creada por Sun Microsystems para el uso de colas de mensajes. Este es un
ul

estándar de mensajería que permite a los componentes de aplicaciones basados en la plataforma

Java2 crear, enviar, recibir y leer mensajes. También hace posible la comunicación confiable de
ia

manera síncrona y asíncrona.


m

El servicio de mensajería instantánea también es conocido como Middleware Orientado a Mensajes


c.

(MOM por sus siglas en inglés) y es una herramienta universalmente reconocida para la

construcción de aplicaciones empresariales.


ci

Dicha API es parte integral de la versión 2 de Java.

Existen dos modelos de la API JMS, los cuales son:

Modelo Punto a Punto (point to point): Este modelo cuenta con solo dos clientes, uno que envía el

mensaje y otro que lo recibe. Este modelo asegura la llegada del mensaje ya que si el receptor no

esta disponible para aceptar el mensaje o atenderlo, de cualquier forma se le envía el mensaje y este

se encola en una pila del tipo FIFO para luego ser recibido según haya entrado.

cic.miaulaonline.net
95 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Modelo Publicador/Suscriptor (Publish/Subscribe): Este modelo cuenta con varios clientes, unos que

publican temas (tópicos) o eventos, y los que ven estos tópicos, a diferencia del modelo punto a

punto este modelo tiende a tener más de un consumidor.

Ambos modelos pueden ser síncronos mediante el método receive y asíncronos por medio de un

MessageListener.

Definir la tecnología JDBC

t
ne
Java Database Connectivity, más conocida por sus siglas JDBC, es una API que permite la ejecución

e.
de operaciones sobre bases de datos desde el lenguaje de programación Java, independientemente

del sistema operativo donde se ejecute o de la base de datos a la cual se accede, utilizando el

in
dialecto SQL del modelo de base de datos que se utilice.
nl
El API JDBC se presenta como una colección de interfaces Java y métodos de gestión de manejadores
ao

de conexión hacia cada modelo específico de base de datos. Un manejador de conexiones hacia un

modelo de base de datos en particular es un conjunto de clases que implementan las interfaces Java

y que utilizan los métodos de registro para declarar los tipos de localizadores a base de datos (URL)
ul

que pueden manejar. Para utilizar una base de datos particular, el usuario ejecuta su programa junto
ia

con la biblioteca de conexión apropiada al modelo de su base de datos, y accede a ella estableciendo

una conexión, para ello provee el localizador a la base de datos y los parámetros de conexión
m

específicos. A partir de allí puede realizar con cualquier tipo de tareas con la base de datos a las que
c.

tenga permiso: consulta, actualización, creación, modificación y borrado de tablas, ejecución de

procedimientos almacenados en la base de datos, etc.


ci

Para poder probar una aplicación desarrollada por nosotros, tendremos que realizar la subida de

esta al servidor de producción o deployment. Para hacer esto, tan solo tenemos que copiar todos los

archivos y subirlos a mano hasta la carpeta webapps del servidor Tomcat. Esta acción de copiar los

archivos a este directorio es denominada "Despliegue de la aplicación Web".

Casi siempre, cuando se trabaja sobre un proyecto web J2EE se realiza sobre una herramienta de

desarrollo como eclipse o productos de la marca Jetbrains entre otros, y para probar la aplicación la

herramienta suele hacer una subida de manera automática para poder efectuar pruebas de forma

cic.miaulaonline.net
96 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

rápida.

Cuando tenemos la aplicación acabada, el despliegue se realizará sobre un servidor de producción.

Este servidor es el que utilizarán los usuarios de la aplicación Web. Este despliegue usualmente se

realiza utilizando un archivo WAR.

t
ne
e.
in
nl
ao
ul
ia
m
c.
ci

cic.miaulaonline.net
97 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Utilización de la herramienta Manager Web Application

Para utilizar la herramienta Manager Web Application, deberemos de acceder a la siguiente

dirección de nuestro servidor apache tomcat:

https://locallhost.com/

Nos pedirá que indiquemos el usuario y contraseña del administrador, el cual se indicó en la

instalación. Después de esto si todo ha ido bien veremos la herramienta, dicha herramienta tiene el

t
ne
siguiente aspecto:

e.
in
nl
ao
ul
ia
m
c.
ci

cic.miaulaonline.net
98 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Configuración de logs

Los procesos realizados, así como las incidencias producidas en la administración, se reflejan

en la documentación para mantener registro de seguimiento de los trabajos realizados, siguiendo

el procedimiento establecido por la organización.

La documentación técnica específica asociada se interpreta, para este caso, en la lengua extranjera

de utilización más frecuente en el sector.

t
ne
La palabra log es una definición anglosajón, equivalente a la palabra bitácora en español. Sin

embargo, se usa en los países de habla hispana como un anglicismo que deriva de las traducciones

e.
del inglés en la jerga que pertenece al sector informático. Del mismo término además proviene la

palabra blog, que es la contracción de “web log”.

in
Un log es un registro oficial de eventos durante el cual se produce un rango de tiempo en
nl
particular. Para los profesionales en seguridad informática es utilizado para registrar datos o

información sobre quién, qué, cuándo, dónde y por qué (who, what, when, where y why) un evento
ao

ocurre para un dispositivo en particular o aplicación.


ul

La mayoría de los logs son guardados o desplegados en el formato más común, el cual es un grupo

de caracteres para dispositivos comunes y aplicaciones. De esta manera cada log generado por un
ia

dispositivo en particular puede que sea leído y desplegado en otro distinto.


m

Además se le considera como aquel mensaje que crea el programador de un sistema operativo,
c.

alguna aplicación o algún proceso, en virtud del cual se visualiza un evento del sistema.
ci

cic.miaulaonline.net
99 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

t
ne
e.
in
nl
A su vez la palabra log se relaciona con el término evidencia digital. Un tipo de evidencia

física formada de campos magnéticos y pulsos electrónicos que pueden ser recogidos y analizados
ao

con herramientas y técnicas especiales, lo que incluye la lectura del log y deja al descubierto la

actividad registrada en el mismo.


ul

Para poder ver el contenido de estos archivos, tan solo tenemos que usar un editor de texto, como
ia

puede ser vi, nano, gedit, kwrite….


m
c.
ci

cic.miaulaonline.net
100 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Configuración de Host Virtuales

La configuración de Host virtuales en Tomcat es bastante simple, primero debemos de acceder al

fichero server.xml. Este fichero se encuentra en la carpeta conf de Apache tomcat:

t
ne
e.
in
nl
ao
ul

Editamos el fichero con notepad, o cualquier otro editor de texto:


ia
m
c.
ci

cic.miaulaonline.net
101 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

t
ne
e.
in
nl
ao
ul
ia

Desde aquí podremos agregar los host que necesitemos, por ejemplo vamos añadir host1.com,
m

para ello solo deberíamos de añadir las siguientes lineas:


c.
ci

Aquí hemos indicado que en host1.com se va a encontrar las aplicaciones desplegadas otroWebapps

Por último para comprobar el funcionamiento deberemos de añadir al fichero /etc/host las siguientes

líneas:

127.0.0.1 localhost

host1.com

cic.miaulaonline.net
102 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Recuerda

[[[Elemento Multimedia]]]

t
ne
e.
in
nl
ao
ul
ia
m
c.
ci

cic.miaulaonline.net
103 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Autoevaluación

Indica si el siguiente enunciado es verdadero o falso: La configuración de Host


virtuales en Tomcat es bastante simple, primero debemos de acceder al fichero
server.xml

Falso.

t
ne
Verdadero.

e.
Indica si el siguiente enunciado es verdadero o falso:La palabra log no es un
término anglosajón, equivalente a la palabra bitácora en español.

in
nl
Falso.
ao

Verdadero.
ul

Los IDE's (Integrated Development Environment) ofrecen un entorno gráfico en


ia

el que se tiene acceso a mayor número de herramientas no ofrecidas en los


SDK's.
m
c.

Falso.
ci

Verdadero.

Indica si el siguiente enunciado es verdadero o falso: Un JDK|SDK ofrece las


herramientas para compilar y ejecutar programas en Java.

Falso.

cic.miaulaonline.net
104 / 105
[AFO018349] IFCT103PO SERVIDORES WEB
[MOD016540] IFCT103PO SERVIDORES WEB
[UDI096308] SERVIDOR APACHE-TOMCAT.

Verdadero.

Un log...

no es un registro oficial de eventos durante un rango de tiempo en particular.

t
es un registro oficial de eventos durante un rango de tiempo en particular.

ne
es un registro no oficial de eventos durante un rango de tiempo en particular.

e.
in
nl
ao
ul
ia
m
c.
ci

cic.miaulaonline.net
105 / 105

También podría gustarte