• No se han encontrado resultados

Mca010. Manual Programación en Java. Manual Programación en Java. Sé diferente, intégrate. Fecha:20 /06 / 2013 AUTOR: ORLANDO GUTIERREZ

N/A
N/A
Protected

Academic year: 2021

Share "Mca010. Manual Programación en Java. Manual Programación en Java. Sé diferente, intégrate. Fecha:20 /06 / 2013 AUTOR: ORLANDO GUTIERREZ"

Copied!
154
0
0

Texto completo

(1)

 

Sé diferente, intégrate…

Fecha:20 /06 / 2013

AUTOR: ORLANDO GUTIERREZ

Mca010

Manual Programación en Java

 

(2)

INDICE

Pag. 5

Lección 1 Introducción a la plataforma de computación Java

Pag. 6

Lección 2 Problemas con el desarrollo de software en la actualidad

Pag. 7

Lección 3 La solución ofrecida por la plataforma de computación Java

Pag. 9

Lección 4 Arquitectura de la plataforma de computación Java

Pag. 13

Lección 5 El lenguaje de programación Java

Pag. 17

Lección 6 Características del lenguaje

Pag. 20

Lección 7 Breve historia

Pag. 20

Lección 8 Máquina Virtual, JVM

Pag. 21

Lección 9 Compilación en Java

Pag. 24

Lección 10 La librería de clases de Java

Pag. 36

Lección 11 Los APIs de JAVA

Pag. 38

Lección 12 Tipos de aplicaciones en Java

Pag. 39

Lección 13 Ventajas y Desventajas de Java

Pag. 40

Lección 14 Comparación con otras plataformas de desarrollo

Pag. 42

Lección 15 Técnicas de programación en Java

Pag. 44

Lección 16 Clases

Pag. 46

Lección 17 Paquetes

Pag. 49

Lección 18 Variables y Tipos de datos

Pag. 55

Lección 19 Constantes

Pag. 56

Lección 20 Inicialización

Pag. 56

Lección 21 Estructuras de Control

Pag. 64

Lección 22 Estructuras de repetición

Pag. 65

Lección 23 Funciones

Pag. 68

Lección 24 Arreglos y Colecciones

Pag. 83

Lección 25 Manejo de Errores

(3)

 

Pag. 85

Lección 27 El objeto Exception

Pag. 86

Lección 28 Try … Catch … Finally

Pag. 87

Lección 29 Throw

Pag. 87

Lección 30 Encadenación de Excepciones

Pag. 89

Lección 31 Programación Orientada a Objetos

Pag. 96

Lección 32 Campos

Pag. 96

Lección 33 Métodos

Pag. 101

Lección 34 Constructores

Pag. 102

Lección 35 Clases anidadas

Pag. 102

Lección 36 Alcance de clases y miembros public, private, protected y package

Pag. 104

Lección 37 Herencia

Pag. 106

Lección 38 Polimorfismo: Sobrecarga, Sobreescritura, coerción de tipos

Pag. 107

Lección 39 Miembros Static

Pag. 108

Lección 40 Eventos

Pag. 111

Lección 41 La clase Object

Pag. 112

Lección 42 Clases selladas (finales) y virtuales

Pag. 113

Lección 43 Interfaces

Pag. 114

Lección 44 Creando librerías de objetos y paquetes

Pag. 115

Lección 45 Plantillas (Genéricos)

Pag. 119

Lección 46 Espacios de nombres

Pag. 119

Lección 47 Reflexión

Pag. 121

Lección 48 Expresiones regulares

Pag. 123

Lección 49 Metadatos (Anotaciones)

Pag. 128

Lección 50 Programando con la librería de clases de Java

Pag. 128

Lección 51 Sistema unificado de tipos, tipos de valor y tipos de referencia

Pag. 130

Lección 52 Conversión de tipos "type safety"

Pag. 130

Lección 53 Boxing y Unboxing

Pag. 131

Lección 54 La clase String

(4)

Pag. 137

Lección 56 Vectores en Java

Pag. 139

Lección 57 Tablas de Hashing en Java

Pag. 142

Lección 58 Tipos de datos numéricos

Pag. 142

Lección 59 La clase DateFormat

Pag. 143

Lección 60 Enumeraciones

Pag. 144

Lección 61 Caso de estudio: applets

Pag. 145

Lección 62 Caso de estudio: JavaBeans

Pag. 147

Lección 63 La palabra reservada (keyword) strictfp

Pag. 148

Lección 64 Palabra reservada assert

Pag. 149

Lección 65 varargs

Pag. 150

Lección 66 Super paquetes

Pag. 151

Lección 67 Closures

Pag. 152

Lección 68 Estudio y comparación de las diferentes versiones de Java Edicion Standard (JSE) : JDK

(5)

 

LECCION 1 Introducción a la plataforma de computación Java

En la siguiente figura se muestra la plataforma de computación Java para la edición estándar.

Java es más que un lenguaje de Programación, es también una plataforma de computación debido a que ofrece una cantidad de servicios como acceso a redes, seguridad y acceso de información, servicios de “middleware”, servicio de acceso a base de datos, servicio de ejecución remota de procesos, servicio de nombres para implementar los conceptos de localidad entre otros.

Java se encuentra diseñado primordialmente para trabajar en Internet y por lo tanto es una plataforma de computación distribuida. La plataforma de computación Java podría ser dividida en dos grandes grupos, el ambiente de desarrollo y el ambiente de ejecución.

EL AMBIENTE DE DESARROLLO EN JAVA

La programación en Java se realiza a través del SDK (Software Development Kit).

El SDK de java ofrece varios servicios, siendo el más importante el de compilación el cual traduce el código fuente a código entendible por la máquina virtual de Java el JVM (Java Virtual Machine).

Además a la compilación, se encuentran disponibles los servicios de depuración y documentación automática para las clases.

La mayor ventaja de Java sobre otros lenguajes de programación es la existencia de una librería de clases extensa y poderosa. Desde el punto de vista de los programadores esta librería de clases es utilizada como un API

(Application Programming Interface) o Interfaz de Programación de Aplicaciones.

Los API en Java, como se observa en la figura son agrupados en tres grandes grupos: Los API principales “core”, los API de integración y los API para el desarrollo de interfaces gráficas.

(6)

Los API “core” contienen todos los constructores del lenguaje de programación Java, los utilitarios para el manejo de estructuras de datos como vectores, la entrada/salida a través de los archivos y dispositivos, el manejo de la red, el soporte a XML,

Los API de integración permiten realizar la conexión con bases de datos a través de JDBC Java DataBase Connectivity, el manejo de los servicios de “middleware” a través de CORBA Common Object Request Broker Architecture , el manejo de ejecución remota de procesos a través de RMI Remote Machine Invocation.

Los API para el desarrollo de interfaces gráficas se concentran en dos grandes grupos. AWT Abstract Windowing Toolkit y Swing la cual se apega al estandard JFC Java Foundation Class.

EL AMBIENTE DE EJECUCIÓN EN JAVA

El ambiente de ejecución de Java es conocido como el JRE (Java Runtime Environment)

El ambiente de ejecución en Java se fundamenta en el concepto de máquina virtual, Java Virtual Machine. Como se observa en la figura, la JVM es la capa de “software” que tiene el contacto directo con la plataforma de

computación.

Debido a la existencia del JVM, Java es independiente de la plataforma. La JVM debe ser instalada en cada máquina para tener disponible la plataforma de computación Java y esta se encarga de ejecutar un código que es

independiente de la plataforma. La JVM recibe como entrada código compilado en Java en archivos .class y se encarga de interpretarlo en código asociado con la plataforma. De esta manera es posible la portabilidad absoluta de código en Java.

Como se observa en la figura, todas las librerías de clases o API disponibles en el ambiente de desarrollo son soportadas por la plataforma de ejecución de Java.

LECCION 2 Problemas con el desarrollo de software en la actualidad INTRODUCCIÓN

Los problemas del área de desarrollo de Software se pueden clasificar en dos grandes áreas. En primer lugar el desarrollo propiamente dicho y en segundo lugar, no menos importante, la integración con otras aplicaciones o procesos de los negocios.

Ambas áreas sufren de los males de no ofrecer portabilidad. La portabilidad puede referirse al área de los lenguajes de Programación (más asociada al desarrollo) o a la plataforma donde se ejecutan las aplicaciones. Es bien

