<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.ecured.cu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Oscar2017</id>
	<title>EcuRed - Contribuciones del colaborador [es]</title>
	<link rel="self" type="application/atom+xml" href="https://www.ecured.cu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Oscar2017"/>
	<link rel="alternate" type="text/html" href="https://www.ecured.cu/Especial:Contribuciones/Oscar2017"/>
	<updated>2026-04-19T17:00:15Z</updated>
	<subtitle>Contribuciones del colaborador</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Delphi_(software)&amp;diff=2813608</id>
		<title>Delphi (software)</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Delphi_(software)&amp;diff=2813608"/>
		<updated>2017-02-21T14:00:29Z</updated>

		<summary type="html">&lt;p&gt;Oscar2017: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=Delphi&lt;br /&gt;
|familia=[[Diseño de software]]&lt;br /&gt;
|imagen=Delphi11.jpeg&lt;br /&gt;
|tamaño=260px&lt;br /&gt;
|descripción=Entorno de desarrollo de softwares.&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=Borland&lt;br /&gt;
|desarrollador=Empresa estadounidense CodeGear&lt;br /&gt;
|diseñador=&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|lanzamiento inicial=&lt;br /&gt;
|versiones=&lt;br /&gt;
|última versión estable=&lt;br /&gt;
|género=Animación flash&lt;br /&gt;
|sistemas operativos=[[Windows 95|Win95]], [[Windows 98|Win98]], [[Windows NT|NT]], [[Windows ME|ME]], [[Windows 2000|2000]], [[Windows XP|XP]]&lt;br /&gt;
|idioma=Español, Ingles&lt;br /&gt;
|licencia=Propietario&lt;br /&gt;
|premios=&lt;br /&gt;
|web=&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''Delphi''' Entorno de desarrollo de [[Software|software]] diseñado para la programación de propósito general con énfasis en la programación visual. Producido comercialmente por la empresa estadounidense CodeGear (antes lo desarrollaba Borland), adquirida en mayo de [[2008]] por Embarcadero Technologies, una empresa del grupo Thoma Cressey Bravo, en una suma que ronda los 30 millones de dólares. En sus diferentes variantes, permite producir archivos ejecutables para [[Windows]], [[GNU/Linux]] y la plataforma [[.net|.NET]]. &lt;br /&gt;
&lt;br /&gt;
== Historia  ==&lt;br /&gt;
La idea era narrar como ha evolucionado esta herramienta en estos 20 años (en realidad más), pero yendo más allá de una simple enumeración de fechas, versiones y características, sino exponiendo las cosas en su contexto, tratando de explicar porque en momentos dados las cosas se hicieron de un modo determinado y no de otro, y en que consistía lo que se hizo y lo que se dejó de hacer. &lt;br /&gt;
&lt;br /&gt;
Sin embargo, al enfocarlo de este modo, el plan se mostró cada vez más ambicioso. Hablar de [[Borland Delphi]] es hablar de [[Turbo Pascal]], y hablar de Turbo Pascal es hablar del lenguaje Pascal y es hablar de los PCs. Mencionar a Delphi es hablar de Windows, pero también de [[MS-DOS]] (Borland Pascal, Turbo Pascal) y de [[Linux]] (Kilyx), y eso es hablar de [[Unix]], y es hablar de CP/M.&lt;br /&gt;
&lt;br /&gt;
Por lo tanto se ha decidido empezar de la forma más genérica posible, desde la (pre)historia a grandes rasgos de la informática, para ir cerrando paulatinamente el círculo a modo de embudo entorno a la microinformática, al universo PC, a MS-DOS y [[Windows]], y paralelamente, la aparición de Linux en el mundo PC, para acabar se centrarse en Kompass Pascal y sus sucesores Turbo Pascal, Delphi y Kilyx. &lt;br /&gt;
&lt;br /&gt;
La intención es mostrar esta historia como un todo hilvanado en que las decisiones se toman en unas circunstancias determinadas, decisiones que provocarán a su vez otros hechos y otras circunstancias que determinarán futuros acontecimientos y decisiones. &lt;br /&gt;
&lt;br /&gt;
De como el azar, la casualidad o las presiones e intereses de marketing han influido en el rumbo que han tomado las cosas y por qué no siempre las soluciones más lógicas o más brillantes tecnológicamente hablando han sido las adoptadas. &lt;br /&gt;
&lt;br /&gt;
En resumen, el devenir de esta herramienta en el contexto en que se ha ido desarrollando, las circunstancias que rodearon su nacimiento, los recursos disponibles en cada momento que la han hecho ir en una u otra dirección, o sea, los polvos que han traído estos lodos.&lt;br /&gt;
&lt;br /&gt;
Además, este enfoque cronológico permite al lector que al conocer la historia, según el viejo adagio, no esté condenado a repetirla. En estos tiempos, en los que la prensa no especializada (y parte de la especializada también), los profesionales de la tertulia y “enterados” en general (no se me ocurre mejor adjetivo para definirlos) no se cansan de alabar públicamente, por ejemplo, las “novedades” de Java, como la máquina virtual o la recogida de basuras, “novedades” que llevan más de veinte años en la palestra, he creído conveniente mostrar no sólo el que sino el cuando y el como. &lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
Delphi dio una implementación muy buena a la idea del uso de componentes, que son piezas reutilizables de código (clases) que pueden interactuar con el EID en tiempo de diseño y desempeñar una función específica en tiempo de ejecución. &lt;br /&gt;
&lt;br /&gt;
Desde un enfoque más específico de la herramienta, se catalogan como componentes todos aquellos objetos que heredan de la clase TComponent, donde se implementa la funcionalidad necesaria para interactuar con el entorno de desarrollo, la carga dinámica desde streams y la liberación de memoria mediante una jerarquía. Una gran parte de los componentes disponibles para Delphi son controles (derivados de TControl), que encapsulan los elementos de interacción con el usuario como botones, menús, barras de desplazamiento, etcétera. &lt;br /&gt;
&lt;br /&gt;
Delphi incluye una biblioteca de clases diseñada denominada VCL (Visual Component Library, Biblioteca de Componentes Visuales) y, en sus versiones 6 y 7, una jerarquía multiplataforma paralela denominada CLX. Ésta también se incluye en Kylix. Estas jerarquías de objetos incluyen componentes visuales y no visuales, tales como los pertenecientes a la categoría de acceso a datos, con los que puede establecerse conexiones de forma nativa o mediante capas intermedias (como ADO, BDE u ODBC) a la mayoría de las bases de datos relacionales existentes en el mercado. &lt;br /&gt;
&lt;br /&gt;
La VCL también está disponible para el desarrollo en NET. Además de poder utilizar en un programa estos componentes estándar (botones, grillas, conjuntos de datos, etc.), es posible crear nuevos componentes o mejorar los ya existentes, extendiendo la funcionalidad de la herramienta. En Internet existe un gran número de componentes, tanto gratuitos como comerciales, disponibles para los proyectos a los que no les basten los que vienen ya con la herramienta. &lt;br /&gt;
&lt;br /&gt;
== Desarrollo visual ==&lt;br /&gt;
Como entorno visual, la programación en Delphi consiste en diseñar los formularios que componen al programa colocando todos sus controles (botones, etiquetas, campos de texto, etc.) en las posiciones deseadas, normalmente usando un ratón. Luego se asocia código a los [[#Eventos|eventos]] de dichos controles y también se pueden crear módulos de datos, que regularmente contienen los componentes de acceso a datos y las reglas de negocio de una aplicación.&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
*[[Visual Basic]]&lt;br /&gt;
*[[C++]]&lt;br /&gt;
*[[La cara oculta de Delphi 4]]&lt;br /&gt;
&lt;br /&gt;
== Fuentes ==&lt;br /&gt;
*[http://daw-labs.com/historia-de-delphi-desde-los-origenes-de-la-informatica-hasta-nuestros-dias Historia de delphi desde los origenes de la informatica hasta nuestros días]&lt;br /&gt;
*[http://www.ciberluna.com Comunidad de Delphi ]&lt;br /&gt;
*[http://www.pacop.net/tutorial-borland-delphi/ique-es-delphi.html PACOP]&lt;br /&gt;
*[http://www.elchatcubano.com Ejemplo de web con Delphi ]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]][[Category:Lenguajes_de_programación]][[Category:Informática]]&lt;/div&gt;</summary>
		<author><name>Oscar2017</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=PHP&amp;diff=2813569</id>
		<title>PHP</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=PHP&amp;diff=2813569"/>
		<updated>2017-02-21T13:37:33Z</updated>

		<summary type="html">&lt;p&gt;Oscar2017: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=PHP&lt;br /&gt;
|familia=&lt;br /&gt;
|imagen=Php1.jpg&lt;br /&gt;
|tamaño=120x67&lt;br /&gt;
|descripción=&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=&lt;br /&gt;
|desarrollador=Grupo PHP&lt;br /&gt;
|diseñador=[[Rasmus Lerdorf]]&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|lanzamiento inicial=[[1995]]&lt;br /&gt;
|versiones=&lt;br /&gt;
|última versión estable=5.4.4 ([[16 de junio]] de [[2012]])&amp;lt;ref&amp;gt;[http://www.haciendoweb.cult.cu/php-5-4-4-liberado/ PHP 5.4.4 liberado]. Consultado 16 de junio, 2012.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|género=&lt;br /&gt;
|sistemas operativos=[[Multiplataforma]]&lt;br /&gt;
|idioma=&lt;br /&gt;
|licencia=PHP License&amp;lt;ref&amp;gt;[http://www.php.net/license/ Licencias de PHP]. Consultado 9 de junio, 2011.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|premios=&lt;br /&gt;
|web=[http://www.php.net/ www.php.net]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''PHP'''. Lenguaje de programación, interpretado, diseñado originalmente para la creación de Páginas web dinámicas. Es usado principalmente en interpretación del lado del servidor (server-side scripting) pero actualmente puede ser utilizado desde una interfaz de línea de comandos o en la creación de otros tipos de programas incluyendo aplicaciones con [[Interfaz gráfica de usuario|interfaz gráfica]] usando las bibliotecas [[Qt (biblioteca)|Qt]] o [[GTK+]]. &lt;br /&gt;
&lt;br /&gt;
PHP es un [[Acrónimo recursivo]] que significa '''''P'''HP '''H'''ypertext '''P'''re-processor'' (inicialmente PHP Tools, o, ''P''ersonal ''H''ome ''P''age Tools). Fue creado originalmente por [[Rasmus Lerdorf]] en [[1994|1994]]; sin embargo la implementación principal de PHP es producida ahora por The PHP Group y sirve como el estándar ''de facto'' para PHP al no haber una especificación formal. Publicado bajo la [[PHP License]], la [[Free Software Foundation]] considera esta licencia como software libre. &lt;br /&gt;
&lt;br /&gt;
== Visión general  ==&lt;br /&gt;
&lt;br /&gt;
PHP es un lenguaje interpretado de propósito general ampliamente usado, diseñado especialmente para desarrollo web y que puede ser incrustado dentro de código [[HTML]]. Generalmente se ejecuta en un servidor web, tomando el código en PHP como su entrada y creando páginas web como salida. Puede ser desplegado en la mayoría de los servidores web y en casi todos los [[sistemas operativos]] y plataformas sin costo alguno. &lt;br /&gt;
&lt;br /&gt;
PHP se encuentra instalado en más de 20 millones de sitios web y en un millón de servidores, el número de sitios en PHP ha compartido algo de su preponderante sitio con otros nuevos lenguajes no tan poderosos desde [[Agosto|agosto]] de [[2005]]. Este mismo sitio web de [[Wikipedia]] está desarrollado en PHP. Es también el módulo [[Apache]] más popular entre las computadoras que utilizan Apache como servidor web. La versión más reciente de [[PHP]] es la 5.3.2 (for [[Windows]]) del [[4 de marzo]] de [[2010]]. &lt;br /&gt;
&lt;br /&gt;
El gran parecido que posee PHP con los lenguajes más comunes de [[Programación estructurada]], como [[Lenguaje de Programación C]] y [[Perl]], permiten a la mayoría de los [[Programador]]es crear aplicaciones complejas con una curva de aprendizaje muy corta. También les permite involucrarse con aplicaciones de contenido dinámico sin tener que aprender todo un nuevo grupo de funciones. &lt;br /&gt;
&lt;br /&gt;
Aunque todo en su diseño está orientado a facilitar la creación de página web, es posible crear aplicaciones con una [[Interfaz gráfica de usuario|interfaz gráfica para el usuario]], utilizando la extensión [[PHP-Qt]] o [[PHP-GTK]]. También puede ser usado desde la [[Línea de órdenes]], de la misma manera como [[Perl]] o [[Python]] pueden hacerlo, a esta versión de PHP se la llama PHP CLI (''Command Line Interface''). &lt;br /&gt;
&lt;br /&gt;
Cuando el cliente hace una petición al servidor para que le envíe una [[Página web]], el servidor ejecuta el [[Intérprete (informática)|intérprete]] de PHP. Éste procesa el [[Script]] solicitado que generará el contenido de manera dinámica (por ejemplo obteniendo información de una base de datos). El resultado es enviado por el intérprete al servidor, quien a su vez se lo envía al cliente. Mediante extensiones es también posible la generación de archivos [[PDF]], [[Flash]], así como imágenes en diferentes formatos. &lt;br /&gt;
&lt;br /&gt;
Permite la conexión a diferentes tipos de servidores de bases de datos tales como [[MySQL]], [[PostgreSQL]], [[Oracle]], [[ODBC]], [[DB2]], [[Microsoft SQL Server]], [[Firebird]] y [[SQLite]]. &lt;br /&gt;
&lt;br /&gt;
PHP también tiene la capacidad de ser ejecutado en la mayoría de los [[Sistema operativo|sistemas operativos]], tales como [[UNIX]] (y de ese tipo, como [[Linux]] o [[Mac OS X]]) y [[Windows]], y puede interactuar con los [[Servidor web|servidores de web]] más populares ya que existe en versión [[CGI]], módulo para [[Servidor HTTP Apache|Apache]], e [[ISAPI]]. &lt;br /&gt;
&lt;br /&gt;
PHP es una alternativa a las tecnologías de [[Microsoft]] [[ASP]] y [[ASP.NET]] (que utiliza [[C Sharp|C#]] [[VB.NET]] como lenguajes), a [[ColdFusion]] de la compañía [[Adobe]] (antes [[Macromedia]]), a [[JSP]]/[[Lenguaje de programación Java|Java]] de [[Sun Microsystems]], y a [[Common Gateway Interface|CGI]]/[[Perl]]. Aunque su creación y desarrollo se da en el ámbito de los sistemas libres, bajo la licencia [[GNU]], existe además un IDE ([[Entorno de Desarrollo Integrado]]) comercial llamado [[Zend Studio]]. Recientemente, [[CodeGear]] (la división de lenguajes de programación de [[Borland]]) ha sacado al mercado un IDE para PHP, denominado '''Delphi for PHP'''. Existe un módulo para [[Eclipse (software)|Eclipse]], uno de los IDE más populares.&lt;br /&gt;
&lt;br /&gt;
== Historia  ==&lt;br /&gt;
&lt;br /&gt;
Fue originalmente diseñado en [[Perl]], con base en la escritura de un grupo de [[Common Gateway Interface|CGI]] binarios escritos en el lenguaje [[C]] por el [[Programador]] [[Danés]]-[[Canadiense]] [[Rasmus Lerdorf]] en el año [[1994]] para mostrar su [[Currículum vitae]] y guardar ciertos datos, como la cantidad de tráfico que su página web recibía. El [[8 de junio]] de [[1995]] fue publicado &amp;quot;'''P'''ersonal '''H'''ome '''P'''age Tools&amp;quot; después de que Lerdorf lo combinara con su propio ''Form Interpreter'' para crear PHP/FI. &lt;br /&gt;
&lt;br /&gt;
=== PHP 3  ===&lt;br /&gt;
&lt;br /&gt;
Dos programadores [[Israel]]íes del [[Technion]], [[Zeev Suraski]] y [[Andi Gutmans]], reescribieron el [[Analizador sintáctico]] (''parser'' en inglés) en el año [[1997]] y crearon la base del PHP3, cambiando el nombre del lenguaje a la forma actual. Inmediatamente comenzaron experimentaciones públicas de PHP3 y fue publicado oficialmente en junio del [[1998]]. &lt;br /&gt;
&lt;br /&gt;
Para [[1999]], Suraski y Gutmans reescribieron el código de PHP, produciendo lo que hoy se conoce como [[Motor Zend]]. También fundaron Zend Technologies en [[Ramat Gan]], [[Israel]]. &lt;br /&gt;
&lt;br /&gt;
=== PHP 4  ===&lt;br /&gt;
&lt;br /&gt;
En mayo de [[2000]] PHP 4 fue lanzado bajo el poder del motor [[Zend Engine]] 1.0. El día 13 de julio de 2007 se anunció la suspensión del soporte y desarrollo de la versión 4 de PHP. &amp;lt;ref&amp;gt;[http://www.php.net/archive/2007.php Sitio Oficial] PHP: News Archives 2007] (en inglés) Consultado 9 de diciembre de 2007&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/ref&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; a pesar de lo anunciado se ha liberado una nueva versión con mejoras de seguridad, la 4.4.8 publicada el 13 de enero del 2008 y posteriormente la versión 4.4.9 publicada el 7 de agosto de 2008&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== PHP 5  ===&lt;br /&gt;
&lt;br /&gt;
El [[13 de julio]] de [[2004]], fue lanzado PHP 5, utilizando el motor Zend Engine 2.0 (o Zend Engine 2). La versión más reciente de PHP es la 5.3.1 (19 de noviembre de [[2009]]), que incluye todas las ventajas que provee el nuevo Zend Engine 2 como: &lt;br /&gt;
&lt;br /&gt;
*Mejor soporte para la [[POO|Programación Orientada a Objetos]], que en versiones anteriores era extremadamente rudimentario, con [[PHP Data Objects]]. &lt;br /&gt;
*Mejoras de rendimiento. &lt;br /&gt;
*Mejor soporte para [[MySQL]] con extensión completamente reescrita. &lt;br /&gt;
*Mejor soporte a [[XML]] ( XPath, DOM, etc. ). &lt;br /&gt;
*Soporte nativo para [[SQLite]]. &lt;br /&gt;
*Soporte integrado para [[SOAP]]. &lt;br /&gt;
*[[Iterador (patrón de diseño)|Iteradores]] de datos. &lt;br /&gt;
*[[Manejo de excepciones]]. &lt;br /&gt;
*Mejoras con la implementación con [[Oracle]].&lt;br /&gt;
&lt;br /&gt;
Aún se siguen publicando versiones de la rama 5.2.X, siendo publicada la versión 5.2.12 el 17 de diciembre de [[2009]], aunque la mayoría son actualizaciones de seguridad &lt;br /&gt;
&lt;br /&gt;
=== PHP 6  ===&lt;br /&gt;
&lt;br /&gt;
Está previsto el lanzamiento en breve de la rama 6 de PHP. Cuando se lance esta nueva versión quedarán solo dos ramas activas en desarrollo (PHP 5 y 6), pues se abandonó el desarrollo y soporte de PHP 4 el [[13 de julio]] de [[2007]]. &amp;lt;ref&amp;gt;Según esta noticia [http://www.php.net/archive/2007.php#2007-07-13-1] se dará soporte a fallos críticos hasta el 2008-08-09,......&amp;lt;/ref&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Las diferencias que encontraremos frente a PHP 5. son: &lt;br /&gt;
&lt;br /&gt;
*Soportará [[Unicode]]; &lt;br /&gt;
*limpieza de funcionalidades obsoletas como ''register_globals'', ''safe_mode'', etc; &lt;br /&gt;
*PECL y eliminación de soporte ereg; &lt;br /&gt;
*mejoras en [[POO|orientación a objetos]]; &lt;br /&gt;
*inclusión en el núcleo de ''xmlReader'' y ''xmlWriter'' así como ''Fileinfo'';&lt;br /&gt;
&lt;br /&gt;
por referencia devolverá un error; &lt;br /&gt;
&lt;br /&gt;
*se elimina el soporte de las librerías ''[[FreeType]]1'' y ''[[GD2]]1''; &lt;br /&gt;
*etc.&lt;br /&gt;
&lt;br /&gt;
== Características de PHP  ==&lt;br /&gt;
&lt;br /&gt;
=== Ventajas  ===&lt;br /&gt;
&lt;br /&gt;
*Es un [[Multiplataforma|lenguaje multiplataforma]]. &lt;br /&gt;
*Completamente orientado al desarrollo de aplicaciones web dinámicas con acceso a información almacenada en una Base de Datos. &lt;br /&gt;
*El código fuente escrito en PHP es invisible al navegador y al cliente ya que es el servidor el que se encarga de ejecutar el código y enviar su resultado [[HTML]] al navegador. Esto hace que la programación en PHP sea segura y confiable. &lt;br /&gt;
*Capacidad de conexión con la mayoría de los motores de base de datos que se utilizan en la actualidad, destaca su conectividad con [[MySQL]] y [[PostgreSQL]]. &lt;br /&gt;
*Capacidad de expandir su potencial utilizando la enorme cantidad de módulos (llamados ext's o extensiones). &lt;br /&gt;
*Posee una amplia documentación en su página oficial ([http://www.php.net/manual/es/ Sitio Oficial]), entre la cual se destaca que todas las funciones del sistema están explicadas y ejemplificadas en un único archivo de ayuda. &lt;br /&gt;
*Es [[Software libre|libre]], por lo que se presenta como una alternativa de fácil acceso para todos. &lt;br /&gt;
*Permite aplicar técnicas de [[POO|programación orientada a objetos]]. &lt;br /&gt;
*Biblioteca nativa de funciones sumamente amplia e incluida. &lt;br /&gt;
*No requiere definición de tipos de variables aunque sus variables se pueden evaluar también por el tipo que estén manejando en tiempo de ejecución. &lt;br /&gt;
*Tiene manejo de excepciones (desde PHP5). &lt;br /&gt;
*Si bien PHP no obliga a quien lo usa a seguir una determinada metodología a la hora de programar (muchos otros lenguajes tampoco lo hacen), aun estando dirigido a alguna en particular, el programador puede aplicar en su trabajo cualquier técnica de programación y/o desarrollo que le permita escribir código ordenado, estructurado y manejable. Un ejemplo de esto son los desarrollos que en PHP se han hecho del [[Patrón de diseño]] '''[[Modelo Vista Controlador]]''' (o MVC), que permiten separar el tratamiento y acceso a los [[Dato]]s, la [[Lógica de control]] y la [[Interfaz de usuario]] en tres componentes independientes (ver más abajo '''[[PHP#Frameworks_en_PHP|Frameworks en PHP]]''').&lt;br /&gt;
&lt;br /&gt;
=== Inconvenientes  ===&lt;br /&gt;
&lt;br /&gt;
*La [[Ofuscación]] de código es la única forma de ocultar los fuentes.&lt;br /&gt;
&lt;br /&gt;
== Sintaxis ==&lt;br /&gt;
Programa [[Hola mundo]] con PHP embebido en código [[HTML]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;es&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt; Ejemplo básico PHP&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;?php&lt;br /&gt;
            echo 'Hola mundo';&lt;br /&gt;
        ?&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El intérprete de PHP solo ejecuta el código que se encuentra entre sus delimitadores. Los delimitadores más comunes son &amp;lt;code&amp;gt;&amp;lt;?php&amp;lt;/code&amp;gt; para abrir una sección PHP y &amp;lt;code&amp;gt;?&amp;gt;&amp;lt;/code&amp;gt; para cerrarla. El propósito de estos delimitadores es separar el código PHP del resto de código, como por ejemplo el HTML.&amp;lt;ref&amp;gt;{{cita web|url=http://php.net/manual/es/language.basic-syntax.php |título=PHP: Sintaxis básica |fechaacceso=13 de abril de 2013}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las variables se prefijan con el símbolo del dólar (&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;) y no es necesario indicar su tipo. Las variables, a diferencia de las funciones, distinguen entre mayúsculas y minúsculas. Las cadenas de caracteres pueden ser encapsuladas tanto en dobles comillas como en comillas simples, aunque en el caso de las primeras, se pueden insertar variables en la cadena directamente, sin necesidad de concatenación.&lt;br /&gt;
&lt;br /&gt;
Los comentarios se pueden escribir bien con dos barras al principio de la línea, o con una almohadilla. También permite comentarios multi-línea encapsulados en &amp;lt;code&amp;gt;/* */&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
En cuanto a las palabras clave, PHP comparte con la mayoría de otros lenguajes con sintaxis C las condiciones con &amp;lt;code&amp;gt;''if''&amp;lt;/code&amp;gt;, los bucles con &amp;lt;code&amp;gt;''for''&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;''while''&amp;lt;/code&amp;gt; y los retornos de funciones. Como es habitual en este tipo de lenguajes, las sentencias deben acabar con punto y coma (&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo de código PHP  ==&lt;br /&gt;
&lt;br /&gt;
En el siguiente ejemplo se muestra el típico '''Hola Mundo''', que es una simple impresión por pantalla del mismo mensaje: &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt; &amp;lt;?php $a = 'hola mundo'; echo $a; ?&amp;gt; &amp;lt;/source&amp;gt; El ejemplo anterior escribiría simplemente &amp;quot;Hola Mundo&amp;quot; (sin comillas) en la página web. Es importante recordar que todo bloque de código PHP debe estar dentro de &amp;amp;lt;?php(para abrir) y&amp;amp;nbsp;?&amp;amp;gt;(para cerrar) o simplemente de una forma más corta &amp;amp;lt;? &amp;amp;lt;CÓDIGO_PHP&amp;amp;gt;&amp;amp;nbsp;?&amp;amp;gt; -siempre que la directiva ''short_open_tag'' esté activada, muy parecido a las etiquetas en [[Active Server Pages|ASP]] &amp;amp;lt;% &amp;amp;lt;CÓDIGO_ASP&amp;amp;gt;&amp;amp;nbsp;%&amp;amp;gt;. Ahora bien, el resultado que tendríamos en el navegador sería el siguiente: &lt;br /&gt;
&lt;br /&gt;
Hola Mundo &lt;br /&gt;
&lt;br /&gt;
A continuación un ejemplo de envío y recepción de datos en una misma página con PHP: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Ejemplo de uso simple en envío y recepción de parámetros con PHP&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;?php&lt;br /&gt;
  // Si existe la variable $_POST['muestra'], entonces muestra la comida favorita&lt;br /&gt;
  if (isset($_POST['muestra'])){&lt;br /&gt;
    echo 'Hola, '.$_POST['nombre'].', tu comida favorita es: '. $_POST['comida'].'';&lt;br /&gt;
  }&lt;br /&gt;
  else{&lt;br /&gt;
   // Si no, muestra un formulario solicitando la comida favorita&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF'];?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
      ¿Cuál es tu nombre?&lt;br /&gt;
      &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nombre&amp;quot; /&amp;gt;&lt;br /&gt;
      ¿Cuál es tu comida favorita?&lt;br /&gt;
      &amp;lt;select name=&amp;quot;comida&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;Spaguetis&amp;quot;&amp;gt;Spaguetis&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;Asado&amp;quot;&amp;gt;Asado&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;Pizza&amp;quot;&amp;gt;Pizza&amp;lt;/option&amp;gt;&lt;br /&gt;
      &amp;lt;/select&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;muestra&amp;quot; value=&amp;quot;Seguir&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;?php&lt;br /&gt;
    } //Fin del bloque else&lt;br /&gt;
  ?&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En este código es posible observar las siguientes características: &lt;br /&gt;
&lt;br /&gt;
*Las variables enviadas por un formulario utilizando el método POST, son recibidas en el lenguaje dentro de la matriz &amp;lt;code&amp;gt;$_POST&amp;lt;/code&amp;gt;, lo cual facilita la obtención de este tipo de datos. Este mismo método es utilizado por el lenguaje para todas las fuentes de información en una aplicación web, tales como [[Cookie]]s en la matriz &amp;lt;code&amp;gt;$_COOKIES&amp;lt;/code&amp;gt;, variables de URL en &amp;lt;code&amp;gt;$_GET&amp;lt;/code&amp;gt; (que en formularios puede servir para guardar los datos), variables de sesión utilizando &amp;lt;code&amp;gt;$_SESSION&amp;lt;/code&amp;gt;, y variables del servidor y del cliente por medio de la matriz &amp;lt;code&amp;gt;$_SERVER&amp;lt;/code&amp;gt;. &lt;br /&gt;
*El código PHP está incrustado dentro del [[HTML]] e interactúa con el mismo, lo que permite diseñar la página Web en un editor común de [[HTML]] y añadir el código dinámico dentro de las etiquetas &amp;lt;code&amp;gt;&amp;amp;lt;?php&amp;amp;nbsp;?&amp;amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
*El resultado muestra y oculta ciertas porciones del código [[HTML]] en forma condicional. &lt;br /&gt;
*Es posible utilizar funciones propias del lenguaje para aplicaciones Web como &amp;lt;code&amp;gt;htmlentitites()&amp;lt;/code&amp;gt;, que convierte los caracteres que tienen algún significado especial en el código [[HTML]] o que podrían desplegarse erróneamente en el navegador como acentos o diéresis, en sus equivalentes en formato [[HTML]]..&lt;br /&gt;
&lt;br /&gt;
Todas las variables en PHP llevan el símbolo de dolar como prefijo (ejemplo: $variable1, $variable2, $variable3...,$variableN), los tipos de variable no es necesario declararlas, ya que a medida que se usan en la aplicación el servidor reconoce de que tipo son. Para mostrar una cadena (en inglés ''string'') debe estar dentro de comillas dobles o simples (ejemplo: &amp;quot;Hola Mundo&amp;quot;, 'Lo que quiero mostrar'). Cabe destacar que si se desea mostrar el símbolo &amp;quot; o ' debe encerrarse en el otro tipo de comillas (&amp;lt;code&amp;gt;&amp;quot;...'...&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'...&amp;quot;...'&amp;lt;/code&amp;gt;) o usarse un escape (&amp;lt;code&amp;gt;\'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\&amp;quot;&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
 Toda línea de instrucción siempre termina en un punto y coma (;), al igual que el [[Lenguaje de Programación C]]. &lt;br /&gt;
&lt;br /&gt;
Para insertar un comentario de una sola línea, debe empezar por &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; o por &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;. El resto de la línea es tratado entonces como un comentario. Para insertar un bloque de comentario, de una o más líneas, se utiliza la combinación &amp;lt;code&amp;gt;/*&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;*/&amp;lt;/code&amp;gt;, por ejemplo:&amp;amp;nbsp;&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Historia  ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Versión &lt;br /&gt;
! style=&amp;quot;width: 10em;&amp;quot; | Fecha &lt;br /&gt;
! Cambios más importantes&lt;br /&gt;
|-&lt;br /&gt;
| PHP 1.0 &lt;br /&gt;
| 8 de junio de 1995 &lt;br /&gt;
| Oficialmente llamado &amp;quot;Herramientas personales de trabajo (PHP Tools)&amp;quot;. Es el primer uso del nombre &amp;quot;PHP&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| PHP Versión 2 (PHP/FI) &lt;br /&gt;
| 16 de abril de 1996 &lt;br /&gt;
| Considerado por el creador como la &amp;quot;más rapida y simple herramienta&amp;quot; para la creación de páginas webs dinámicas .&lt;br /&gt;
|-&lt;br /&gt;
| PHP 3.0 &lt;br /&gt;
| 6 de junio de 1998 &lt;br /&gt;
| Desarrollo movido de una persona a muchos desarrolladores. Zeev Suraski y Andi Gutmans reescriben la base para esta versión.&lt;br /&gt;
|-&lt;br /&gt;
| PHP 4.0 &lt;br /&gt;
| 22 de mayo de 2000 &lt;br /&gt;
| Se añade un sistema más avanzado de análisis de etiquetas en dos fases análisis/ejecución llamado el motor Zend.&lt;br /&gt;
|-&lt;br /&gt;
| PHP 4.1 &lt;br /&gt;
| 10 de diciembre de 2001 &lt;br /&gt;
| Introducidas las variables superglobals ($_GET, $_SESSION, etc.).&lt;br /&gt;
|-&lt;br /&gt;
| PHP 4.2 &lt;br /&gt;
| 22 de abril de 2002 &lt;br /&gt;
| Se deshabilitan register_globals por defecto.&lt;br /&gt;
|-&lt;br /&gt;
| PHP 4.3 &lt;br /&gt;
| 27 de diciembre de 2002 &lt;br /&gt;
| Introducido la CLI, en adición a la CGI.&lt;br /&gt;
|-&lt;br /&gt;
| PHP 4.4 &lt;br /&gt;
| 11 de julio de 2005 &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.0 &lt;br /&gt;
| 13 de julio de 2004 &lt;br /&gt;
| Motor Zend II con un nuevo modelo de objetos.&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.1 &lt;br /&gt;
| 25 de noviembre de 2005 &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.2 &lt;br /&gt;
| 2 de noviembre de 2006 &lt;br /&gt;
| Habilitado el filtro de extensiones por defecto.&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.2.4 &lt;br /&gt;
| 30 de agosto de 2007 &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.2.5 &lt;br /&gt;
| 8 de noviembre de 2007 &lt;br /&gt;
| Versión centrada en mejorar la estabilidad (+60 errores solucionados). &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.2.8 &lt;br /&gt;
| 8 de diciembre de 2008 &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.2.9 &lt;br /&gt;
| 26 de febrero de 2009 &lt;br /&gt;
| Diversas mejoras en el ámbito de la seguridad (+50 errores solucionados).&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.2.12 &lt;br /&gt;
| 17 de diciembre de 2009 &lt;br /&gt;
| Diversas mejoras en el ámbito de la seguridad (+50 errores solucionados).&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.3 &lt;br /&gt;
| 30 de junio de 2009 &lt;br /&gt;
| namespaces, late static binding, closures, optional garbage collection for cyclic references, nuevas extensiones (+140 errores solucionados).&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.3.1 &lt;br /&gt;
| 19 de Noviembre de 2009 &lt;br /&gt;
| Diversas mejoras en el ámbito de la seguridad (36 errores solucionados)..&lt;br /&gt;
|-&lt;br /&gt;
| PHP 5.3.2 &lt;br /&gt;
| 4 de Marzo del 2010 &lt;br /&gt;
| Diversas mejoras en el ámbito de la seguridad (99 errores solucionados)..&lt;br /&gt;
|-&lt;br /&gt;
| PHP 6 &lt;br /&gt;
| S/D &lt;br /&gt;
| &amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Aplicaciones desarrolladas con PHP  ==&lt;br /&gt;
&lt;br /&gt;
*Redes Sociales &lt;br /&gt;
**[[Facebook]] &lt;br /&gt;
**[[Tuenti]] &lt;br /&gt;
*E-Commerce &lt;br /&gt;
**[[Magento]] &lt;br /&gt;
**[[OsCommerce]] &lt;br /&gt;
**[[PrestaShop]] &lt;br /&gt;
*Blogs &lt;br /&gt;
**[[WordPress]] &lt;br /&gt;
*Burning Board &lt;br /&gt;
*CMSformE &lt;br /&gt;
*[[Dokuwiki]] &lt;br /&gt;
*[[Drupal]] &lt;br /&gt;
*[[Joomla]] &lt;br /&gt;
*Gallery Project &lt;br /&gt;
*[[Mambo Open Source]] &lt;br /&gt;
*[[MediaWiki]] (desarrollado para [[Wikipedia]]) &lt;br /&gt;
*[[Moodle]] &lt;br /&gt;
*Phorum &lt;br /&gt;
*[[PhpMyAdmin]] &lt;br /&gt;
*[[PHP-Nuke]] &lt;br /&gt;
*[[PhpPgAdmin]] &lt;br /&gt;
*[[PhpWiki]] &lt;br /&gt;
*PmWiki &lt;br /&gt;
*[[Zikula]] (anteriormente llamado PostNuke) &lt;br /&gt;
*[[Smarty]] &lt;br /&gt;
*[[SPIP]] &lt;br /&gt;
*[[SugarCRM]] &lt;br /&gt;
*[[VBulletin]] &lt;br /&gt;
*Xaraya &lt;br /&gt;
*[[Xoops]] &lt;br /&gt;
*[[MODx]] &lt;br /&gt;
*[[SMF]] &lt;br /&gt;
*[[PhpBB]] &lt;br /&gt;
*[[UVG SCADA]]&lt;br /&gt;
&lt;br /&gt;
(En el siguiente [[Anexo:Sistemas de gestión de contenidos|listado]] de [[Sistema de gestión de contenido|CMS]] pueden encontrarse muchos más.) &lt;br /&gt;
&lt;br /&gt;
*[[PhpCollab]]&lt;br /&gt;
&lt;br /&gt;
== Frameworks en PHP  ==&lt;br /&gt;
&lt;br /&gt;
*[[Zend Framework]] (Oficial, de los desarrolladores de PHP) &lt;br /&gt;
*[[Kohana]] &lt;br /&gt;
*[[Symfony]] &lt;br /&gt;
*[[CakePHP]] &lt;br /&gt;
*[http://www.pradosoft.com/ PHP Prado] &lt;br /&gt;
*[http://codeigniter.com CodeIgniter] &lt;br /&gt;
*[http://www.yiiframework.com Yii Framework] &lt;br /&gt;
*[http://lithify.me/ Lithium] &lt;br /&gt;
*[http://silverstripe.org/sapphire Sapphire]&lt;br /&gt;
&lt;br /&gt;
(Otros Frameworks en PHP y en otros lenguajes [[Modelo Vista Controlador#Frameworks_MVC|aquí]].) &lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrado para PHP  ==&lt;br /&gt;
&lt;br /&gt;
Algunos de los Entornos de Desarrollo Integrados, en inglés (IDE, Integrated Development Environment), para PHP más conocidos o habituales son: &lt;br /&gt;
&lt;br /&gt;
*[[PDT]], plugin de [[Eclipse (software)|Eclipse]]: GPL - (Sun). &lt;br /&gt;
*[[NetBeans]] , libre, multiplataforma. &lt;br /&gt;
*[[Zend Studio]]: Comercial - (Zend). &lt;br /&gt;
*[[Aptana Studio]]: GPL, existe una versión comercial. Debe instalarse el plugin para PHP. Está basado en Eclipse, pero posee características que lo hacen mas deseable que el Eclipse PDT; entre ellas: auto-completado de código, auto-identador. &lt;br /&gt;
*[[Komodo IDE]]: Komodo Edit, libre y gratuito, el IDE es licencia comercial - (Mozilla). &lt;br /&gt;
*[[NuSphere PhpED]]: Comercial, para linux y windows. &lt;br /&gt;
*[[Quanta]]: GPL y gratuito, para GNU/linux con QT. &lt;br /&gt;
*[[Bluefish]]: GPL y gratuito, para GNU/linux con GTK. &lt;br /&gt;
*[[GEdit]]: Editor de texto por defecto en Gnome - (Linux). &lt;br /&gt;
*[[Geany]]:GPL, para linux. Sumamente liviano. Incluye autocompletado, autoidentador, soporte para numerosos lenguages. &lt;br /&gt;
*[[PhpDesigner]]: Comercial y Freeware, para linux y windows. Incluye integración con el manual, autocompletado en código y viene en varios idiomas. &lt;br /&gt;
*[[Rapid PHP]]: Comercial, para windows. &lt;br /&gt;
*[[AJAX PHP IDE]]: Entorno de desarrollo para PHP que utiliza funcionalidad AJAX en los eventos de los formularios diseñados. Separación de la lógica y el html.&lt;br /&gt;
&lt;br /&gt;
== Ver además&amp;lt;br&amp;gt;  ==&lt;br /&gt;
&lt;br /&gt;
*[[Horde (software)]]&amp;lt;br&amp;gt; &lt;br /&gt;
*[[Cosas que se debe saber de Programación]]&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Referencias  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Enlaces externos  ==&lt;br /&gt;
&lt;br /&gt;
*[http://ciberluna.com/ Sitio web oficial de PHP (inglés)] &lt;br /&gt;
*[http://tutorialphp.net/test/ Test Dinámico de autoevaluación] &lt;br /&gt;
*[http://www.php.net/~derick/meeting-notes.html Cambios en PHP 6] &lt;br /&gt;
*[http://search.cpan.org/search?query=PHP&amp;amp;mode=all PHP en CPAN] Módulos Perl en [[CPAN]] sobre PHP &lt;br /&gt;
*[http://www.elchatcubano.com Ejemplos de código PHP]&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
[[Category:Programación]] [[Category:Desarrollo_web]] [[Category:Lenguajes_de_programación_orientada_a_objetos]]&lt;/div&gt;</summary>
		<author><name>Oscar2017</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=C%2B%2B&amp;diff=2813468</id>
		<title>C++</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=C%2B%2B&amp;diff=2813468"/>
		<updated>2017-02-21T03:45:45Z</updated>

		<summary type="html">&lt;p&gt;Oscar2017: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ficha Software&lt;br /&gt;
|nombre=C++&lt;br /&gt;
|familia=Derivados de C&lt;br /&gt;
|imagen=C++.jpg&lt;br /&gt;
|tamaño=&lt;br /&gt;
|descripción=Lenguaje de programación&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=Bjarne Stroustrup&lt;br /&gt;
|desarrollador=&lt;br /&gt;
|diseñador=&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|lanzamiento inicial=1983&lt;br /&gt;
|versiones=&lt;br /&gt;
|última versión estable=&lt;br /&gt;
|género=&lt;br /&gt;
|sistemas operativos=Multiplataforma&lt;br /&gt;
|idioma=&lt;br /&gt;
|licencia=&lt;br /&gt;
|premios=&lt;br /&gt;
|web=&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''C++''' es un lenguaje imperativo orientado a objetos derivado del C. En realidad un superconjunto de C, que nació para añadirle cualidades y características de las que carecía. El resultado es que como su ancestro, sigue muy ligado al hardware subyacente, manteniendo una considerable potencia para programación a bajo nivel, pero se la han añadido elementos que le permiten también un estilo de programación con alto nivel de abstracción. Estrictamente hablando, C no es un subconjunto de C++; de hecho es posible escribir código C que es ilegal en C++. Pero a efectos prácticos, dado el esfuerzo de compatibilidad desplegado en su diseño, puede considerarse que C++ es una extensión del C clásico. La definición &amp;quot;oficial&amp;quot; del lenguaje nos dice que C++ es un lenguaje de propósito general basado en el C, al que se han añadido nuevos tipos de datos, clases, plantillas, mecanismo de excepciones, sistema de espacios de nombres, funciones inline, sobrecarga de [[Operadores|operadores]], referencias, operadores para manejo de memoria persistente, y algunas utilidades adicionales de librería (en realidad la [[Librería|librería]] Estándar C es un subconjunto de la librería C++) &amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Un Poco de historia  ==&lt;br /&gt;
&lt;br /&gt;
El comité para el estándar [[ANSI|ANSI]] [[C]] fue formado en [[1983]] con el objetivo de crear un lenguaje uniforme a partir del C original, desarrollado por Kernighan y Ritchie en 1972, en la ATT. Hasta entonces el estándar lo marcaba el libro escrito en 1978 por estos dos autores1. El lenguaje C++ se comenzó a desarrollar en 1980. Su autor fue [[Bjarne Stroustrup]], también de la ATT. Al comienzo era una extensión del lenguaje C que fue denominada C with classes. Este nuevo lenguaje comenzó a ser utilizado fuera de la ATT en [[1983]]. El nombre C++ es también de ese año, y hace referencia al carácter del operador incremento de C (++). Ante la gran difusión y éxito que iba obteniendo en el mundo de los programadores, la ATT comenzó a estandarizarlo internamente en [[1987]]. En [[1989]] se formó un comité ANSI (seguido algún tiempo después por un comité [[ISO|ISO]]) para estandarizarlo a nivel americano e internacional. En la actualidad, el C++ es un lenguaje versátil, potente y general. Su éxito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a riqueza de [[Operadores|operadores]] y expresiones, flexibilidad, concisión y eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del C original. La evolución de C++ ha continuado con la aparición de [[Java]], un lenguaje creado simplificando algunas cosas de C++ y añadiendo otras, que se utiliza para realizar aplicaciones en Internet. Hay que señalar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de éste fueron tomadas del C++. C++ es a la vez un lenguaje procedural (orientado a algoritmos) y orientado a objetos. Como lenguaje procedural se asemeja al C y es compatible con él, aunque ya se ha dicho que presenta ciertas ventajas. Como lenguaje orientado a objetos se basa en una filosofía completamente diferente, que exige del programador un completo cambio de mentalidad. Las características propias de la Programación Orientada a Objetos (Object Oriented Programming, u OOP) de C++ son modificaciones mayores que sí que cambian radicalmente su naturaleza.&lt;br /&gt;
&lt;br /&gt;
==Conceptos generales de la programación orientada a objetos== &lt;br /&gt;
&lt;br /&gt;
*Clase: Es una plantilla que define la      estructura  de un conjunto de objetos, que al ser creados se llamarán las       instancias de la clase. Esta estructura está compuesta por la definición       de los atributos y la implementación de las operaciones ( métodos  ). &lt;br /&gt;
&lt;br /&gt;
*Objeto: Es la      implementación de una instancia de  clase, es decir, una ocurrencia de      esta, que tiene los atributos  definidos por la clase, y sobre la que se      puede ejecutar las  operaciones definidas en ella. &lt;br /&gt;
&lt;br /&gt;
*Identidad:      Característica de cada objeto que lo  diferencia de los demás, incluyendo      de aquellos que pudieran  pertenecer a la misma clase y tener los mismos      valores en sus  atributos.&lt;br /&gt;
&lt;br /&gt;
*Herencia: Es      la capacidad que tienen las clases para heredar propiedades y métodos de      otras clases. &lt;br /&gt;
&lt;br /&gt;
== Acerca de la POO  ==&lt;br /&gt;
&lt;br /&gt;
La [[POO|POO]] es una nueva filosofía de programación que se basa en la utilización de objetos. El objetivo de la POO no es sino la meta de cualquier modelo de programación estructurada convencional: &amp;quot;imponer&amp;quot; una serie de normas de desarrollo que aseguren y faciliten la mantenibilidad y reusabilidad del código. Los mecanismos básicos de la POO son: objetos, mensajes, métodos y clases. &lt;br /&gt;
&lt;br /&gt;
*Objetos. Un objeto es una entidad que tiene unos atributos particulares (datos) y unas formas de operar sobre ellos (los métodos o funciones miembro). Es decir, un objeto incluye, por una parte una serie de operaciones que definen su comportamiento, y una serie de variables manipuladas por esas funciones que definen su estado. Por ejemplo, una ventana Windows contendrá operaciones como &amp;quot;maximizar&amp;quot; y variables como &amp;quot;ancho&amp;quot; y &amp;quot;alto&amp;quot; de la ventana. &lt;br /&gt;
*Mensajes. En C++, un mensaje se corresponde con el nombre de uno de los métodos de un objeto. Cuando se pasa un mensaje a un objeto, este responde ejecutando el código de la función asociada. &lt;br /&gt;
*[[Método|Método]]. Un método (función miembro) se implementa dentro de un objeto y determina como tiene que actuar el objeto cuando se produce el mensaje asociado. En C++ un método se corresponde con la definición de la función miembro del objeto. La estructura más interna de un objeto está oculta, de tal manera que la única conexión con el exterior son los mensajes &lt;br /&gt;
*Clases. Una clase es la definición de un tipo de objetos. De esta manera, una clase &amp;quot;Empleado&amp;quot; representaría todos los empleados de una empresa, mientras que un objeto de esa clase (también denominado instancia) representaría a uno de esos empleados en particular.&lt;br /&gt;
&lt;br /&gt;
Las principales características de la POO son: abstracción, encapsulamiento, herencia y polimorfismo: &lt;br /&gt;
&lt;br /&gt;
*[[Abstracción|Abstracción]]. Es el mecanismo de diseño en la POO. Nos permite extraer de un conjunto de entidades datos y comportamientos comunes para almacenarlos en clases. &lt;br /&gt;
*Encapsulamiento. Mediante esta técnica conseguiremos que cada clase sea una caja negra, de tal manera que los objetos de esa clase se puedan manipular como unidades básicas. Los detalles de la implementación se encuentran dentro de la clase, mientras que desde el exterior, un objeto será simplemente una entidad que responde a una serie de mensajes públicos (también denominados interfaz de la clase). &lt;br /&gt;
*Herencia. Es el mecanismo que nos permite crear clases derivadas (especialización) a partir de clases bases (generalización). Es decir, podríamos tener la clase &amp;quot;Empleado&amp;quot; (clase base) y la clase &amp;quot;Vendedor&amp;quot; derivando de la anterior. Una librería de clases (como la MFC) no es más que un conjunto de definiciones de clases interconectadas por múltiples relaciones de herencia. &lt;br /&gt;
*Polimorfismo. Esta característica nos permite disponer de múltiples implementaciones de un mismo método de clase, dependiendo de la clase en la que se realice. Es decir, podemos acceder a una variedad de métodos distintos (con el mismo nombre) mediante el mismo mecanismo de acceso. En C++ el polimorfismo se consigue mediante la definición de clases derivadas, funciones virtuales y el uso de punteros a objetos.&lt;br /&gt;
&lt;br /&gt;
Otros dos conceptos muy importantes en la POO son relativos a la creación y destrucción de objetos. En lenguajes estructurados convencionales, cuando se define una variable se le reserva espacio en memoria y, si no se inicializa expresamente, se hace por defecto (por ejemplo, en C una variable global siempre se inicializa a 0, pero una automática no, por lo que si no se inicializa expresamente su contenido inicial será basura); por otra parte, cuando se destruye una variable (por que se abandona el ámbito de su definición - scope -) se libera la memoria que estaba ocupando. Si ahora hacemos el paralelismo obligado entre variables y objetos para los lenguajes POO nos daremos cuenta de que deben existir procedimientos especiales de construcción y destrucción de objetos. En concreto, cada clase tiene dos funciones miembro especiales denominadas constructor y destructor. &lt;br /&gt;
&lt;br /&gt;
*[[Constructor (C++)|Constructor]] -&amp;amp;gt; Función miembro que es automáticamente invocada cada vez que se define un objeto, su objetivo es la inicialización del mismo. Toma el mismo nombre que la clase, puede recibir parámetros y podemos tener varios constructores definidos. &lt;br /&gt;
*[[Destructor|Destructor]] -&amp;amp;gt; Función miembro invocada automáticamente cada vez que se destruye un objeto. Su objetivo es realizar operaciones como liberación de memoria, cerrar ficheros abiertos, etc. Toma el mismo nombre de la clase comenzado primero por el carácter &amp;quot;~&amp;quot;, no toma parámetros y no admite la sobrecarga (sólo puede existir uno en cada clase).&lt;br /&gt;
&lt;br /&gt;
En muchos casos, para las clases mas sencillas, podemos encontrar clases que no tiene constructor o destructor, ó ninguno de los dos. En C++, siempre existen constructores y destructores por defecto que realizan una inicialización/liberación estándar.&lt;br /&gt;
&lt;br /&gt;
== Acerca de Intérprete y compiladores  ==&lt;br /&gt;
&lt;br /&gt;
Antes, mencionar que tanto C como C++ son lenguajes compilados, y no interpretados. Esta diferencia es muy importante, ya que afecta mucho a muchos aspectos relacionados con la ejecución del programa. En un lenguaje interpretado, el programa está escrito en forma de texto, es el propio programa fuente. Este programa fuente es procesado por un programa externo, el intérprete, que traduce el programa, instrucción a instrucción, al tiempo que lo ejecuta. En los lenguajes interpretados no existen programas ejecutables directamente por el ordenador. El intérprete traduce, en tiempo real, cada línea del programa fuente, cada vez que se quiere ejecutar el programa. El los lenguajes compilados el proceso de traducción sólo se hace una vez. El programa compilador toma como entrada el código fuente del programa, y da como salida un fichero que puede ser ejecutado por el ordenador directamente. Una vez compilado, el programa ejecutable es autónomo, y ya no es necesario disponer del programa original ni del compilador para ejecutarlo. Cada opción tiene sus ventajas e inconvenientes, y algunas características que son consideradas una ventaja, pueden ser un inconveniente en ciertas circunstancias, y viceversa. &lt;br /&gt;
&lt;br /&gt;
*Los lenguajes interpretados son fácilmente modificables, ya que necesitamos tener el el código fuente disponible en el ordenador. En los compilados, estos ficheros no son necesarios, una vez compilados. &lt;br /&gt;
*Los lenguajes interpretados necesitan un programa externo, llamado intérprete o a veces máquina virtual, o framework. Este programa actua como intermediario entre el fuente y el sistema operativo. En los compilados ese papel lo desempeña el compilador, pero al contrario que con el intérprete, una vez ha hecho su trabajo, no es necesario que esté presente para ejecutar el programa. &lt;br /&gt;
*Estas dos características, lógicamente, hacen que los programas compilados requieran menos espacio de memoria que los interpretados (si contamos el espacio usado por el intérprete), y en general, los compilados son más rápidos, ya que sólo se compilan una vez, y el tiempo dedicado a esa tarea no se suma al de ejecución.&lt;br /&gt;
&lt;br /&gt;
Entre los lenguajes interpretados están: [[BASIC|BASIC]] (Código de instrucciones de propósito general para principiantes), Java, [[PHP|PHP]]. Muchos lenguajes de script, etc. Entre los lenguajes compilados están: C, C++, Pascal. &lt;br /&gt;
&lt;br /&gt;
== Qué se puede hacer con C++  ==&lt;br /&gt;
&lt;br /&gt;
¿Qué clase de programas y aplicaciones se pueden crear usando C y C++? La respuesta es muy sencilla: TODOS. Tanto C como C++ son lenguajes de programación de propósito general. Todo puede programarse con ellos, desde sistemas operativos y compiladores hasta aplicaciones de bases de datos y procesadores de texto, pasando por juegos, aplicaciones a medida, etc. &lt;br /&gt;
&lt;br /&gt;
=== Un ejemplo de código  ===&lt;br /&gt;
&lt;br /&gt;
Este es el clásico programa hola mundo, la idea está centrada en el nacimiento de un nuevo programa de manos de su creador. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;Hola mundo&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ¿Qué se ha hecho en C o en C++?  ==&lt;br /&gt;
&lt;br /&gt;
=== Sistemas Operativos y otros programas ===&lt;br /&gt;
&lt;br /&gt;
*Así como Unix el antecesor de este sistema operativo, [[GNU/Linux]] -a menudo denominado tan sólo como [[Linux]], que es el nombre del núcleo del SO- hace uso de un buen número de lenguajes de programación en sus distintos componentes. ¿Cuáles son esos lenguajes? Cada tipo de recurso parece tener ciertas preferencias, y es que hay lenguajes más adecuados para unas cosas. Obviamente el lenguaje de programación C sigue siendo la base, pero hay mucho más implicados. &lt;br /&gt;
*Kernel y drivers de dispositivos: Tanto los drivers como el kernel funcionan en un nivel realmente bajo de operaciones en el ordenador. Para escribir el kernel del sistema operativo y acceder a las propiedades del hardware tales como los ciclos de la memoria, buses de entrada/salida, etc., se necesita un lenguaje que pueda comunicarse con el hardware con potencia. El kernel Linux hace uso del lenguaje C (aunque en realidad no se trate de un lenguaje de bajo nivel) con una pequeña parte en lenguaje ensamblador. &lt;br /&gt;
&lt;br /&gt;
*Librerías y utilidades: Las librerías y utilidades básicas del sistema tales como mkdir, chmod, chown, head, tail, chroot, uptime, users también están escritas en lenguaje C.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Gestores de paquetes y programas de configuración: Los gestores de paquetes tales como yum, apt, dpkg, etcétera, también están escritos en C, que como veis es la estrella absoluta de los componentes &amp;quot;base&amp;quot; de un sistema [[GNU/Linux]].&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Entornos de Escritorio y gestores de ventanas: La mayoría de gente usa un entorno de escritorio, y es que a día de hoy poco queda sólo en interfaz de línea de comandos. Los gestores de ventanas tales como metacity, kwin están desarrollados en C y requieren gcc para ser compilados. El entorno de escritorio, iconos, ventanas, barras de herramientas, etc, están basados en librerías específicas (Qt para KDE, GTK+ para GNOME) y hacen uso del lenguaje mayoritario, C.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
*Aplicaciones gráficas de usuario: Este es el punto donde entran en juego una gran cantidad de lenguajes de programación, dado que básicamente es la capa más alta. Tenemos una gran variedad: C, Python, Java, Perl y otros. Hay librerías GTK+, Tcl/Tk, Qt que son un frontend gráfico a tareas que corren por detrás en línea de comando.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*El Sistema operativo [[Windows]] está hecho básicamente en C, C tiene la ventaja de que puede escalarse con ensamblador, lo cual es buena opción para optimizar ciertos módulos.&lt;br /&gt;
&lt;br /&gt;
Las versiones anteriores de Windows estaban hechas en Basic (Basic NO visual Basic) que es un lenguaje de bajo nivel de hace unos cuantos años ya. Es un lenguaje que se usa mucho en la electrónica aun. &lt;br /&gt;
&lt;br /&gt;
*Actualmente Windows 7 Mac os x Leopard y [[Linux]] usan mas de una Tecnología ya se empezó a usar [[Lenguaje de Programación C Sharp|c#]] c++ y hasta java en el caso de linux se usa phytom c y tbn ensambladores y demás cosas, y Mac siempre basado en Unix con compilación en C++ para los últimos Sistemas Operativos.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
*[[Ciencia de la Información]]&lt;br /&gt;
*[[Puntero (C++)]]&lt;br /&gt;
*[[Constructor (C++)]]&lt;br /&gt;
*[[Ficheros en C++]]&lt;br /&gt;
*[[Programación de Computadoras]]&lt;br /&gt;
*[[Programación Orientada a Objetos]]&lt;br /&gt;
*[[Lenguaje de Programación C Sharp|Programación C Sharp]]&lt;br /&gt;
*[[Historia del Lenguaje C]]&lt;br /&gt;
*[[Code_Blocks]]&lt;br /&gt;
&lt;br /&gt;
== Fuentes  ==&lt;br /&gt;
*[http://mat45.etsii.upm.es/ayudainf/aprendainf/Cpp/manualcpp.pdf Manual C++ Manual completo de C++]&lt;br /&gt;
*[http://mat21.etsii.upm.es/ayudainf/aprendainf/Cpp/manualcpp.pdf Manual C++]&lt;br /&gt;
*[http://www.monografias.com/trabajos5/visualcurso/visualcurso.shtml Curso Visual]&lt;br /&gt;
*[http://www.elchatcubano.com Ejemplos básicos de C++]&lt;br /&gt;
*[http://www.zator.com/Cpp/E1_2.htm C++]&lt;br /&gt;
*[http://es.wikipedia.org/wiki/C%2B%2B C++ en Wikipedia]&lt;br /&gt;
*[http://www.programacionfacil.com/cpp:informacion_y_conocimiento C++ en ProgramacionFacil.com]&lt;br /&gt;
*[http://www.somoslibres.org/modules.php?name=News&amp;amp;file=article&amp;amp;sid=2708 C++ en SomosLibres.org]&lt;br /&gt;
*[http://www.psicofxp.com/forums/programacion.313/374200-c-y-sistemas-operativos.html El C++ y los Sistemas Operativos]&lt;br /&gt;
*[http://www.ciberluna.com C++ como si estuvieras en primero]&lt;br /&gt;
*[http://es.kioskea.net/forum/affich-101630-lenguaje-en-que-fue-escrito-windows Windows está escrito en C++]&lt;br /&gt;
&lt;br /&gt;
[[Category:Programación]][[Category:Informática]]&lt;br /&gt;
[[Category:Lenguajes_de_programación_orientada_a_objetos]]&lt;br /&gt;
[[Category:Lenguajes_de_programación]]&lt;/div&gt;</summary>
		<author><name>Oscar2017</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Programaci%C3%B3n&amp;diff=2813467</id>
		<title>Programación</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Programaci%C3%B3n&amp;diff=2813467"/>
		<updated>2017-02-21T03:40:37Z</updated>

		<summary type="html">&lt;p&gt;Oscar2017: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''{{Definición|Nombre=Programación |imagen=|concepto=Programación es la acción y efecto de programar. }}'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Programación '''es la acción y efecto de programar. Este verbo tiene varios usos: se refiere a idear y ordenar las acciones que se realizarán en el marco de un proyecto; al anuncio de las partes que componen un acto o espectáculo; a la preparación de máquinas para cumplan con una cierta tarea en un momento determinado; a la elaboración de programas para la resolución de problemas mediante computadoras; y a la preparación de los datos necesarios para obtener una solución de un problema&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
En la actualidad, la noción de programación se encuentra muy asociada a la programación en informática. Este es el proceso por el cual un programador escribe, en un lenguaje de programación, el código fuente de un software. Este código le indicará al programa informático qué tiene que hacer y cómo realizarlo.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Para el desarrollo de programas de cierta envergadura o complejos, con ciertas garantías de calidad, es conveniente seguir alguno de los [[Ingeniería de software|modelos de desarrollo de software]] existentes, en donde la programación es sólo una de las etapas del proceso de desarrollo de software. Los modelos de desarrollo de software los aborda una disciplina específica del campo de la informática: la [[Ingeniería de software|Ingeniería del software]]. &lt;br /&gt;
&lt;br /&gt;
== Historia  ==&lt;br /&gt;
&lt;br /&gt;
Para que la computadora entienda las instrucciones dadas debe usarse un [[Lenguaje de programación|lenguaje]] específico conocido como [[Código máquina]], el cual comprende fácilmente, pero que lo hace excesivamente complicado para las personas. De hecho sólo consiste en cadenas interminables de números 1 y 0. ([[Sistema de números Binario]]) &lt;br /&gt;
&lt;br /&gt;
Para facilitar el trabajo, los primeros operadores de computadoras decidieron reemplazar los 1 y 0 por palabras o letras provenientes del [[Idioma inglés|inglés]]; éste se conoce como [[Lenguaje ensamblador]]. Por ejemplo, para sumar se usa la letra A de la palabra inglesa ''add'' (sumar). En realidad escribir en lenguaje ensamblador es básicamente igual que hacerlo en lenguaje máquina, pero las letras y palabras son más fáciles de recordar y entender que los números. &lt;br /&gt;
&lt;br /&gt;
A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método más adecuado para programarlas. Entonces, se crearon los [[Lenguaje de alto nivel|lenguajes de alto nivel]]. Mientras que una tarea tan sencilla como sumar dos números puede necesitar varias instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará con sólo una. &lt;br /&gt;
&lt;br /&gt;
Una vez que se termina de escribir un programa en ensamblador o en un lenguaje de alto nivel es necesario compilarlo, es decir, traducirlo a lenguaje máquina. &lt;br /&gt;
&lt;br /&gt;
== Léxico y programación  ==&lt;br /&gt;
&lt;br /&gt;
Programar es más sencillo que aprender una lengua. La programación se rige por unas reglas que se asemejan con ciertas diferencias, a las de una lengua natural. La particularidad estriba en que las reglas de programación tienen menor ambigüedad. &lt;br /&gt;
&lt;br /&gt;
En los [[Lenguajes de programación]] de alto nivel se distinguen diversos elementos entre los que se incluyen el léxico propio del lenguaje y las reglas semánticas y sintácticas. &lt;br /&gt;
&lt;br /&gt;
== Programas y algoritmos  ==&lt;br /&gt;
&lt;br /&gt;
Un [[Algoritmo]] es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Un programa normalmente implementa (traduce a un lenguaje de programación concreto) un algoritmo. Nótese que es la secuencia de instrucciones en sí (la ejecución) la que debe ser finita, no el número de pasos realizados. &lt;br /&gt;
&lt;br /&gt;
Los programas suelen subdividirse en partes menores (módulos), de modo que la complejidad algorítmica de cada una de las partes sea menor que la del programa completo, lo cual ayuda al desarrollo del programa. &lt;br /&gt;
&lt;br /&gt;
Según [[Niklaus Wirth]], un [[programa]] está formado por [[Algoritmo]]s y [[Estructura de datos]]. &lt;br /&gt;
&lt;br /&gt;
Se han propuesto diversas técnicas de programación cuyo objetivo es mejorar tanto el proceso de creación de software como su mantenimiento. Entre ellas, se pueden mencionar las siguientes: &lt;br /&gt;
&lt;br /&gt;
*[[Programación estructurada]] &lt;br /&gt;
*[[Programación Modular]] &lt;br /&gt;
*[http://www.ecured.cu/index.php/Poo Programación Orientada a Objetos (POO)] &lt;br /&gt;
*[[Programación Declarativa]]&lt;br /&gt;
&lt;br /&gt;
== Compilación  ==&lt;br /&gt;
&lt;br /&gt;
El programa escrito en un [[Lenguaje de programación]] (comprensible por el ser humano, aunque se suelen corresponder con lenguajes formales descritos por gramáticas independientes del contexto) no puede ejecutarlo directamente una computadora. La opción más común es compilar el programa obteniendo un módulo objeto, aunque también puede ejecutarse a través de un [[Intérprete informático]]. &lt;br /&gt;
&lt;br /&gt;
El código fuente del [[Programa (computación)|programa]] se debe someter a un [[Proceso de traducción de programas|proceso de traducción]] para convertirse en lenguaje máquina, interpretable por el [[Microprocesador|procesador]]. A este proceso se le llama ''[[Compilación]]''. &lt;br /&gt;
&lt;br /&gt;
Normalmente la creación de un programa [[Ejecutable]] (un típico.exe para [[Microsoft Windows]] o [[DOS]]) conlleva dos pasos. El primer paso se llama compilación (propiamente dicho) y traduce el código fuente escrito en un [[Lenguaje de programación]] almacenado en un archivo a código en bajo nivel (normalmente en código objeto, no directamente a lenguaje máquina). El segundo paso se llama ''[[Enlazador|enlazado]]'' en el cual se enlaza el código de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se añade el código de las funciones que hay en las bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo así finalmente el [[Código objeto]] a [[Código máquina]], y generando un módulo ejecutable. &lt;br /&gt;
&lt;br /&gt;
Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de compilación en archivos objetos (un típico.obj para Microsoft Windows, DOS o para [[Unix]]); para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de compilación se almacena sólo temporalmente. Un programa podría tener partes escritas en varios lenguajes (por ejemplo [[C]], [[C++]] y [[Asm]]), que se podrían compilar de forma independiente y luego enlazar juntas para formar un único módulo [[Ejecutable]]. &lt;br /&gt;
&lt;br /&gt;
Con el tiempo se ha lanzado un lenguaje de programación que hace funcionar las páginas web y hablo del lenguaje de diseño [[HTML]], con este se diseñan las páginas y se les dá un poco de estilo.&lt;br /&gt;
&lt;br /&gt;
== Programación e [[Ingeniería de Software|ingeniería del software]]  ==&lt;br /&gt;
&lt;br /&gt;
Existe una tendencia a identificar el proceso de creación de un programa informático con la programación, que es cierta cuando se trata de programas pequeños para uso personal, y que dista de la realidad cuando se trata de grandes proyectos. &lt;br /&gt;
&lt;br /&gt;
El proceso de creación de software, desde el punto de vista de la [[Ingeniería]], incluye los siguientes pasos: &lt;br /&gt;
&lt;br /&gt;
#Reconocer la necesidad de un programa para solucionar un problema o identificar la posibilidad de automatización de una tarea. &lt;br /&gt;
#Recoger los requisitos del programa. Debe quedar claro qué es lo que debe hacer el programa y para qué se necesita. &lt;br /&gt;
#Realizar el análisis de los requisitos del programa. Debe quedar claro cómo debe realizar el programa las cosas que debe hacer. Las pruebas que comprueben la validez del programa se pueden especificar en esta fase. &lt;br /&gt;
#Diseñar la arquitectura del programa. Se debe descomponer el programa en partes de complejidad abordable. &lt;br /&gt;
#Implementar el programa. Consiste en realizar un diseño detallado, especificando completamente todo el funcionamiento del programa, tras lo cual la codificación debería resultar inmediata. &lt;br /&gt;
#Implantar (instalar) el programa. Consiste en poner el programa en funcionamiento junto con los componentes que pueda necesitar (bases de datos, redes de comunicaciones, etc.).&lt;br /&gt;
&lt;br /&gt;
La ingeniería del software se centra en los pasos de planificación y diseño del programa, mientras que antiguamente (programación artesanal) la realización de un programa consistía únicamente en escribir el código. &lt;br /&gt;
&lt;br /&gt;
== Referencias históricas  ==&lt;br /&gt;
&lt;br /&gt;
La primera programadora de computadora conocida fue [[Ada Lovelace]], hija de Anabella Milbanke Byron y [[Lord Byron]]. Anabella introdujo en las matemáticas a Ada quien, después de conocer a [[Charles Babbage]], tradujo y amplió una descripción de su máquina analítica. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título de primera programadora de computadoras del mundo. El nombre del [[Lenguaje de programación Ada]] fue escogido como homenaje a esta programadora. &lt;br /&gt;
&lt;br /&gt;
No olvidemos que este proceso está aplicado a todos los métodos científicos que actualmente se practican. &lt;br /&gt;
&lt;br /&gt;
== Objetivos de la programación  ==&lt;br /&gt;
&lt;br /&gt;
La programación debe perseguir la obtención de programas de calidad. Para ello se establece una serie de factores que determinan la calidad de un programa. Algunos de los factores de calidad más importantes son los siguientes: &lt;br /&gt;
&lt;br /&gt;
*''Corrección''. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qué debe hacer el programa antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace.&lt;br /&gt;
&lt;br /&gt;
*''Claridad''. Es muy importante que el programa sea lo más claro y legible posible, para facilitar así su desarrollo y posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así como cuidar el estilo en la edición; de esta forma se ve facilitado el trabajo del [[Programador]], tanto en la fase de creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es aún más necesaria para que otros programadores puedan continuar el trabajo fácilmente. Algunos programadores llegan incluso a utilizar [[Arte ASCII]] para delimitar secciones de código. Otros, por diversión o para impedir un análisis cómodo a otros programadores, recurren al uso de [[Código ofuscado]].&lt;br /&gt;
&lt;br /&gt;
*''Eficiencia''. Se trata de que el programa, además de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza. Normalmente, al hablar de eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que también pueden ser de consideración al obtener la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, tráfico de red que genera, etc.).&lt;br /&gt;
&lt;br /&gt;
*''Portabilidad''. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquélla en la que se elaboró. La portabilidad es una característica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas [[GNU/Linux]] ejecutarse también en la familia de sistemas operativos [[Windows]]. Esto permite que el programa pueda llegar a más usuarios más fácilmente.&lt;br /&gt;
&lt;br /&gt;
==Véase además==&lt;br /&gt;
*[[Programación, lenguajes y paradigmas]].&lt;br /&gt;
&lt;br /&gt;
== Fuentes  ==&lt;br /&gt;
&lt;br /&gt;
[http://snippets-tricks.org/ Snippets Tricks ~ Para personas que escriben código] &lt;br /&gt;
[http://aulaclic.com/programación Ejemplos de programación] &lt;br /&gt;
[http://humanos.uci.cu Consejos de programación] &lt;br /&gt;
[http://firefoxmania.uci.cu Consejos de programación web] &lt;br /&gt;
[http://postgres.uci.cu Consejos de programación en postgres] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Oscar2017</name></author>
		
	</entry>
	<entry>
		<id>https://www.ecured.cu/index.php?title=Java_(lenguaje_de_programaci%C3%B3n)&amp;diff=2813466</id>
		<title>Java (lenguaje de programación)</title>
		<link rel="alternate" type="text/html" href="https://www.ecured.cu/index.php?title=Java_(lenguaje_de_programaci%C3%B3n)&amp;diff=2813466"/>
		<updated>2017-02-21T03:34:37Z</updated>

		<summary type="html">&lt;p&gt;Oscar2017: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Otros usos|este=el lenguaje de programación Java|Java (desambiguación)}} {{Ficha Software&lt;br /&gt;
|nombre= Java&lt;br /&gt;
|familia=&lt;br /&gt;
|imagen=Java_orange.png&lt;br /&gt;
|tamaño=&lt;br /&gt;
|descripción=Lenguaje de programación orientado a objetos&lt;br /&gt;
|imagen2=&lt;br /&gt;
|tamaño2=&lt;br /&gt;
|descripción2=&lt;br /&gt;
|creador=[[Sun Microsystems]]&lt;br /&gt;
|desarrollador=&lt;br /&gt;
|diseñador=&lt;br /&gt;
|modelo de desarrollo=&lt;br /&gt;
|fecha de creación=[[1991]]&lt;br /&gt;
|lanzamiento inicial=&lt;br /&gt;
|versiones=&lt;br /&gt;
|última versión estable=&lt;br /&gt;
|núcleo=&lt;br /&gt;
|tipo de núcleo=&lt;br /&gt;
|plataformas soportadas=&lt;br /&gt;
|género=&lt;br /&gt;
|sistemas operativos=&lt;br /&gt;
|idioma=&lt;br /&gt;
|licencia=&lt;br /&gt;
|premios=&lt;br /&gt;
|web=[http://www.java.com/es/ Java en Español]&lt;br /&gt;
}} &amp;lt;div align=&amp;quot;justify&amp;quot;&amp;gt;&lt;br /&gt;
'''Java''' es un lenguaje de programación orientado a objetos desarrollado por [[Sun Microsystems]] a principios de los años 90. El lenguaje en sí mismo toma mucha de su sintaxis de [[Lenguaje de Programación C]] y [[C++]], pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria. &lt;br /&gt;
&lt;br /&gt;
Las aplicaciones Java están típicamente compiladas en un ''[[Bytecode|bytecode]]'', aunque la compilación en código máquina nativo también es posible. En el tiempo de ejecución, el ''bytecode'' es normalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por [[Hardware|hardware]] del ''bytecode'' por un procesador Java también es posible. &lt;br /&gt;
&lt;br /&gt;
La implementación original y de referencia del compilador, la máquina virtual y las bibliotecas de clases de Java fueron desarrollados por Sun Microsystems en [[1995]]. Desde entonces, Sun ha controlado las especificaciones, el desarrollo y evolución del lenguaje a través del [[Java Community Process]], si bien otros han desarrollado también implementaciones alternativas de estas tecnologías de Sun, algunas incluso bajo licencias de [[Software libre|software libre]]. &lt;br /&gt;
&lt;br /&gt;
Entre noviembre de [[2006]] y mayo de [[2007]], Sun Microsystems liberó la mayor parte de sus tecnologías Java bajo la licencia [[GNU GPL]], de acuerdo con las especificaciones del Java Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de Sun que se requiere para ejecutar los programas Java aún no lo es). &lt;br /&gt;
&lt;br /&gt;
== Historia  ==&lt;br /&gt;
&lt;br /&gt;
[[Image:James gosling.jpg|thumb|right|300px]]La tecnología Java se creó como una herramienta de programación para ser usada en un proyecto de [[Set-top box|set-top-box]] en una pequeña operación denominada ''the Green Project'' en Sun Microsystems en el año [[1991]]. El equipo (''Green Team''), compuesto por trece personas y dirigido por [[James Gosling]], trabajó durante 18 meses en Sand Hill Road en Menlo Park en su desarrollo. &lt;br /&gt;
&lt;br /&gt;
El lenguaje se denominó inicialmente ''Oak'' (por un roble que había fuera de la oficina de Gosling), luego pasó a denominarse ''Green'' tras descubrir que ''Oak'' era ya una marca comercial registrada para adaptadores de tarjetas gráficas y finalmente se renombró a ''Java''. &lt;br /&gt;
&lt;br /&gt;
El término Java fue acuñado en una cafetería frecuentada por algunos de los miembros del equipo. Pero no está claro si es un acrónimo o no, aunque algunas fuentes señalan que podría tratarse de las iniciales de sus creadores: &amp;lt;cite&amp;gt;'''J'''ames Gosling, '''A'''rthur '''V'''an Hoff, y '''A'''ndy Bechtolsheim&amp;lt;/cite&amp;gt;. Otros abogan por el siguiente acrónimo, &amp;lt;cite&amp;gt;'''J'''ust '''A'''nother '''V'''ague '''A'''cronym&amp;lt;/cite&amp;gt; (&amp;quot;sólo otro acrónimo ambiguo más&amp;quot;). La hipótesis que más fuerza tiene es la que Java debe su nombre a un tipo de café disponible en la cafetería cercana, de ahí que el icono de java sea una taza de cafe caliente. Un pequeño signo que da fuerza a esta teoría es que los 4 primeros bytes (el ''número mágico'') de los archivos .class que genera el compilador, son en hexadecimal, 0xCAFEBABE. Otros simplemente dicen que el nombre fue sacado al parecer de una lista aleatoria de palabras. &lt;br /&gt;
&lt;br /&gt;
Los objetivos de Gosling eran implementar una máquina virtual y un lenguaje con una estructura y sintaxis similar a C++. Entre junio y julio de 1994, tras una sesión maratoniana de tres días entre John Gaga, James Gosling, Joy Naughton, Wayne Rosing y Eric Schmidt, el equipo reorientó la plataforma hacia la Web. Sintieron que la llegada del navegador web [[Mosaic]], propiciaría que Internet se convirtiese en un medio interactivo, como el que pensaban era la televisión por cable. Naughton creó entonces un prototipo de navegador, WebRunner, que más tarde sería conocido como [[HotJava]]. &lt;br /&gt;
&lt;br /&gt;
[[Image:Hotjava.gif‎|thumb|left|300px]]En 1994, se les hizo una demostración de HotJava y la plataforma Java a los ejecutivos de Sun. Java 1.0a pudo descargarse por primera vez en 1994, pero hubo que esperar al 23 de mayo de 1995, durante las conferencias de SunWorld, a que vieran la luz pública Java y HotJava, el navegador Web. El acontecimiento fue anunciado por John Gage, el Director Científico de Sun Microsystems. El acto estuvo acompañado por una pequeña sorpresa adicional, el anuncio por parte de Marc Andreessen, Vicepresidente Ejecutivo de Netscape, de que Java sería soportado en sus navegadores. El 9 de enero del año siguiente, 1996, Sun fundó el grupo empresarial JavaSoft para que se encargase del desarrollo tecnológico. &lt;br /&gt;
&lt;br /&gt;
Dos semanas más tarde la primera versión de Java fue publicada. &lt;br /&gt;
&lt;br /&gt;
La promesa inicial de Gosling era ''Write Once, Run Anywhere'' (Escríbelo una vez, ejecútalo en cualquier lugar), proporcionando un lenguaje independiente de la plataforma y un entorno de ejecución (la [[Máquina virtual Java|JVM]]) ligero y gratuito para las plataformas más populares de forma que los binarios (bytecode) de las aplicaciones Java pudiesen ejecutarse en cualquier plataforma. &lt;br /&gt;
&lt;br /&gt;
El entorno de ejecución era relativamente seguro y los principales navegadores web pronto incorporaron la posibilidad de ejecutar applets Java incrustadas en las páginas web. &lt;br /&gt;
&lt;br /&gt;
Java ha experimentado numerosos cambios desde la versión primigenia, [[JDK]] 1.0, así como un enorme incremento en el número de clases y paquetes que componen la biblioteca estándar. &lt;br /&gt;
&lt;br /&gt;
Desde [[Java SE|J2SE]] 1.4, la evolución del lenguaje ha sido regulada por el JCP ([[Java Community Process]]), que usa ''Java Specification Requests'' (JSRs) para proponer y especificar cambios en la plataforma Java. El lenguaje en sí mismo está especificado en la ''Java Language Specification'' (JLS), o Especificación del Lenguaje Java. Los cambios en los JLS son gestionados en [http://www.jcp.org/en/jsr/detail?id=63 JSR 901]. &lt;br /&gt;
&lt;br /&gt;
*'''JDK 1.0''' ([[23 de enero]] de [[1996]]) — Primer lanzamiento: [http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.html comunicado de prensa]&lt;br /&gt;
&lt;br /&gt;
*'''JDK 1.1''' ([[19 de febrero]] de [[1997]]) — Principales adiciones incluidas: [http://www.sun.com/smi/Press/sunflash/1997-02/sunflash.970219.0001.html comunicado de prensa] &lt;br /&gt;
**una reestructuración intensiva del modelo de eventos [[AWT]] (Abstract Windowing Toolkit) &lt;br /&gt;
**clases internas (inner classes) &lt;br /&gt;
**[[JavaBeans]] &lt;br /&gt;
**[[JDBC]] (Java Database Connectivity), para la integración de bases de datos &lt;br /&gt;
**[[RMI]] (Remote Method Invocation)&lt;br /&gt;
&lt;br /&gt;
*'''J2SE 1.2''' ([[8 de diciembre]] de [[1998]]) — Nombre clave ''Playground''. Esta y las siguientes versiones fueron recogidas bajo la denominación '''Java 2''' y el nombre &amp;quot;J2SE&amp;quot; (Java 2 Platform, Standard Edition), reemplazó a JDK para distinguir la plataforma base de J2EE (Java 2 Platform, Enterprise Edition) y J2ME (Java 2 Platform, Micro Edition). Otras mejoras añadidas incluían: [http://www.sun.com/smi/Press/sunflash/1998-12/sunflash.981208.9.html comunicado de prensa] &lt;br /&gt;
**la palabra reservada (keyword) &amp;lt;code&amp;gt;[[Strictfp]]&amp;lt;/code&amp;gt; &lt;br /&gt;
**[[Reflexión (informática)|reflexión en la programación]] &lt;br /&gt;
**la API gráfica ( [[Swing (biblioteca gráfica)|Swing]]) fue integrada en las clases básicas &lt;br /&gt;
**la máquina virtual (JVM) de Sun fue equipada con un [[Compilador]] [[JIT]] (Just in Time) por primera vez &lt;br /&gt;
**[[Java Plug-in]] &lt;br /&gt;
**[[Java IDL]], una implementación de IDL (Lenguaje de Descripción de [[Interfaz (Java)|Interfaz]]) para la interoperabilidad con [[CORBA]] &lt;br /&gt;
**Colecciones ([[Collection class|Collections]])&lt;br /&gt;
&lt;br /&gt;
*'''J2SE 1.3''' ([[8 de mayo]] de [[2000]]) — Nombre clave ''Kestrel''. Los cambios más notables fueron:[http://www.sun.com/smi/Press/sunflash/2000-05/sunflash.20000508.3.html comunicado de prensa] [http://java.sun.com/j2se/1.3/docs/relnotes/features.html lista completa de cambios] &lt;br /&gt;
**la inclusión de la máquina virtual de [[HotSpot]] JVM (la JVM de HotSpot fue lanzada inicialmente en abril de 1999, para la JVM de J2SE 1.2) &lt;br /&gt;
**[[RMI]] fue cambiado para que se basara en [[CORBA]] &lt;br /&gt;
**[[JavaSound]]&lt;br /&gt;
**se incluyó el [[JNDI|Java Naming and Directory Interface]] (JNDI) en el paquete de bibliotecas principales (anteriormente disponible como una extensión) &lt;br /&gt;
**[[Java Platform Debugger Architecture]] (JPDA)&lt;br /&gt;
&lt;br /&gt;
*'''J2SE 1.4''' ([[6 de febrero]] de [[2002]]) — Nombre Clave ''Merlin''. Este fue el primer lanzamiento de la plataforma Java desarrollado bajo el Proceso de la Comunidad Java como [http://www.jcp.org/en/jsr/detail?id=59 JSR 59]. Los cambios más notables fueron: [http://www.sun.com/smi/Press/sunflash/2002-02/sunflash.20020206.5.html comunicado de prensa][http://java.sun.com/j2se/1.4.2/docs/relnotes/features.html lista completa de cambios] &lt;br /&gt;
**Palabra reservada &amp;lt;code&amp;gt;assert&amp;lt;/code&amp;gt; (Especificado en [http://www.jcp.org/en/jsr/detail?id=41 JSR 41].) &lt;br /&gt;
**[[Expresiones regulares]] modeladas al estilo de las expresiones regulares [[Perl programming language|Perl]] &lt;br /&gt;
**[[Encadenación de excepciones]] Permite a una excepción encapsular la excepción de bajo nivel original. &lt;br /&gt;
**non-blocking NIO ([[New I/O|New Input/Output]]) (Especificado en [http://www.jcp.org/en/jsr/detail?id=51 JSR 51].) &lt;br /&gt;
**Logging API (Specified in [http://www.jcp.org/en/jsr/detail?id=47 JSR 47].) &lt;br /&gt;
**API I/O para la lectura y escritura de imágenes en formatos como [[JPEG]] o [[PNG]] &lt;br /&gt;
**Parser [[XML]] integrado y procesador [[XSLT]] ([[JAXP]]) (Especificado en [http://www.jcp.org/en/jsr/detail?id=5 JSR 5] y [http://www.jcp.org/en/jsr/detail?id=63 JSR 63].) &lt;br /&gt;
**Seguridad integrada y extensiones criptográficas (JCE, [[JSSE]], [[JAAS]]) &lt;br /&gt;
**[[Java Web Start]] incluido (El primer lanzamiento ocurrió en marzo de 2001 para J2SE 1.3) (Especificado en [http://www.jcp.org/en/jsr/detail?id=56 JSR 56].)&lt;br /&gt;
&lt;br /&gt;
*'''J2SE 5.0''' ([[30 de septiembre]] de [[2004]]) — Nombre clave: ''Tiger''. (Originalmente numerado 1.5, esta notación aún es usada internamente.[http://java.sun.com/j2se/1.5.0/docs/relnotes/version-5.0.html]) Desarrollado bajo [http://www.jcp.org/en/jsr/detail?id=176 JSR 176], Tiger añadió un número significativo de nuevas características [http://www.sun.com/smi/Press/sunflash/2004-09/sunflash.20040930.1.html comunicado de prensa] &lt;br /&gt;
**[[Programación genérica|Plantillas (genéricos)]] — provee [[Conversion de tipos (type safety)]] en tiempo de compilación para colecciones y elimina la necesidad de la mayoría de [[Conversión de tipos|conversion de tipos (type casting)]]. (Especificado por [http://www.jcp.org/en/jsr/detail?id=14 JSR 14].) &lt;br /&gt;
**[[Metadatos]] — también llamados [[Anotacione]]s, permite a estructuras del lenguaje como las clases o los métodos, ser etiquetados con datos adicionales, que puedan ser procesados posteriormente por utilidades de proceso de metadatos. (Especificado por [http://www.jcp.org/en/jsr/detail?id=175 JSR 175].) &lt;br /&gt;
**[[Autoboxing]]/unboxing — Conversiones automáticas entre [[Tipo primitivo|tipos primitivos]] (Como los &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;) y [[Clases de envoltura primitivas]] (Como {{Javadoc:SE|java/lang|Integer}}). (Especificado por [http://www.jcp.org/en/jsr/detail?id=201 JSR 201].) &lt;br /&gt;
**[[Enumeración|Enumeraciones]] — la palabra reservada &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; crea una [[Type safety|typesafe]], lista ordenada de valores (como &amp;lt;code&amp;gt;Dia.LUNES&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Dia.MARTES&amp;lt;/code&amp;gt;, etc.). Anteriormente, esto solo podía ser llevado a cabo por constantes enteras o clases construidas manualmente (enum pattern). (Especificado por [http://www.jcp.org/en/jsr/detail?id=201 JSR 201].) &lt;br /&gt;
**Varargs (número de argumentos variable) — El último parámetro de un método puede ser declarado con el nombre del tipo seguido por tres puntos (e.g. &amp;lt;code&amp;gt;void drawtext(String... lines)&amp;lt;/code&amp;gt;). En la llamada al método, puede usarse cualquier número de parámetros de ese tipo, que serán almacenados en un array para pasarlos al método. &lt;br /&gt;
**[[Bucle]] &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; mejorado — La sintaxis para el bucle &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; se ha extendido con una sintaxis especial para iterar sobre cada miembro de un array o sobre cualquier clase que implemente Iterable, como la clase estándar Collection, de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 void displayWidgets (Iterable&amp;lt;Widget&amp;gt; widgets) {&lt;br /&gt;
     for (Widget w : widgets) {&lt;br /&gt;
         w.display();&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Este ejemplo itera sobre el objeto &amp;lt;code&amp;gt;Iterable&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;widgets&amp;lt;/code&amp;gt;, asignando, en orden, cada uno de los elementos a la variable &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;, y llamando al método &amp;lt;code&amp;gt;display()&amp;lt;/code&amp;gt; de cada uno de ellos. (Especificado por JSR 201.) |} &lt;br /&gt;
&lt;br /&gt;
*'''Java SE 6''' ([[11 de diciembre]] de [[2006]]) — Nombre clave [https://mustang.dev.java.net/ ''Mustang'']. Estuvo en desarrollo bajo la [http://www.jcp.org/en/jsr/detail?id=270 JSR 270]. En esta versión, Sun cambió el nombre &amp;quot;J2SE&amp;quot; por '''Java SE''' y eliminó el &amp;quot;.0&amp;quot; del número de versión.[http://www.java.com/en/about/brand/naming.jsp]. Está disponible en [http://java.sun.com/javase/6/ http://java.sun.com/javase/6/]. Los cambios más importantes introducidos en esta versión son: &lt;br /&gt;
**Incluye un nuevo marco de trabajo y APIs que hacen posible la combinación de Java con lenguajes dinámicos como PHP, Python, Ruby y JavaScript. &lt;br /&gt;
**Incluye el motor Rhino, de Mozilla, una implementación de Javascript en Java. &lt;br /&gt;
**Incluye un cliente completo de Servicios Web y soporta las últimas especificaciones para Servicios Web, como JAX-WS 2.0, JAXB 2.0, STAX y JAXP. &lt;br /&gt;
**Mejoras en la interfaz gráfica y en el rendimiento.&lt;br /&gt;
&lt;br /&gt;
*'''Java SE 7''' — Nombre clave ''Dolphin''. En el año [[2006]] aún se encontraba en las primeras etapas de planificación. Se espera que su desarrollo dé comienzo en la primavera de 2006, y se estima su lanzamiento para 2008. &lt;br /&gt;
**Soporte para XML dentro del propio lenguaje. &lt;br /&gt;
**Un nuevo concepto de superpaquete. &lt;br /&gt;
**Soporte para [[Clausura (informática)|closures]]. &lt;br /&gt;
**Introducción de anotaciones estándar para detectar fallos en el software. &lt;br /&gt;
*No oficiales: &lt;br /&gt;
**NIO2. &lt;br /&gt;
**Java Module System. &lt;br /&gt;
**Java Kernel. &lt;br /&gt;
**Nueva API para el manejo de Dias y Fechas, la cual reemplazara las antiguas clases Date y Calendar. &lt;br /&gt;
**Posibilidad de operar con clases BigDecimal usando operandos.&lt;br /&gt;
&lt;br /&gt;
Además de los cambios en el lenguaje, con el paso de los años se han efectuado muchos más cambios dramáticos en la biblioteca de clases de Java (''Java class library'') que ha crecido de unos pocos cientos de clases en JDK 1.0 hasta más de tres mil en J2SE 5.0. APIs completamente nuevas, como [[Swing (biblioteca gráfica)|Swing]] y [[Java 2D|Java2D]], han sido introducidas y muchos de los métodos y clases originales de JDK 1.0 están obsoletas. &lt;br /&gt;
&lt;br /&gt;
En el [[2005]] se calcula en 4,5 millones el número de desarrolladores y 2.500 millones de dispositivos habilitados con tecnología Java.&lt;br /&gt;
&lt;br /&gt;
== Filosofía  ==&lt;br /&gt;
&lt;br /&gt;
El lenguaje Java se creó con cinco objetivos principales: &lt;br /&gt;
&lt;br /&gt;
#Debería usar la metodología de la programación orientada a objetos. &lt;br /&gt;
#Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos. &lt;br /&gt;
#Debería incluir por defecto soporte para trabajo en red. &lt;br /&gt;
#Debería diseñarse para ejecutar código en sistemas remotos de forma segura. &lt;br /&gt;
#Debería ser fácil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C++.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la ejecución de código remoto y el soporte de red, los programadores de Java a veces recurren a extensiones como [[CORBA]] (Common Object Request Broker Architecture), [[Internet Communications Engine]] o [[OSGi]] respectivamente. &lt;br /&gt;
&lt;br /&gt;
=== Orientado a Objetos  ===&lt;br /&gt;
&lt;br /&gt;
La primera característica, [[Orientado a objetos]] (“OO”), se refiere a un método de programación y al diseño del lenguaje. Aunque hay muchas interpretaciones para OO, una primera idea es diseñar el software de forma que los distintos tipos de datos que usen estén unidos a sus operaciones. Así, los datos y el código (funciones o métodos) se combinan en entidades llamadas [[Objetos (programación orientada a objetos)|objetos]]. Un objeto puede verse como un paquete que contiene el “comportamiento” (el código) y el “estado” (datos). El principio es separar aquello que cambia de las cosas que permanecen inalterables. Frecuentemente, cambiar una estructura de datos implica un cambio en el código que opera sobre los mismos, o viceversa. Esta separación en objetos coherentes e independientes ofrece una base más estable para el diseño de un sistema software. El objetivo es hacer que grandes proyectos sean fáciles de gestionar y manejar, mejorando como consecuencia su calidad y reduciendo el número de proyectos fallidos. Otra de las grandes promesas de la programación orientada a objetos es la creación de entidades más genéricas (objetos) que permitan la reutilización del software entre proyectos, una de las premisas fundamentales de la [[Ingeniería del Software]]. Un objeto genérico “cliente”, por ejemplo, debería en teoría tener el mismo conjunto de comportamiento en diferentes proyectos, sobre todo cuando estos coinciden en cierta medida, algo que suele suceder en las grandes organizaciones. En este sentido, los objetos podrían verse como piezas reutilizables que pueden emplearse en múltiples proyectos distintos, posibilitando así a la industria del software a construir proyectos de envergadura empleando componentes ya existentes y de comprobada calidad; conduciendo esto finalmente a una reducción drástica del tiempo de desarrollo. Podemos usar como ejemplo de objeto el aluminio. Una vez definidos datos (peso, maleabilidad, etc.), y su “comportamiento” (soldar dos piezas, etc.), el objeto “aluminio” puede ser reutilizado en el campo de la construcción, del [[Automóvil|automóvil]], de la aviación, etc. &lt;br /&gt;
&lt;br /&gt;
La reutilización del software ha experimentado resultados dispares, encontrando dos dificultades principales: el diseño de objetos realmente genéricos es pobremente comprendido, y falta una metodología para la amplia comunicación de oportunidades de reutilización. Algunas comunidades de “código abierto” (open source) quieren ayudar en este problema dando medios a los desarrolladores para diseminar la información sobre el uso y versatilidad de objetos reutilizables y bibliotecas de objetos. &lt;br /&gt;
&lt;br /&gt;
=== Independencia de la plataforma  ===&lt;br /&gt;
&lt;br /&gt;
La segunda característica, la independencia de la plataforma, significa que programas escritos en el lenguaje Java pueden ejecutarse igualmente en cualquier tipo de hardware. Este es el significado de ser capaz de escribir un programa una vez y que pueda ejecutarse en cualquier dispositivo, tal como reza el axioma de Java, ‘’’write once, run everywhere’’’. &lt;br /&gt;
&lt;br /&gt;
Para ello, se compila el código fuente escrito en lenguaje Java, para generar un código conocido como “bytecode” (específicamente Java bytecode)—instrucciones máquina simplificadas específicas de la plataforma Java. Esta pieza está “a medio camino” entre el código fuente y el código máquina que entiende el dispositivo destino. El bytecode es ejecutado entonces en la máquina virtual (JVM), un programa escrito en código nativo de la plataforma destino (que es el que entiende su hardware), que interpreta y ejecuta el código. Además, se suministran bibliotecas adicionales para acceder a las características de cada dispositivo (como los gráficos, ejecución mediante hebras o threads, la interfaz de red) de forma unificada. Se debe tener presente que, aunque hay una etapa explícita de compilación, el bytecode generado es interpretado o convertido a instrucciones máquina del código nativo por el compilador JIT (Just In Time). &lt;br /&gt;
&lt;br /&gt;
Hay implementaciones del compilador de Java que convierten el código fuente directamente en código objeto nativo, como [[GCJ]]. Esto elimina la etapa intermedia donde se genera el bytecode, pero la salida de este tipo de compiladores sólo puede ejecutarse en un tipo de arquitectura. &lt;br /&gt;
&lt;br /&gt;
La licencia sobre Java de Sun insiste que todas las implementaciones sean “compatibles”. Esto dio lugar a una disputa legal entre Microsoft y Sun, cuando éste último alegó que la implementación de Microsoft no daba soporte a las interfaces RMI y JNI además de haber añadido características ‘’dependientes’’ de su plataforma. Sun demandó a Microsoft y ganó por daños y perjuicios (unos 20 millones de dólares) así como una orden judicial forzando la acatación de la licencia de Sun. Como respuesta, Microsoft no ofrece Java con su versión de sistema operativo, y en recientes versiones de Windows, su navegador Internet Explorer no admite la ejecución de applets sin un conector (o plugin) aparte. Sin embargo, Sun y otras fuentes ofrecen versiones gratuitas para distintas versiones de Windows. &lt;br /&gt;
&lt;br /&gt;
Las primeras implementaciones del lenguaje usaban una máquina virtual interpretada para conseguir la portabilidad. Sin embargo, el resultado eran programas que se ejecutaban comparativamente más lentos que aquellos escritos en C o C++. Esto hizo que Java se ganase una reputación de lento en rendimiento. Las implementaciones recientes de la JVM dan lugar a programas que se ejecutan considerablemente más rápido que las versiones antiguas, empleando diversas técnicas, aunque sigue siendo mucho más lento que otros lenguajes. &lt;br /&gt;
&lt;br /&gt;
La primera de estas técnicas es simplemente compilar directamente en código nativo como hacen los compiladores tradicionales, eliminando la etapa del bytecode. Esto da lugar a un gran rendimiento en la ejecución, pero tapa el camino a la portabilidad. Otra técnica, conocida como compilación JIT (Just In Time, o ‘’’compilación al vuelo’’’), convierte el bytecode a código nativo cuando se ejecuta la aplicación. Otras máquinas virtuales más sofisticadas usan una ‘’’recompilación dinámica’’’ en la que la VM es capaz de analizar el comportamiento del programa en ejecución y recompila y optimiza las partes críticas. La recompilación dinámica puede lograr mayor grado de optimización que la compilación tradicional (o estática), ya que puede basar su trabajo en el conocimiento que de primera mano tiene sobre el entorno de ejecución y el conjunto de clases cargadas en memoria. La compilación JIT y la recompilación dinámica permiten a los programas Java aprovechar la velocidad de ejecución del código nativo sin por ello perder la ventaja de la portabilidad en ambos. &lt;br /&gt;
&lt;br /&gt;
La portabilidad es técnicamente difícil de lograr, y el éxito de Java en ese campo ha sido dispar. Aunque es de hecho posible escribir programas para la plataforma Java que actúen de forma correcta en múltiples plataformas de distinta arquitectura, el gran número de estas con pequeños errores o inconsistencias llevan a que a veces se parodie el eslogan de Sun, &amp;quot;[[Write once, run anywhere]]&amp;quot; como &amp;quot;Write once, [[Debug]] everywhere&amp;quot; (o “Escríbelo una vez, ejecútalo en cualquier parte” por “Escríbelo una vez, depúralo en todas partes”) &lt;br /&gt;
&lt;br /&gt;
El concepto de independencia de la plataforma de Java cuenta, sin embargo, con un gran éxito en las aplicaciones en el entorno del servidor, como los Servicios Web, los Servlets, los Java Beans, así como en sistemas empotrados basados en [[OSGi]], usando entornos Java empotrados. &lt;br /&gt;
&lt;br /&gt;
=== El recolector de basura  ===&lt;br /&gt;
&lt;br /&gt;
En Java el problema de las [[Fuga de memoria|fugas de memoria]] se evita en gran medida gracias a la [[Recolección de basura]] (o ''automatic garbage collector''). El programador determina cuándo se crean los objetos y el entorno en tiempo de ejecución de Java (Java runtime) es el responsable de gestionar el ciclo de vida de los objetos. El programa, u otros objetos pueden tener localizado un objeto mediante una referencia a éste. Cuando no quedan referencias a un objeto, el recolector de basura de Java borra el objeto, liberando así la memoria que ocupaba previniendo posibles fugas (ejemplo: un objeto creado y únicamente usado dentro de un método sólo tiene entidad dentro de éste; al salir del método el objeto es eliminado). Aun así, es posible que se produzcan fugas de memoria si el código almacena referencias a objetos que ya no son necesarios—es decir, pueden aún ocurrir, pero en un nivel conceptual superior. En definitiva, el recolector de basura de Java permite una fácil creación y eliminación de objetos, mayor seguridad y puede que más rápida que en C++ &lt;br /&gt;
&lt;br /&gt;
== Sintaxis  ==&lt;br /&gt;
&lt;br /&gt;
La sintaxis de Java se deriva en gran medida de [[C++]]. Pero a diferencia de éste, que combina la sintaxis para programación genérica, estructurada y orientada a objetos, Java fue construido desde el principio para ser completamente orientado a objetos. Todo en Java es un objeto (salvo algunas excepciones), y todo en Java reside en alguna clase (recordemos que una clase es un molde a partir del cual pueden crearse varios objetos). &lt;br /&gt;
&lt;br /&gt;
=== Hola Mundo  ===&lt;br /&gt;
&lt;br /&gt;
==== Aplicaciones autónomas  ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Hola.java&lt;br /&gt;
import java.io*;&lt;br /&gt;
public class Hola &lt;br /&gt;
{&lt;br /&gt;
    public static void main(String[] args)throws IOException {&lt;br /&gt;
        System.out.println(&amp;quot;¡Hola, mundo!&amp;quot;); &lt;br /&gt;
    } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Este ejemplo necesita una pequeña explicación. &lt;br /&gt;
&lt;br /&gt;
*Todo en Java está dentro de una clase, incluyendo programas autónomos. &lt;br /&gt;
*El código fuente se guarda en archivos con el mismo nombre que la clase que contienen y con extensión “.java”. Una clase (&amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;) declarada pública (&amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;) debe seguir este convenio. En el ejemplo anterior, la clase es &amp;lt;code&amp;gt;Hola&amp;lt;/code&amp;gt;, por lo que el código fuente debe guardarse en el fichero “Hola.java” &lt;br /&gt;
*El compilador genera un archivo de clase (con extensión “.class”) por cada una de las clases definidas en el archivo fuente. Una clase anónima se trata como si su nombre fuera la concatenación del nombre de la clase que la encierra, el símbolo “$”, y un número entero. &lt;br /&gt;
*Los programas que se ejecutan de forma independiente y autónoma, deben contener el método &amp;lt;code&amp;gt;”main()”&amp;lt;/code&amp;gt;. &lt;br /&gt;
*La palabra reservada &amp;lt;code&amp;gt;”void”&amp;lt;/code&amp;gt; indica que el método main no devuelve nada. &lt;br /&gt;
*El método main debe aceptar un [[Array]] de objetos tipo String. Por acuerdo se referencia como &amp;lt;code&amp;gt;”args”&amp;lt;/code&amp;gt;, aunque puede emplearse cualquier otro identificador. &amp;lt;!--&lt;br /&gt;
* The main method must accept an [[array]] of '''{{Javadoc:SE|java/lang|String}}''' objects. By convention, it is referenced as &amp;lt;code&amp;gt;'''args'''&amp;lt;/code&amp;gt; although any other legal identifier name can be used.&lt;br /&gt;
--&amp;gt; &lt;br /&gt;
*La palabra reservada &amp;lt;code&amp;gt;”static”&amp;lt;/code&amp;gt; indica que el método es un [[Método (programación orientada a objetos)|método de clase]], asociado a la clase en vez de una instancias de la misma. El método main debe ser estático o ’’de clase’’. &lt;br /&gt;
*La palabra reservada &amp;lt;code&amp;gt;'''public'''&amp;lt;/code&amp;gt; significa que un método puede ser llamado desde otras clases, o que la clase puede ser usada por clases fuera de la jerarquía de la propia clase. Otros tipos de acceso son &amp;lt;code&amp;gt;”private”&amp;lt;/code&amp;gt; o &amp;lt;code&amp;gt;”protected”&amp;lt;/code&amp;gt;. &lt;br /&gt;
*La utilidad de impresión (en pantalla por ejemplo) forma parte de la biblioteca estándar de Java: la clase ‘’’System’’’ define un campo público estático llamado ‘’’out’’’. El objeto &amp;lt;code&amp;gt;out&amp;lt;/code&amp;gt; es una instancia de ‘’’PrintStream’’’, que ofrece el método ‘’’println (String)’’’ para volcar datos en la pantalla (la salida estándar). &amp;lt;!--&lt;br /&gt;
'''{{Javadoc:SE|java/lang|System}}'''&lt;br /&gt;
'''{{Javadoc:SE|name=out|java/lang|System|out}}'''&lt;br /&gt;
{{Javadoc:SE|java/io|PrintStream}}&lt;br /&gt;
'''{{Javadoc:SE|name=println(String)|java/io|PrintStream|println(java.lang.String)}}''' &lt;br /&gt;
--&amp;gt; &lt;br /&gt;
*Las aplicaciones autónomas se ejecutan dando al entorno de ejecución de Java el nombre de la clase cuyo método main debe invocarse. Por ejemplo, una línea de comando (en [[Unix]] o [[Windows]]) de la forma &amp;lt;code&amp;gt;java –cp . Hola&amp;lt;/code&amp;gt; ejecutará el programa del ejemplo (previamente compilado y generado “Hola.class”) . El nombre de la clase cuyo método main se llama puede especificarse también en el fichero “MANIFEST” del archivo de empaquetamiento de Java (.jar).&lt;br /&gt;
&lt;br /&gt;
==== Applets  ====&lt;br /&gt;
&lt;br /&gt;
Las [[Applet Java]] son programas incrustados en otras aplicaciones, normalmente una página Web que se muestra en un navegador. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Hola.java&lt;br /&gt;
import java.applet.Applet;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
&lt;br /&gt;
public class Hola extends Applet {&lt;br /&gt;
    public void paint(Graphics gc) {&lt;br /&gt;
        gc.drawString(&amp;quot;Hola, mundo!&amp;quot;, 65, 95);&lt;br /&gt;
    }    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt; &amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;!-- Hola.html --&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Applet Hola Mundo&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;applet code=&amp;quot;Hola.class&amp;quot; width=&amp;quot;200&amp;quot; height=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/applet&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
La sentencia '''&amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt;''' indica al compilador de Java que incluya las clases '''java.applet. Applet''' y '''java.awt. Graphics''', para poder referenciarlas por sus nombres, sin tener que anteponer la ruta completa cada vez que se quieran usar en el código fuente. &lt;br /&gt;
&lt;br /&gt;
La clase &amp;lt;code&amp;gt;'''Hola'''&amp;lt;/code&amp;gt; extiende (&amp;lt;code&amp;gt;extends&amp;lt;/code&amp;gt;) a la clase &amp;lt;code&amp;gt;Applet&amp;lt;/code&amp;gt;, es decir, es una subclase de ésta. La clase &amp;lt;code&amp;gt;Applet&amp;lt;/code&amp;gt; permite a la aplicación mostrar y controlar el estado del applet. La clase &amp;lt;code&amp;gt;Applet&amp;lt;/code&amp;gt; es un componente del [[AWT]] ([[Abstract Window Toolkit]]), que permite al applet mostrar una inteterfaz gráfica de usuario o GUI (Graphical User Interface), y responder a eventos generados por el usuario. &lt;br /&gt;
&lt;br /&gt;
La clase &amp;lt;code&amp;gt;Hola&amp;lt;/code&amp;gt; sobrecarga el método '''paint (Graphics)''' heredado de la superclase contenedora (&amp;lt;code&amp;gt;Applet&amp;lt;/code&amp;gt; en este caso), para acceder al código encargado de dibujar. El método &amp;lt;code&amp;gt;paint()&amp;lt;/code&amp;gt; recibe un objeto '''&amp;lt;code&amp;gt;Graphics&amp;lt;/code&amp;gt;''' que contiene el contexto gráfico para dibujar el applet. El método '''&amp;lt;code&amp;gt;paint()&amp;lt;/code&amp;gt;''' llama al método drawString (String, int, int) del objeto '''&amp;lt;code&amp;gt;Graphics&amp;lt;/code&amp;gt;''' para mostrar la cadena de caracteres '''Hola, mundo!''' en la posición (65, 96) del espacio de dibujo asignado al applet. &lt;br /&gt;
&lt;br /&gt;
La referencia al applet es colocada en un documento [[HTML]] usando la etiqueta '''&amp;lt;code&amp;gt;&amp;amp;lt;applet&amp;amp;gt;&amp;lt;/code&amp;gt;'''. Esta etiqueta o tag tiene tres atributos: '''&amp;lt;code&amp;gt;code=&amp;quot;Hola&amp;quot;&amp;lt;/code&amp;gt;''' indica el nombre del applet, y '''&amp;lt;code&amp;gt;width=&amp;quot;200&amp;quot; height=&amp;quot;200&amp;quot;&amp;lt;/code&amp;gt;''' establece la anchura y altura, respectivamente, del applet. Un applet también pueden alojarse dentro de un documento HTML usando los elementos &amp;lt;code&amp;gt;object&amp;lt;/code&amp;gt;, o &amp;lt;code&amp;gt;embed&amp;lt;/code&amp;gt;, aunque el soporte que ofrecen los navegadores Web no es uniforme.[http://java.sun.com/docs/books/tutorial/deployment/applet/applettag.html][http://java.sun.com/docs/books/tutorial/deployment/applet/mixedbrowser.html] &lt;br /&gt;
&lt;br /&gt;
==== Servlets  ====&lt;br /&gt;
&lt;br /&gt;
Los [[Servlets]] son componentes de la parte del servidor de Java EE, encargados de generar respuestas a las peticiones recibidas de los clientes. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// Hola.java&lt;br /&gt;
import java.io.*;&lt;br /&gt;
import javax.servlet.*;&lt;br /&gt;
&lt;br /&gt;
public class Hola extends GenericServlet &lt;br /&gt;
{&lt;br /&gt;
    public void service(ServletRequest request, ServletResponse response)&lt;br /&gt;
        throws ServletException, IOException&lt;br /&gt;
    {&lt;br /&gt;
        response.setContentType(&amp;quot;text/html&amp;quot;);&lt;br /&gt;
        PrintWriter pw = response.getWriter();&lt;br /&gt;
        pw.println(&amp;quot;Hola, mundo!&amp;quot;);&lt;br /&gt;
        pw.close();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Las sentencias '''&amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt;''' indican al compilador de Java la inclusión de todas las clases públicas e [[Interfaz (Java)|interfaces]] de los paquetes '''java.io''' y '''javax.servlet''' en la compilación. &lt;br /&gt;
&lt;br /&gt;
La clase &amp;lt;code&amp;gt;'''Hola'''&amp;lt;/code&amp;gt; extiende (&amp;lt;code&amp;gt;'''extends'''&amp;lt;/code&amp;gt;), es heredera de la clase '''GenericServlet'''. Esta clase proporciona la interfaz para que el servidor le pase las peticiones al servlet y el mecanismo para controlar el ciclo de vida del servlet. &lt;br /&gt;
&lt;br /&gt;
La clase &amp;lt;code&amp;gt;Hola&amp;lt;/code&amp;gt; sobrecarga el método '''service (ServletRequest, ServletResponse)''', definido por la interfaz '''servlet''' para acceder al manejador de la petición de servicio. El método &amp;lt;code&amp;gt;service()&amp;lt;/code&amp;gt; recibe un objeto de tipo '''ServletRequest''' que contiene la petición del cliente y un objeto de tipo '''ServletResponse''', usado para generar la respuesta que se devuelve al cliente. El método &amp;lt;code&amp;gt;service()&amp;lt;/code&amp;gt; puede ''lanzar'' ('''&amp;lt;code&amp;gt;throws&amp;lt;/code&amp;gt;''') excepciones de tipo ServletException e IOException si ocurre algún tipo de anomalía. &lt;br /&gt;
&lt;br /&gt;
El método '''setContentType (String)''' en el objeto respuesta establece el tipo de contenido MIME a &amp;quot;text/html&amp;quot;, para indicar al cliente que la respuesta a su petición es una página con formato HTML. El método '''getWriter()''' del objeto respuesta devuelve un objeto de tipo '''PrintWriter''', usado como una ''tubería'' por la que viajarán los datos al cliente. El método '''println (String)''' escribe la cadena &amp;quot;Hola, mundo!&amp;quot; en la respuesta y finalmente se llama al método '''close()''' para cerrar la conexión, que hace que los datos escritos en la '''tubería''' o stream sean devueltos al cliente. &lt;br /&gt;
&lt;br /&gt;
==== Aplicaciones con ventanas  ====&lt;br /&gt;
&lt;br /&gt;
[[Swing (biblioteca gráfica)|Swing]] es la biblioteca para la interfaz gráfica de usuario avanzada de la plataforma Java SE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 // Hola.java&lt;br /&gt;
 import javax.swing.*;&lt;br /&gt;
 &lt;br /&gt;
 public class Hola extends JFrame {&lt;br /&gt;
     Hola() {&lt;br /&gt;
         setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);&lt;br /&gt;
         add(new JLabel(&amp;quot;Hola, mundo!&amp;quot;));&lt;br /&gt;
         pack();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     public static void main(String[] args) {&lt;br /&gt;
         new Hola().setVisible(true);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Las instrucciones '''&amp;lt;code&amp;gt;import&amp;lt;/code&amp;gt;''' indican al compilador de Java que las clases e [[Interfaz (Java)|interfaces]] del paquete '''javax.swing''' se incluyan en la compilación. &lt;br /&gt;
&lt;br /&gt;
La clase &amp;lt;code&amp;gt;'''Hola'''&amp;lt;/code&amp;gt; extiende (&amp;lt;code&amp;gt;'''extends'''&amp;lt;/code&amp;gt;) la clase '''javax.swing.JFrame''', que implementa una ventana con una barra de título y un control para cerrarla. &lt;br /&gt;
&lt;br /&gt;
El constructor &amp;lt;code&amp;gt;'''Hola()'''&amp;lt;/code&amp;gt; inicializa el marco o frame llamando al método '''setDefaultCloseOperation (int)''' heredado de JFrame para establecer las operaciones por defecto cuando el control de cierre en la barra de título es seleccionado al valor WindowConstants.DISPOSE_ON_CLOSE. Esto hace que se liberen los recursos tomados por la ventana cuando es cerrada, y no simplemente ocultada, lo que permite a la máquina virtual y al programa acabar su ejecución. A continuación se crea un objeto de tipo JLabel con el texto &amp;quot;Hola, mundo!&amp;quot;, y se añade al marco mediante el método '''add (Component)''', heredado de la clase '''Container'''. El método '''pack()''', heredado de la clase '''Window''', es invocado para dimensionar la ventana y distribuir su contenido. &lt;br /&gt;
&lt;br /&gt;
El método &amp;lt;code&amp;gt;'''main()'''&amp;lt;/code&amp;gt; es llamado por la JVM al comienzo del programa. Crea una instancia de la clase &amp;lt;code&amp;gt;'''Hola'''&amp;lt;/code&amp;gt; y hace la ventana sea mostrada invocando al método '''setVisible (boolean)''' de la superclase (clase de la que hereda) con el parámetro a true. Véase que, una vez el marco es dibujado, el programa no termina cuando se sale del método &amp;lt;code&amp;gt;'''main()'''&amp;lt;/code&amp;gt;, ya que el código del que depende se encuentra en un [[Hilo en sistemas operativos|hilo de ejecución]] independiente ya lanzado, y que permanecerá activo hasta que todas las ventanas hayan sido destruidas. &lt;br /&gt;
&lt;br /&gt;
== Entornos de funcionamiento  ==&lt;br /&gt;
&lt;br /&gt;
El diseño de Java, su robustez, el respaldo de la industria y su fácil portabilidad han hecho de Java uno de los lenguajes con un mayor crecimiento y amplitud de uso en distintos ámbitos de la industria de la informática. &lt;br /&gt;
&lt;br /&gt;
=== En dispositivos móviles y sistemas empotrados  ===&lt;br /&gt;
&lt;br /&gt;
Desde la creación de la especificación J2ME (Java 2 Platform, Micro Edition), una versión del entorno de ejecución Java reducido y altamente optimizado, especialmente desarrollado para el mercado de dispositivos electrónicos de consumo se ha producido toda una revolución en lo que a la extensión de Java se refiere. &lt;br /&gt;
&lt;br /&gt;
Es posible encontrar microprocesadores específicamente diseñados para ejecutar bytecode Java y software Java para tarjetas inteligentes (JavaCard), teléfonos móviles, buscapersonas, set-top-boxes, sintonizadores de TV y otros pequeños electrodomésticos. &lt;br /&gt;
&lt;br /&gt;
El modelo de desarrollo de estas aplicaciones es muy semejante a las ''applets'' de los navegadores salvo que en este caso se denominan [[Midlet|MIDlets]]. &lt;br /&gt;
&lt;br /&gt;
Véase [http://developers.sun.com/mobility/index.jsp Sun Mobile Device Tecnology] &lt;br /&gt;
&lt;br /&gt;
=== En el navegador web  ===&lt;br /&gt;
&lt;br /&gt;
Desde la primera versión de java existe la posibilidad de desarrollar pequeñas aplicaciones ([[Applet Java|Applets]]) en Java que luego pueden ser incrustadas en una página HTML para que sean descargadas y ejecutadas por el navegador web. Estas mini-aplicaciones se ejecutan en una JVM que el navegador tiene configurada como extensión (''plug-in'') en un contexto de seguridad restringido configurable para impedir la ejecución local de código potencialmente malicioso. &lt;br /&gt;
&lt;br /&gt;
El éxito de este tipo de aplicaciones (la visión del equipo de Gosling) no fue realmente el esperado debido a diversos factores, siendo quizás el más importante la lentitud y el reducido ancho de banda de las comunicaciones en aquel entonces que limitaba el tamaño de las applets que se incrustaban en el navegador. La aparición posterior de otras alternativas (aplicaciones web dinámicas de servidor) dejó un reducido ámbito de uso para esta tecnología, quedando hoy relegada fundamentalmente a componentes específicos para la intermediación desde una aplicación web dinámica de servidor con dispositivos ubicados en la máquina cliente donde se ejecuta el navegador. &lt;br /&gt;
&lt;br /&gt;
Las ''applets'' Java no son las únicas tecnologías (aunque sí las primeras) de componentes complejos incrustados en el navegador. Otras tecnologías similares pueden ser: [[ActiveX]] de Microsoft, [[Macromedia Flash|Flash]], [[Java Web Start]], etc. &lt;br /&gt;
&lt;br /&gt;
=== En sistemas de servidor  ===&lt;br /&gt;
&lt;br /&gt;
En la parte del servidor, Java es más popular que nunca, desde la aparición de la especificación de [[Java Servlet|Servlets]] y JSP ([[Java Server Pages]]). &lt;br /&gt;
&lt;br /&gt;
Hasta entonces, las aplicaciones web dinámicas de servidor que existían se basaban fundamentalmente en componentes [[Common Gateway Interface|CGI]] y lenguajes interpretados. Ambos tenían diversos inconvenientes (fundamentalmente lentitud, elevada carga computacional o de memoria y propensión a errores por su interpretación dinámica). &lt;br /&gt;
&lt;br /&gt;
Los servlets y las JSPs supusieron un importante avance ya que: &lt;br /&gt;
&lt;br /&gt;
*El [[Interfaz de programación de aplicaciones|API]] de programación es muy sencilla, flexible y extensible.&lt;br /&gt;
&lt;br /&gt;
*Los servlets no son procesos independientes (como los CGIs) y por tanto se ejecutan dentro del mismo proceso que la JVM mejorando notablemente el rendimiento y reduciendo la carga computacional y de memoria requeridas.&lt;br /&gt;
&lt;br /&gt;
*Las JSPs son páginas que se compilan dinámicamente (o se pre-compilan previamente a su distribución) de modo que el código que se consigue una ventaja en rendimiento substancial frente a muchos lenguajes interpretados.&lt;br /&gt;
&lt;br /&gt;
La especificación de Servlets y JSPs define un API de programación y los requisitos para un contenedor (servidor) dentro del cual se puedan desplegar estos componentes para formar aplicaciones web dinámicas completas. Hoy día existen multitud de contenedores (libres y comerciales) compatibles con estas especificaciones. &lt;br /&gt;
&lt;br /&gt;
A partir de su expansión entre la comunidad de desarrolladores, estas tecnologías han dado paso a modelos de desarrollo mucho más elaborados con frameworks (pe [[Struts]], [[Webwork]]) que se sobreponen sobre los servlets y las JSPs para conseguir un entorno de trabajo mucho más poderoso y segmentado en el que la especialización de roles sea posible (desarrolladores, diseñadores gráficos, ...) y se facilite la reutilización y robustez de código. A pesar de todo ello, las tecnologías que subyacen (Servlets y JSPs) son substancialmente las mismas. &lt;br /&gt;
&lt;br /&gt;
Este modelo de trabajo se ha convertido en uno de los estándar ''de-facto'' para el desarrollo de aplicaciones web dinámicas de servidor. &lt;br /&gt;
&lt;br /&gt;
=== En aplicaciones de escritorio  ===&lt;br /&gt;
&lt;br /&gt;
Hoy en día existen multitud de aplicaciones gráficas de usuario basadas en Java. El entorno de ejecución Java (JRE) se ha convertido en un componente habitual en los PC de usuario de los sistemas operativos más usados en el mundo. Además, muchas aplicaciones Java lo incluyen dentro del propio paquete de la aplicación de modo que se ejecuten en cualquier [[Computador personal|PC]]. &lt;br /&gt;
&lt;br /&gt;
En las primeras versiones de la plataforma Java existían importantes limitaciones en las APIs de desarrollo gráfico ([[Abstract Window Toolkit|AWT]]). Desde la aparición de la biblioteca [[Swing (biblioteca gráfica)|Swing]] la situación mejoró substancialmente y posteriormente con la aparición de bibliotecas como [[SWT]] hacen que el desarrollo de aplicaciones de escritorio complejas y con gran dinamismo, usabilidad, etc. sea relativamente sencillo. &amp;lt;!-- Comentado provisionalmente mientras se reestructura el contenido &lt;br /&gt;
&lt;br /&gt;
Aunque cada vez la tecnología Java se acerca más y más al PC de sobremesa, las aplicaciones Java han sido relativamente raras para uso doméstico, por varias razones.[http://weblogs.java.net/blog/joshy/archive/2005/03/why_dont_you_sh.html]&lt;br /&gt;
&lt;br /&gt;
*Las aplicaciones Java pueden necesitar gran cantidad de memoria física.&lt;br /&gt;
*La Interfaz Gráfica de Usuario ([[GUI]]) no sigue de forma estricta la ''[[Guía para Interfaces Humana]]'' (Human Interface Guidelines), así como tampoco aquella a la que estamos habitualmente acostumbrados. La apariencia de las fuentes no tiene las opciones de optimización activadas por defecto, lo que hace aparecer al texto como si fuera de baja calidad.&lt;br /&gt;
*Las herramientas con que cuenta el JDK no son suficientemente potentes para construir de forma simple aplicaciones potentes. Aunque el uso de herramientas como [[Eclipse_(software)|Eclipse]], un IDE con licencia libre de alta calidad, facilita enormemente las tareas de desarrollo.&lt;br /&gt;
*Hay varias versiones del Entorno en Tiempo de Ejecución de Java, el JRE. Es necesario tener instalada la versión adecuada. &lt;br /&gt;
*Las aplicaciones basadas en la Web están tomando la delantera frente a aquellas que funcionan como entidades independientes. Las nuevas técnicas de programación producen aplicaciones basadas en un modelo en red cada vez más potentes.&lt;br /&gt;
&lt;br /&gt;
Sin embargo hay aplicaciones Java cuyo uso está ampliamente extendido, como los NetBeans, el entorno de desarrollo (IDE) Eclipse, y otros programas como LimeWire y [[Azureus]] para intercambio de archivos. Java también es el motor que usa MATLAB para el renderizado de la interfaz gráfica y para parte del motor de cálculo. Las aplicaciones de escritorio basadas en la tecnología Swing y SWT (Standard Widget Toolkit) suponen una alternativa a la plataforma .Net de Microsoft.&lt;br /&gt;
&lt;br /&gt;
===Java y DB===&lt;br /&gt;
Muchos programadores quizás tengan mayor interés en realizar programación basada conjunto a Bases de Datos, pues Java no se queda atrás, Java no implementa Bases de Datos, ya que solo es un lenguaje de programación, pero implementa funciones que permiten al programador realizar conexiones entre la interfaz de usuario y el Gestor de Base de Datos.&lt;br /&gt;
&lt;br /&gt;
Java permite conectarse por medio de puentes JDBC o a través de Drivers a programas gestores de bases de datos, su independencia entre ambos permite al usuario mantener siempre un enfoque, separando el diseño de la Base de Datos y el de la interfaz en dos mundos de pensamientos diferentes el mundo de los datos y el mundo de las interfaces.&lt;br /&gt;
&lt;br /&gt;
Java es orientado a objetos por ende da solidez a la aplicación evitando cortes bruscos del programa y permitiendo continuar de esta manera con la aplicación. Java permite [[Applets]] (Vea más adelante), lo que permite montar cualquier aplicación con Bases de Datos a través de la red de forma segura y sólida.&lt;br /&gt;
&lt;br /&gt;
Un buen ejemplo de como conectar java con el JDBC sería:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 public boolean Conectar(String DBName) {&lt;br /&gt;
        boolean val = true;&lt;br /&gt;
        //Creación de la URL&lt;br /&gt;
        String url = &amp;quot;jdbc:odbc:&amp;quot; + DBName;&lt;br /&gt;
        try {&lt;br /&gt;
            //Seleccionar y cargar el driver a ser usado.&lt;br /&gt;
            Class.forName(&amp;quot;sun.jdbc.odbc.JdbcOdbcDriver&amp;quot;);&lt;br /&gt;
            //Conexión con JDBC&lt;br /&gt;
            con = DriverManager.getConnection(url);&lt;br /&gt;
        } catch (JDBCException jdbc) {&lt;br /&gt;
            //En caso de error con la conexión con JDBC-Server&lt;br /&gt;
            con = null;&lt;br /&gt;
            val = false;&lt;br /&gt;
            JOptionPane&lt;br /&gt;
                .showMessageDialog(&lt;br /&gt;
                    new JFrame(),&lt;br /&gt;
                    jdbc.toString()&lt;br /&gt;
                        .substring(&lt;br /&gt;
                            49,&lt;br /&gt;
                            jdbc.toString()&lt;br /&gt;
                                .length())&lt;br /&gt;
                        + &amp;quot;\n\nCausas probables del error:\n1- El usuario no tiene los permisos para acceder a &amp;quot;&lt;br /&gt;
                        + DBName&lt;br /&gt;
                        + &amp;quot;.\nVerifique he inténtelo nuevamente.\nGracias!&amp;quot;,&lt;br /&gt;
                    &amp;quot;Error!.- No hubo conexión con la base de datos.&amp;quot;,&lt;br /&gt;
                    0);&lt;br /&gt;
        } catch (ClassNotFoundException cnfe) {&lt;br /&gt;
            //En caso de error con el driver.&lt;br /&gt;
            con = null;&lt;br /&gt;
            val = false;&lt;br /&gt;
            JOptionPane.showMessageDialog(new JFrame(), cnfe.toString()&lt;br /&gt;
                .substring(34, cnfe.toString().length()),&lt;br /&gt;
                    &amp;quot;Error!.- Falta Driver.&amp;quot;, 0);&lt;br /&gt;
        }&lt;br /&gt;
        return val;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== Plataformas soportadas  ===&lt;br /&gt;
&lt;br /&gt;
Una versión del entorno de ejecución Java [[JRE]] (Java Runtime Environment) está disponible en la mayoría de equipos de escritorio. Sin embargo, [[Microsoft]] no lo ha incluido por defecto en sus sistemas operativos. En el caso de [[Apple Inc|Apple]], éste incluye una versión propia del JRE en su sistema operativo, el [[Mac OS]]. También es un producto que por defecto aparece en la mayoría de las distribuciones de [[GNU/Linux]]. Debido a incompatibilidades entre distintas versiones del JRE, muchas aplicaciones prefieren instalar su propia copia del JRE antes que confiar su suerte a la aplicación instalada por defecto. Los desarrolladores de [[Applets]] de Java o bien deben insistir a los usuarios en la actualización del JRE, o bien desarrollar bajo una versión antigua de Java y verificar el correcto funcionamiento en las versiones posteriores.&lt;br /&gt;
&lt;br /&gt;
== Industria relacionada  ==&lt;br /&gt;
&lt;br /&gt;
Sun Microsystem, como creador del [[Lenguaje de programación]] Java y de la plataforma JDK, mantiene fuertes políticas para mantener una especificación del lenguaje&amp;lt;ref&amp;gt;[http://java.sun.com/docs/books/jls/ Especificación del lenguaje Java]&amp;lt;/ref&amp;gt; así como de la máquina virtual&amp;lt;ref&amp;gt;[http://java.sun.com/docs/books/vmspec/ Especificación de la máquina virtual Java]&amp;lt;/ref&amp;gt; a través del JCP. Es debido a este esfuerzo que se mantiene un estándar de facto. &lt;br /&gt;
&lt;br /&gt;
Son innumerables las compañías que desarrollan aplicaciones para Java y/o están volcadas con esta tecnología: &lt;br /&gt;
&lt;br /&gt;
*La industria de la [[Telefonía celular|Telefonía móvil]] está fuertemente influenciada por la tecnología Java. &lt;br /&gt;
*El [[Eclipse (software)|entorno de desarrollo Eclipse]] ha tomado un lugar importante entre la comunidad de desarrolladores Java. &lt;br /&gt;
*La fundación [[Apache]] tiene también una presencia importante en el desarrollo de bibliotecas y componentes de servidor basados en Java. &lt;br /&gt;
*[[IBM]], [[BEA]], [[IONA]], [[Oracle]],... son empresas con grandes intereses y productos creados en y para Java.&lt;br /&gt;
&lt;br /&gt;
== Críticas  ==&lt;br /&gt;
&lt;br /&gt;
Harold dijo en 1995 que Java fue creado para abrir una nueva vía en la gestión de software complejo, y es por regla general aceptado que se ha comportado bien en ese aspecto. Sin embargo no puede decirse que Java no tenga grietas, ni que se adapta completamente a todos los estilos de programación, todos los entornos, o todas las necesidades. &lt;br /&gt;
&lt;br /&gt;
=== General  ===&lt;br /&gt;
&lt;br /&gt;
*Java no ha aportado capacidades estándares para aritmética en punto flotante. El estándar [[IEEE 754]] para “Estándar para Aritmética Binaria en Punto Flotante” apareció en 1985, y desde entonces es el estándar para la industria. Y aunque la aritmética flotante de Java ''(cosa que cambió desde el 13 de noviembre de 2006, cuando se abrió el código fuente y se adoptó la licencia GNU, aparte de la ya existente)'' se basa en gran medida en la norma del IEEE, no soporta aún algunas características. Más información al respecto puede encontrarse en la sección final de enlaces externos.&lt;br /&gt;
&lt;br /&gt;
=== El lenguaje  ===&lt;br /&gt;
&lt;br /&gt;
*En un sentido estricto, Java no es un lenguaje absolutamente orientado a objetos, a diferencia de, por ejemplo, [[Ruby]] o [[Smalltalk]]. Por motivos de eficiencia, Java ha relajado en cierta medida el paradigma de orientación a objetos, y así por ejemplo, no todos los valores son objetos. &lt;br /&gt;
*El código Java puede ser a veces redundante en comparación con otros lenguajes. Esto es en parte debido a las frecuentes declaraciones de tipos y conversiones de tipo manual (casting). También se debe a que no se dispone de operadores sobrecargados, y a una sintaxis relativamente simple. Sin embargo, J2SE 5.0 introduce elementos para tratar de reducir la redundancia, como una nueva construcción para los bucles ‘’’foreach’’’. &lt;br /&gt;
*A diferencia de C++, Java no dispone de operadores de sobrecarga definidos por el usuario. Los diseñadores de Java tomaron esta decisión puesto que consideraban que, bajo ciertas circunstancias, esta característica podía complicar la lectura y mantenimiento de los programas.&lt;br /&gt;
&lt;br /&gt;
=== Apariencia  ===&lt;br /&gt;
&lt;br /&gt;
La apariencia externa (el ‘’’look and feel’’’) de las aplicaciones GUI (Graphical User Interface) escritas en Java usando la plataforma Swing difiere a menudo de la que muestran aplicaciones nativas. Aunque el programador puede usar el juego de herramientas AWT (Abstract Windowing Toolkit) que genera objetos gráficos de la plataforma nativa, el AWT no es capaz de funciones gráficas avanzadas sin sacrificar la portabilidad entre plataformas; ya que cada una tiene un conjunto de APIs distinto, especialmente para objetos gráficos de alto nivel. Las herramientas de Swing, escritas completamente en Java, evitan este problema construyendo los objetos gráficos a partir de los mecanismos de dibujo básicos que deben estar disponibles en todas las plataformas. El inconveniente es el trabajo extra requerido para conseguir la misma apariencia de la plataforma destino. Aunque esto es posible (usando GTK+ y el Look-and-Feel de Windows), la mayoría de los usuarios no saben cómo cambiar la apariencia que se proporciona por defecto por aquella que se adapta a la de la plataforma. &lt;br /&gt;
&lt;br /&gt;
=== Rendimiento  ===&lt;br /&gt;
&lt;br /&gt;
El rendimiento de una aplicación está determinado por multitud de factores, por lo que no es fácil hacer una comparación que resulte totalmente objetiva. En tiempo de ejecución, el rendimiento de una aplicación Java depende más de la eficiencia del compilador, o la JVM, que de las propiedades intrínsecas del lenguaje. El bytecode de Java puede ser interpretado en tiempo de ejecución por la máquina virtual, o bien compilado al cargarse el programa, o durante la propia ejecución, para generar código nativo que se ejecuta directamente sobre el hardware. Si es interpretado, será más lento que usando el código máquina intrínseco de la plataforma destino. Si es compilado, durante la carga inicial o la ejecución, la penalización está en el tiempo necesario para llevar a cabo la compilación. &lt;br /&gt;
&lt;br /&gt;
Algunas características del propio lenguaje conllevan una penalización en tiempo, aunque no son únicas de Java. Algunas de ellas son el chequeo de los límites de arrays, chequeo en tiempo de ejecución de tipos, y la indirección de [[Función virtual|funciones virtuales]]. &lt;br /&gt;
&lt;br /&gt;
El uso de un recolector de basura para eliminar de forma automática aquellos objetos no requeridos, añade una sobrecarga que puede afectar al rendimiento, o ser apenas apreciable, dependiendo de la tecnología del recolector y de la aplicación en concreto. Las JVM modernas usan recolectores de basura que gracias a rápidos algoritmos de manejo de memoria, consiguen que algunas aplicaciones puedan ejecutarse más eficientemente. &lt;br /&gt;
&lt;br /&gt;
El rendimiento entre un compilador JIT y los compiladores nativos puede ser parecido, aunque la distinción no está clara en este punto. La compilación mediante el JIT puede consumir un tiempo apreciable, un inconveniente principalmente para aplicaciones de corta duración o con gran cantidad de código. Sin embargo, una vez compilado, el rendimiento del programa puede ser comparable al que consiguen compiladores nativos de la plataforma destino, inclusive en tareas numéricas. Aunque Java no permite la expansión manual de llamadas a métodos, muchos compiladores JIT realizan esta optimización durante la carga de la aplicación y pueden aprovechar información del entorno en tiempo de ejecución para llevar a cabo transformaciones eficientes durante la propia ejecución de la aplicación. Esta recompilación dinámica, como la que proporciona la máquina virtual HotSpot de Sun, puede llegar a mejorar el resultado de compiladores estáticos tradicionales, gracias a los datos que sólo están disponibles durante el tiempo de ejecución. &lt;br /&gt;
&lt;br /&gt;
Java fue diseñado para ofrecer seguridad y portabilidad, y no ofrece acceso directo al hardware de la arquitectura ni al espacio de direcciones. Java no soporta expansión de código ensamblador, aunque las aplicaciones pueden acceder a características de bajo nivel usando bibliotecas nativas (JNI, Java Native Interfaces). &lt;br /&gt;
&lt;br /&gt;
== Recursos  ==&lt;br /&gt;
&lt;br /&gt;
===JRE===&lt;br /&gt;
&lt;br /&gt;
El '''JRE''' (Java Runtime Environment, o Entorno en Tiempo de Ejecución de Java) es el software necesario para ejecutar cualquier aplicación desarrollada para la plataforma Java. El usuario final usa el JRE como parte de paquetes software o plugins (o conectores) en un navegador Web. Sun ofrece también el SDK de Java 2, o JDK (Java Development Kit) en cuyo seno reside el JRE, e incluye herramientas como el compilador de Java, [[Javadoc]] para generar documentación o el [[Depurador]]. Puede también obtenerse como un paquete independiente, y puede considerarse como el entorno necesario para ejecutar una aplicación Java, mientras que un desarrollador debe además contar con otras facilidades que ofrece el JDK. &lt;br /&gt;
&lt;br /&gt;
=== Componentes  ===&lt;br /&gt;
&lt;br /&gt;
*Bibliotecas de Java, que son el resultado de compilar el código fuente desarrollado por quien implementa la JRE, y que ofrecen apoyo para el desarrollo en Java. Algunos ejemplos de estas bibliotecas son: &lt;br /&gt;
**Las bibliotecas centrales, que incluyen: &lt;br /&gt;
***Una colección de bibliotecas para implementar [[Estructuras de datos]] como [[Listas]], arrays, árboles y conjuntos. &lt;br /&gt;
***Bibliotecas para análisis de [[XML]]. &lt;br /&gt;
***Seguridad. &lt;br /&gt;
***Bibliotecas de internacionalización y localización. &lt;br /&gt;
**Bibliotecas de integración, que permiten la comunicación con sistemas externos. Estas bibliotecas incluyen: &lt;br /&gt;
***La API para acceso a bases de datos [[JDBC]] (Java DataBase Conectivity). &lt;br /&gt;
***La [[Interfaz (Java)|interfaz]] JNDI (Java Naming and Directory Interface) para servicios de directorio. &lt;br /&gt;
***[[RMI]] (Remote Method Invocation) y [[CORBA]] para el desarrollo de aplicaciones distribuidas. &lt;br /&gt;
**Bibliotecas para la interfaz de usuario, que incluyen: &lt;br /&gt;
***El conjunto de herramientas nativas AWT (Abstract Windowing Toolkit), que ofrece componentes GUI (Graphical User Interface), mecanismos para usarlos y manejar sus eventos asociados. &lt;br /&gt;
***Las Bibliotecas de Swing, construidas sobre AWT pero ofrecen implementaciones no nativas de los componentes de AWT. &lt;br /&gt;
***APIs para la captura, procesamiento y reproducción de audio. &lt;br /&gt;
*Una implementación dependiente de la plataforma en que se ejecuta de la máquina virtual de Java (JVM), que es la encargada de la ejecución del código de las bibliotecas y las aplicaciones externas. &lt;br /&gt;
*Plugins o conectores que permiten ejecutar applets en los navegadores Web. &lt;br /&gt;
*Java Web Start, para la distribución de aplicaciones Java a través de Internet. &lt;br /&gt;
*Documentación y licencia.&lt;br /&gt;
&lt;br /&gt;
=== APIs  ===&lt;br /&gt;
&lt;br /&gt;
Sun define tres plataformas en un intento por cubrir distintos entornos de aplicación. Así, ha distribuido muchas de sus [[Interfaz de programación de aplicaciones|APIs]] (Application Program Interface) de forma que pertenezcan a cada una de las plataformas: &lt;br /&gt;
&lt;br /&gt;
*Java ME (Java Platform, Micro Edition) o J2ME — orientada a entornos de limitados recursos, como teléfonos móviles, PDAs (Personal Digital Assistant), etc. &lt;br /&gt;
*Java SE (Java Platform, Standard Edition) o J2SE — para entornos de gama media y estaciones de trabajo. Aquí se sitúa al usuario medio en un PC de escritorio. &lt;br /&gt;
*Java EE (Java Platform, Enterprise Edition) o J2EE — orientada a entornos distribuidos empresariales o de Internet.&lt;br /&gt;
&lt;br /&gt;
Las clases en las APIs de Java se organizan en grupos disjuntos llamados '''[[Paquete]]s'''. Cada paquete contiene un conjunto de interfaces, clases y excepciones relacionadas. La información sobre los paquetes que ofrece cada plataforma puede encontrarse en la documentación de ésta. &lt;br /&gt;
&lt;br /&gt;
El conjunto de las APIs es controlado por Sun Microsystems junto con otras entidades o personas a través del programa JCP (Java Community Process). Las compañías o individuos participantes del JCP pueden influir de forma activa en el diseño y desarrollo de las APIs, algo que ha sido motivo de controversia. &lt;br /&gt;
&lt;br /&gt;
En 2004, IBM y BEA apoyaron públicamente la idea de crear una implementación de [[Código abierto]] (open source) de Java, algo a lo que Sun, a fecha de 2006, se ha negado. &lt;br /&gt;
&lt;br /&gt;
=== Extensiones y arquitecturas relacionadas  ===&lt;br /&gt;
&lt;br /&gt;
Las extensiones de Java están en paquetes que cuelgan de la raíz javax: &amp;lt;code&amp;gt;javax.*&amp;lt;/code&amp;gt;. No se incluyen en la JDK o el JRE. Algunas de las extensiones y arquitecturas ligadas estrechamente al lenguaje Java son: &lt;br /&gt;
&lt;br /&gt;
*[[Java EE]] (Java Platform, Enterprise Edition; antes J2EE) —para aplicaciones distribuidas orientadas al entorno empresarial&lt;br /&gt;
&lt;br /&gt;
== Java en código abierto  ==&lt;br /&gt;
&lt;br /&gt;
Java se ha convertido en un lenguaje con una implantación masiva en todos los entornos (personales y empresariales). El control que mantiene Sun sobre éste genera reticencias en la comunidad de empresas con fuertes intereses en Java ([[IBM]], [[Oracle]]) y obviamente en la comunidad de desarrolladores de [[Software libre]]. &lt;br /&gt;
&lt;br /&gt;
La evolución basada en un comité en el que participen todos los implicados no es suficiente y la comunidad demandaba desde hace tiempo la liberación de las [[Interfaz de programación de aplicaciones|APIs]] y bibliotecas básicas de la JDK. &lt;br /&gt;
&lt;br /&gt;
En [[Diciembre de 2006]], [[Sun]] comenzó relanzamiento de su plataforma Java&amp;lt;ref&amp;gt;[http://www.fsf.org/news/fsf-welcomes-gpl-java.html Sun begins releasing Java under the GPL - Free Software Foundation&amp;amp;lt;!--Título generado por Muro Bot--&amp;amp;gt;]&amp;lt;/ref&amp;gt; bajo la licencia [[GPL]] de [[GNU]]. &lt;br /&gt;
&lt;br /&gt;
=== Alternativas libres  ===&lt;br /&gt;
&lt;br /&gt;
Existen alternativas para el entorno de ejecución y de desarrollo de Java con una gran cobertura de funcionalidades con respecto a las implementaciones comerciales de Sun, IBM, Bea, etc. &lt;br /&gt;
&lt;br /&gt;
=== Críticas referentes a Java y el software libre  ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.gnu.org/philosophy/java-trap.html Free But Shackled — The Java Trap], de [[Richard Stallman]], [[12 de abril]], [[2004]]. ([http://today.java.net/jag/page7.html#59 respuesta de James Gosling]) &lt;br /&gt;
**Traducción al Español de este artículo: [http://www.gnu.org/philosophy/java-trap.es.html Libre pero encadenado. La trampa del Java.] (Nótese que hay una nota en un recuadro amarillo que habla de la situación actual con respecto a lo que se dice en ese artículo) Notar que este artículo fue escrito antes de la liberación del código fuente de Java. En la actualidad la postura de la [[Free Software Foundation]] y de [[Richard Stallman]] han cambiado, mostrándose partidarios ambos por su uso en software libre.&lt;br /&gt;
&lt;br /&gt;
== Véase también  ==&lt;br /&gt;
*[[Interfaz Nativa de Java]]&lt;br /&gt;
&lt;br /&gt;
== Referencias  ==&lt;br /&gt;
&lt;br /&gt;
*Jon Byous, [http://java.sun.com/features/1998/05/birthday.html ''Java technology: The early years'']. Sun Developer Network, sin fecha[ca. 1998]. Recuperado 21 de abril de 2005. &lt;br /&gt;
*[[James Gosling]], [http://today.java.net/jag/old/green/ ''A brief history of the Green project'']. Java.net, sin fecha [ca. Q1/1998]. Recuperado 22 abril de 2005. &lt;br /&gt;
*James Gosling, [[Bill Joy]], [[Guy L. Steele, Jr.|Guy Steele]], y [[Gilad Bracha]], ''The Java language specification'', tercera edición. Addison-Wesley, 2005. ISBN 0-321-24678-0. &lt;br /&gt;
*Tim Lindholm y Frank Yellin. ''The Java Virtual Machine specification'', segunda edición. Addison-Wesley, 1999. ISBN 0-201-43294-3.&lt;br /&gt;
&lt;br /&gt;
== Notas  ==&lt;br /&gt;
&lt;br /&gt;
{{listaref}} &lt;br /&gt;
&lt;br /&gt;
== Enlaces externos  ==&lt;br /&gt;
&lt;br /&gt;
*[http://torturo.com/programas-hechos-en-java/ Programas hechos en java con código fuente]&lt;br /&gt;
&lt;br /&gt;
=== Sun  ===&lt;br /&gt;
&lt;br /&gt;
*[http://java.sun.com/ Sitio oficial de Java para desarrolladores, etc] &lt;br /&gt;
*[http://java.sun.com/docs/books/jls/ The Java Language Specification, Tercera edición] Especificación oficial del lenguaje Java &lt;br /&gt;
*[http://java.sun.com/docs/books/tutorial/ Tutorial de Sun sobre el Lenguaje de programación Java] &lt;br /&gt;
*[http://java.sun.com/docs/white/langenv/ Libro blanco original de Java], 1996&lt;br /&gt;
&lt;br /&gt;
=== Tutoriales  ===&lt;br /&gt;
&lt;br /&gt;
*[http://java.sun.com/docs/books/tutorial/ The Java Tutorial] de Sun Microsystems (online) &lt;br /&gt;
*[http://www.bruceeckel.com/ ''Thinking in Java''], de [[Bruce Eckel]] (online) &lt;br /&gt;
*[http://chortle.ccsu.edu/CS151/cs151java.html An introduction to Computer Science using Java] por Bradley Kjell. &lt;br /&gt;
*[http://www.vias.org/javacourse/ ''Java Course''], de A.B. Downey.&lt;br /&gt;
&lt;br /&gt;
*[http://www.computer-books.us/java.php Computer-Books.us] Colección de libros sobre Java disponibles para descarga gratuita.&lt;br /&gt;
&lt;br /&gt;
*En castellano: &lt;br /&gt;
**[http://www.ciberluna.com Ejemplos de código para que uses directamente en tus desarrollos.] &lt;br /&gt;
**[http://www.lcc.uma.es/~galvez/ Colección «Java a tope» de libros electrónicos] (Universidad de Málaga. España) &lt;br /&gt;
**[http://www.forodejava.com/downloads.php Tutoriales de Java avanzados, básicos y preguntas de certificación para practicar.] &lt;br /&gt;
**[http://www.elchatcubano.com Curso de Java, de cero a hasta conexión a MYSQL, incluye PDF] (México) &lt;br /&gt;
**[http://www.nullbrainexception.blogspot.com/ Capacitación en Java sobre Grandes Proyectos]&lt;br /&gt;
&lt;br /&gt;
=== Certificaciones  ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.sun.com/training/certification/java/index.xml Página oficial de certificaciones de Sun Microsystems] &lt;br /&gt;
*[http://scjp-sun.blogspot.com/ Recursos e información sobre certificaciones]&lt;br /&gt;
&lt;br /&gt;
=== Críticas  ===&lt;br /&gt;
&lt;br /&gt;
*[http://www.softpanorama.org/Lang/java.shtml Softpanorama Java Critique Page: Java vs Scripting Languages], de [[Nikolai Bezroukov]] &lt;br /&gt;
*[http://www.cs.berkeley.edu/~wkahan/JAVAhurt.pdf How Java’s Floating-Point Hurts Everyone Everywhere], de [[W. Kahan und Joseph D. Darcy]] en el ''ACM 1998 Workshop on Java for High–Performance Network Computing''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Lenguajes_de_programación_orientada_a_objetos]][[Category:Herramientas_de_programación]][[Category:Informática]]&lt;/div&gt;</summary>
		<author><name>Oscar2017</name></author>
		
	</entry>
</feed>