stringtranslate.com

Java (lenguaje de programación)

Java es un lenguaje de programación orientado a objetos , basado en clases y de alto nivel que está diseñado para tener la menor cantidad de dependencias de implementación posible. Es un lenguaje de programación de propósito general destinado a permitir a los programadores escribir una vez y ejecutar en cualquier lugar ( WORA ), [16] lo que significa que el código Java compilado puede ejecutarse en todas las plataformas que admitan Java sin la necesidad de volver a compilarlo. [17] Las aplicaciones Java generalmente se compilan en código de bytes que puede ejecutarse en cualquier máquina virtual Java (JVM) independientemente de la arquitectura de la computadora subyacente . La sintaxis de Java es similar a la de C y C++ , pero tiene menos funciones de bajo nivel que cualquiera de ellos. El tiempo de ejecución de Java proporciona capacidades dinámicas (como reflexión y modificación del código de tiempo de ejecución) que normalmente no están disponibles en los lenguajes compilados tradicionales.

Java ganó popularidad poco después de su lanzamiento y desde entonces ha sido un lenguaje de programación muy popular. [18] Java fue el tercer lenguaje de programación más popular en 2022 según GitHub [19] y ocupa el cuarto lugar en el índice TIOBE en enero de 2024 . [20] Aunque sigue siendo muy popular, ha habido una disminución gradual en el uso de Java en los últimos años y otros lenguajes que utilizan JVM están ganando popularidad. [21]

Java fue desarrollado originalmente por James Gosling en Sun Microsystems . Fue lanzado en mayo de 1995 como un componente central de la plataforma Java de Sun. La implementación original y de referencia de los compiladores Java , las máquinas virtuales y las bibliotecas de clases fueron publicadas originalmente por Sun bajo licencias propietarias . En mayo de 2007, de conformidad con las especificaciones del Proceso comunitario de Java , Sun había vuelto a otorgar licencias para la mayoría de sus tecnologías Java bajo la licencia GPL-2.0 exclusiva . Oracle ofrece su propia máquina virtual HotSpot Java; sin embargo, la implementación de referencia oficial es OpenJDK JVM, que es un software gratuito de código abierto utilizado por la mayoría de los desarrolladores y es la JVM predeterminada para casi todas las distribuciones de Linux.

A partir de septiembre de 2023 , Java 21 es la última versión, que también es una versión de soporte a largo plazo (LTS). Java 8, 11 y 17 son versiones LTS anteriores que aún son compatibles oficialmente.

Historia

Duke, la mascota de Java
James Gosling , el creador de Java, en 2008
Gráfico del índice de popularidad del lenguaje de programación TIOBE de 2002 a 2022. Java estuvo constantemente en la cima desde mediados de 2015 hasta principios de 2020.

James Gosling , Mike Sheridan y Patrick Naughton iniciaron el proyecto del lenguaje Java en junio de 1991. [22] Java fue diseñado originalmente para la televisión interactiva, pero era demasiado avanzado para la industria de la televisión por cable digital en ese momento. [23] El idioma se llamó inicialmente Oak en honor a un roble que se encontraba afuera de la oficina de Gosling. Posteriormente el proyecto pasó a llamarse Green y finalmente pasó a llamarse Java , de café Java , un tipo de café procedente de Indonesia . [24] Gosling diseñó Java con una sintaxis de estilo C / C++ que los programadores de sistemas y aplicaciones encontrarían familiar. [25]

Sun Microsystems lanzó la primera implementación pública como Java 1.0 en 1996. [26] Prometía la funcionalidad escribir una vez, ejecutar en cualquier lugar (WORA), proporcionando tiempos de ejecución sin costo en plataformas populares . Bastante seguro y con seguridad configurable, permitía restricciones de acceso a la red y a los archivos. Los principales navegadores web pronto incorporaron la capacidad de ejecutar subprogramas de Java dentro de las páginas web, y Java rápidamente se hizo popular. Arthur van Hoff reescribió el compilador Java 1.0 en Java para cumplir estrictamente con la especificación del lenguaje Java 1.0. [27] Con la llegada de Java 2 (lanzado inicialmente como J2SE 1.2 en diciembre de 1998 – 1999), las nuevas versiones tenían múltiples configuraciones creadas para diferentes tipos de plataformas. J2EE incluía tecnologías y API para aplicaciones empresariales que normalmente se ejecutan en entornos de servidor, mientras que J2ME presentaba API optimizadas para aplicaciones móviles. La versión de escritorio pasó a llamarse J2SE. En 2006, con fines de marketing, Sun cambió el nombre de las nuevas versiones J2 a Java EE , Java ME y Java SE , respectivamente.

En 1997, Sun Microsystems se acercó al organismo de estándares ISO/IEC JTC 1 y más tarde a Ecma International para formalizar Java, pero pronto se retiró del proceso. [28] [29] [30] Java sigue siendo un estándar de facto , controlado a través del Proceso de la comunidad Java . [31] Hubo un tiempo en que Sun puso a disposición la mayoría de sus implementaciones de Java sin cargo, a pesar de su estado de software propietario . Sun generó ingresos de Java mediante la venta de licencias para productos especializados como Java Enterprise System.

El 13 de noviembre de 2006, Sun lanzó gran parte de su máquina virtual Java (JVM) como software gratuito y de código abierto (FOSS), bajo los términos de la licencia GPL-2.0 únicamente . El 8 de mayo de 2007, Sun finalizó el proceso, haciendo que todo el código central de su JVM estuviera disponible bajo términos de distribución de software libre /código abierto, aparte de una pequeña porción del código sobre la cual Sun no tenía los derechos de autor. [32]