conocido, que una clase implementada en C++ podría no ser re-utilizada por una aplicación desarrollada en Java. Más crítico aún, que dos programas escritos en el mismo lenguaje, pero en diferentes plataformas no son compatibles.

En el área de desarrollo propiamente dicho, existe otro mal aún más preocupante, el mantenimiento de las

soluciones. En muchas ocasiones se requiere agregar una funcionalidad a una aplicación, sin necesidad de alterar el funcionamiento de las otras partes, como si se tratara de cambiar la pieza de un rompecabezas sin necesidad de destruir lo resto ya armado.

La panacea del desarrollo de “software” es lograr aplicaciones que puedan ejecutarse en cualquier momento (robustez y disponibilidad), en cualquier lugar (independencia de plataforma y accesibilidad), comunicarse con cualquier otra (integración transparente, independencia del lenguaje e independencia de la plataforma).

(7)

 

ARQUITECTURAS DE DESARROLLO DE APLICACIONES

La arquitectura de las aplicaciones ha evolucionado de la siguiente manera: 1. “StandAlone” o aplicaciones Cliente

Las aplicaciones realizan el proceso en una sola máquina, siendo un ente monolítico que no se comunica. Los Datos, las interfaces con el usuario y los programas que resuelven el problema se encuentran todos en la misma estructura.

2. Cliente-Servidor

En este caso se separan los datos de las aplicaciones, pudiéndose compartir los datos entre varias aplicaciones. Se poseen dos capas. La capa de datos, realiza el manejo de los mismos. La capa del cliente contiene las interfaces con el usuario y los programas que resuelven el problema.

3. Arquitectura de 3 capas

En este caso se separa la lógica para la resolución del problema de la interfaz con el usuario. De esta manera , adicionalmente a las ventajas ofrecidas en el caso cliente-servidor se añade la separación de la interfaz con el usuario, permitiendo acceder a las funciones de la lógica de resolución del problema empleando distintas interfaces.

4. Arquitectura múltiple-capas

El siguiente paso (“stage”) consiste en dividir la lógica de resolución del problema en varias capas, logrando independencia entre las mismas. Esta abstracción permite dividir los negocios por roles y responsabilidades y separar la lógica del negocio aplicando la estructura funcional de la misma.

LECCION 3 La solución ofrecida por la plataforma de computación Java FUNDAMENTOS DE JAVA

Java esta diseñado para desarrollar aplicaciones distribuidas y con múltiples-capas (“n-tier”) en ambiente

WEB; lo cual no limita a desarrollar aplicaciones “stand-alone” o de cualquier otro tipo. Uno de los principales

objetivos de la plataforma de computación Java es el desarrollo de Servicios Web basados en XML(“XML Web Services”), compitiendo par a par con la plataforma de computación de .NET.

Para lograr el objetivo anteriormente introducido, el cual requiere portabilidad y seguridad; el compilador de Java (javac) genera código portable (en archivos .class) el cual se ejecuta en el motor de ejecución de aplicaciones

JVM (Java Virtual Machine).

El lenguaje de programación Java permite:

1. Simplificar el proceso de programación a través de una herramienta totalmente orientada por objetos, donde se reduce y simplifica el proceso de programación. Además de soportar una metodología consistente.

2. Reutilización de código y mantenimiento incremental añadiendo nuevas funciones a las soluciones. 3. Legibilidad y Mantenibilidad del código.

4. Soportar a los programadores, evitando al máximo los errores en la codificación 5. Desarrollar aplicaciones más robustas y más fáciles de depurar.

CONCEPTOS Y PODER EXPRESIVO DEL LENGUAJE

Java es considerado un lenguaje orientado por objetos ya que soporta naturalmente los conceptos de herencia,

(8)

Java también es un lenguaje fuertemente tipado, los tipos de datos deben ser definidos y en tiempo de compilación se puede realizar chequeo de tipos. Además se puede forzar a declarar explícitamente todas las variables utilizadas.

En el resto de este manual se cubrirá la solución ofrecida por la plataforma Java, cómo se logra la independencia de la plataforma, la librería de clases disponible en la plataforma, las técnicas de programación en Java y Programación Orientada por Objetos en Java.

CARACTERÍSTICAS DE LA PLATAFORMA DE COMPUTACIÓN JAVA

Java es plataforma desarrollada por Sun Microsistems para mejorar la productividad y simplificar el proceso de desarrollo de aplicaciones en un ambiente altamente distribuido como lo es Internet, aunque no limitando al desarrollo únicamente en Internet.

El desarrollar aplicaciones en ambiente Internet resuelve varios de los problemas de portabilidad ya que la

comunicación entre aplicaciones se realiza a través de protocolos estándar como HTTP, SOAP basado en XML, etc. Otra de las ventajas de Internet es que permite integrar en una página WEB la invocación a un JSP (Java Server Page, desarrollado en JAVA) con la invocación a un ASP (ActiveX Server Page, desarrollado en ambiente

Microsoft).

La plataforma de computación Java permite independencia del lenguaje, a través del JVM Java Virtual Machine. Las clases desarrolladas en Java son compiladas , generando código en archivos .class el cual es controlado en tiempo de ejecución por el JVM.

ARQUITECTURA DE DESARROLLO DE APLICACIONES

Java soporta el desarrollo de aplicaciones cliente, cliente-servidor, tres capas, múltiples capas convencionales, servicios WEB, y aplicaciones combinando múltiples capas convencionales con servicios WEB.

DESARROLLO DE APLICACIONES CLIENTE “STAND ALONE”

Las aplicaciones cliente se ejecutan en una máquina y pueden ser consideradas piezas monolíticas. En este tipo de aplicaciones se muestran ventanas o formularios al usuario, permitiéndole realizar una tarea. En las aplicaciones cliente se suelen emplear ventanas, menús, botones y otros elementos de la interfaz gráfica de usuario, y suelen tener acceso a recursos locales como el sistema de archivos y a dispositivos periféricos como las impresoras. Las clases disponibles en AWT (Abstract Winowing Toolkit) o en Swing (soportando JFC, Java Foundation Classes) están diseñadas para utilizarse en el desarrollo de GUI. Puede crear ventanas, botones, menús, barras de

herramientas y demás elementos de pantalla fácilmente con la flexibilidad requerida para adaptarse a la evolución de las necesidades del problema a resolver.

DESARROLLO DE APLICACIONES CLIENTE-SERVIDOR

En este caso, las aplicaciones separan el manejo de datos de la lógica de la aplicación. Para el manejo de datos Java ofrece el API JDBC (Java Data Base Connectivity) permitiendo el acceso a la mayoría de los manejadores de Bases de Datos existentes).

Adicionalmente ofrece el manejo de datos en formateo XML (eXtended Markup Language), el cual ofrece muchas posibilidades tanto en el manejo de datos como en la integración de aplicaciones. Para las interfaces gráficas con el usuario GUI se emplean las mismas funcionalidades descritas en las aplicaciones cliente.

DESARROLLO DE APLICACIONES MÚLTIPLES CAPAS

Java soporta el desarrollo de componentes con sus interfaces, siendo ideal para separar la lógica de los programas en múltiples capas. En esta caso, cada capa es un componente y el acceso a la implementación de la capa se define a través de una interfaz.

Adicionalmente en Java se pueden desarrollar eficientemente Web Services y cada Web Service puede ser considerado como una capa. Un Web Service es un servicio disponible en la WEB , el servicio implementa una

(9)

 

funcionalidad específica y requiere de un protocolo para poder accederlo. El protocolo empleado para los Web services es el SOAP (Simple Object Access Protocol). De esta manera el Web service puede estar desarrollado en cualquier lenguaje, ser ejecutado en cualquier plataforma y para poder accederlo únicamente de Internet y respetar el protocolo (muy bueno para ser verdad, pero lo es).

LECCION 4 Arquitectura de la plataforma de computación Java

En la siguiente figura se muestra la plataforma de computación Java para la edición estándar.

Java es más que un lenguaje de Programación, es también una plataforma de computación debido a que ofrece una cantidad de servicios como acceso a redes, seguridad y acceso de información, servicios de “middleware”, servicio de acceso a base de datos, servicio de ejecución remota de procesos, servicio de nombres para implementar los conceptos de localidad entre otros.

