A mediados del año 2008 se creó una nueva arquitectura o paradigma de computación que se ha implantando de modo acelerado: cloud computing o computación en nube. ¿Qué es la computación en nube? Es una filosofía de trabajo en la computación y en la informática que proviene de ofrecer el hardware y el software como servicios, al igual que sucede con cualquier otro servicio común como la electricidad, el gas o el teléfono. La computación en nube supone un nuevo modelo que ofrece a usuarios, programadores y desarrolladores la posibilidad de ejecutar los programas directamente, sin necesidad de instalación, ni mantenimiento, como es el caso de muchas aplicaciones actuales, y en particular la Web 2.0, donde el usuario descarga el programa y a continuación lo ejecuta. Ejemplos de esto son Google Street View, las redes sociales, los blogs y el correo electró- nico web, donde el usuario sólo debe ejecutar los programas que se encuentran en la nube; hay innumerables sistemas de computadoras y centros de datos en el mundo, con extensos servicios (programas, sistemas operativos, redes de comunicaciones virtuales) procedentes de numerosos proveedores; ofrecidos en forma gratuita o mediante el pago de una tarifa diaria, semanal, mensual, etcétera; cada día hay más proveedores de servi- cios de computación en nube, aunque los más conocidos son: Google, Amazon, Microsoft, IBM y Salesforce, entre otros.
Esta nueva arquitectura y filosofía de computación requiere nuevos conceptos para el desarrollo de programas centrados fundamentalmente en los servicios web, con apli- caciones que residirán en la nube de computadoras y que los usuarios descargarán y ejecutarán al instante.
1.8 Web semántica y Web 3.0
La Web semántica fue un nuevo invento del creador de la WWW, Tim-Berners-Lee, para señalar la futura evolución de internet; él buscaba un nuevo método para organizar el contenido de internet que, de cierta forma, estaba totalmente desestructurado. El reto era encontrar la posición exacta de la información que se necesitaba para responder a un planteamiento concreto: que el contenido de las estructuras de la red pudiera ser enten- dido por las máquinas; se trataba, por ejemplo, de comprender que una dirección física es eso y no un número de teléfono o cualquier otro dato; es decir, añadir la capacidad de marcar o etiquetar información en internet utilizando semántica (significado) para faci- litar a las computadoras el análisis del contenido con más precisión. La Web semántica introducirá un nuevo nivel de sofisticación a los motores de búsqueda; de modo tal que
01_Joyanes.indd 19
20 CAPÍTULO 1 Introducción a la programación
respondan exactamente a la pregunta que se les plantea y no con una serie, a veces inter- minable, de enlaces donde aparecen términos o palabras incluidas en la pregunta.
El artículo desencadenante de la ola de popularidad de la Web semántica se publicó en mayo de 2001 en la revista Scientific American;3 éste plantea que la Web semántica es una extensión de la actual, dotada de significado, es decir, un espacio donde la informa- ción tiene un significado bien definido que puede interpretarse por agentes humanos o computarizados.
El advenimiento de la Web 2.0 como llamada social, participativa y colaborativa trajo un nuevo resurgimiento de la red semántica luego de llegar al gran público; en mi opi- nión, en este nuevo siglo xxi, el concepto 3.0 está inmerso como una nueva generación de la web, fruto de la convergencia de la semántica y la 2.0; un sitio representativo de la nueva red es el buscador semántico Wolfram Alpha.
1.9 Java como lenguaje y plataforma
de programación
Java es un lenguaje de programación de propósito general, posiblemente, uno de los más populares y más utilizados en el desarrollo de programas de software, especialmente para internet y web; actualmente se encuentra en numerosas aplicaciones, dispositivos, redes de comunicaciones, etcétera, como:
Servidores web. •
Bases de datos relacionales. •
Sistemas de información geográfica (SIG/GIS, Geographical Information System). •
Teléfonos celulares (móviles). •
Sistemas de teledetección. •
Asistentes digitales personales (PDA). •
Sistemas medioambientales. •
Pero Java no sólo es un lenguaje de programación, sino que también constituye una plataforma completa para el desarrollo de software; posee una biblioteca gigantesca de clases y aplicaciones con numerosos códigos reutilizables y un entorno de programación que proporciona servicios tales como seguridad, portabilidad entre sistemas operativos y recolección automática de basura (automatic garbage collection).
Se comenta que Java tiene todo lo que un programador eficiente necesita: un buen lenguaje, un entorno de ejecución de alta calidad y una biblioteca extensa; esta combi- nación caracteriza a Java como el lenguaje de programación por excelencia y permite utilizarlo tanto en la enseñanza —prácticamente en todas las carreras universitarias y profesionales de ciencias e ingeniería y en los diferentes niveles de aprendizaje— como en la investigación y en el desarrollo profesional de todo tipo de software. En las empre- sas, en la industria y en internet es el rey de los lenguajes de programación utilizados para el desarrollo web. En resumen, Java es un lenguaje de internet y de propósito gene- ral, como otros lenguajes de programación populares como C, C++ o Pascal, que incluye muchos conceptos de C y C++; especialmente del último y que, además, añade a C++ propiedades de gestión automática de memoria y soporte de aplicaciones multihilo; tam- bién es más fácil de aprender y utilizar porque se han eliminado algunas de sus caracte- rísticas más complejas como la herencia múltiple, apuntadores (punteros) y sentencias goto, entre otras que posteriormente se analizarán, junto con las diferencias y particu- laridades de Java.
3 Tim Berners-Lee, Jim Hendler Ora Lasilla. “The Semantic Web” en: Scientifi c American, mayo, 2001.
01_Joyanes.indd 20
1.10 Historia de Java 21
1.10 Historia de Java
Java no se pensó originalmente como lenguaje para internet, Sun Microsystems, la em- presa estadounidense creadora del lenguaje y de la plataforma, comenzó a desarrollarlo con el objetivo de crear un lenguaje independiente de la plataforma y del sistema opera- tivo que permitiera su diseño y construcción en la floreciente electrónica de consumo (dispositivos como televisores, reproductores de video, equipos de música, etcétera).
El proyecto original, denominado Green, comenzó apoyándose en C++ pero a medida que progresaba su desarrollo, el equipo creador se encontró con dificultades, especial- mente de portabilidad; para evitar esto decidieron desarrollar su propio lenguaje, y en agosto de 1991 nació uno nuevo orientado a objetos y al cual llamaron Oak. En 1993, Green se renombró First Person Juc.; Sun invirtió, sin mucho éxito, un gran presupuesto y esfuerzo fundamentalmente humano para intentar vender esta tecnología, hardware y software.
A mitad de 1993 se lanzó Mosaic, el primer gran navegador web, y comenzó a crecer el interés por internet (y en particular por la World Wide Web); después se rediseñó el lenguaje para desarrollar internet y, en enero de 1995, Oak se convirtió en Java. Sun lan- zó el entorno JDK 1.0 (java development kit) en 1996 como primera versión del kit de de- sarrollo de dominio público y se convirtió en la primera especificación formal de la plataforma Java; desde entonces se han lanzado diferentes versiones, aunque JDK 1.1, la primera versión comercial, se lanzó a principios de 1997.
En diciembre de 1998, Sun lanzó JDK 1.2 pero la renombró como Java 2 y comenzó a utilizarse el nombre de J2SE (Java 2 Platform, Standard Edition) para diferenciar las plataformas base de J2EE (Java 2 Platform, Enterprise Edition) y J2ME (Java 2 Platform, Micro Edition); además de la versión estándar SE, Sun lanzó otras dos ediciones popula- res: Micro Edition (ME) para dispositivos empotrados (embebidos) tales como teléfonos celulares (móviles) y la edición empresarial (Enterprise Edition, EE) para procesamien- to desde el servidor. Este libro se centra esencialmente en la edición SE. En mayo de 2000 se lanzó J2SE 1.3, y en febrero de 2002, la J2SE 1.4; ambas trajeron consigo un gran nú- mero de clases e interfaces a las bibliotecas estándar de Java.
Sin embargo fue la versión 5.0, la primera después de la versión 1.1, la que implicó una actualización de Java de modo significativo; dicha versión originalmente se nom- bró 1.5, pero el número se cambió a 5.0 en la conferencia JavaOne de 2004. Después de años de investigación se añadieron tipos genéricos similares a las plantillas o templates de C++, también se agregaron propiedades de C# (el lenguaje creado por Microsoft), pre cisamente para competir con Java en internet, como el bucle “for each”, así como el manejo de metadatos para su uso, principalmente, en bases de datos, y otras caracte- rísticas como enumeraciones, varargs (número de argumentos variables), entre otras.
La versión 6 (sin el sufijo 0) se lanzó en diciembre de 2006 y hoy día es la más utiliza- da y recomendada para su descarga del sitio web de Sun o de Oracle (su actual propie- tario), cuyas direcciones web se indican en el apartado 1.12. Esta versión no ha traído cambios al lenguaje, sino mejoras adicionales al rendimiento y a la interfaz gráfica, así como un nuevo marco de trabajo y API (interfaces de programación de aplicaciones) junto con soporte para servicios web e implementaciones de JavaScript, fundamental- mente para los buscadores, tales como Firefox de la fundación Mozilla.
Al poco tiempo de liberar la versión 6, Sun4 comenzó un nuevo proyecto cuyo nombre clave es Dolphin, aunque ha comenzado a denominarse Java 7 y se espera que a mediados 4 En la actualidad, en el sitio web de Oracle propietario de Java, se puede descargar la versión 6 de Java. En abril de 2009, Oracle adquirió Sun Microsystems por 5 700 millones de dólares; tras adquirir los permisos oportunos de las autoridades correspon- dientes de Estados Unidos en ese mismo año, la Unión Europea dio también la aprobación correspondiente a inicio del 2010. Has- ta la fecha, toda la información de Java se encuentra en el sitio de Oracle: http://www.oracle.com/technetwork/java/javase/
01_Joyanes.indd 21
22 CAPÍTULO 1 Introducción a la programación
de 2011 se lance Java SE 7 y a finales de 2012, Java SE 8. Al parecer traerá una nueva bi- blioteca de clases, junto con soporte para XML, un nuevo concepto de superpaquete, introducción de anotaciones estándar para detectar fallos en software, nuevas API para manejo de calendario de fechas y días, etcétera.
Este libro cubre fundamentalmente Java 5.0 y Java 6, pero puede utilizarse por quie- nes sigan utilizando la versión 2 y, a pesar de que Java 7 no se ha lanzado de forma oficial, al escribir este libro consideramos que el lector podrá migrar, si lo desea, a esta última versión, sin problemas de compatibilidad; aunque se entiende que pasarán algunos años hasta la implantación de esta futura versión, entre otras razones, porque la gran comuni- dad de desarrolladores de Java sigue empleando Java 2 y, con más frecuencia, la platafor- ma Java SE 6, ya que es la que Sun actualiza con más frecuencia; de hecho, ya se ofrece la actualización número 21.
En la tabla 1.45 se muestra la evolución de Java desde la primera versión hasta la 6.0. En la tabla 1.4 no se incluye la versión Java 7 porque todavía no se conocen sus espe- cificaciones finales, aunque en lo relativo a clases, el lector puede darse una idea aproxi- mada consultando el borrador, o draft #9, publicado por Sun en el sitio web cuya dirección está en el apartado 1.12.
1.10.1 Características de Java
En C, C++ o Pascal, el compilador traduce el código fuente directamente al lenguaje máquina de su computadora, entendible por su CPU; estos lenguajes necesitan un com- pilador diferente para cada tipo de CPU y en consecuencia, cuando los programas escri- tos en estos lenguajes se traducen a código máquina no son portables, de modo que el código fuente debe ser recompilado para cada tipo de máquina o CPU. Para solucionar este problema y hacer que los programas de Java sean independientes de la máquina y se puedan transportar o “portar” fácilmente a otras máquinas y también puedan ejecutarse en navegadores web, los creadores de Java introdujeron el concepto, citado anteriormen- te, de máquina virtual Java y el bytecode como el lenguaje máquina de la CPU específica, donde la máquina virtual Java los ejecuta o interpreta. Existen numerosas máquinas vir- tuales disponibles para un gran número de plataformas que permiten a los programas ser independientes de la máquina, de modo que un programa compilado en una esta- ción UNIX puede ejecutarse en un sistema operativo Macintosh o en Windows 7; esta
overview/index.html (consultado el 5 de diciembre de 2010). En este sitio web, el lector puede descargar la versión 6 de Java SE update 24 (última actualización al momento de la revisión fi nal del libro); también puede consultar una versión preliminar y documentación de JDK 7. En esa misma página y en un blog de Oracle se anuncian la versión Java Standard Edition (Java SE) 7 para mediados del 2011 y Java SE 8 para fi nales 2012.
5 Horstman, C. S. y Cornell, G., Core Java, volumen I “Fundamentals”, Upper Saddle River, Prentice-Hall, 2008, p. 11.
Tabla 1.4 Evolución de Java.
Versión Año Nuevas características del lenguaje Número de clases e interfaces
1.0 1996 Definición del lenguaje 211
1.1 1997 Clases internas 477
1.2 1998 Ninguna 1 524
1.3 2000 Ninguna 1 840
1.4 2004 Aserciones 2 723
5.0 2004 Clases genéricas, bucles for each, varargs autoboxing, metadatos, enumeraciones, importación estática.
3 279
6 2006 Ninguna 3 777
01_Joyanes.indd 22
Resumen 23
característica se debe a que el intérprete de Java traduce y ejecuta una instrucción de bytecode cada vez sin traducir el código completo como sucede con otros compiladores, por ejemplo, C++, necesita un compilador diferente para cada tipo de máquina, mien- tras que un compilador Java traduce un programa fuente en Java a bytecode, el lenguaje máquina de la máquina virtual Java (JVM), independiente del tipo específico de CPU. El intérprete de Java traduce cada instrucción en bytecode en el tipo específico de lenguaje máquina de la CPU y, a continuación, ejecuta la instrucción; por consiguiente, Java sólo necesita un tipo diferente de intérprete para cada tipo específico de CPU, además es po- sible señalar que los intérpretes son programas más sencillos que los compiladores, aun- que más lentos.
Otra fortaleza de Java, como se verá más adelante al estudiar paquetes y bibliotecas, es que incluye bibliotecas de clases incorporadas; dichos paquetes vienen con los entor- nos de desarrollo JDK (Java development kit) y contienen centenares de clases integradas con millares de métodos, como se señala en la tabla 1.4.
Los creadores de Java escribieron un artículo,6 ya clásico, en el que definen el lengua- je y recogen sus once características más sobresalientes:
Sencillo. •
Orientado a objetos. •
Distribuido (características de red, especialmente internet). • Portable. • Interpretado. • Robusto. • Seguro. • Arquitectura neutra. • Alto rendimiento. • Multihilo ( • multithreaded). Dinámico. •
Como vimos, una computadora es un dispositivo para procesar informa ción y obtener re- sultados en función de los datos de entrada; fundamentalmente tiene dos componentes:
Hardware: parte física (dispositivos electrónicos). Software: parte lógica (programas).
Las computadoras se componen de:
Unidad central de proceso (UCP o CPU, por sus siglas en inglés). •
Memoria central. •
Dispositivos de almacenamiento masivo de información (memoria auxiliar o externa). •
Dispositivos de entrada y salida. •
Todos los programas deben cargarse en la memoria principal o RAM antes de poder- se ejecutar; pero cuando la computadora se apaga, todos los programas que están en di- cha memoria se eliminan. Por esto la memoria secundaria proporciona un medio para almacenar información de manera permanente.
6 El artículo se puede descargar en: http://java.sun.com/docs/white/langenv. El resumen, con las once palabras claves y so- bresalientes (buzzwords, en inglés) está disponible en: http://jsva.sun.com/docs/overviews/java/java-overview-1.html. Reco- mendamos que el lector descargue ambos documentos y los revise con detenimiento a medida que avanza en la lectura del libro. En la siguiente fuente se describen con mayor detenimiento las características de Java explicadas en el artículo citado: Joyanes, L. y Zahonero I., Programación en Java 2, Madrid, McGraw-Hill, 2002, pp. 40-45.
Especificaciones de Java. En el
apéndice F encontrará las direcciones de los documentos más significativos referentes a Java y que fueron publi- cados por Sun Microsystems y Oracle; recomendamos analizar con deteni- miento la información de todas las direcciones pues le serán de utilidad durante su aprendizaje y en su carrera profesional; además, en el sitio web del libro publicaremos periódicamente referencias de interés.
NOTA
resumen
01_Joyanes.indd 23
24 CAPÍTULO 1 Introducción a la programación
Algunos dispositivos de almacenamiento secundario son: disco duro, disco flexible, memoria flash, memoria ZIP, cinta magnética, CD-ROM y DVD.
El término software se refiere a los programas ejecutados por las computadoras y puede ser del sistema o de aplicaciones. El software del sistema comprende, entre otros componentes, el sistema operativo y los lenguajes de programación; el software o progra- mas de aplicación ejecuta tareas específicas. En primera instancia, serán los programas que desarrollará el lector.
Existen numerosos sistemas operativos, aunque en la actualidad los más utilizados son Unix, Linux, Windows y Mac OS; y para dispositivos móviles Android, Blackberry y Symbian.
A diferencia de los lenguajes de bajo nivel, los de alto nivel están diseñados para faci- litar la escritura de programas y existe gran cantidad de ellos, cada uno con sus propias características y funcionalidades; normalmente sus programas son más fáciles de trans- portar a máquinas di ferentes que los escritos en lenguajes de bajo nivel.
El sistema operativo monitorea y controla la actividad global de la computadora y también proporciona servicios. El lenguaje básico de una computadora es una secuencia de dígitos 1 y 0 denominado lenguaje máquina; cada computadora entiende su propio lenguaje máquina.
Un bit es un dígito binario, cero o uno; una secuencia de estos dígitos se llama códi- go o número binario; ocho de estas secuencias forman un byte y sus múltiplos más usua- les son: kilobyte (Kb), megabyte (Mb), gigabyte (Gb) y terabyte (Tb).
Los lenguajes de programación se clasifican en: Alto nivel: Pascal, Java
• , FORTRAN, Visual Basic, C, Ada, Modula-2, C++, Delphi, C#
Bajo nivel: ensambladores •
Máquina: código máquina o bytecode en Java •
Diseño web: SMGL, HTML, XML, PHP, JavaScript y Python •
El lenguaje ensamblador utiliza instrucciones fáciles de recordar y los programas en- sambladores traducen programas escritos en este lenguaje a lenguaje máquina.
Para que los programas Java sean independientes de la máquina, sus creadores idea- ron una computadora virtual modelo denominada máquina virtual Java (JVM) y bytecode es su lenguaje máquina. Los programas escritos en lenguaje de alto nivel deben traducir- se por un compilador o un intérprete antes de que se puedan ejecutar en una máquina específica; en la mayoría de los lenguajes de programación se requiere un compilador para cada máquina en la que se desea ejecutar programas escritos en un lenguaje especí- fico; Java es la excepción porque por su carácter interpretado es independiente de la máquina y sus programas pueden ejecutarse en cualquier CPU.
Internet, es una red de redes de computadoras, a través de la cual se comunican millo- nes de usuarios. La World Wide Web, o web, utiliza programas de software que permiten a los usuarios de computadoras visualizar documentos de prácticamente cualquier tema y a los cuales puede acceder mediante el teclado y el mouse.
La web actual es conocida como Web 2.0 y va evolucionando a la semántica o 3.0; se prevén nuevas generaciones tales como 4.0. La primera se apoya fundamentalmente en tecnologías y aplicaciones específicas, cuyo soporte fundamental son los lenguajes Java, JavaScript y XML, entre otros. Los social media son un conjunto de aplicaciones y tecno- logías que fomentan una web más participativa e interactiva, básicamente son blogs, wi- kis, redes sociales, mashups, etcétera, de modo que los desarrolladores y programadores de software se dedican fundamentalmente al desarrollo de ese tipo de aplicaciones.
Java es el lenguaje por excelencia de internet y la web; sus versiones más conocidas son Java SE 2, Java SE 5.0 y Java SE 6, aunque a mediados de 2011 se presentará Java SE 7 con nuevas características que potenciarán el desarrollo de programas de aplicaciones y de sistemas.
01_Joyanes.indd 24
2.1 Resolución de problemas con Java 25
2
capítulo
Resolver problemas mediante el uso de •
una computadora.
Entender las etapas en la resolución de •
un problema.
Conocer el concepto de algoritmo. •
Examinar las técnicas de resolución de •
problemas.
Comprender los conceptos de compi- •
ladores e intérpretes.
Procesar un programa en Java. •
Conocer las herramientas utilizadas •
en el desarrollo de programas, funda- mentalmente editores, compiladores, in térpretes y entornos de desarrollo in- tegrados.
Familiarizarse con las metodologías de •
diseño y programación estructurada y