El vicepresidente de Sun, Rich Green, dijo que el papel ideal de Sun con respecto a Java era el de evangelista . [33] Tras la adquisición de Sun Microsystems por parte de Oracle Corporation en 2009-2010, Oracle se ha descrito a sí mismo como el administrador de la tecnología Java con un compromiso incesante de fomentar una comunidad de participación y transparencia. [34] Esto no impidió que Oracle presentara una demanda contra Google poco después por usar Java dentro del SDK de Android (consulte la sección de Android ).

El 2 de abril de 2010, James Gosling renunció a Oracle . [35]

En enero de 2016, Oracle anunció que los entornos de ejecución de Java basados ​​en JDK 9 descontinuarán el complemento del navegador. [36]

El software Java se ejecuta en todo, desde computadoras portátiles hasta centros de datos , desde consolas de juegos hasta supercomputadoras científicas . [37]

Oracle (y otros) recomiendan encarecidamente desinstalar las versiones obsoletas y no compatibles de Java, debido a problemas de seguridad no resueltos en versiones anteriores. [38]

Principios

Había cinco objetivos principales en la creación del lenguaje Java: [17]

  1. Debe ser simple, orientado a objetos y familiar.
  2. Debe ser robusto y seguro.
  3. Debe ser neutral desde el punto de vista arquitectónico y portátil.
  4. Debe ejecutarse con alto rendimiento.
  5. Debe ser interpretado , estructurado y dinámico .

Versiones

A partir de septiembre de 2023 , Java 8, 11, 17 y 21 son compatibles como versiones de soporte a largo plazo (LTS). [39]

Oracle lanzó la última actualización pública de costo cero para la versión heredada Java 8 LTS en enero de 2019 para uso comercial, aunque seguirá admitiendo Java 8 con actualizaciones públicas para uso personal de forma indefinida. Otros proveedores han comenzado a ofrecer versiones sin costo de OpenJDK 18 y 8, 11 y 17 que aún están recibiendo actualizaciones de seguridad y de otro tipo. [ cita necesaria ]

Principales versiones de lanzamiento de Java, junto con sus fechas de lanzamiento:

Ediciones

Sun ha definido y soporta cuatro ediciones de Java dirigidas a diferentes entornos de aplicaciones y ha segmentado muchas de sus API para que pertenezcan a una de las plataformas. Las plataformas son:

Las clases de las API de Java están organizadas en grupos separados llamados paquetes . Cada paquete contiene un conjunto de interfaces , clases, subpaquetes y excepciones relacionados .

Sun también proporcionó una edición llamada Personal Java que ha sido reemplazada por pares de configuración-perfil Java ME basados ​​​​en estándares posteriores.

Sistema de ejecución

Java JVM y código de bytes

Uno de los objetivos del diseño de Java es la portabilidad , lo que significa que los programas escritos para la plataforma Java deben ejecutarse de manera similar en cualquier combinación de hardware y sistema operativo con soporte de tiempo de ejecución adecuado. Esto se logra compilando el código del lenguaje Java en una representación intermedia llamada código de bytes de Java , en lugar de directamente en el código de máquina específico de la arquitectura . Las instrucciones de código de bytes de Java son análogas al código de máquina, pero están diseñadas para ser ejecutadas por una máquina virtual (VM) escrita específicamente para el hardware host. Los usuarios finales suelen utilizar un Java Runtime Environment (JRE) instalado en su dispositivo para aplicaciones Java independientes o un navegador web para subprogramas Java .

Las bibliotecas estándar proporcionan una forma genérica de acceder a funciones específicas del host, como gráficos, subprocesos y redes .

El uso de código de bytes universal simplifica la portabilidad. Sin embargo, la sobrecarga de interpretar el código de bytes en instrucciones de máquina hizo que los programas interpretados casi siempre se ejecutaran más lentamente que los ejecutables nativos . Los compiladores justo a tiempo (JIT) que compilan códigos de bytes en código de máquina durante el tiempo de ejecución se introdujeron desde una etapa temprana. El compilador Hotspot de Java es en realidad dos compiladores en uno; y con GraalVM (incluido, por ejemplo, en Java 11, pero eliminado a partir de Java 16), que permite la compilación por niveles. [48] ​​Java en sí es independiente de la plataforma y se adapta a la plataforma particular en la que se ejecutará mediante una máquina virtual Java (JVM), que traduce el código de bytes de Java al lenguaje de máquina de la plataforma. [49]

Actuación

Los programas escritos en Java tienen fama de ser más lentos y requerir más memoria que los escritos en C++ . [50] [51] Sin embargo, la velocidad de ejecución de los programas Java mejoró significativamente con la introducción de la compilación justo a tiempo en 1997/1998 para Java 1.1 , [52] la adición de características del lenguaje que soportan un mejor análisis de código (como clases internas , la clase StringBuilder, afirmaciones opcionales, etc.) y optimizaciones en la máquina virtual Java, como que HotSpot se convirtiera en la JVM predeterminada de Sun en 2000. Con Java 1.5, el rendimiento mejoró con la adición del java.util.concurrentpaquete, incluidas implementaciones sin bloqueos. de ConcurrentMaps y otras colecciones multinúcleo, y se mejoró aún más con Java 1.6.

No JVM

Algunas plataformas ofrecen soporte de hardware directo para Java; Hay microcontroladores que pueden ejecutar código de bytes de Java en hardware en lugar de una máquina virtual Java de software, [53] y algunos procesadores basados ​​en ARM podrían tener soporte de hardware para ejecutar código de bytes de Java a través de su opción Jazelle , aunque el soporte se ha eliminado en su mayor parte en las implementaciones actuales. de BRAZO.

Gestión automática de la memoria.

