Libro de Java
Libro de Java
un lenguaje de programacin, el despliegue de Java es exagerado: Java es sin duda un buen lenguaje de programacin. No hay duda de que es uno de los mejores lenguajes disponibles para los programadores ms serios. Creemos que podra haber sido un gran lenguaje de programacin, pero probablemente es demasiado tarde para eso. Una vez que el lenguaje est en el campo, la horrible realidad de compatibilidad con cdigo existente se establece." Nuestro editor obtuvo muchas crticas de este prrafo de alguien muy alto de Sun Microsystems, que permanecer en el anonimato. Pero, en retrospectiva, nuestro pronstico parece exacto. Java tiene un montn de caractersticas de lenguaje, que examinaremos en detalle ms adelante en este captulo. Tiene su porcin de verrugas, y sus ms recientes adiciones al lenguaje no son tan elegantes como los originales debido a la fea realidad de compatibilidad. Pero, como ya dijimos en la primera edicin, Java nunca fue slo un idioma. Hay muchos lenguajes de programacin por ah, y pocos de ellos hacen mucho ruido. Java es una plataforma completa, con una gran biblioteca, que contiene gran cantidad de cdigo reutilizable y un entorno de ejecucin que proporciona servicios como seguridad, portabilidad a travs de sistemas operativos y la recoleccin de basura automtica. Como programador, desea un lenguaje con una agradable sintaxis y semntica comprensible (es decir, no C++). Java se ajusta a la ley, como decenas de otros lenguajes finos. Algunos idiomas le ofrecen portabilidad, recoleccin y similares, pero no tienen mucho de una biblioteca, obligarle a rodar su propio si desea tener acceso de grficos o redes o base de datos de fantasa. Bueno, Java tiene todo: un buen idioma, un entorno de ejecucin de alta calidad y una vasta biblioteca. Esa combinacin es lo que hace que una propuesta irresistible para muchos programadores Java Como programador, usted querr un lenguaje con una sintaxis y semntica agradable comprensible (es decir, no C + +). Java se ajusta a la ley, as como docenas de otros idiomas bien. Algunos idiomas se dan la portabilidad, la recoleccin de basura, etc, pero no tienen mucho de una biblioteca, forzando a rodar en la propia si desea grficos extravagantes o el trabajo en red o acceso a bases de datos. Bueno, Java tiene todo: un buen lenguaje, un entorno de ejecucin de alta calidad, y una amplia biblioteca. Esa combinacin es lo que hace Java una propuesta irresistible para muchos programadores. Trminos de moda del Libro Blanco de Java Los autores de Java han escrito un influyente libro blanco que explica sus objetivos y logros. Tambin publicaron un resumen ms corto que se organiza a lo largo de 11Trminos de moda: Simple Orientado a objetos Con Experiencia en red Robusto Seguro Arquitectura Neutral Portable
Interpretado Alto rendimiento Dinmico Multiproceso En esta seccin: y y Se resumir con extractos del libro blanco, lo que los diseadores Java dicen acerca de las palabras anteriores y Diremos lo que pensamos de las anteriores palabras, basado en nuestras experiencias con la versin actual de Java.
Simple Hemos querido construir un sistema que puede ser programado con facilidad sin mucha formacin esotrica y que ha movilizado hoy la prctica estndar. As que, aunque nos dimos cuenta de que C++ era inadecuado, diseamos Java tan estrechamente a C++ como sea posible a fin de que el sistema sea ms comprensible. Java utilizan con poca frecuencia omiten muchos y mal entiende, confusas caractersticas de C++ que, en nuestra experiencia, se creen ms dolor que beneficios. La sintaxis de Java es, en efecto, una versin limpia de la sintaxis de C++. No es necesario para los archivos de encabezado, aritmtica de punteros (o incluso una sintaxis de puntero), estructuras, sindicatos, sobrecarga de operadores, clases base virtuales y as sucesivamente. (Consulte las notas de C++ intercalados en todo el texto para obtener ms informacin sobre las diferencias entre Java y C++). Los diseadores, sin embargo, no intentaron arreglar todas las caractersticas de torpes de C++ torpes. Por ejemplo, la sintaxis de la instruccin switch no cambia en Java. Si sabe C++, encontrar la transicin a la sintaxis de Java fcil. Si est acostumbrado a un entorno de programacin visual (como Visual Basic), no encontrar Java simple. Hay demasiada sintaxis extraa (aunque no tardar mucho en acostumbrarse a ella). Ms importante, usted debe programar an ms en Java. La belleza de Visual Basic es que su entorno de diseo visual casi automticamente proporciona mucha de la infraestructura para una aplicacin. La funcionalidad equivalente debe programarse manualmente, generalmente con un poco de cdigo en Java. Otro aspecto de ser simple es ser pequeo. Uno de los objetivos de Java es permitir la construccin de software que puede funcionar por s mismo en las mquinas pequeas. El tamao del soporte bsico de clase e intrprete es aproximadamente de 40 K bytes; la adicin de las bibliotecas de la norma bsica y el apoyo de subprocesos (bsicamente, un autnomo microkernel) agrega una K 175 adicionales. Este fue un gran logro en el momento. Por supuesto, la biblioteca ha crecido desde entonces de enormes proporciones. Ahora existe un Java Micro Edition con una pequea biblioteca, apto para dispositivos embebidos.
Orientado a objetos En pocas palabras, diseo orientado a objetos es una tcnica de programacin que se centra en los datos (= objetos) y en las interfaces a ese objeto. Para hacer una analoga con carpintera, un carpintero "orientado a objetos" se ocupan fundamentalmente de la silla que est construyendo, y secundariamente con las herramientas que utiliza para hacerla; un carpintero "no orientado a objetos " pensara principalmente en sus herramientas.Los servicios orientados a objetos de Java son esencialmente las de C++. Orientacin a Objetos ha demostrado su vala en los ltimos 30 aos, y es inconcebible que un lenguaje de programacin moderno no lo utilice. De hecho, las caractersticas orientadas a objetos de Java son comparables a las de C++. La principal diferencia entre Java y C + + se encuentra en la herencia mltiple, que Java ha reemplazado con el concepto ms simple de las interfaces, y en el modelo de metaclase Java (que discutimos en el captulo 5). Con experiencia de red Java tiene una extensa biblioteca de rutinas para hacer frente a los protocolos TCP/IP como HTTP y FTP. Las aplicaciones de Java pueden abrir y acceder a objetos a travs de la red y de las direcciones URL con la misma facilidad que al acceder a un sistema de archivos local. Hemos encontrado las capacidades de redes de Java fuertes y fciles de usar. Cualquiera que haya tratado de hacer la programacin de Internet utilizando otro idioma se deleitarn con la sencillez que Java hace onerosas tareas como la apertura de una conexin de socket. (Cubrimos la creacin de redes en el Volumen II de este libro.) El mecanismo de invocacin de mtodo remoto permite la comunicacin entre objetos distribuidos (tambin estn cubiertos en el Volumen II). Robusto Java est diseado para escribir programas que deben ser fiables en una variedad de maneras. Java pone mucho nfasis en el control temprano de posibles problemas, ms tarde dinamiza (tiempo de ejecucin) el control y eliminacin de las situaciones que son proclives al error. . . .. . . . La mayor diferencia individual entre Java y C / C + + es que Java tiene un modelo de puntero que elimina la posibilidad de sobreescribir la memoria y la corrupcin de datos. Esta funcin tambin es muy til. El compilador de Java detecta muchos problemas que, en otros idiomas, se muestran slo en tiempo de ejecucin. En cuanto al segundo punto, quien ha pasado horas persiguiendo a daos en la memoria causada por un error de puntero ser muy feliz con esta caracterstica de Java. Si usted viene de un lenguaje como Visual Basic que explcitamente no utilizan punteros, probablemente se estar preguntando por qu esto es tan importante. Los programadores de C no son tan afortunados.
Ellos necesitan punteros para acceder a cadenas, matrices, objetos, e incluso los archivos. En Visual Basic, no utiliza indicadores para cualquiera de estas entidades, ni tampoco tiene que preocuparse acerca de reservar memoria para ellos. Por otra parte, muchas estructuras de datos son difciles de implementar en un lenguaje sin puntador. Java le ofrece lo mejor de ambos mundos. Usted no necesita consejos para las construcciones cotidianas, como cadenas y matrices. Usted tiene el poder de los punteros, si usted lo necesita, por ejemplo, de las listas enlazadas. Y siempre tienes la seguridad completa, porque nunca se puede acceder a un puntero errneo, cometen errores de asignacin de memoria, o para proteger contra fugas de memoria de distancia. Seguro Java est pensado para utilizarse en entornos de red distribuida. Hacia ese fin, se ha colocado mucho nfasis en la seguridad. Java permite la construccin de sistemas libres de virus, libre de manipulaciones. En la primera edicin de Core Java se nos dijo: "Bueno, Nunca digas nunca '", y acertamos. No mucho tiempo despus de la primera versin del Java Development Kit fue lanzado, un grupo de expertos en seguridad de la Universidad de Princeton encontr errores sutiles en las caractersticas de seguridad de Java 1.0. Sun Microsystems ha fomentado la investigacin en seguridad de Java, haciendo pblica la especificacin y la aplicacin de la mquina virtual y las bibliotecas de seguridad. Se han fijado todos los fallos de seguridad conocidos rpidamente. En cualquier caso, Java hace que sea muy difcil de burlar sus mecanismos de seguridad. Los errores encontrados hasta ahora han sido muy tcnico y muy pocos en nmero. Desde el principio, Java fue diseado para hacer imposible, entre ellos ciertos tipos de ataques: - Conquistando la pila de ejecucin un ataque comn de gusanos y virus - Corromper la memoria fuera de su propio espacio de proceso - Leer o escribir archivos sin permiso Una serie de caractersticas de seguridad se han aadido a Java en el tiempo. Desde la versin 1.1, Java tiene la nocin de clases de firma digital (vase el Volumen II). Con una clase de firma, puede estar seguro de lo que escribi. Cada vez que usted confa en el autor de la clase, la clase se puede permitir ms privilegios en el equipo. Arquitectura Neutral El compilador genera un formato de archivo objeto neutro de arquitectura: el cdigo compilado es ejecutable en muchos procesadores, dada la presencia del sistema de ejecucin Java. El compilador de Java hace esto mediante la generacin de instrucciones de bytecode( cdigo de bytes) que no tienen nada que ver con una arquitectura de computadora en particular. Por el contrario, estn diseados para ser fciles de interpretar en cualquier mquina y fcil de traducir a cdigo mquina nativo en tiempo real. Esto no es una idea nueva. Ms de 30 aos, la implementacin original de NiklausWirth de Pascal y el sistema de UCSD Pascal utilizan la misma tcnica.
Por supuesto, interpretar los bytecodes es necesariamente ms lento que ejecutar las instrucciones de la mquina a toda velocidad, por lo que no est claro que esto es incluso una buena idea. Sin embargo, las mquinas virtuales tienen la opcin de traducir las secuencias bytecode ejecutado con ms frecuencia en cdigo mquina, un proceso llamado compilacin just-in-time. Esta estrategia ha demostrado ser tan efectiva que incluso la plataforma de Microsoft s.NET se basa en una mquina virtual. La mquina virtual tiene otras ventajas. Aumenta la seguridad porque la mquina virtual puede comprobar el comportamiento de las secuencias de instrucciones. Algunos programas incluso producen bytecodes sobre la marcha, dinmicamente mejorar las capacidades de un programa en ejecucin. Portable A diferencia de C y C++, no hay ningn "dependiente de la implementacin" aspectos de la especificacin. Los tamaos de los tipos de datos primitivos son especificados, tal cual el comportamiento de aritmtica sobre ellos. Por ejemplo, un int en Java es siempre un entero de 32 bits. En C / C + +, int puede significar un nmero entero de 16 bits, un entero de 32 bits, o cualquier otro tamao que el proveedor de compilador le gusta. La nica restriccin es que el tipo int debe tener al menos tantos bytes como un short int y no puede tener ms bytes que un longint.Tener un tamao fijo de tipos de nmeros elimina un dolor de cabeza.Datos binarios se almacenan y se transmiten en un formato fijo, eliminando la confusin sobre ordenacin de bytes. Las cadenas se guardan en un formato Unicode estndar. Las libreras que son una parte del sistema definen interfaces porttiles. Por ejemplo, hay una clase de ventana abstracta y las implementaciones de la misma para UNIX, Windows y Macintosh. Quienes lo hayan intentado saben, que es un esfuerzo de proporciones heroicas escribir un programa que se vea bien en Windows, Macintosh, y en diez sabores de UNIX. Java 1.0 hizo el heroico esfuerzo, la entrega de un kit de herramientas simples que asignan comunes elementos de interfaz de usuario para una serie de plataformas. Por desgracia, el resultado es una librera que, con mucho trabajo, apenas poda dar resultados aceptables en sistemas diferentes (Y a menudo eran diferentes fallos en las implementaciones de grficos de las diferentes plataformas). Pero era un comienzo. Existen muchas aplicaciones en las que la portabilidad es ms importante que la superficie resbaladiza de la interfaz de usuario, y estas aplicaciones se benefician de las primeras versiones de Java. Por ahora, el conjunto de herramientas de interfaz de usuario ha sido completamente reescrito para que ya no se base en la interfaz de usuario principal. El resultado es mucho ms coherente y, creemos, ms atractivo que en versiones anteriores de Java.
Interpretado El intrprete Java puede ejecutar bytecode Java directamente en cualquier mquina a la que se ha instalado el intrprete. Puesto que la vinculacin es un proceso ms gradual y ligero, el proceso de desarrollo y de exploracin puede ser mucho ms rpido. El incremento de la vinculacin tiene ventajas, pero su ventaja para el proceso de desarrollo claramente es exagerada.El principio del desarrollo de las herramientas de Java fue bastante lento.Hoy en da, los bytecodes se traducen a cdigo mquina por el compilador Just-in-time. Alto rendimiento Mientras que el rendimiento de bytecodes interpretados suele ser ms que suficiente, hay situaciones donde se requiere un mayor rendimiento. Los bytecodes se puede traducir al vuelo (en tiempo de ejecucin) en cdigo de mquina para la CPU particular, mientras la aplicacin se est ejecutando. En los primeros aos de Java, muchos usuarios no estaban de acuerdo con la afirmacin de que ladesempeo fue "ms que suficiente." Hoy, sin embargo, los compiladores just-in-time se han hecho tan buenos que son competitivos con los compiladores tradicionales y, en algunos casos , incluso los superan porque tienen ms informacin disponible. Por ejemplo, un compilador Just-intime puede controlar qu cdigo se ejecuta con frecuencia y slo optimizar el cdigo para la velocidad. Una optimizacin ms sofisticada es la eliminacin (o "cdigo en lnea") de las llamadas a funciones. El compilador just-in-time sabe qu clases se han cargado.Puede utilizar cdigo en lnea cuando, segn la coleccin cargada de clases, nunca reemplace una funcin determinada,una funcin particular nunca es anulada, y esto puede deshacer aquella optimizacin ms tarde si fuera necesario. Multiproceso [Los] beneficios de subprocesamiento mltiple son de mejor capacidad de respuesta interactiva y el comportamiento en tiempo real. Si alguna vez ha intentado hacer subprocesamiento mltiple en otro idioma, estar gratamente sorprendido de lo fcil que es en Java. Subprocesos en Java tambin pueden sacar provecho de sistemas multiprocesadores si el sistema operativo base lo hace. En el aspecto negativo, difieren de las implementaciones de hilo en las principales plataformas y Java no hace ningn esfuerzo para ser plataforma independiente a este respecto. Slo el cdigo para llamar a subprocesamiento mltiple sigue siendo la misma a travs de mquinas; Java descarga la aplicacin de subprocesamiento mltiple para el sistema operativo subyacente o una biblioteca de subprocesos. Sin embargo, la facilidad de subprocesamiento mltiple es una de las principales razones por qu Java es un lenguaje de atractivo para el desarrollo del lado del servidor. Dinmico En un nmero de formas, Java es un lenguaje ms dinmico que C o C++. Fue diseado para adaptarse a un entorno en constante evolucin. Las Libreras libremente pueden
agregar nuevos mtodos y variables de instancia sin ningn efecto sobre sus clientes. En Java, es fcil encontrar informacin de tipo de tiempo de ejecucin. Esta es una caracterstica importante en aquellas situaciones en que el cdigo debe ser aadido a un programa en ejecucin. Un buen ejemplo es el cdigo que se descarga de Internet para ejecutar en un navegador. En Java 1.0, descubrir informacin de tipo en tiempo de ejecucin no fue nada sencillo, pero las versiones actuales de Java dan la idea del programador completo en la estructura y el comportamiento de sus objetos. Esto es muy til para sistemas que necesitan para analizar los objetos en tiempo de ejecucin, tales como Java GUI builders, depuradores inteligentes, los componentes extrables (enchufables), y bases de datos de objetos. Applets de Java e Internet La idea es simple: Los usuarios podrn descargar los bytecodes de Java desde Internet y ejecutarlos en sus propias mquinas. Los programas de Java que funcionan en las pginas web se llaman applets. Para el uso de un applet, usted slo necesita un navegador web compatible con Java, que se ejecutarn los bytecodes para usted. No es necesario instalar ningn software.Porque las licencias de Sun del cdigo fuente Java insisten en que no haya cambios en el lenguaje estndar y biblioteca, por lo tanto un applet Java debe ejecutarse en cualquier explorador que se anuncian como compatible con Java. Se obtiene la ltima versin del programa cada vez que visite la pgina web que contiene el applet. Lo ms importante, gracias a la seguridad de la mquina virtual, nunca tendr que preocuparse por los ataques de cdigo malintencionado. Cuando el usuario se descarga un applet, que funciona como la incrustacin de imgenes en una pgina web. El applet se convierte en una parte de la pgina y el texto fluye alrededor del espacio utilizado para el applet. El punto es que la imagen est viva. Reacciona a los comandos del usuario, cambia su apariencia, y enva los datos entre el ordenador presenta el applet y el equipo de servicio. La figura 1-1 muestra un buen ejemplo de una pgina web dinmica que lleva a cabo clculos complejos. La miniaplicacinJmol muestra las estructuras moleculares. Al utilizar el ratn, se puede rotar y hacer zoom en cada molcula para entender mejor su estructura. Este tipo de manipulacin directa no se puede lograr con pginas web estticas, pero los appletshacen que sea posible. (Usted puede encontrar este applet en http://jmol.sourceforge.net.) Unabrevehistoria de Java
En esta seccin se ofrece una breve historia de la evolucin de Java. Se basa en diversas fuentes publicadas (lo ms importante, en una entrevista con los creadores de Java en julio de 1995 de la lnea SunWorld la revista).
Java se remonta a 1991, cuando un grupo de ingenieros de Sun, dirigido por Patrick Naughton y su compaero de Sun(y todo el equipo asistente) James Gosling, han querido disear un lenguaje de computadora pequea que podra ser utilizado para dispositivos como cajas de distribucin de televisin por cable.
Debido a que estos dispositivos no tienen mucho poder ni memoria, el lenguaje tena que ser pequeo y generar un cdigo muy estricto. Adems, debido a diferentes fabricantes Tambin, porque los fabricantes diferentes pueden elegir diferentes unidades de procesamiento central (CPU), era importante que el lenguaje no estuviera ligado a ninguna arquitectura nica. El proyecto recibi el nombre "Green".