En esta sección se consideran los componentes de la arquitectura describiéndolos brevemente. La arquitectura utiliza un modelo de capas, donde cada capa le ofrece servicios a la capa siguiente. La descripción comienza desde la capa más cercana al “hardware”, hasta llegar a las capas de mayor nivel de abstracción en el “software”. La descripción utilizada en este manual consdera la plataforma Java 2 platform, Standard Edition, v1.4 JAVA VIRTUAL MACHINE (JVM), MÁQUINA VIRTUAL

La edición estándar de Java 2 SDK, ofrece dos implementaciones de la máquina virtual (VM)

Java HotSpot Client VM

Esta es la máquina virtual por defecto de Java2 tanto para el SDK como para el ambiente de ejecución (Java 2 Runtime Environment). Como su nombre lo indica, esta máquina se encuentra ajustada para ofrecer mejor rendimiento cuando se ejecutan aplicaciones en un ambiente de cliente. Esta mejora en el rendimiento se logra reduciendo el tiempo de arranque “start-up” de la aplicación y el manejo de la memoria (la huella o “footprint”).

(10)

Esta máquina virtual es diseñada para obtener máxima velocidad de ejecución de los programas en aplicaciones ejecutándose en un ambiente de servidor. Esta máquina virtual es invocada utilizando la línea de comando “java” con la opción “-server”. Por ejemplo “java -server aplicacion1”

A continuación se muestran las características de la tecnología Java HotSpot, comunes a ambas implementaciones de máquinas virtuales.

COMPILADOR ADAPTIVO:

Las aplicaciones son arrancadas “launched” empleando un interpretador estándar, pero el código es analizado a medida que se ejecuta para detectar cuellos de botella en el rendimiento o "hot spots". La máquina virtual Java HotSpot compila estas porciones de código críticas en rendimiento para mejorar el rendimiento, adicionalmente evita la compilación innecesaria del resto del código (el cual debería ser la mayoría del programa).

La máquina virtual Java HotSpot también utiliza el compilador adaptivo para decidir, en tiempo de ejecución, la mejor manera de optimizar el código compilado empleando técnicas como “in-lining”.

Desde el punto de vista del programador, es transparente la decisión sobre las estrategias de optimización de código, la máquina virtual de Java lo determina dinámicamente dependiendo del estado de la ejecución de la aplicación.

ASIGNACIÓN RÁPIDA DE MEMORIA Y RECOLECCIÓN DE MEMORIA NO UTILIZADA “GARBAGE COLLECTION”:

La máquina virtual de Java ofrece una asignación de memoria rápida para los objetos y un mecanismo efectivo y eficiente para realizar la recolección de memoria no utilizada. Nuevamente, la máquina virtual de java realiza este trabajo por el programador.

SINCRONIZACIÓN DE PROCESOS “THREAD”:

El lenguaje de programación Java permite la utilización de múltiples procesos concurrentemente, estos procesos son llamados "threads". La capacidad de manejo de “threads” permite la utilización de Java para realizar

implementaciones escalables empleando servidores con múltiples procesadores y memoria compartida, soportando la programación paralela.

API CENTRALES (CORE APIs):

A continuación se describen las características básicas de los API (Interfaces de Programas de Aplicación) más básicos empleados en Java. Estos API se encuentran agrupados en paquetes.

Paquete java.lang

Provee las clases fundamentales del diseño del lenguaje de programación Java. En este paquete se encuentran los bloques del lenguaje de programación

Paquete java.util

Provee el soporte al modelo de eventos, el manejo de la colecciones y las facilidades de fecha y tiempo y un conjunto de clases utilitarias.

Paquete java.io y Paquete java.nio

Ofrecen la funcionalidad de entrada/salida a través de “streams” de datos, la serialización y el sistema de archivos. Java.nio (New IO) se introduce en la versión 1.4 ofreciendo nuevas características y mejorando el rendimiento.

(11)

 

Provee el soporte de manejo de red en Java. Java.net soporta direccionamiento, establecimiento de conexiones TCP, envío y recibo de paquetes de datos via UDP, localización e identificación de recursos de red y manejo de seguridad.

Interfaz Nativa de Java (JNI)

JNI es una interfaz estándar de programación en Java soportando la escritura de código nativo en Java y permitiendo embeber código de la máquina virtual de Java dentro de una aplicación nativa. El objetivo de esta interfaz es lograr la compatibilidad binaria de librerías de métodos nativos a través de todas las implementaciones de máquina virtual en una plataforma determinada.

Manejo de Seguridad

Permite implementar seguridad en Java, a través de criptografía, manejo de certificados. Se encuentran implementados en los paquetes java.security.*

XML en Java

XML (Extensible Markup Language) es una manera flexible de compartir y transmitir información en la Web en intranet o en cualquier plataforma de computación. XML son archivos de texto basado en HTML y siguiendo unas reglas de formación. Una de las mayores ventajas es que XML es un lenguaje extensible siendo posible crear estructuras personalizadas para el manejo de la información en un documento XML.

Java Beans

El componente JavaBeans permite el desarrollo de componentes reusables, extendiendo la capacidad de la

plataforma Java (escribe el código un sola vez y ejecútalo en cualquier lugar). JavaBeans es un paso adicional para el manejo de “internetworking” ya que puede operar con ActiveX, OpenDoc, and LiveConnect.

APIs DE INTEGRACIÓN

Estos API soportan los servicios de manejo de datos: Manejo de Bases de Datos, servicios de “Middleware” a través de CORBA (Common Object Request Broker Architecture) , servicios de manejo de nombres y de directorios , servicios de acceso a objetos remotos en una arquitectura distribuida.

Java RMI (Remote Method Invocation) , Interfaz de máquina remota

La interfaz remota de métodos permite desarrollar aplicaciones con objetos distribuidos siendo posible enviar un mensaje a un método , el cual se ejecuta en un servidor diferente al de la invocación, y obtener el resultado del mismo desde donde se invocó.

Los paquetes implementando RMI en Java se encuentran en java.rmi.*

JDBC (Java Data Base Connectivity), conectividad con las Bases de Datos

El API JDBC provee acceso a los datos de una manera universal desde el lenguaje de programación Java. A través del API JDBC 3.0, es posible acceder virtualmente a cualquier fuente de datos, desde bases de datos relacionales hasta hojas de cálculo e inclusive archivos planos.

El API JDBC 3.0 se compone de dos paquetes. El paquete java.sql y el paquete javax.sql, el cual incorpora capacidades de manejo del lado del servidor.

(12)

JNDI (Java Naming and Directory Interface), Interfaces de directorios y servicios de nombres

JNDI provee la funcionalidad de directorios y de nombres a las aplicaciones escritas en el lenguaje de programación Java. JNDI está diseñado para ser independiente de cualquier servicio de nombres específicos o cualquier servicio de directorios.

La arquitectura de JNDI consiste de una interfaz de programa de aplicación API y una interfaz proveedora de servicios SPI. Las aplicaciones Java emplean este API para acceder a una variedad de servicios de nombres y de directorios. SPI habilita una variedad servicios de nombres y de directorios para ser incorporados “plugged” transparentemente, permitiendo a una aplicación de Java emplear el API de la tecnología JNDI para acceder a los servicios.

CORBA COMMON OBJET REQUEST BROKER ARCHITECTURE

La plataforma Java 2, provee un Object Request Broker (ORB) y dos modelos de Programación CORBA : CORBA ORB e Internet InterORB Protocol (IIOP). La tecnología CORBA ofrece servicios de “middleware” para implementar objetos distribuidos.

La tecnología CORBA es parte integral de la plataforma Java 2 . Consiste de un Object Request Broker (ORB), APIs para el modelo de programación RMI, y APIs para el modelo de programación IDL.

APIs DESARROLLO DE INTERFACES GRÁFICAS CON EL USUARIO (GUI)

La plataforma de computación Java ofrece dos APIs para el desarrollo de interfaces gràficas con el usuario. Java AWT y Java Swing.

AWT (Abstract Windowing Toolkit):

AWT provee un conjunto de APIs para construir componentes de interfaces de usuario como menús, botones, etiquetas, cajas de dialogo, cajas de chequeo y manejo de entrada de datos. Adicionalmente, AWT permite desplegar figuras en pantalla como óvalos y polígonos; y habilita a los desarrolladores para controlar el “layout” de la interfaz así como controlar las fuentes de las letras.