Java utiliza un recolector de basura automático para administrar la memoria en el ciclo de vida del objeto . El programador determina cuándo se crean los objetos y el tiempo de ejecución de Java es responsable de recuperar la memoria una vez que los objetos ya no están en uso. Una vez que no quedan referencias a un objeto, la memoria inalcanzable pasa a ser elegible para ser liberada automáticamente por el recolector de basura. Algo similar a una pérdida de memoria aún puede ocurrir si el código de un programador contiene una referencia a un objeto que ya no es necesario, generalmente cuando los objetos que ya no son necesarios se almacenan en contenedores que todavía están en uso. [54] Si se llaman métodos para un objeto inexistente, se genera una excepción de puntero nulo . [55] [56]

Una de las ideas detrás del modelo de gestión automática de la memoria de Java es que los programadores pueden ahorrarse la carga de tener que realizar una gestión manual de la memoria. En algunos lenguajes, la memoria para la creación de objetos se asigna implícitamente en la pila o se asigna y desasigna explícitamente del montón . En este último caso, la responsabilidad de gestionar la memoria recae en el programador. Si el programa no desasigna un objeto, se produce una pérdida de memoria . [54] Si el programa intenta acceder o desasignar memoria que ya ha sido desasignada, el resultado no está definido y es difícil de predecir, y es probable que el programa se vuelva inestable o falle. Esto se puede remediar parcialmente mediante el uso de punteros inteligentes , pero añaden gastos generales y complejidad. La recolección de basura no previene las pérdidas de memoria lógica , es decir, aquellas en las que todavía se hace referencia a la memoria pero nunca se usa. [54]

La recolección de basura puede ocurrir en cualquier momento. Idealmente, ocurrirá cuando un programa esté inactivo. Se garantiza que se activará si no hay suficiente memoria libre en el montón para asignar un nuevo objeto; esto puede hacer que un programa se detenga momentáneamente. La gestión explícita de la memoria no es posible en Java.

Java no admite la aritmética de punteros de estilo C/C++ , donde las direcciones de los objetos se pueden manipular aritméticamente (por ejemplo, sumando o restando un desplazamiento). Esto permite que el recolector de basura reubique los objetos referenciados y garantiza la seguridad de los tipos.

Al igual que en C++ y algunos otros lenguajes orientados a objetos, las variables de los tipos de datos primitivos de Java se almacenan directamente en campos (para objetos) o en la pila (para métodos) en lugar de en el montón, como suele ocurrir con los datos no primitivos. tipos (pero ver análisis de escape ). Esta fue una decisión consciente de los diseñadores de Java por razones de rendimiento.

Java contiene varios tipos de recolectores de basura. Desde Java 9, HotSpot utiliza el recolector de basura Garbage First (G1GC) como predeterminado. [57] Sin embargo, también hay varios otros recolectores de basura que se pueden utilizar para administrar el montón. Para la mayoría de las aplicaciones en Java, G1GC es suficiente. Anteriormente, el recolector de basura paralelo se utilizaba en Java 8.

Haber resuelto el problema de la gestión de la memoria no libera al programador de la carga de manejar adecuadamente otros tipos de recursos, como conexiones de red o de bases de datos, identificadores de archivos, etc., especialmente en presencia de excepciones.

Sintaxis

Este gráfico de dependencia de las clases de Java Core se creó con jdeps y Gephi .

La sintaxis de Java está influenciada en gran medida por C ++ y C. A diferencia de C++, que combina la sintaxis de la programación estructurada, genérica y orientada a objetos, Java se creó casi exclusivamente como un lenguaje orientado a objetos. [17] Todo el código se escribe dentro de clases y cada elemento de datos es un objeto, con la excepción de los tipos de datos primitivos (es decir, enteros, números de punto flotante, valores booleanos y caracteres), que no son objetos por razones de rendimiento. . Java reutiliza algunos aspectos populares de C++ (como el printfmétodo).

A diferencia de C++, Java no admite la sobrecarga de operadores [58] ni la herencia múltiple para clases, aunque sí se admite la herencia múltiple para interfaces . [59]

