Professional Documents
Culture Documents
Guion-resumen
Los anexos que complementan este tema están disponibles en la página web:
http://www.recursoscertificados.com/9788491475798
Anexo I. Lenguaje C
Anexo II. Lenguaje C++
Anexo III. Lenguaje Java
Anexo IV. Visual Basic.Net
Anexo V. C#.Net
6-2
Arquitectura Java EE y plataforma .NET
Los procesos se podían enlazar. Los resultados y/o datos generados por un proceso se
utilizaban en otro. O bien se podían comunicar. En este caso existe intercambio de mensa-
jes entre distintos procesos que, de esta forma, colaboran.
6-3
Desarrollo de sistemas
6-4
Arquitectura Java EE y plataforma .NET
Por otra parte, también existen APIs que definen el comportamiento del servidor de
aplicación y los servicios que este proporciona a los componentes desplegados. Estas APIs
son utilizadas por los componentes desarrollados para realizar tareas no funcionales como:
gestión de la seguridad, integración con bases de datos, comunicaciones remotas, localiza-
ción e integración con otros componentes, etc.
6-5
Desarrollo de sistemas
2.2.1. JAVA
Anteriormente se ha descrito el lenguaje base de JEE. A continuación simplemente se
recoge como ejemplo una clase Java con los elementos más importantes:
package es.jaar.gestionalumnos.dao;
import es.jaar.dao.BaseDAO;
import es.jaar.dao.AlumnosDAO;
import java.util.HashMap;
import java.util.Map;
public class AlumnosDAOImpl extendes BaseDAO implements Alumnos-
DAO {
private Map tablaAlumnos;
private Map alumnosPorDNI;
6-6
Arquitectura Java EE y plataforma .NET
return alumno;
}
public Alumno getAlumnoPorDNI (String dni) {
Alumno alumno = (Alumno) this.alumnosPorDNI.get(dni);
if (alumno == null ) {
throw new DAOException (“No existe el alumno con
dni=” + dni);
}
return alumno;
}
public void createAlumno (Alumno alumno) {
String dni = alumno.getDNI();
if (this.alumnosPorDNI.get(dni) != null) {
throw new DAOException (“DNI duplicado.”);
}
String newId = super.newId ();
alumno.setId ( newId );
this.tablaAlumno.put( newId, alumno );
this.alumnosPorDNI.put ( dni, alumno );
super.saveTable (tablaAlumnos);
}
…
En primer lugar, se hace la declaración de paquete (package). En Java un paquete es
conjunto de clases y recursos asociados. Los paquetes permiten organizar los elementos de
una aplicación en subconjuntos.
6-7
Desarrollo de sistemas
El constructor de la clase es un método especial que debe cumplir: no tiene tipo, pues
no devuelve ningún valor, y se llama igual que la clase. En el ejemplo es AlumnosDAOImpl
(). El constructor del ejemplo utiliza la referencia super para invocar a operaciones de la
clase extendida BaseDAO. En este caso de su propio constructor.
En Java los métodos pueden sobrecargarse. Es decir, pueden definirse varios métodos
con igual nombre pero diferenciados por los parámetros que utilizan. Eso también es apli-
cable a los constructores.
Además del constructor se definen los distintos métodos de la clase. En el ejemplo son
los métodos: getAlumno, getAlumnoPorDNI y saveAlumno.
Al igual que super puede utilizarse para referenciar elementos de la clase base, se utiliza
this para referenciar a los elementos de la clase actual. Normalmente es opcional.
2.2.2. HTML
No es objeto de este tema describir de forma general el lenguaje HTML. Simplemente
indicar cómo se utiliza en el desarrollo de aplicación JEE.
En primer lugar, los Java Servlets generan como resultado páginas o documentos
HTML. De esta forma, estas clases presentarán por una parte código Java para realizar sus
funciones y por otra código también Java que producirá la salida HTML correspondiente.
Se verá más adelante en este manual.
En segundo lugar, también las páginas JSP integran código Java con código HTML. En
este caso, además, el código HTML suele predominar sobre el propio código Java. Dado
que cada página JSP se corresponde, precisamente, con una página HTML de la aplicación.
También se verá más adelante en el presente manual.
6-8
Arquitectura Java EE y plataforma .NET
2.2.4. XML
XML son las siglas de eXtensible Markup Language, aunque realmente no es un len-
guaje como tal sino un metalenguaje. Es decir, utilizando el estándar y formatos XML se
pueden definir otros lenguajes más específicos: como el propio XHTML, un esquema para
describir elementos bibliográficos, un modelo de datos, etc.
XML se utiliza para modelar información y/o documentos, no para desarrollar progra-
mas o procesos.
— Capacidad de extensión.
— Disponibilidad de herramientas para su análisis y tratamiento. Además, dadas sus
estrictas reglas, los análizadores sintácticos son sencillos y eficientes.
— Facilidad de comprensión.
Por un parte, XML es utilizado en Internet para el intercambio de información entre
sistemas, especialmente cuando coexisten distintas tecnologías e infraestructuras (dado que
XML es estándar). En este sentido JEE integra el APIs JAXP (Java API for XML Processing).
Este API permite de forma fácil integrar XML en el desarrollo de aplicaciones JEE.
Por otra parte, XML es el lenguaje utilizado por JEE para los descriptores de despliegue.
Los descriptores de despliegue se utilizan para indicar al servidor de aplicaciones los com-
ponentes que se van a cargar, sus dependencias y su configuración. Sin estos descriptores
el servidor de aplicaciones no podrá utilizar los componentes desarrollados.
Por cada tipo de componente JEE existe un estándar particular sobre su descriptor. Para
esto se utiliza el mecanismo de esquemas de XML. En el siguiente recurso se pueden con-
sultar los distintos esquemas utilizados en el estándar: http://www.oracle.com/webfolder/
technetwork/jsc/xml/ns/javaee/index.html
2.2.5. SQL
SQL es el lenguaje estándar para el acceso a bases de datos relacionales. Por tanto,
se utilizará en los componentes que realicen accesos a datos. Aunque existen alternativas
tecnológicas dentro de JEE que encapsulan las sentencias SQL finales, de forma que los
desarrolladores no necesitan conocer este lenguaje.
En JEE el acceso a bases de datos se realiza con el API JDBC (Java Data-
Base Conectivity), que aplica conceptos similares a los del estándar ODBC
(Open DataBase Connectivity).
6-9
Desarrollo de sistemas
A continuación se muestra la integración del lenguaje SQL dentro del API JDBC
mediante un ejemplo:
package es.jaar.gestionalumnos.dao;
import java.sql.*
private databaseUrl;
private databaseLogin;
private databasePassword;
public AlumnoDAOImpl () {
this (null, null, null);
}
6-10
Arquitectura Java EE y plataforma .NET
return connection;
}
if (queryResult.next()) {
alumno = new Alumno();
alumno.setId(queryResult.getInt(“id”));
alumno.setNombre(queryResult.getString(“nombre”));
alumno.setApellidos(
queryResult.getString(“apellidos”));
}
return alumno;
} finally {
if (connection != null) {
6-11
Desarrollo de sistemas
connection.close();
}
}
}
while (queryResult.next()) {
alumno = new Alumno();
alumno.setId(queryResult.getInt(“id”));
alumno.setNombre(queryResult.getString(“nombre”));
alumno.setApellidos(
queryResult.getString(“apellidos”));
listaAlumnos.add(alumno);
}
return listaAlumnos;
} finally {
if (connection != null) {
connection.close();
}
}
}
6-12
Arquitectura Java EE y plataforma .NET
6-13
Desarrollo de sistemas
statement.setInt(3, alumno.getId());
int count = statement.executeUpdate();
if (count != 1) {
throw new SQLException(“Error en update.”);
}
} finally {
if (connection != null) {
connection.close();
}
}
}
6-14
Arquitectura Java EE y plataforma .NET
El código Java implementa la lógica y control del DAO, mediante los elementos del
API JDBC se interactúa con el sistema de base de datos (Connection, Statemente, Prepa-
redStatement y ResultSet) y mediante SQL se realiza las peticiones:
2.3. Componentes
Los principales componentes que se pueden desarrollar dentro de JEE, y que se anali-
zan a continuación, son:
6-15
Desarrollo de sistemas
pligue de los servlets contenidos el propio servidor decide qué servlet concreto
debe atender la petición.
3. Si el servlet a utilizar aún no se ha creado se procede a su instanciación e iniciali-
zación. En otro caso simplemente se reutiliza una instancia creada anteriormente.
4. Se delega la atención de la petición al servlet concreto, que no deja de ser el
código Java de la aplicación.
5. El servlet, al procesar la petición, genera una respuesta HTML.
6. El servidor de aplicación envía la respuesta al cliente (navegador web).
A continuación se describen los principales elementos del desarrollo de un servlet
mediante un ejemplo.
El ejemplo consiste en una página web con un formulario de alta de alumno. La infor-
mación del formulario se enviará un servlet que debe realizar la operación de alta y como
respuesta devolverá el listado completo de alumnos.
En primer lugar, el formulario será una página HTML estática (vease cómo en el desa-
rrollo de aplicaciones JEE está involucrado el propio lenguaje HTML):
<HTML>
<HEAD><TITLE>Formulario de alta de Alumno</TITLE></HEAD>
<BODY>
<H1>Alta de alumno.</H1>
<FORM NAME=”formulario” METHOD=”POST”
ACTION=”http://localhost:8080/alumnos/altaalumnos”>
<INPUT TYPE=”text” NAME=”nombre” VALUE=””/>
<INPUT TYPE=”text” NAME=”apellidos” VALUE=””/>
<INPUT TYPE=”submit” VALUE=”Enviar”/>
</FORM>
</BODY>
</HTML>
En el formulario (FORM) se indica que los datos se enviarán mediante un POST de
HTTP a la dirección web http://localhost:8080/alumnos/AlumnoServlet. Los datos que
se enviarán son el nombre y los apellidos.
import java.io.*;
import javax.servlet.*;
6-16
Arquitectura Java EE y plataforma .NET
import javax.servlet.http.*;
public class AlumnoServlet extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Utiliza la información de la petición.
Alumno alumno = new Alumno();
alumno.setNombre(request.getParameter(“nombre”));
alumno.setApellidos(request.getParameter(“apellidos”));
// Accede a otros componentes para realizar el alta.
AlumnoDAO dao = daoFactory.getAlumnoDAO();
dao.addAlumno (alumno);
// Obtiene la lista de alumnos para generar la respuesta.
6-17
Desarrollo de sistemas
writer.println(“</UL>”)
writer.println(“</BODY>”);
writer.println(“</HTML>”);
writer.close();
}
}
Habitualmente el servlet se encargará, como en el ejemplo, de procesar los datos
enviados y generar la respuesta en formato HTML. Pero el propio proceso se delega en un
componente adicional. En el ejemplo se utiliza el DAO de alumnos (AlumnoDAO) para
realizar las operaciones de alta y consulta.
6-18
Arquitectura Java EE y plataforma .NET
Con la entrada <servlet> se declara un componente de tipo servlet (dentro del descrip-
tor y el paquete de código se pueden desplegar varios). Se indica un nombre (name) y la
clase que lo implementa (class). Con esta información el servidor de aplicaciones ya sabe
que dicha clase es un servlet y que deberá gestionarlo. Con la entrada <servlet-mapping>
se indica al servidor qué tipo de peticiones deberá delegar en el servlet. Se indica el nombre
(name) del servlet y el patrón de peticiones a asignar (en este caso se asigna la ruta especí-
fica /altaalumnos). La ruta asociada es la misma que se utiliza en el action del formulario.
6-19
Desarrollo de sistemas
6-20
Arquitectura Java EE y plataforma .NET
6-21
Desarrollo de sistemas
Los Session Beans, o beans de sesión, implementan procesos de negocio. Cada uno
de sus métodos será un subproceso de negocio, como por ejemplo: inscribir a un alumno
en un curso, iniciar un curso, evaluar un examen, etc.
Dentro de los Session Beans existen dos subtipos según si el bean tiene o no estado.
Los beans con estado o Statefull Session Bean son los que soportan sucesivas peti-
ciones relacionadas de un mismo cliente. Para ello, deben mantener el estado de dicha
interacción. El servidor de aplicaciones gestiona el mantenimiento del estado, la asociación
cliente-bean y la posible sincronización del estado en un escenario de alta escalabilidad.
Un ejemplo de Statefull Session Bean podría ser una operación de compra. El bean
presentaría varios métodos para incorporar, comprobar y eliminar elementos de la opera-
ción. El estado sería la lista de elementos actualmente incorporados.
Los bean de entidad, o Entity Beans, representan objetos que están almacenados en
un recurso externo. Generalmente un Entity Bean está asociado con tablas de base de
datos. De forma que cada instancia del bean representa una fila de la tabla.
Pero esto no quiere decir que estos beans sea simples elementos de datos. Sino que
los Entity Bean pueden y deben encapsular no solo los datos del elemento sino sus propias
reglas de negocio. Esto permite que el componente sea compartido entre varias aplicacio-
nes sin introducir incoherencias.
Por último están los beans dirigidos por mensajes, o Message Driven Beans. Estos
componentes sirven para implementar procesos de negocio en lo que no existe una invo-
cación directa del cliente hacia el servicio, sino que se utiliza algún mecanismo de colas de
mensajes. Concretamente se utilizarán los mecanismos de JMS (Java Messaging Service).
En general los Message Driven Beans son similares a los Stateless Session Bean, salvo
porque son invocados por los servicios de mensajería del propio servidor de
aplicaciones en lugar de estar en comunicación con el cliente real.
6-22
Arquitectura Java EE y plataforma .NET
2.4. Persistencia
Las aplicaciones y componentes JEE pueden utilizar, principalmente, tres métodos de
persistencia:
En este caso los componentes de acceso a datos no están restringidos por ninguna
especificación de JEE y su diseño es libre. En contraposición el servidor de aplicaciones no
aporta ningún servicio para simplificar su desarrollo y gestión.
Los sistemas ORM son una evolución del uso de DAOs y eliminan el desarrollo de
operaciones de consulta y manipulación de datos. Por tanto, permiten una mayor indepen-
dencia del modelo de datos y su implementación.
JEE define el API JPA (Java Persistence Api) para el uso de técnicas y tecnologías de
ORM. A continuación se describen los elementos de una capa de persistencia JPA.
En primer lugar se desarrollan los propios beans de datos. En este caso son elementos
independientes, que no precisan implementar o extender a otros. Sus atributos represen-
tan la información de la entidad y sus métodos pueden modelar la lógica de
negocio particular de la misma. Por ejemplo: el bean alumno con los atributos
DNI, nombre y apellidos. Podría controlar que el DNI utilizarse un formato
específico.
6-23
Desarrollo de sistemas
Por otra parte se desarrollan las clases de servicio con métodos similares a los de un
DAO: crear, eliminar, actualizar, buscar, etc. Implementan el negocio de estos métodos pero
no incorporan las funciones finales de acceso a datos sino que las delegan al motor de per-
sistencia del ORM. Para ello se puede utilizar JPQL, un lenguaje de consultas propio de JPA.
Es necesario indicar al motor de persistencia cómo corresponder los atributos del bean
con datos finales de la base de datos. Esta operación se realizaba originalmente mediante
ficheros XML y aún puede realizarse de esta forma. Por ejemplo:
6-24
Arquitectura Java EE y plataforma .NET
— @Entity – Indica al motor que la clase actual es una entidad a mapear. Se asocia,
por tanto, con la propia clase.
— @Table – Asociada con @Entity indica el nombre de la tabla para persistir los
datos. Por ejemplo:
@Entity
@Table ( name=”alumno”)
@Id
6-25
Desarrollo de sistemas
A partir de EJB 3.0 los Entity Bean son realmente un caso particular de implementa-
ción del modelo ORM. De forma que para su desarrollo los pasos a realizar son similares,
definiendo por una parte el bean y sus métodos de manipulación y por otra su mapeo (que
se realiza mediante anotaciones).
Pero a diferencia del uso directo de ORM con esta alternativa cada una de las entida-
des de datos se podrán utilizar, por el resto de componentes, como un EJB. Se aunan la
facilidad de desarrollo con ORM y la versatilidad de integración de los componentes EJB.
2.5. Seguridad
En JEE existen dos opciones distintas de incorporar seguridad a las aplicaciones y com-
ponentes: seguridad declarativa y seguridad programática.
— Los perfiles o roles de la aplicación o componente: por una parte la propia apli-
cación definirá los distintos perfiles de uso que tiene.
— Los permisos: para acceder/ejecutar cada una de las operaciones se requerirá per-
tenecer a uno de los roles anteriores.
6-26
Arquitectura Java EE y plataforma .NET
6-27
Desarrollo de sistemas
— Core.
— Threads: incluyendo Tasks para trabajos asíncronos.
— IO.
— Networking: incluyendo HTTP y MAIL.
— Serialización.
— XML.
6-28
Arquitectura Java EE y plataforma .NET
3.3. Persistencia
Dentro de .NET Standard, ADO.NET es el API de acceso a datos. Permite acceder a
bases de datos relacionales, XML y datos de otras aplicaciones medinate OLE DB.
• Connection: conexión con una fuente de datos concreta. Factoría para los
objetos Command.
• Muy utilizado para trabajar con datos XML o con datos de carácter interno
de una aplicación (sin motor de persistencia externo).
ADO.NET Entity Framework es una API adicional para el desarrollo y uso de objetos
de tipo entidad. Estos objetos se mapean con datos persistentes en sistemas externos.
Permite a las aplicaciones trabajar siempre con objetos, sin bajar a nivel de
fuentes de datos. Es, por tanto, una implementación ORM para .NET.
6-29
Desarrollo de sistemas
3.4. Seguridad
.NET incorpora un mecanismo propio de seguridad: seguridad de acceso del código.
Este mecanismo otorga permisos o capacidades al código en ejecución en función de su
origen.
— Define los permisos base o derechos de acceso a los recursos del sistema.
— Permite a los componentes y aplicaciones requerir firma digital a sus clientes, por
tanto, autenticación fuerte.
Los componentes pueden interactuar con el sistema de seguridad para requerir per-
misos específicos de forma imperativa y declarativa. En la forma declarativa se introducen
metadatos sobre el código a nivel de ensamblado, clase o miembro de clase.
Ejemplo en C#:
6-30
Arquitectura Java EE y plataforma .NET
1. Una forma clara, sencilla y exacta de la sintaxis para que el programador pueda
expresar las ideas de sus algoritmos (integridad conceptual), haciendo mas fácil
la comprensión del mismo para posibles mejoras o modificaciones.
2. Tener menos restricciones en la forma de codificación de los valores y en la colo-
cación de los mismos (ortogonalidad).
3. Tener la facilidad de que al codificar nuestro algoritmo podamos ver la parte
esencial del mismo en nuestro programa, es decir, al tener codificado nuestro
programa, podamos ver en él nuestro algoritmo una forma sencilla para poder
hacer modificaciones futuras (naturalidad de la aplicación), pero también viendo
cómo va quedando la estructura de nuestros datos.
4. Apoyo para la abstracción, es decir, permitir al usuario una fácil
creación de las estructuras de sus datos de forma breve y sencilla,
sin caer en redundancias.
6-31
Desarrollo de sistemas
6-32
Arquitectura Java EE y plataforma .NET
base del estándar C++. A partir de este momento C quedó relegado a un segundo plano,
pero totalmente operativo. De hecho, en 1999, se creó un nuevo estándar y en la actuali-
dad sigue siendo un lenguaje de programación en pleno vigor (a este estándar se le suele
denominar C99).
Es, por tanto, la creciente complejidad de los sistemas lo que ha conducido a la nece-
sidad de cambiar de C a C++. C++ fue inventado por Bjarne Stroustrup en 1979 en los
Laboratorios Bell. La nueva forma de pensar (programación orientada a objetos) hizo que
fuese una auténtica revolución en el mundo de los lenguajes de programación. C++ es una
extensión de C en la que se añaden las características orientadas a objetos, fue estandariza-
do en 1997 cumpliendo los estándares ANSI/ISO.
C++ fue el lenguaje dominante a finales de los ochenta y principios de los noventa. No
obstante, y aunque combinaba de forma perfecta la programación orientada a objetos con
un lenguaje tan completo como C, llegó Internet y se hizo necesario adaptar este lenguaje
a los nuevos. Así fue como en 1995 vio la luz JAVA, aunque ya en 1991 fue desarrollado
y comenzó a ser utilizado. Fue desarrollado durante año y medio por cinco programadores
expertos que crearon este lenguaje de programación cuya sintaxis básica esta basada en C
y que implementa la orientación a objetos de C++. El dominio de JAVA como lenguaje
de programación orientado a objetos se ha extendido hasta ahora. Su utilidad tanto para
aplicaciones independientes de la plataforma como para subprogramas ejecutables dentro
de una pagina web (applets), y muchas características más que veremos a continuación, le
han hecho digno de todo elogio.
En el ámbito de los sistemas Windows también se agotó la evolución propia de C y
C++ y Microsoft dio lugar al framewor de .NET (publicado en 2002), con en el que pre-
tendía responder a la competencia de Java, especialmente en entornos web y empresariales.
Actualmente la plataforma .NET integra en un mismo entorno el desarrollo de aplicaciones
de escritorio y aplicaciones multicapa. En ambos casos mediante el desarrollo e integración
de componentes.
4.2. El lenguaje C
El lenguaje C es el resultado de un proceso de desarrollo que se inició con un lenguaje
denominado BCPL. Este influenció a otro llamado B (inventado por Ken Thompson). En
los años 70, este lenguaje llevó a la aparición del C.
Con la popularidad de las microcomputadoras muchas compañías comenzaron a
implementar su propio C por lo cual surgieron discrepancias entre sí.
Por esta razón ANSI estableció un comité en 1983 para crear una definición no ambi-
güa del lenguaje C e independiente de la máquina que pudiera utilizarse. Algunos tipos de
C existentes son:
— Quick C.
— C++.
— Turbo C.
6-33
Desarrollo de sistemas
— Turbo C ++.
— Borland C.
— Borland C++.
— Microsoft C.
Cuando se habla del lenguaje C se ha de tener en cuenta las dos grandes estandariza-
ciones existentes en su larga historia: por un lado tenemos C89 y C99. Para hacernos una
idea de las diferencias, C89 contiene 32 palabras clave, C99 incluye cinco más. Hoy en día
la mayoría de los compiladores se basan en esta segunda estandarización.
El lenguaje C se engloba dentro de los lenguajes de nivel medio. Como lenguaje de
nivel medio, C permite la manipulación de bits, bytes y direcciones que son los elementos
básicos con los cuales funciona la computadora. El lenguaje C es muy portable, en el senti-
do de que funciona en distintos sistemas o diferentes tipos de computadoras; para que nos
hagamos una idea: Windows en todas sus versiones, DOS, Linux, etc.
Dado que con C podemos manipular bits, bytes y direcciones, se hace ideal para la
programación de sistemas. De hecho el sistema Linux nació con el intento logrado de rees-
cribir el código de UNIX en C.
El lenguaje C tiene una lista de palabras clave que tienen un objetivo definido. Cada
una de estas palabras clave no puede ser utilizada para otro fin diferente al que tiene asig-
nado.
En C, a pesar de no ser un lenguaje fuertemente tipado como ocurre con C++ y JAVA,
sí que se diferencia entre mayúsculas y minúsculas.
6-34
Arquitectura Java EE y plataforma .NET
Comentarios
Inclusión de archivos
main()
{
variables locales
flujo de sentencias
}
Definición de funciones creadas por el programador utilizadas en
main()
Veamos en qué consiste cada uno:
6-35
Desarrollo de sistemas
6-36
Arquitectura Java EE y plataforma .NET
Dado que esto se hacía muy pesado para el programador, surgieron los primeros len-
guajes de alto nivel, como Fortran, que en un principio se desarrollaron como alternativa
a los lenguajes ensambladores. En un principio estos lenguajes fueron usados para resolver
problemas de matemáticas, ingeniería o científicos (lenguajes orientados al problema).
— Rutinas de biblioteca. Hay una gran cantidad de bibliotecas con funciones pre-
creadas.
6-37
Desarrollo de sistemas
6-38
Arquitectura Java EE y plataforma .NET
(Para más información sobre el Lenguaje C++, consulte el Anexo II de este mismo
tema).
En la actualidad es un lenguaje muy completo (la versión JAVA 1.0 tenía 12 paquetes
(packages), JAVA 1.1 tenía 23 y JAVA 1.2 o JAVA 2 tiene 59). El haber sido diseñado en una
época muy reciente y por un único equipo le confieren unas características que facilitan su
aprendizaje y utilización a los usuarios; JAVA incorpora muchos aspectos que en cualquier
otro lenguaje son extensiones propiedad de empresas de software o fabricantes de ordena-
dores (threads, ejecución remota, componentes, seguridad, acceso a bases de datos, etc.).
6-39
Desarrollo de sistemas
El Compilador de JAVA realiza un análisis de sintaxis del código escrito en los fiche-
ros fuente de Java (con extensión *.java). Si no encuentra errores en el código genera los
ficheros compilados (con extensión *.class). En otro caso muestra la línea o
líneas erróneas. Incorpora además la posibilidad de ejecutar parcialmente el
programa, deteniendo la ejecución en el punto deseado y estudiando en cada
momento el valor de cada una de las variables.
6-40
Arquitectura Java EE y plataforma .NET
Nota. JDK, por tanto, es necesario si queremos crear applets o aplicaciones en lenguaje
JAVA y JVM es necesario si queremos visualizarlos. JDK, no obstante, es un kit de desarrollo que
lleva integrado JVM.
En JAVA todo forma parte de una clase, es una clase o describe cómo funciona una
clase. El conocimiento de estas es fundamental para poder entender los programas Java.
Todas las acciones de los programas JAVA se colocan dentro del bloque de una clase o un
objeto. Todos los métodos se definen dentro del bloque de la clase, JAVA no soporta fun-
ciones o variables globales.
En todo programa nos encontramos con una clase que contiene el programa principal
y algunas clases de usuario (las específicas de la aplicación que se está desarrollando) que
son utilizadas por el programa principal.
Los ficheros fuente tienen la extensión *.java, mientras que los ficheros compilados
tienen la extensión *.class. Un fichero fuente (*.java) puede contener más de una clase,
pero solo una puede ser publico El nombre del fichero fuente debe coincidir con el de la
clase public (con la extensión *.java). Si, por ejemplo, en un fichero aparece la declara-
ción (public class MiClase {...}) entonces el nombre del fichero deberá ser MiClase.java.
Es importante que coincidan mayúsculas y minúsculas ya que MiClase.JAVA
y miclase.JAVA serían clases diferentes para Java. Si la clase no es public, no
es necesario que su nombre coincida con el del fichero. Una clase puede ser
public o package (default), pero no private o protected.
6-41
Desarrollo de sistemas
En general una aplicación está constituida por varios ficheros *.class. Cada clase realiza
unas funciones particulares, permitiendo construir las aplicaciones con gran modularidad e
independencia entre clases. Las clases de Java se agrupan en packages, que son librerías de
clases. Si las clases no se definen como pertenecientes a un package, se utiliza un package
por defecto (default) que es el directorio activo.
/* lolo.JAVA
Escribe en pantalla “¡Dedicado a Maria Luz!” */
class lolo
{
public static void main(String args [ ])
{
System.out.println(“ ¡Dedicado a Maria Luz!”) ;
}
}
Con JAVA se pueden crear dos tipos de programas: aplicaciones y applets. Una apli-
cación es un programa que se ejecuta en una computadora utilizando el sistema operativo
de esa computadora. Se trata pues de un programa normal como podría haber sido en C
o C++ pero en el lenguaje Java. En este aspecto la funcionalidad de JAVA no es diferente
a la de cualquier otro lenguaje orientado a objetos. Una applet es una aplicación diseñada
para ser transmitida por Internet y ejecutada en un navegador web compatible con Java.
Un applet es realmente un pequeño programa que se transfiere dinámicamente a través de
la red, como si fuese una imagen, un archivo de sonido o de vídeo. La diferencia principal
es que una applet es un programa que puede reaccionar ante las acciones del usuario y
cambiar dinámicamente.
Vamos a detallar algunos de los aspectos (cualidades) que han hecho de JAVA uno de
los lenguajes más populares:
• Simple
JAVA es un lenguaje relativamente fácil de aprender una vez que se comprenden los
conceptos básicos de la programación orientada a objetos. Además, para la realización de
una determinada acción existen siempre varios caminos por los cuales podamos programar.
• Seguro
Esta cualidad hace que los applets sean ideales para la transmisión por
Internet sin violar la vulnerabilidad de los sistemas.
6-42
Arquitectura Java EE y plataforma .NET
• Portable
• Orientado a objetos
• Robusto
• Multihilo
JAVA permite que se ejecuten varios hilos al mismo tiempo (cada hilo representa una
tarea a desarrollar). Esta cualidad es la que le ha hecho ideal para trabajo en redes. Además
permite la sincronización de cada una de esas tareas y su comunicación.
• Arquitectura neutral
Esta cualidad le permite que un programa JAVA se pueda ejecutar en un sistema ope-
rativo actual y en las actualizaciones que puedan surgir de ese sistema operativo. Lo único
que necesitamos es la JVM (máquina virtual de Java).
• Interpretado
Una vez compilado un programa este se convierte en código binario que es interpre-
tado por un intérprete de Java. Este intérprete debe ser optimizado para que la conversión
al código máquina sea de buen rendimiento.
• Distribuido
A través del protocolo TCP/IP podemos distribuir programas JAVA en Internet. JAVA
dispone además de RMI (Invocación de Método Remoto) que permite ejecutar procedi-
mientos de forma remota. Otra característica es la programación cliente/servidor.
Existen entornos gráficos para el desarrollo de programas en JAVA que incluyen los
compiladores correspondientes y facilitan visualmente la labor del programador.
6-43
Desarrollo de sistemas
6-44