Swing

El API Swing de Java provee un componente GUI para ser empleado en interfaces de usuario. Swing se basa en JFC (Java Foundation Classes). Los APIs de Swing se encuentran escritos en Java sin poseer ninguna dependencia con las facilidades de GUI provistas por el sistema de operación donde se ejecuta. Esto permite que los

componentes de GUI de Swing tenga un “look-and-feel” “plugable” que puede ser cambiado mientras una aplicación se ejecuta (en un PC es posible mostrar botones estilo Motif de la plataforma Unix)

TECNOLOGÍAS DE PUESTA EN MARCHA (“DEPLOYMENT TECHNOLOGIES”) Esta capa de desarrollo permite la ejecución de programas en Java.

Componente plug-in

Este componente permite la ejecución de “applets” escritos en Java en los navegadores de web Netscape Navigator y en los navegadores Microsoft Internet Explorer.

Java Web Start

Java Web Start es una tecnología de puesta en marcha de aplicaciones que permite la ejecución de aplicaciones Java realizando un “click” desde un navegador. Esta tecnología permite descargar y ejecutar aplicaciones, como una hoja de cálculo o un chat en el cliente, sin necesidad de utilizar procesos de instalación complicados.

(13)

 

HERRAMIENTAS DE DESARROLLO DE “SOFTWARE”

Esta capa ofrece las herramientas empleadas por los desarrolladores para implementar programas escritos en el lenguaje de programación Java.

Compilador de java javac

La herramienta javac lee código fuente en java (archivos .java) conteniendo definiciones de clases e interfaces, y los compila produciendo archvios .class (uno para cada clase definida). Este código .class es independiente de la plataforma.

Depurador de java jdb

La herramienta jdb ayuda a los programadores a conseguir y depurar errores “bugs” en programas escritos en el lenguaje de programación Java. El depurador de java, jdb, es un depurador sencillo ejecutado como una línea de comando sobre clases en Java.

Herramienta de documentación javadoc

Javadoc es una herramienta que realiza un “parsing” sobre las declaraciones de tipo y los comentarios colocados dentro del código fuente y produce un conjunto de páginas HTML describiendo las clases , las interfaces, los constructores, los métodos y los campos.

Arquitectura de depuración de la plataforma Java (JPDA)

Java Platform Debugger Architecture (JPDA) consiste de tres interfaces diseñadas para utilizar por los depuradores en ambientes de desarrollo de “desktop”. La interfaz de depuración de la máquina virtual define los servicios soportados por ésta para realizar la depuración. El protocolo “Java Debug Wire” define el formato de la información y los requerimientos transferidos entre los procesos durante un proceso de depuración.

LECCION 5 El lenguaje de programación Java INTRODUCCIÓN

Java es un lenguaje de programación orientado por objetos de alto nivel utilizado primordialmente en la programación de aplicaciones WEB. Java, además de ser un lenguaje de Programación es una plataforma de computación completa. En este curso únicamente cubriremos Java como lenguaje de programación. Existen varios ambientes integrados para el desarrollo de aplicaciones en Java como J++ y J# de Microsoft, JBuilder de Borland Inc o Eclipse de IBM. En este curso no se trabajaran con estos ambientes integrados sino que se emplearan las herramientas de desarrollo de programas SDK provistas por Sun Microsystems.

La estructura de un proyecto en Java, como cualquier proyecto, es el resultado de aplicar las fases de diseño de software estudiadas. Durante el diseño se debe tender a conseguir los siguientes resultados:

Listado de las tareas para las que se va a diseñar la aplicación

Esquema de las dependencias de unas tareas con otras y, por tanto, de la interdependencia de cada una de las partes del programa.

Criterios de comprobación de las tareas y de los resultados de las mismas. En el caso de las aplicaciones visuales, se tienen tres fases claramente definidas:

Luego de la descripción de las tareas y sus objetivos se debe comenzar el diseño de la interfaz del usuario, que es lo que nos va a permitir la comunicación usuario-aplicación.

Una segunda fase es la escritura del código fuente que debe responder a los posibles sucesos que se generan en tiempo de ejecución sobre los controles del soporte gráfico de la aplicación.

(14)

La tercera fase es la comprobación de la correctitud de la aplicación a través de las pruebas necesarias para determinar si se producen los resultados para los que se diseñó la aplicación.

En el caso de las aplicaciones no visuales, se tienen tres fases claramente definidas:

Luego de la descripción de las tareas y sus objetivos se debe comenzar el diseño de la interacción a través de comandos en línea.

Una segunda fase es la escritura del código fuente para implementar las respuestas a los posibles comandos.

La tercera fase, al igual que el caso anterior, es la comprobación de la correctitud de la aplicación a través de las pruebas necesarias para determinar si se producen los resultados para los que se diseñó la

aplicación.

Todos los proyectos están compuestos por:

Archivos .java: Contienen el código fuente de la aplicación, conjunto de procedimientos , métodos y funciones que implementan las tareas y/o comandos del sistema. En estos archivos de definen los módulos de la aplicación y pueden contener tareas de validación, cálculos, etc.

Archivos .class: Archivos java compilados. Son los archivos utilizados por la máquina virtual de Java (JVM). Es importante recordar en el caso de Java por tratarse de ser un lenguaje diseñado para trabajar en múltiples plataformas no se generan archivos ejecutables. En su lugar, la JVM interpreta los archivos .class en código específico de la plataforma donde se ejecuta. Los archivos .java se compilan a través del comando javac <archivo.java> generándose los archivos .class. Para ejecutar la aplicación se utiliza el comando java <archivo> donde se especifica el archivo .class sin colocar la extensión. El comando java representa la máquina virtual de Java.

En esta sección se resumen los componentes sintácticos y gramáticos del lenguaje de programación Java. En las sucesivas secciones se cubrirán en detalle cada uno de estos elementos o componentes.

TIPOS , VALORES Y VARIABLES

Java es un lenguaje de programación fuertemente tipado, de esta manera toda variable y/o expresión debe tener asociado un tipo y el mismo debe ser conocido a tiempo de compilación. Los tipos limitan los valores que pueden tomar las variables o los valores almacenados en una expresión ; así como las operaciones soportadas por el conjunto de valores y la semántica asociada con la operación. La característica de fuertemente tipado permite detectar errores en tiempo de compilación.

Los tipos en Java son divididos en dos categorías: tipos primitivos (o de valor) y tipos de referencia. Los tipos primitivos son los tipos simples agrupados en valores lógicos y en valores numéricos. Los tipos de referencia los conforman las clases, las interfaces y los arreglos.

Una variable es una localidad de almacenamiento en memoria. Una variable de un tipo primitivo almacena un valor del tipo respectivo. Una variable del tipo referencia almacena una referencia al objeto referenciado.

CONVERSIONES DE TIPOS

Cada expresión escrita en Java posee un tipo, el cual es calculado en tiempo de compilación a partir de la estructura de la expresión y de los tipos de las constantes, variables y métodos empleados por la expresión. El lenguaje de programación realiza la conversión explícitamente, y determina según el contexto posibles errores en la expresión. Por ejemplo, tratar de asignar una expresión del tipo “double” a una variable entera, o utilizar en una condición de una instrucción selectiva una expresión de un tipo diferente a “boolean”.

(15)

 

NOMBRES

Los nombres son utilizados para referir entidades (elementos) declaradas (definidos) en un programa. Una entidad declarada es un paquete, una clase, una interfaz, un miembro (campo) de un tipo de referencia , un parámetro o una variable local.

Cada declaración especificando un nombre tiene un alcance asociado, el cual permite determina la visibilidad “scope” de la declaración.

PAQUETES

Los programas en Java son organizados en paquetes (descomposición de un sistema en sub-sistemas) . Cada paquete posee un conjunto de nombres para tipos (clases e interfaces), lo cual ayuda a prevenir conflictos de nombres. Es posible tener dos tipos con el mismo nombre en diferentes paquetes, para eliminar la ambigüedad se utiliza el nombre del paquete como calificador. Por ejemplo, en el paquete Fig existe la clase Elipse y en el paquete Mat existe también la clase Elipse, para referirse a cada una de estas clases sin ninguna posibilidad de ambigüedad se coloca Fig.Elipse y Mat.Elipse. Un tipo definido en un paquete es accesible fuera del mismo si es declarado como público.