Java utiliza comentarios similares a los de C++. Hay tres estilos diferentes de comentarios: un estilo de línea única marcado con dos barras ( //), un estilo de líneas múltiples abierto /*y cerrado con */, y el estilo de comentario Javadoc abierto /**y cerrado con */. El estilo de comentario Javadoc permite al usuario ejecutar el ejecutable Javadoc para crear documentación para el programa y puede ser leído por algunos entornos de desarrollo integrados (IDE) como Eclipse para permitir a los desarrolladores acceder a la documentación dentro del IDE.

clases especiales

subprograma

Los subprogramas de Java son programas integrados en otras aplicaciones, normalmente en una página web que se muestra en un navegador web. La API del subprograma de Java ahora está en desuso desde Java 9 en 2017. [60] [61]

servlet

La tecnología de servlet Java proporciona a los desarrolladores web un mecanismo simple y consistente para ampliar la funcionalidad de un servidor web y acceder a los sistemas comerciales existentes. Los servlets son componentes Java EE del lado del servidor que generan respuestas a las solicitudes de los clientes . La mayoría de las veces, esto significa generar páginas HTML en respuesta a solicitudes HTTP , aunque hay otras clases de servlets estándar disponibles, por ejemplo para la comunicación WebSocket .

La API de servlet de Java ha sido reemplazada hasta cierto punto (pero todavía se utiliza internamente) por dos tecnologías Java estándar para servicios web:

Las implementaciones típicas de estas API en servidores de aplicaciones o contenedores de servlets utilizan un servlet estándar para manejar todas las interacciones con las solicitudes y respuestas HTTP que delegan a los métodos del servicio web para la lógica empresarial real.

Páginas del servidor Java

JavaServer Pages ( JSP ) son componentes Java EE del lado del servidor que generan respuestas, normalmente páginas HTML , a solicitudes HTTP de los clientes . Los JSP incorporan código Java en una página HTML mediante el uso de delimitadores <% especiales y %>. Un JSP se compila en un servlet Java , una aplicación Java por derecho propio, la primera vez que se accede a él. Después de eso, el servlet generado crea la respuesta. [62]

Aplicación de columpio

Swing es una biblioteca de interfaz gráfica de usuario para la plataforma Java SE. Es posible especificar una apariencia diferente a través del sistema de apariencia y sensación conectable de Swing. Sun proporciona clones de Windows , GTK+ y Motif . Apple también proporciona una apariencia Aqua para macOS . Mientras que las implementaciones anteriores de esta apariencia pueden haberse considerado deficientes, Swing en Java SE 6 aborda este problema mediante el uso de rutinas de dibujo de widgets GUI más nativas de las plataformas subyacentes. [63]

Aplicación JavaFX

JavaFX es una plataforma de software para crear y entregar aplicaciones de escritorio , así como aplicaciones web enriquecidas que pueden ejecutarse en una amplia variedad de dispositivos. JavaFX está destinado a reemplazar a Swing como la biblioteca GUI estándar para Java SE , pero desde JDK 11 JavaFX no ha estado en el JDK principal sino en un módulo separado. [64] JavaFX es compatible con computadoras de escritorio y navegadores web en Microsoft Windows , Linux y macOS . JavaFX no es compatible con la apariencia y el funcionamiento del sistema operativo nativo. [sesenta y cinco]

Genéricos

En 2004, se agregaron genéricos al lenguaje Java, como parte de J2SE 5.0. Antes de la introducción de los genéricos, cada declaración de variable tenía que ser de un tipo específico. Para las clases de contenedor, por ejemplo, esto es un problema porque no existe una manera fácil de crear un contenedor que acepte sólo tipos específicos de objetos. O el contenedor opera en todos los subtipos de una clase o interfaz, generalmente Object, o se debe crear una clase contenedora diferente para cada clase contenida. Los genéricos permiten la verificación de tipos en tiempo de compilación sin tener que crear muchas clases contenedoras, cada una de las cuales contiene código casi idéntico. Además de permitir un código más eficiente, se evita que se produzcan ciertas excepciones en tiempo de ejecución mediante la emisión de errores en tiempo de compilación. Si Java evitara ClassCastExceptionque se produjeran todos los errores de tipo en tiempo de ejecución, sería seguro para tipos .

En 2016, se demostró que el sistema de tipos de Java era incorrecto , ya que es posible usar genéricos para construir clases y métodos que permiten la asignación de una instancia de una clase a una variable de otra clase no relacionada. El compilador acepta dicho código, pero falla en tiempo de ejecución con una excepción de conversión de clase. [66]

Crítica

Las críticas dirigidas a Java incluyen la implementación de genéricos, [67] velocidad, [50] el manejo de números sin signo, [68] la implementación de aritmética de punto flotante, [69] y un historial de vulnerabilidades de seguridad en la implementación principal de Java VM Punto de acceso . [70]

Bibliotecas de clases

La biblioteca de clases de Java es la biblioteca estándar , desarrollada para respaldar el desarrollo de aplicaciones en Java. Está controlado por Oracle en cooperación con otros a través del programa Java Community Process . [71] Las empresas o individuos que participan en este proceso pueden influir en el diseño y desarrollo de las API. Este proceso ha sido objeto de controversia durante la década de 2010. [72] La biblioteca de clases contiene características tales como:

Documentación

Javadoc es un sistema de documentación integral, creado por Sun Microsystems . Proporciona a los desarrolladores un sistema organizado para documentar su código. Los comentarios de Javadoc tienen un asterisco adicional al principio, es decir, los delimitadores son /**y */, mientras que los comentarios normales de varias líneas en Java están delimitados por /*y */y los comentarios de una sola línea comienzan con //. [77]

Implementaciones

Oracle Corporation posee la implementación oficial de la plataforma Java SE, debido a la adquisición de Sun Microsystems el 27 de enero de 2010. Esta implementación se basa en la implementación original de Java de Sun. La implementación de Oracle está disponible para Windows , macOS , Linux y Solaris . Debido a que Java carece de cualquier estandarización formal reconocida por Ecma International , ISO/IEC, ANSI u otras organizaciones de estándares de terceros, la implementación de Oracle es el estándar de facto .

La implementación de Oracle está empaquetada en dos distribuciones diferentes: Java Runtime Environment (JRE), que contiene las partes de la plataforma Java SE necesarias para ejecutar programas Java y está destinado a usuarios finales, y Java Development Kit (JDK), que está destinado a para desarrolladores de software e incluye herramientas de desarrollo como el compilador Java , Javadoc , Jar y un depurador . Oracle también lanzó GraalVM , un compilador e intérprete dinámico de Java de alto rendimiento.

OpenJDK es otra implementación de Java SE con licencia GNU GPL. La implementación comenzó cuando Sun comenzó a publicar el código fuente de Java bajo la GPL. A partir de Java SE 7, OpenJDK es la implementación oficial de referencia de Java.

El objetivo de Java es hacer compatibles todas las implementaciones de Java. Históricamente, la licencia de marca registrada de Sun para el uso de la marca Java insiste en que todas las implementaciones sean compatibles . Esto resultó en una disputa legal con Microsoft después de que Sun afirmara que la implementación de Microsoft no admitía la invocación de método remoto de Java (RMI) o la interfaz nativa de Java (JNI) y había agregado características propias específicas de la plataforma. Sun presentó una demanda en 1997 y, en 2001, ganó un acuerdo de 20 millones de dólares, así como una orden judicial que hacía cumplir los términos de la licencia de Sun. [78] Como resultado, Microsoft ya no incluye Java con Windows .

Java independiente de la plataforma es esencial para Java EE y se requiere una validación aún más rigurosa para certificar una implementación. Este entorno permite aplicaciones portátiles del lado del servidor.

Uso fuera de la plataforma Java

El lenguaje de programación Java requiere la presencia de una plataforma de software para poder ejecutar los programas compilados.

Oracle proporciona la plataforma Java para su uso con Java. El SDK de Android es una plataforma de software alternativa, utilizada principalmente para desarrollar aplicaciones de Android con su propio sistema GUI.

Androide

El lenguaje Java es un pilar clave de Android , un sistema operativo móvil de código abierto . Aunque Android, construido sobre el kernel de Linux , está escrito en gran medida en C, el SDK de Android utiliza el lenguaje Java como base para las aplicaciones de Android, pero no utiliza ninguno de sus GUI estándar, SE, ME u otros estándares Java establecidos. [79] El lenguaje de código de bytes admitido por el SDK de Android es incompatible con el código de bytes de Java y se ejecuta en su propia máquina virtual, optimizada para dispositivos con poca memoria, como teléfonos inteligentes y tabletas . Dependiendo de la versión de Android, el código de bytes es interpretado por la máquina virtual Dalvik o compilado en código nativo por Android Runtime .

Android no proporciona la biblioteca estándar Java SE completa, aunque el SDK de Android incluye una implementación independiente de un gran subconjunto de la misma. Es compatible con Java 6 y algunas características de Java 7, ofreciendo una implementación compatible con la biblioteca estándar ( Apache Harmony ).

Controversia

El uso de tecnología relacionada con Java en Android provocó una disputa legal entre Oracle y Google. El 7 de mayo de 2012, un jurado de San Francisco determinó que si las API podían tener derechos de autor, entonces Google había infringido los derechos de autor de Oracle al utilizar Java en dispositivos Android. [80] El juez de distrito William Alsup dictaminó el 31 de mayo de 2012 que las API no pueden tener derechos de autor, [81] pero esto fue revocado por el Tribunal de Apelaciones del Circuito Federal de los Estados Unidos en mayo de 2014. [82] El 26 de mayo de 2016 , el tribunal de distrito falló a favor de Google y dictaminó que la infracción de derechos de autor de la API de Java en Android constituye un uso legítimo. [83] En marzo de 2018, este fallo fue revocado por el Tribunal de Apelaciones, que remitió el caso para determinar los daños y perjuicios al tribunal federal de San Francisco. [84] Google presentó una petición de auto de certiorari ante la Corte Suprema de los Estados Unidos en enero de 2019 para impugnar las dos sentencias que fueron dictadas por la Corte de Apelaciones a favor de Oracle. [85] El 5 de abril de 2021, el Tribunal falló 6-2 a favor de Google, que su uso de las API de Java debe considerarse uso legítimo . Sin embargo, el tribunal se negó a pronunciarse sobre la protección de los derechos de autor de las API y, en cambio, optó por determinar su decisión considerando que la API de Java tiene derechos de autor "puramente por razones de argumento". [86]

Ver también

Referencias

  1. ^ Binstock, Andrew (20 de mayo de 2015). "Los 20 años de innovación de Java". Forbes . Archivado desde el original el 14 de marzo de 2016 . Consultado el 18 de marzo de 2016 .
  2. ^ abcd Barbara Liskov con John Guttag (2000). Desarrollo de programas en Java: abstracción, especificación y diseño orientado a objetos . Estados Unidos, Addison Wesley. ISBN 9780201657685.
  3. ^ Chaudhary, Harry H. (28 de julio de 2014). "Descifrando la entrevista de programación Java :: Más de 2000 preguntas/respuestas de entrevistas Java". Archivado desde el original el 29 de septiembre de 2023 . Consultado el 29 de mayo de 2016 .
  4. ^ Java 5.0 agregó varias características de lenguaje nuevas (el bucle for mejorado , autoboxing , varargs y anotaciones ), después de que se introdujeron en el lenguaje C# similar (y competidor) . [1] Archivado el 19 de marzo de 2011 en Wayback Machine [2] Archivado el 7 de enero de 2006 en Wayback Machine
  5. ^ Gosling, James; McGilton, Henry (mayo de 1996). "El entorno del lenguaje Java". Archivado desde el original el 6 de mayo de 2014 . Consultado el 6 de mayo de 2014 .
  6. ^ Gosling, James; Alegría, Bill; Steele, chico; Bracha, Gilad. "La especificación del lenguaje Java, segunda edición". Archivado desde el original el 5 de agosto de 2011 . Consultado el 8 de febrero de 2008 .
  7. ^ "La AZ de los lenguajes de programación: Modula-3". Mundo de la informática. Archivado desde el original el 5 de enero de 2009 . Consultado el 9 de junio de 2010 .
  8. ^ Niklaus Wirth declaró en varias ocasiones públicas, por ejemplo, en una conferencia en el Museo Politécnico de Moscú en septiembre de 2005 (existen varios relatos independientes de primera mano en ruso, por ejemplo, uno con una grabación de audio: Filippova, Elena (22 de septiembre de 2005 ). «Conferencia de Niklaus Wirth en el Museo Politécnico de Moscú». Archivado desde el original el 1 de diciembre de 2020. Consultado el 20 de noviembre de 2011 .), que el equipo de diseño de Sun Java obtuvo la licencia de las fuentes del compilador de Oberon varios años antes del lanzamiento de Java y los examinó: compacidad (relativa), seguridad de tipos, recolección de basura, no herencia múltiple para clases: todas estas claves del diseño general Las características son compartidas por Java y Oberon.
  9. ^ Patrick Naughton cita Objective-C como una fuerte influencia en el diseño del lenguaje de programación Java, afirmando que los derivados directos notables incluyen interfaces Java (derivadas del protocolo de Objective-C ) y clases contenedoras primitivas. [3] Archivado el 13 de julio de 2011 en Wayback Machine .
  10. ^ Investigación TechMetrix (1999). "Historia de Java" (PDF) . Informe de servidores de aplicaciones Java . Archivado desde el original (PDF) el 29 de diciembre de 2010. El proyecto siguió adelante con el nombre verde y el lenguaje se basó en un modelo antiguo de UCSD Pascal , que permite generar código interpretativo.
  11. ^ "Una conversación con James Gosling - Cola ACM". Cola.acm.org. 31 de agosto de 2004. Archivado desde el original el 16 de julio de 2015 . Consultado el 9 de junio de 2010 .
  12. ^ El equipo de lenguaje Java. Acerca de los "delegados" de Microsoft (documento técnico). JavaSoft, Sun Microsystems, Inc. Archivado desde el original el 27 de junio de 2012. En el verano de 1996, Sun estaba diseñando el precursor de lo que ahora es el modelo de eventos de AWT y la arquitectura de componentes JavaBeans. Borland contribuyó en gran medida a este proceso. Observamos muy detenidamente Delphi Object Pascal y construimos un prototipo funcional de referencias de métodos vinculados para comprender su interacción con el lenguaje de programación Java y sus API.
  13. ^ "Especificaciones de la capilla (agradecimientos)" (PDF) . Cray Inc. 1 de octubre de 2015. Archivado (PDF) desde el original el 5 de febrero de 2016 . Consultado el 14 de enero de 2016 .
  14. ^ "Introducción a la documentación de Gambas". Sitio web de Gambas. Archivado desde el original el 9 de octubre de 2017 . Consultado el 9 de octubre de 2017 .
  15. ^ "Preguntas y respuestas de Facebook: Hack lleva la escritura estática al mundo PHP". InfoMundo . 26 de marzo de 2014. Archivado desde el original el 13 de febrero de 2015 . Consultado el 11 de enero de 2015 .
  16. ^ "¿Escribe una vez y corre a cualquier lugar?". Computadora Semanal . 2 de mayo de 2002. Archivado desde el original el 13 de agosto de 2021 . Consultado el 27 de julio de 2009 .
  17. ^ abc "1.2 Objetivos de diseño del lenguaje de programación Java". Oráculo. 1 de enero de 1999. Archivado desde el original el 23 de enero de 2013 . Consultado el 14 de enero de 2013 .
  18. ^ Melanson, Mike (9 de agosto de 2022). "No lo llames un regreso: por qué Java sigue siendo el campeón". GitHub . Archivado desde el original el 25 de agosto de 2023 . Consultado el 15 de octubre de 2023 .
  19. ^ "Los mejores lenguajes de programación". El estado del Octoverso . GitHub . Archivado desde el original el 2 de agosto de 2023 . Consultado el 15 de octubre de 2023 .
  20. ^ "Índice TIOBE de enero de 2024". Índice TIOBE . Consultado el 4 de febrero de 2024 .
  21. ^ McMillan, Robert (1 de agosto de 2013). "¿Java está perdiendo su encanto?" . Cableado . Archivado desde el original el 15 de febrero de 2017 . Consultado el 15 de octubre de 2023 .
  22. ^ Byous, Jon (c. 1998). "Tecnología Java: los primeros años". Red de desarrolladores de Sun. Microsistemas solares . Archivado desde el original el 20 de abril de 2005 . Consultado el 22 de abril de 2005 .
  23. ^ Programación orientada a objetos "La historia de la tecnología Java". Red de desarrolladores de Sun. C. 1995. Archivado desde el original el 10 de febrero de 2010 . Consultado el 30 de abril de 2010 .
  24. ^ Murphy, Kieron (4 de octubre de 1996). "Entonces, ¿por qué decidieron llamarlo Java?". Mundo Java . Archivado desde el original el 13 de julio de 2020 . Consultado el 13 de julio de 2020 .
  25. ^ Kabutz, Heinz; Érase una vez un roble Archivado el 13 de abril de 2007 en Wayback Machine . Artima. Consultado el 29 de abril de 2007.
  26. ^ "JAVASOFT ENVÍA JAVA 1.0". Archivado desde el original el 10 de marzo de 2007 . Consultado el 13 de mayo de 2018 .
  27. ^ Programación orientada a objetos con Java: conceptos básicos y aplicaciones. Educación de Tata McGraw-Hill. pag. 34.
  28. ^ "JSG - Grupo de estudio de Java". open-std.org . Archivado desde el original el 25 de agosto de 2006 . Consultado el 2 de agosto de 2006 .
  29. ^ "Por qué Java se estandarizó (no) dos veces" (PDF) . Archivado (PDF) desde el original el 13 de enero de 2014 . Consultado el 3 de junio de 2018 .
  30. ^ "¿Qué es ECMA y por qué le importa a Microsoft?". ZDNet . Archivado desde el original el 6 de mayo de 2014 . Consultado el 6 de mayo de 2014 .
  31. ^ "Sitio web del proceso comunitario de Java". Jcp.org. 24 de mayo de 2010. Archivado desde el original el 8 de agosto de 2006 . Consultado el 9 de junio de 2010 .
  32. ^ "JAVAONE: Sun: la mayor parte de Java es de código abierto". GrnLight.net. Archivado desde el original el 27 de mayo de 2014 . Consultado el 26 de mayo de 2014 .
  33. ^ "La evolución del papel de Sun como evangelista de Java". Medios O'Reilly . Archivado desde el original el 15 de septiembre de 2010 . Consultado el 2 de agosto de 2009 .
  34. ^ "Oracle y Java". oracle.com . Corporación Oráculo. Archivado desde el original el 31 de enero de 2010 . Consultado el 23 de agosto de 2010 . Oracle ha sido un partidario líder y sustancial de Java desde su aparición en 1995 y asume el nuevo papel como administrador de la tecnología Java con un compromiso incesante de fomentar una comunidad de participación y transparencia.
  35. ^ Gosling, James (9 de abril de 2010). "Es hora de seguir adelante..." En un nuevo camino . Archivado desde el original el 5 de noviembre de 2010 . Consultado el 16 de noviembre de 2011 .
  36. ^ Tema, Dalibor. "Pasar a una Web sin complementos". Archivado desde el original el 16 de marzo de 2016 . Consultado el 15 de marzo de 2016 .
  37. ^ "Más información sobre la tecnología Java". Oráculo. Archivado desde el original el 24 de noviembre de 2011 . Consultado el 21 de noviembre de 2011 .
  38. ^ "¿Por qué debería desinstalar versiones anteriores de Java de mi sistema?". Oráculo. Archivado desde el original el 12 de febrero de 2018 . Consultado el 24 de septiembre de 2021 .
  39. ^ "Hoja de ruta de soporte de Oracle Java SE". Oráculo. 13 de septiembre de 2021. Archivado desde el original el 19 de septiembre de 2021 . Consultado el 18 de septiembre de 2021 .
  40. ^ "JAVASOFT ENVÍA JAVA 1.0". sol.com . Archivado desde el original el 10 de marzo de 2007 . Consultado el 5 de febrero de 2008 .
  41. ^ Chander, Sharat. "Presentación de Java SE 11". oracle.com . Archivado desde el original el 26 de septiembre de 2018 . Consultado el 26 de septiembre de 2018 .
  42. ^ "¡La llegada de Java 15!". Oráculo . 15 de septiembre de 2020. Archivado desde el original el 16 de septiembre de 2020 . Consultado el 15 de septiembre de 2020 .
  43. ^ "JDK 21". openjdk.org . Archivado desde el original el 20 de septiembre de 2023 . Consultado el 20 de septiembre de 2023 .
  44. ^ "Descripción general de la tarjeta Java". Red de tecnología Oracle . Oráculo. Archivado desde el original el 7 de enero de 2015 . Consultado el 18 de diciembre de 2014 .
  45. ^ "Plataforma Java, Edición Micro (Java ME)". Red de tecnología Oracle . Oráculo. Archivado desde el original el 4 de enero de 2015 . Consultado el 18 de diciembre de 2014 .
  46. ^ "JavaSE". Red de tecnología Oracle . Oráculo. Archivado desde el original el 24 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  47. ^ "Plataforma Java, edición empresarial (Java EE)". Red de tecnología Oracle . Oráculo. Archivado desde el original el 17 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  48. ^ "Profundización en el nuevo compilador JIT de Java: Graal | Baeldung". www.baeldung.com . 6 de agosto de 2021. Archivado desde el original el 28 de octubre de 2021 . Consultado el 13 de octubre de 2021 .
  49. ^ "¿La plataforma JVM (Java Virtual Machine) es dependiente o independiente de la plataforma? ¿Cuál es la ventaja de usar JVM y que Java sea un lenguaje traducido?". Entrevista al programador. Archivado desde el original el 19 de enero de 2015 . Consultado el 19 de enero de 2015 .
  50. ^ ab Jelovic, Dejan. "Por qué Java siempre será más lento que C++". Archivado desde el original el 11 de febrero de 2008 . Consultado el 15 de febrero de 2008 .
  51. ^ Hundt, Robert. "Reconocimiento de bucle en C++/Java/Go/Scala" (PDF) . Archivado (PDF) desde el original el 16 de noviembre de 2011 . Consultado el 12 de julio de 2012 .
  52. ^ "El compilador Java justo a tiempo de Symantec se integrará en Sun JDK 1.1". Archivado desde el original el 28 de junio de 2010 . Consultado el 1 de agosto de 2009 .
  53. ^ Salcic, Zoran; Parque, Heejong; Teich, Jürgen; Malik, Avinash; Nadeem, Muhammad (22 de julio de 2017). "Noc-HMP: un procesador multinúcleo heterogéneo para sistemas integrados diseñado en SystemJ". Transacciones ACM sobre automatización del diseño de sistemas electrónicos . 22 (4): 73. doi : 10.1145/3073416. ISSN  1084-4309. S2CID  11150290.
  54. ^ abc Bloch 2018, pag. 26-28, §Ítem 7: Eliminar referencias a objetos obsoletos.
  55. ^ "Excepción de puntero nulo". Oráculo. Archivado desde el original el 6 de mayo de 2014 . Consultado el 6 de mayo de 2014 .
  56. ^ "Excepciones en Java". Artima.com. Archivado desde el original el 21 de enero de 2009 . Consultado el 10 de agosto de 2010 .
  57. ^ "Mejoras en el rendimiento de la máquina virtual Java HotSpot ™". Oracle.com. Archivado desde el original el 29 de mayo de 2017 . Consultado el 26 de abril de 2017 .
  58. ^ "Sobrecarga del operador (C# frente a Java)". C# para desarrolladores de Java . Microsoft. Archivado desde el original el 7 de enero de 2015 . Consultado el 10 de diciembre de 2014 .
  59. ^ "Herencia múltiple de estado, implementación y tipo". Los tutoriales de Java . Oráculo. Archivado desde el original el 9 de noviembre de 2014 . Consultado el 10 de diciembre de 2014 .
  60. ^ "API, características y opciones obsoletas". Oráculo. Archivado desde el original el 19 de junio de 2019 . Consultado el 31 de mayo de 2019 .
  61. ^ "Applet (Plataforma Java SE 7)". Documentos . Oráculo. Archivado desde el original el 2 de agosto de 2020 . Consultado el 1 de mayo de 2020 .
  62. ^ "¿Qué es una página JSP? - El tutorial de Java EE 5". docs.oracle.com . Archivado desde el original el 2 de agosto de 2020 . Consultado el 1 de mayo de 2020 .
  63. ^ "Trail: Creación de una GUI con JFC/Swing (tutoriales de Java)". docs.oracle.com . Archivado desde el original el 29 de abril de 2020 . Consultado el 1 de mayo de 2020 .
  64. ^ "Eliminado de JDK 11, JavaFX 11 llega como un módulo independiente". InfoMundo . 20 de septiembre de 2018. Archivado desde el original el 14 de octubre de 2020 . Consultado el 13 de octubre de 2020 .
  65. ^ "Introducción a JavaFX: Hola mundo, estilo JavaFX". Tutoriales y documentación de JavaFX 2 . Oráculo. Archivado desde el original el 2 de agosto de 2020 . Consultado el 1 de mayo de 2020 .
  66. ^ "Los sistemas de tipos de Java y Scala no son sólidos" (PDF) . Archivado (PDF) desde el original el 28 de noviembre de 2016 . Consultado el 20 de febrero de 2017 .
  67. ^ Arnold, Ken (27 de junio de 2005). "Genéricos considerados nocivos". java.net. Archivado desde el original el 10 de octubre de 2007 . Consultado el 10 de septiembre de 2015 .
  68. ^ Owens, Sean R. "Java y unsigned int, unsigned short, unsigned byte, unsigned long, etc. (O más bien, la falta de ellos)". Archivado desde el original el 20 de febrero de 2009 . Consultado el 4 de julio de 2011 .
  69. ^ Kahan, William (1 de marzo de 1998). "Cómo el punto flotante de Java perjudica a todos en todas partes: taller ACM 1998 sobre Java (Stanford)" (PDF) . Ingeniería Eléctrica e Informática, Universidad de California en Berkeley. Archivado (PDF) desde el original el 5 de septiembre de 2012 . Consultado el 4 de junio de 2011 .
  70. ^ "¿Has comprobado Java?". Archivado desde el original el 21 de septiembre de 2012 . Consultado el 23 de diciembre de 2011 .
  71. ^ Cadenhead, Rogers (20 de noviembre de 2017), Comprender cómo funcionan los programas Java, archivado desde el original el 13 de agosto de 2021 , recuperado 26 de marzo 2019
  72. ^ Woolf, Nicky (26 de mayo de 2016). "Google gana una batalla legal de seis años con Oracle por los derechos de autor del código de Android". El guardián . ISSN  0261-3077. Archivado desde el original el 26 de marzo de 2019 . Consultado el 26 de marzo de 2019 .
  73. ^ ab Bloch 2018, págs. 1–4, §1 Introducción.
  74. ^ "Descripción general del marco de colecciones". Documentación de Java . Oráculo. Archivado desde el original el 31 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  75. ^ "Descripción general de la seguridad de Java". Documentación de Java . Oráculo. Archivado desde el original el 3 de enero de 2015 . Consultado el 18 de diciembre de 2014 .
  76. ^ "Sendero: Internacionalización". Los tutoriales de Java . Oráculo. Archivado desde el original el 31 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  77. ^ "Cómo escribir comentarios de documentos para la herramienta Javadoc". Red de tecnología Oracle . Oráculo. Archivado desde el original el 18 de diciembre de 2014 . Consultado el 18 de diciembre de 2014 .
  78. ^ Niccolai, James (24 de enero de 2001). "Sun y Microsoft resuelven una demanda sobre Java". Mundo Java . Servicio de noticias IDG . Archivado desde el original el 14 de julio de 2020 . Consultado el 13 de julio de 2020 .
  79. ^ van Gurp, Jilles (13 de noviembre de 2007). "Google Android: impresiones iniciales y críticas". Vestíbulo de Java . Archivado desde el original el 28 de agosto de 2008 . Consultado el 7 de marzo de 2009 . Francamente, no entiendo por qué Google pretende ignorar la gran cantidad de implementaciones existentes. Me parece un mal caso de “aquí no se inventó”. En última instancia, esto ralentizará la adopción. Ya existen demasiadas plataformas Java para el mundo móvil y esta es otra más
  80. ^ Mullin, Joe (7 de mayo de 2012). "Google es culpable de infracción en el juicio de Oracle; se avecinan futuros dolores de cabeza legales". Ley y desorden . Ars Técnica. Archivado desde el original el 8 de mayo de 2012 . Consultado el 8 de mayo de 2012 .
  81. ^ Mullin, Joe (31 de mayo de 2012). "Google gana un fallo crucial sobre API, el caso de Oracle diezmado". Ars Técnica . Archivado desde el original el 12 de marzo de 2017 . Consultado el 1 de junio de 2012 .
  82. ^ Rosenblatt, Seth (9 de mayo de 2014). "El tribunal se pone del lado de Oracle sobre Android en una apelación de patente de Java". CNET . Archivado desde el original el 10 de mayo de 2014 . Consultado el 10 de mayo de 2014 .
  83. ^ Mullin, Joe (26 de mayo de 2016). "Google supera a Oracle: Android hace un" uso justo "de las API de Java". Ars Técnica . Archivado desde el original el 20 de enero de 2017 . Consultado el 26 de mayo de 2016 .
  84. ^ Farivar, Cyrus (27 de marzo de 2018). ""El uso por parte de Google de los paquetes API de Java no fue justo", dictamina el tribunal de apelaciones. Ars Técnica . Archivado desde el original el 24 de septiembre de 2019 . Consultado el 6 de agosto de 2019 .
  85. ^ Lee, Timothy (23 de abril de 2019). "Google pide a la Corte Suprema que anule un fallo desastroso sobre los derechos de autor de API". Ars Técnica . Archivado desde el original el 23 de abril de 2019 . Consultado el 23 de abril de 2019 .
  86. ^ "Google LLC contra Oracle America, Inc 593 EE. UU. ____ (2021)" (PDF) . Archivado (PDF) desde el original el 5 de abril de 2021 . Consultado el 6 de abril de 2021 .

Bibliografía

enlaces externos