La estructura de nombres asociada con los paquetes es jerárquica. Los paquetes son descompuestos en sub-paquetes.

CLASES

Las clases en Java son el componente fundamental de la Programación orientada por objetos. Las definiciones (declaraciones) de clases definen nuevos tipos de referencia en Java y describen como son implementadas. Estructuralmente una clase se compone de campos. Los campos pueden ser propiedades o atributos y métodos u operaciones. Las propiedades o atributos representan los elementos de datos de la clases mientras que los métodos u operaciones representan el código asociado con la clase. Para acceder a los campos de la clase, independientemente se trate de propiedades o métodos se emplea el operador “.”.

INTERFACES

Otro de los mecanismos de programación orientada por objetos ofrecida en Java son las interfaces. Una interfaz permite relacionar clases independientes, las cuales implementan los métodos definidos en la interfaz. Una interfaz es un tipo de referencia compuesta de miembros, los cuales pueden ser clases, otras interfaces, constantes y métodos abstractos. Las interfaces no poseen implementación (únicamente agrupan elementos, lo cual es fundamental para implementar el concepto de polimorfismo) , pero permiten a clases no relacionadas entre sí implementarlas escribiendo código para los métodos abstractos definidos en la interfaz.

Un ejemplo de una interfaz es el caso de la interfaz Icomp (para realizar comparaciones) con un método virtual int comparar (object o1, object o2). Este método compara dos objetos de cualquier tipo y devuelve 0 si son iguales, +1 si o1 es mayor que o2 y –1 si o1 es menor que o2. De esta manera, cualquier clase puede implementar la interfaz Icomp implementando el método comparar y para comparar cualquier objeto con otro de su mismo tipo invoco al método comparar.

ARREGLOS

En el lenguaje de programación java, los arreglos son objetos creados dinámicamente, los cuales pueden ser asignados a variables del tipo Object. Todos los métodos de la clase Object pueden ser invocados en un arreglo. Un objeto arreglo almacena un número de variables. El número de variables puede ser 0, en ese caso el arreglo se considera como vacío. Las variables almacenadas en un arreglo no poseen nombres, en lugar se accede a estas con el operador [] empleando un valor de índice. Estas variables se conocen como los componentes del arreglo. Si un arreglo tiene ´n´ componentes, la longitud del arreglo es ‘n’ y los posibles valores para los índices del arreglo varían desde 0 hasta ‘n-1’ inclusive.

(16)

EXCEPCIONES

Cuando un programa viola las restricciones (semánticas, las sintácticas se chequean en tiempo de compilación) de Java en tiempo de ejecución, la máquina virtual de java detecta esta excepción y le envía al programa una señal de error a través de un objeto del tipo exception. Un ejemplo de esta violación es el caso de una división por cero o tratar de acceder un índice de un arreglo más allá de su longitud.

En algunos lenguajes de programación al ocurrir una excepción, el programa simplemente finaliza su ejecución. En el caso de Java, la excepción es capturada y el control es transferido a un punto del programa el cual debe ser explícitamente indicado por el programador. Una excepción es manejada cuando este código de transferencia es codificado por el programador y capturada cuando se especifica este punto de código.

EJECUCIÓN DE UN PROGRAMA EN JAVA

La máquina virtual de java comienza la ejecución cargando el código de la clase especificada y luego invocando el

método “main” codificado en esta clase.

Los pasos para la ejecución de un programa en java son los siguientes:

Compilar los archivos de código fuente .java con el comando javac, produciendo lo archivos .class (uno por cada clase definida). Los archivos .class contienen el código compilado asociado con la clase.

Ejecutar en la máquina virtual el código de la clase conteniendo el método main, empleando el comando java BLOQUES E INSTRUCCIONES

La secuencia de ejecución de un programa es controlada por las instrucciones, las cuales son ejecutadas y producen los resultados para los cuales fueron programadas.

Las instrucciones son agrupadas en bloques aplicando los principios de programación estructurada. En Java el primer nivel de agrupación de instrucciones son los métodos (agrupando instrucciones definidas u otros métodos), luego las clases (agrupando métodos, en programación modular una clase equivale a un módulo), luego los

paquetes (agrupando clases, en programación modular un paquete equivale a un subsistema) y finalmente en un

sistema.

Java soporta cuatro bloques típicos de instrucciones:

1. Instrucciones secuenciales: se ejecutan una detrás de otra y se separan por la instrucción “,”. 2. Instrucciones condicionales o selectivas: permite la ejecución condicional de un bloque de

instrucciones.

3. Instrucciones repetitivas: permite la ejecución repetitiva de un bloque de instrucciones mientras se cumpla una condición.

4. Instrucciones concurrentes o paralelas: debido a que Java es un lenguaje de programación concurrente ofrece mecanismos de programación para disparar la ejecución concurrente de pedazos de programas en plataformas de computación distribuida (múltiples procesadores) con memoria compartida. Adicionalmente Java soporta instrucciones manejando la terminación anormal de programas.

EXPRESIONES

Gran parte del código de un programa en Java emplea expresiones. Las expresiones son evaluadas por Java, pudiendo causar efectos secundarios como las asignaciones, u obtener valores. Las expresiones pueden ser utilizadas como argumentos de métodos u operandos en expresiones más largas, o para controlar la secuencia de ejecución de las instrucciones en los bloques condicionales y en los bloques repetitivos.

(17)

 

CONCURRENCIA

La máquina virtual de Java puede soportar varios hilos de ejecución (“threads”) concurrentemente. Estos “threads” ejecutan código independiente los cuales operan sobre valores y objetos almacenados en memoria compartida. Los “threads” también pueden ser utilizados en arquitecturas de múltiples procesadores o por sistemas con único procesador, pero múltiples proceso.

Java soporta concurrencia a través de mecanismos de sincronización, de modo de darle un control determinístico a los programas. Para sincronizar los “threads”, Java emplea monitores. Los monitores , son un mecanismo de programación de alto nivel, permitiendo ejecutar la región de código protegida por el monitor por un solo “thread” a la vez. Java también emplea el concepto de candados para el manejo de la concurrencia

LECCION 6 Características del lenguaje

Java es un lenguaje de propósito general, soportando concurrencia y desde el punto de vista de programación es totalmente orientado por objetos y basado en clases. El diseño del lenguaje permite lograr independencia de implementación (independencia de plataforma, de “hardware”). Java permite desarrollar al programador código para poder ser ejecutado “anywhere” en Internet.

Java se conforma en paquetes “packages”, cada paquete es un grupo de clases e interfaces totalmente

relacionadas. Los tres paquetes “core” (básicos ) de java son : java.lang, java.io, y java.util. El paquete java.lang contiene todos los constructores del lenguaje, el paquete java.io permite ejecutar la entrada y salida básica de las aplicaciones en Java y el paquete java.util contiene un grupo de utilitarios básicos y poderosos para desarrollar programas como: contenedores, tablas de hashing, vectores y muchos de los constructores de programación disponibles en los patrones de diseño.

Java es una plataforma de software desarrollada por Sun Microsystems. Esta plataforma ha sido desarrollada de tal manera que los programas desarrollados para ella puedan ejecutarse de la misma forma en diferentes tipos de arquitecturas y dispositivos computacionales. La portabilidad de la plataforma se logra por la implementación de la máquina virtual.

La sintaxis de Java se inspira en la la sintaxis de C++, pero su funcionamiento es más similar al de Smalltalk que a éste. Incorpora sincronización y manejo de tareas en el lenguaje mismo (similar a Ada) e incorpora interfaces como un mecanismo alternativo a la herencia múltiple de C++.

A finales de los 90s, Java llegó a ser el lenguaje de mayor acogida para programas de servidor. Utilizando una tecnología llamada JSP (similar a ASP de Microsoft), se hizo muy fácil escribir páginas dinámicas para sitios de Internet. Sumado a esto, la tecnología de JavaBeans, al incorporarse con JSP, permitía utilizar el patrón MVC (modelo-vista-controlador) que ya tanto se había aplicado a interfaces gráficas.

Java llegó a ser extremadamente popular cuando Sun Microsystems introdujo la plataforma y el modelo de programación J2EE (Java 2 Enterprise Edition). Este modelo permite una separación entre la presentación de los datos al usuario (JSP o Applets), el modelo de datos (EJB), y el control (Servlets). Enterprise Java Beans (EJB) que es una tecnología de objetos distribuidos permitiendo la creación de una plataforma de objetos distribuidos con un monitor de transacciones. Con este nuevo estándar, empresas como BEA, IBM, Sun Microsystems, Oracle y otros crearon nuevos "servidores de aplicaciones" que tuvieron gran acogida en el mercado.

Además de programas del servidor, Java permite escribir programas de interfaz gráfica o textual. Además se pueden correr programas de manera incorporada o embebida en los navegadores web de Internet, aunque estas aplicaciones ejecutándose del lado del cliente no han llegado a ser tan populares, tal como se esperaba con su diseño.

Los programas en Java generalmente son compilados a un lenguaje intermedio , y luego interpretados por una máquina virtual (JVM). Esta última sirve como una plataforma de abstracción entre la máquina y el lenguaje permitiendo que se pueda "escribir el programa una vez, y correrlo en cualquier lado". También existen

compiladores nativos de Java, tanto comercial como libre de costos .

(18)

SIMPLICIDAD

Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las características menos usadas y más confusas de éstos. C++ es un lenguaje que adolece de falta de seguridad, pero C y C++ son lenguajes más difundidos, por ello Java se diseñó para ser parecido a C++ y así facilitar un rápido y fácil aprendizaje.

Java elimina muchas de las características de otros lenguajes como C++, para mantener reducidas las

especificaciones del lenguaje y añadir características muy útiles como el “garbage collector” (control de memoria dinámica). No es necesario preocuparse de liberar memoria, el controlador se encarga de ello y como es un “thread” de baja prioridad, cuando entra en acción, permite liberar bloques de memoria muy grandes, reduciendo la fragmentación de la memoria.

Java reduce en un 50% los errores más comunes de programación con lenguajes como C y C++ al eliminar muchas de las características de éstos, entre las que destacan:

a) manipulación de apuntadores b) no existen referencias c) registros (struct)

d) definición de tipos (typedef) e) macros (#define)

f) necesidad de liberar memoria (free) ORIENTACIÓN POR OBJETOS

Java es totalmente orientado por objetos, los programas son un conjunto de clases e interfaces. Soporta las tres características propias del paradigma de la orientación por objetos: encapsulamiento, herencia y polimorfismo. Las instancias de las clases son conocidas como objetos. No es posible tener piezas de código fuera de una clase o de una interfaz.

Java incorpora funcionalidades inexistentes en C++ como por ejemplo, la resolución dinámica de métodos. Las clases en Java tienen una representación en el tiempo de ejecución que permite a los programadores interrogar por el tipo de datos de un objeto y enlazar dinámicamente la clase con el resultado de la búsqueda.

LENGUAJE CON FACILIDADES DE MANEJO DISTRIBUIDO

Java se ha construido con extensas capacidades de interconexión TCP/IP. Existen librerías de clases para acceder e interactuar con protocolos como http y ftp. Esto permite a los programadores acceder a la información a través de la red con tanta facilidad como a los archivos almacenados localmente en la máquina.

ROBUSTEZ

Java realiza verificaciones en busca de problemas tanto en tiempo de compilación como en tiempo de ejecución. El chequeo de tipos en Java ayuda a detectar errores, lo antes posible, en el ciclo de desarrollo. Java obliga a la declaración explícita de métodos, reduciendo así las posibilidades de error. Maneja la memoria , eliminando la posibilidad de mal uso de la misma o la corrupción de ésta. Los espacios de memoria asignados a los arreglos son chequeados de modo de evitar sobreescritura en zonas de memoria no válidas.

INDEPENDENCIA DE PLATAFORMA

El compilador Java (javac) compila su código a un archivo objeto (.class) de formato independiente de la arquitectura de la máquina donde se ejecutará. Cualquier máquina donde se instale la máquina virtual de java (JVM, Java Virtual Machine) puede ejecutar (interpretando) ese código objeto, sin importar en modo alguno la

(19)

 

máquina donde fue compilado. Actualmente existen máquinas virtuales para Solaris 2.x, SunOs 4.1.x, Windows 95, Windows NT, Linux, Irix, Aix, Mac, Apple.

SEGURIDAD

La seguridad en Java tiene dos facetas. No es posible tener acceso ilegal a la memoria debido a que no existen apuntadores y es un sistema fuertemente tipado (es el mismo caso del código administrado en la plataforma .NET) .

En java además se pueden implementar servicios de autenticación y de autorización sobre los componentes de los sistemas.

Java permite chequear en tiempo de compilación

a) El código no produce desbordamiento de operandos en la pila

b) El tipo de los parámetros de todos los códigos de operación son conocidos y correctos c) No ha ocurrido ninguna conversión ilegal de datos, tal como convertir enteros en apuntadores d) El acceso a los campos de un objeto se sabe que es legal: public, private, protected

e) No existe ningún intento de violar las reglas de acceso y seguridad establecidas

Las aplicaciones de Java resultan extremadamente seguras, no es posible acceder a zonas delicadas de memoria o de sistema, con lo cual evitan la interacción de ciertos virus. Java no posee una semántica específica para modificar la pila de programa, la memoria libre o utilizar objetos y métodos de un programa sin los privilegios del kernel del sistema de operación.

Respecto a la seguridad del código fuente, no ya del lenguaje, JDK proporciona un desemsamblador del código compilado, que permite que cualquier programa pueda ser convertido a código fuente, significando para el

programador una vulnerabilidad total del código. Utilizando javap no se obtiene el código fuente original, pero sí es posible recuperar la lógica del programa. La protección de los programadores ante esto es utilizar llamadas a programas nativos, externos (incluso en C o C++) de forma que no sea posible reconstruir todo el código; aunque así se pierda portabilidad. Este es uno de los problemas de Java.

PORTABILIDAD DE CÓDIGO

Adicionalmente a la independencia de plataforma, Java implementa estándares de portabilidad para facilitar el desarrollo. Los enteros son siempre enteros y además, enteros de 32 bits en complemento a 2. Además, Java construye sus interfaces de usuario a través de un sistema abstracto de ventanas de forma que las ventanas puedan ser implantadas en entornos Unix, Pc o Mac.

LA MÁQUINA VIRTUAL DE JAVA INTERPRETA EL CÓDIGO

La máquina virtual de java (en tiempo de ejecución) ejecuta directamente el código objeto sin necesidad de producir el ejecutable. Java es más lento que otros lenguajes de programación, como C++, ya que debe ser interpretado y no ejecutado como sucede en cualquier programa tradicional.

Debido a que Java es un lenguaje independiente del sistema operativo y del procesador que incorpore la máquina utilizada, es tanto interpretado como compilado. El código fuente se compila con javac produciendo archivos .class (llamado byte-code)

CONCURRENCIA

Java permite disparar múltiples hilos de ejecución de un programa (conocidos como “threads”) , permitiendo la ejecución de actividades simultáneas en un programa.

(20)

El beneficio de ser miltithreaded consiste en un mejor rendimiento interactivo y mejor comportamiento en tiempo real.

DINAMISMO

Java se beneficia todo lo posible de la tecnología orientada a objetos. Java no intenta conectar todos los módulos que comprenden una aplicación hasta el tiempo de ejecución. Las librerías nuevas o actualizadas no paralizarán las aplicaciones actuales (siempre que mantengan el API anterior).

Java también simplifica el uso de protocolos nuevos o actualizados. LECCION 7 Breve historia

Originalmente, Java fue llamado Oak, y se encontraba diseñado para trabajar en aplicaciones electrónicas

embebidas. El padre de Oak es James Gosling. Después de varios años de experiencia en el uso del lenguaje y

las contribuciones significativas de otras personas del área como Ed Frank, Patrick Naughton, Jonathan Payne, y Chris Warth el diseño fue reorientado para trabajar en Internet y renombrado como Java, siendo el lenguaje que conocemos actualmente. Las especificaciones del lenguaje en su forma final fueron escritas por James Gosling, Bill Joy, Guy Steele, Richard Tuck, Frank Yellin, y Arthur van Hoff, con la colaboración de otros colegas. Java ha ido evolucionando , incorporando nuevas clases e implementaciones y algunos constructores de

programación. Java se considera un lenguaje bastante maduro e inclusive empleado en aplicaciones comerciales (la edición empresarial considera la modelación de lógica del negocio en beans de Java reusables) y cuenta con una gran cantidad y variedad de programadores y usuarios.

La primera especificación formal completa de Java, aparece en 1996 y se mantiene vigente en cuanto a los fundamentos del lenguaje y en cuanto a los constructores de programación.

Existe mucho trabajo de investigación y experimentación en Java, proveyendo constantes mejoras y

actualizaciones manteniendo la modernidad del lenguaje. Actualmente, Java tiene un fuerte competidor en

Microsoft en la plataforma .Net.

LECCION 8 Máquina Virtual, JVM

La máquina virtual de Java es la pieza fundamental del lenguaje de programación Java y de la plataforma de computación Java en cualquiera de las versiones y ediciones de la misma. Este componente es el responsable de lograr la independencia entre el "hardware" y el sistema de operación. Una de las mayores ventajas del JVM es la generación de código compilado (.class) de tamaño reducido y compacto y la habilidad de ofrecer una

plataforma protegida o código controlado. Gracias a la JVM, un programa en Java no puede acceder a zonas de memoria no asignadas al programa ni modificar archivos o datos pertenecientes a otros usuarios.

La máquina virtual de Java, es una abstracción de una máquina de computación. Al igual a una máquina de computación posee un conjunto de instrucciones entendibles por ésta y manipula diferentes áreas de memoria durante los procesos de computación.

El primer prototipo de implementación de la JVM, realizado por Sun Microsystems, Inc., emulaba el conjunto de instrucciones de la máquina virtual de Java a través de un "software" cargado en un dispositivo "handheld" muy parecido a los hoy conocidos como "Personal Digital Assistant (PDA)". Las implementaciones actuales de las máquinas virtuales de Java y sus componentes como el ambiente de desarrollo "Software Develoment Kit" y el ambiente de tiempo de ejecución "Runtime Environment" emulan la máquina virtual en una gran cantidad de plataformas Windows, Solaris, Linux, etc. de una manera más sofisticada.

Es importante destacar, que la tecnología de la máquina virtual de Java no asume ninguna tecnología

particular de implementación , ningún tipo especial de "hardware" y ningún tipo especial de sistema de operación. La máquina virtual realiza un proceso de interpretación de línea por línea, traduciendo al código

entendible por la unidad de procesamiento donde se ejecuta la aplicación.

La máquina virtual de Java, no trabaja directamente con el código fuente de la aplicación (archivos .java). La JVM emplea el código compilado en formato binario (los archivos .class). Un archivo de clases contiene instrucciones de la JVM (los llamados bytecodes) y una tabla de símbolos para poder resolver las referencias.

(21)

 

Debido a razones de seguridad, la máquina virtual impone un formato muy rígido y con muchas restricciones de estructura par los archivos .class (el objetivo principal es evitar la realización del proceso de reingeniería en

reverso para recuperar el código fuente empleando el código compilado) .

ARRANQUE DE LA MÁQUINA VIRTUAL

La máquina virutal de Java inicia una aplicación creando una clase inicial, la cual es especificada en la clase conteniendo el método main() y el cual es específico en cada aplicación, empleando el cargador de clases llamado

"bootstrap". La máquina virtual enlaza la clase inicial, la inicializa e invoca el método público main de la clase

static public void main(String[]). La invocación de este método coordina la siguiente ejecución del programa. FINALIZACIÓN DE LA MÁQUINA VIRTUAL

La finalización de la ejecución de la máquina virtual ocurre si dos eventos se producen:

Todos los procesos "threads" de la aplicación finalizaron

Si alguno de los procesos "threads" invoca el método de salida "exit" de la clase Runtime o de la clase System, y la operación de salida es permitida por el manejador de seguridad.

"STACKS" DE LA MÁQUINA VIRTUAL

Cada proceso "thread" posee un "Stack" privado, creado al momento de la creación del proceso. El "Stack" de la JVM es análogo al "stack" de cualquier lenguaje de programación donde se almacenan las variables locales y los resultados parciales y por lo tanto tiene un rol primordial en la ejecución de un método y en su retorno. En el caso de Java estas piezas de almacenamiento son llamados "frames". La memoria asignada al "Stack" de una máquina virtual de Java no necesariamente debe ser continua.

COMPILANDO CÓDIGO PARA LA MÁQUINA VIRTUAL

La máquina virtual de Java únicamente entiende código compilado de Java (archivos. class). Estos archivos son generados por el comando (javac) en el componente de desarrollo de Java (SDK), este compilador genera código sintácticamente correcto en Java. Los archivos .class contienen las instrucciones definidas para el conjunto de instrucciones del JVM.

La máquina virtual de Java no asume la existencia del lenguaje de programación Java (sólo asume la existencia del conjunto de instrucciones). Por lo tanto podrían desarrollarse compiladores que transformen código fuente en cualquier otro lenguaje en el conjunto de instrucciones de la máquina virtual.

LECCION 9 Compilación en Java ARCHIVOS DE CÓDIGO FUENTE EN JAVA

Los archivos de código fuente en Java terminan con la extensión ".java". Estos archivos son de formato texto y pueden ser creados con cualquier editor de texto ascii.

Lo mínimo necesario para ser un código fuente válido en java, consiste en declarar la definición de una clase. A continuación se muestra un ejemplo

import java.io.*; import java.lang.*; class TCuenta { /* Atributos */

(22)

private long TNumero; private String TTipo; private String TCliente; private double TSaldo; /* Métodos */

////////////////////////////////////////////////////////////////////// // Constructor

////////////////////////////////////////////////////////////////////// public void TCuenta() {

TSaldo = 0.0; }

////////////////////////////////////////////////////////////////////// // Métodod retiro

////////////////////////////////////////////////////////////////////// public void Retiro(double Cantidad) {

if (Cantidad > TSaldo) {

System.out.println("Error: Sobregiro"); }

else {

TSaldo = TSaldo - Cantidad; }

}

////////////////////////////////////////////////////////////////////// // Método Depósito

////////////////////////////////////////////////////////////////////// public void Deposito(double Cantidad) {

(23)

 

}

////////////////////////////////////////////////////////////////////// // Propiedad getSaldo

////////////////////////////////////////////////////////////////////// public double getSaldo() {

return TSaldo; }

////////////////////////////////////////////////////////////////////// // Propiedad getNumero

////////////////////////////////////////////////////////////////////// public long getNumero() {

return TNumero;

} }

COMPILACIÓN DE CÓDIGO FUENTE EN JAVA

El compilador javac se encuentra en el directorio bin por debajo del directorio java, donde se haya instalado el JDK. Este directorio bin, por facilidades de ejecución, debería formar parte de la variable de entorno PATH del sistema. El compilador de Java traslada el código fuente Java a byte-codes, que son los componentes que entiende la Máquina Virtual Java que está incluida en los navegadores con soporte Java y en appletviewer.

Suponga el archivo creado anteriormente se llama Cuenta.java, este se puede compilar con la línea siguiente: %javac Cuenta.java

Si el programa se encuentra sintácticamente correcto no debería aparecer mensaje alguno en la pantalla, y cuando vuelva a aparecer el prompt del sistema, se debería ver un archivo Cuenta.class nuevo en el directorio donde se encuentra el fichero fuente.

Ejecución del código en java

Para ejecutar la aplicación Cuenta, hemos de recurrir al intérprete java (la máquina virtual), que también se encuentra en el directorio bin, bajo el directorio java. Se ejecutará la aplicación con la línea:

%java Cuenta

Debido a que en Cuenta.java no existe un método llamado main, la aplicación va a generar errores. En este caso para poder ejecutar cuenta se debería agregar el siguiente código en el archivo Cuenta.java.

(24)

class ppal {

public static void main(String args[]) throws IOException { TCuenta C1; double saldo; C1 = new TCuenta(); C1.Deposito(120); C1.Retiro(50); saldo = C1.getSaldo(); System.out.println(saldo); } }

En este caso, en el archivo Cuenta,java existen dos clases (Cuenta y ppal). Al ejecutarse el comando javac se generarán dos archivos .class (bytecode): Cuenta.class y ppal.class. Como ppal es la clase que contiene el método main, para ejencutar el programa se debe colocar.

%java Cuenta

Produciendo como resultado en pantalla 70.

NOTA: Cuando se tienen varias clases en un archivo sólo una puede ser declarada como public y el nombre de esta

clase public debe coincidir con el nombre del archivo .java LECCION 10 La librería de clases de Java

Java es un lenguaje totalmente orientado por objetos y basado en clases. Las clases en java son agrupadas en

paquetes “packages”. Un paquete es un conjunto de clases e interfaces. Para utilizar un paquete en Java se debe

utilizar la instrucción import, la cual permite trabajar con un paquete o con un subconjunto del paquete. La librería de clases en Java, permite a los programadores reutilizar código desarrollado y probado previamente permitiendo incrementar la productividad, acortar los tiempos de desarrollo y disminuir la posibilidad de errores. Java permite a los programadores crear su propia librería de clases permitiendo su re-utilización el en futuro.

Java se conforma en paquetes “packages”, cada paquete es un grupo de clases e interfaces totalmente relacionadas. Los

tres paquetes “core” (básicos ) de java son : java.lang, java.io, y java.util. El paquete java.lang contiene todos los

constructores del lenguaje, el paquete java.io permite ejecutar la entrada y salida básica de las aplicaciones en Java y el paquete java.util contiene un grupo de utilitarios básicos y poderosos para desarrollar programas como: contenedores, tablas de hashing, vectores y muchos de los constructores de programación disponibles en los patrones de diseño.

(25)

 

Los paquetes en Java son agrupados a través de una relación de Agregación , Composición.

Esta relación se refleja en la estructura de nombres asociadas a los paquetes, Por ejemplo el paquete java.* se compone de tres sub-paquetes java.io, java.lang y java.util. Y estos a su vez pueden descomponerse de otros sub-paquetes. Cuando se emplea la instrucción imports se puede utilizar la expresión regular * la cual importaría automáticamente todos los sub-paquetes asociados con el paquete.

PAQUETES DISPONIBLES EN LA PLATAFORMA JAVA EDICIÓN STANDARD (J2SE)

La documentación para la versión 7 se encuentra en http://docs.oracle.com/javase/7/docs/api/

 

java.applet

Provee las clases necesarias para manipular los “applets”. Permite crear “applets” y contiene todas las clases necesarias utilizadas para comunicar con el contexto del “applet”.

java.awt

Es un contenedor de clases para crear interfaces con el usuario y para trabajar con gráficos e imágenes.

java.awt.color

Provee clases para los espacios de colores.

java.awt.datatransfer

Provee interfaces y clases para transferir datos entre aplicaciones.

java.awt.dnd

Ofrece un mecanismo de “Drag and Drop” para intercambiar elementos en una interfaz gráfica entre aplicaciones.

java.awt.event

Es un contenedor de interfaces y clases necesarias para manejar los diferentes tipos de eventos disparados por los componentes AWT.

(26)

java.awt.font

Provee clases e interfaces para manipular “fonts”.

java.awt.geom

Contiene las clases para manipular objetos en 2 dimensiones en Java. Utiliza la geometría de dos dimensiones (rotación, traslación, escalamiento)

java.awt.im

Provee clases e interfaces para el “input method framework”

java.awt.im.spi

Soporta interfaces para habilitar el desarrollo de “input methods” para utilizar en cualquier ambiente de “runtime”

java.awt.image

Provee clases para crear y modificar imagines.

java.awt.image.renderable

Provee clases e interfaces para producir imagines dependiente de la política de “rendering”.

java.awt.print

Provee clases e interfaces para un API genérico de impresión.

java.beans

Contiene las clases utilizadas para desarrollar los “beans”. Los “beans” son componentes basados en la arquitectura “JavaBeansTM”.

java.beans.beancontext

Provee clases e interfaces utilizadas para manipular los contextos de los “beans”.

java.io

Soporta las clases para desarrollar la entrada y la salida empleando “streams” de datos, serialización y el sistema de archivos.

java.lang

Provee las clases fundamentales del diseño del lenguaje de programación JAVA.

java.lang.ref

Provee las clases para el manejo de objetos de tipo de referencia, soportando un grado limitado de interacción con el “garbage collector”.

java.lang.reflect

(27)

 

java.math

Provee clases para realizar operaciones aritméticas de precisión arbitraria sobre enteros (“BigInteger” ) y operaciones aritméticas de precisión arbitraria sobre números decimales (“BigDecimal”).

java.net

Provee las clases para implementar aplicaciones en redes.

java.nio

Agrega los buffers (complementando las facilidades de io). Los buffers son contenedores de datos.

java.nio.channels

Define canales de comunicación, los cuales representan conexione con entidades permitiendo realizar las operaciones de I/O, como por ejemplo archivos y “sockets”. También define “selectors” para permitir conexiones “multiplexed” y operaciones de I/O “non-blocked”

java.nio.channels.spi

Clases proveedoras de servicio para el paquete java.nio.channels.

java.nio.charset

Define conjuntos de caracteres, codificadores y decodificadores para realizar conversiones entre bytes y caracteres Unicode.

java.nio.charset.spi

Clases proveedoras de servicio para el paquete java.nio.charset.

java.rmi

Provee el paquete RMI (“Remote Method Invocation”)

java.rmi.activation

Soporta la activación de objetos RMI

java.rmi.dgc

Provee clases e interfaces para el “Distributed Garbage Collection” en RMI.

java.rmi.registry

Provee una clase y dos interfaces soportando el registro de RMI.

java.rmi.server

Provee las clases e interfaces para soportar el lado del servidor de RMI.

java.security

(28)

java.security.cert

Provee clases e interfaces para la manipulación e interpretación de los certificados, las rutas de los certificados y las listas de revocación de certificados (CRLs).

java.security.interfaces

Provee interfaces para generar (un algoritmo de AsymmetricCipher creado por Rivest, Shamir and Adleman) claves RSA definidas en la nota técnica PKCS#1 del laboratorio RSA , y claves DSA (algoritmo de firmas digitales) definido en NIST's FIPS-186.

java.security.spec

Provee clases e interfaces para las especificaciones de las claves y los parámetros de los algrotimos.

java.sql

Provee el API para acceder y procesar los datos almacenados en una fuente de datos (generalmente una base de datos relacional) a través del lenguaje de programación Java.

java.text

Provee clases e interfaces utilizadas para manipular texto, fechas, números y mensajes de una manera independiente de los lenguajes naturales.

java.util

Contiene la plataforma para manejar las colecciones, las clases de colección, el modelo de eventos, las facilidades de manejo de fechas y tiempo, la internacionalización, y clases utilitarias misceláneas (como string tokenizer, generador de números aleatorios, arreglos de bits).

java.util.jar

Provee las clases para realizar la lectura y la escritura de los archivos JAR . JAR es un formato de archivos conteniendo un archivo con formato ZIP estandar y un archive de manifesto opcional.

java.util.logging

Provee las clases y las interfaces para soportar las facilidades de “login” en la plataforma JavaTM.

java.util.prefs

Este paquete permite a las aplicaciones almacenar y obtener información de las preferencias del usuario, del sistema y de los datos de configuración.

java.util.regex

Este paquete contiene las clases necesarias para implementar el manejo de expresiones regulares en Java.

java.util.zip

Soporta clases para realizar la lectura y la escritura de los formatos estandar ZIP y GZIP.

Referencias

Documento similar

En el servlet es necesario configurar el método doPost() para la recepción de cada uno de los datos que vendrán desde el JSP mediante la request, para esto será necesario utilizar

Esta asignatura abarca los sistemas en tiempo real aplicadas a entornos industriales, incluyendo la programación en Java y tecnologías para buses de campo y procesamiento

Se propone crear un sistema bajo la programación orientada a objetos en Java ya que es el lenguaje que proporciona diversas ventajas, que nos permitirá hacer

Java es un lenguaje de programación con el que podemos realizar cualquier tipo de programa. En la actualidad es un lenguaje muy extendido y cada vez cobra más importancia tanto en

History and the Java type of environment, are the first steps of learning a simple language, powerful, reliable and secure, plus its versatility is most demanded. application

Como lenguajes de programación se han usado Java para los endpoints, Python para obtener los datos de los sensores en la Raspberry y nodejs para la conexión con la base de datos y

Las  aplicaciones Android están escritas en lenguaje Java.  Aunque  ya hemos 

Para diseñar la interfaz gráfica que visualice de la forma más clara y sencilla los árboles, en nuestro caso, el organigrama, se crea una ventana principal con un área de