lenguajaes d p

80
PHP es un lenguaje de programación usado frecuentemente para la creación de contenido para sitios web con los cuales se puede programar las paginas html y los codigos de fuente. PHP es un acrónimo recursivo que significa "PHP Hypertext Pre-processor" (inicialmente PHP Tools, o, Personal Home Page Tools), y se trata de un lenguaje interpretado usado para la creación de aplicaciones para servidores, o creación de contenido dinámico para sitios web. Últimamente también para la creación de otro tipo de programas incluyendo aplicaciones con interfaz gráfica usando las librerías Qt o GTK+. Visión general [editar] El fácil uso y la similitud con los lenguajes más comunes de programación estructurada, como C y Perl, permiten a la mayoría de los programadores experimentados crear aplicaciones complejas con una curva de aprendizaje muy suave. También les permite involucrarse con aplicaciones de contenido dinámico sin tener que aprender todo un nuevo grupo de funciones y prácticas. Debido al diseño de PHP, también es posible crear aplicaciones con una interfaz gráfica para el usuario (también llamada GUI), 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, esta versión de PHP se llama PHP CLI (Command Line Interface). Su interpretación y ejecución se da en el servidor web, en el cual se encuentra almacenado el script, y el cliente sólo recibe el resultado de la ejecución. Cuando el cliente hace una petición al servidor para que le envíe una página web, generada por un script PHP, el servidor ejecuta el intérprete de PHP, el cual procesa el script solicitado que generará el contenido de manera dinámica, pudiendo modificar el contenido a enviar, y regresa el resultado al servidor, el cual se encarga de regresárselo al cliente. Además es posible utilizar PHP para generar archivos PDF, Flash, así como imágenes en diferentes formatos, entre otras cosas.

Upload: williamsmaganagonzalez

Post on 12-Jan-2016

20 views

Category:

Documents


7 download

DESCRIPTION

PROGRAMACION

TRANSCRIPT

Page 1: Lenguajaes d p

PHP es un lenguaje de programación usado frecuentemente para la creación de contenido para sitios web con los cuales se puede programar las paginas html y los codigos de fuente. PHP es un acrónimo recursivo que significa "PHP Hypertext Pre-processor" (inicialmente PHP Tools, o, Personal Home Page Tools), y se trata de un lenguaje interpretado usado para la creación de aplicaciones para servidores, o creación de contenido dinámico para sitios web. Últimamente también para la creación de otro tipo de programas incluyendo aplicaciones con interfaz gráfica usando las librerías Qt o GTK+.

Visión general [editar]

El fácil uso y la similitud con los lenguajes más comunes de programación estructurada, como C y Perl, permiten a la mayoría de los programadores experimentados crear aplicaciones complejas con una curva de aprendizaje muy suave. También les permite involucrarse con aplicaciones de contenido dinámico sin tener que aprender todo un nuevo grupo de funciones y prácticas.

Debido al diseño de PHP, también es posible crear aplicaciones con una interfaz gráfica para el usuario (también llamada GUI), 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, esta versión de PHP se llama PHP CLI (Command Line Interface).

Su interpretación y ejecución se da en el servidor web, en el cual se encuentra almacenado el script, y el cliente sólo recibe el resultado de la ejecución. Cuando el cliente hace una petición al servidor para que le envíe una página web, generada por un script PHP, el servidor ejecuta el intérprete de PHP, el cual procesa el script solicitado que generará el contenido de manera dinámica, pudiendo modificar el contenido a enviar, y regresa el resultado al servidor, el cual se encarga de regresárselo al cliente. Además es posible utilizar PHP para generar archivos PDF, Flash, así como imágenes en diferentes formatos, entre otras cosas.

Permite la conexión a diferentes tipos de servidores de bases de datos tales como MySQL, Postgres, Oracle, ODBC, DB2, Microsoft SQL Server, Firebird y SQLite; lo cual permite la creación de Aplicaciones web muy robustas.

PHP también tiene la capacidad de ser ejecutado en la mayoría de los sistemas operativos tales como UNIX (y de ese tipo, como Linux o Mac OS X) y Windows, y puede interactuar con los servidores de web más populares ya que existe en versión CGI, módulo para Apache, e ISAPI.

Page 2: Lenguajaes d p

El modelo PHP puede ser visto como una alternativa al sistema de Microsoft que utiliza ASP.NET/C#/VB.NET, a ColdFusion de la compañía Adobe (antes Macromedia), , a JSP/Java de Sun Microsystems, y al famoso 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 integrado de desarrollo) comercial llamado Zend Optimizer. Recientemente, CodeGear (la división de lenguajes de programación de Borland) ha sacado al mercado un entorno integrado de programación para PHP, denominado Delphi for PHP.

Historia [editar]

PHP fue originalmente diseñado en Perl, seguidos por la escritura de un grupo de 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 "Personal Home Page Tools" después de que Lerdorf lo combinara con su propio Form Interpreter para crear PHP/FI.

PHP 3.2.4.3 [editar]

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.

Para 1999, Suraski y Gutmans reescribieron el código de PHP, produciendo lo que hoy se conoce como Zend Engine o motor Zend, un portmanteau de los nombres de ambos, Zeev y Andi. También fundaron Zend Technologies en Ramat Gan, Israel.

PHP 4 [editar]

En mayo de 2000 PHP 4 fue lanzado bajo el poder del motor Zend Engine 1.0. La última versión de PHP 4 disponible en febrero de 2007 es la 4.4.7. Php.net anuncio el día 13 de Julio de 2007 que la versión 4 de PHP quedó discontinuada.

PHP 5 [editar]

El 13 de julio de 2004, fue lanzado PHP 5, utilizando el motor Zend Engine II (o Zend Engine 2). La versión más reciente de PHP es la 5.2.4 30 de agosto de 2007), que incluye todas las ventajas que provee el nuevo Zend Engine 2 como:

Soporte sólido y REAL para Programación Orientada a Objetos ( o OOP) con PHP Data Objects.

Page 3: Lenguajaes d p

Mejoras de rendimiento. Mejor soporte para MySQL con extensión completamente

reescrita. Mejor soporte a XML ( XPath, DOM... ). Soporte nativo para SQLite. Soporte integrado para SOAP. Iteradores de datos. Excepciones de errores.

PHP 6 [editar]

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 ha comunicado que PHP 4 ha sido discontinuado desde el 13 de Julio de 2007.

Las diferencias que encontraremos frente a PHP 5.* son:

Soportará Unicode Limpieza de funcionalidades obsoletas como register_globals,

safe_mode... PECL Mejoras en orientación a objetos

... Lista completa. (en inglés)

Usos de PHP [editar]

Los principales usos del PHP son los siguientes:

Programación de páginas web dinámicas, habitualmente en combinación con el motor de base datos MySQL, aunque cuenta con soporte nativo para otros motores, incluyendo el estándar ODBC, lo que amplía en gran medida sus posibilidades de conexión.

Programación en consola, al estilo de Perl o Shell scripting. Creación de aplicaciones gráficas independientes del

navegador, por medio de la combinación de PHP y Qt/GTK+, lo que permite desarrollar aplicaciones de escritorio en los sistemas operativos en los que está soportado.

Ventajas de PHP [editar]

Es un lenguaje multiplataforma. Capacidad de conexión con la mayoría de los manejadores de

base de datos que se utilizan en la actualidad, destaca su conectividad con MySQL

Leer y manipular datos desde diversas fuentes, incluyendo datos que pueden ingresar los usuarios desde formularios HTML.

Page 4: Lenguajaes d p

Capacidad de expandir su potencial utilizando la enorme cantidad de módulos (llamados ext's o extensiones).

Posee una amplia documentación en su página oficial ([1]), entre la cual se destaca que todas las funciones del sistema están explicadas y ejemplificadas en un único archivo de ayuda.

Es libre, por lo que se presenta como una alternativa de fácil acceso para todos.

Permite las técnicas de Programación Orientada a Objetos. Permite crear los formularios para la web. Biblioteca nativa de funciones sumamente amplia e incluida No requiere definición de tipos de variables ni manejo detallado

del bajo nivel.

Ejemplo de Código PHP [editar]

A continuación un ejemplo de una página web sencilla desarrollada utilizando el lenguaje PHP (con coloreado de sintaxis):

<html><head> <title>Ejemplo</title></head><body><?phpif (isset($_POST['muestra'])) { echo 'Hola, '.htmlentities($_POST['nombre']) .', tu comida favorita es:'. htmlentities($_POST['comida']);} else { ?><form method="POST" action="?"> ¿Cuál es tu nombre? <input type="text" name="nombre"> ¿Cuál es tu comida favorita? <select name="comida"> <option>Spaguetis</option> <option>Asado</option> <option>Pizza</option> </select> <input type="submit" name="muestra" value="Seguir"></form><?php}?></body></html>

En este código es posible observar las siguientes características:

Las variables enviadas por un formulario utilizando el método POST, son recibidas en el lenguaje dentro de la matriz $_POST,

Page 5: Lenguajaes d p

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 cookies en la matriz $_COOKIES, variables de URL en $_GET (que en formularios puede servir para guardar los datos), variables de sesión utilizando $_SESSION, y variables del servidor y del cliente por medio de la matriz $_SERVER.

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 <?php ?>.

El resultado muestra y oculta ciertas porciones del código HTML en forma condicional.

Es posible utilizar funciones propias del lenguaje para aplicaciones Web como htmlentitites(), 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..

Historia [editar]

Versión Fecha Cambios más importantes

PHP 1.0 8 de Junio de 1995

Oficialmente llamado "Herramientas personales de trabajo (PHP Tools)". Es el primer uso del nombre "PHP".

PHP Version 2 (PHP/FI)

16 de Abril de 1996

Considerado por el creador como la "más rapida y simple herramienta" para la creación de páginas webs dinámicas .

PHP 3.0 6 de Junio de 1998

Desarrollo movido de una persona a muchos desarrolladores. Zeev Suraski y Andi Gutmans reescriben la base para esta versión.

PHP 4.0 22 de Mayo de 2000

Se agregan avanzadas de dos etapas analizar/ejecutar la etiqueta-análisis sistema llamado entorno motor Zend.

Page 6: Lenguajaes d p

PHP 4.110 de Diciembre de 2001

Introducidas las variables superglobals ($_GET, $_SESSION, etc.)

PHP 4.2 22 de Abril de 2002Se deshabilitan register_globals por defecto

PHP 4.327 de Diciembre de 2002

Introducido la CLI, en adición a la CGI

PHP 4.4 11 de Julio de 2005

PHP 5.0 13 de Julio de 2004Motor Zend II con un nuevo modelo de objetos.

PHP 5.125 de Noviembre de 2005

PHP 5.22 de Noviembre de 2006

Habilitado el filtro de extensiones por defecto

PHP 5.2.4 30 de agosto de 2007

Active Server Pages

Active Server Pages (ASP) es una tecnología del lado servidor de Microsoft para páginas web generadas dinámicamente, que ha sido comercializada como un anexo a Internet Information Server (IIS). La tecnología ASP está estrechamente relacionada con el modelo tecnológico de su fabricante. Intenta ser solución para un modelo de

Page 7: Lenguajaes d p

programación rápida ya que programar en ASP es como programar en VisualBasic, por supuesto con muchas limitaciones ya que es una plataforma que no se ha desarrollado como lo esperaba Microsoft.

Lo interesante de este modelo tecnológico es poder utilizar diversos componentes ya desarrollados como algunos controles ActiveX. Otros problemas que han hecho evolucionar esta tecnología es el no disponer de información "que oriente a quienes desean aprenderla y resulta muy costosa en tiempo descubrir aquí y allá toda la información para volverla altamente útil".

ASP ha pasado por cuatro iteraciones mayores, ASP 1.0 (distribuido con IIS 3.0), ASP 2.0 (distribuido con IIS 4.0), ASP 3.0 (distribuido con IIS 5.0) y ASP.NET (parte de la plataforma .NET de Microsoft). Las versiones pre-.NET se denominan actualmente (desde 2002) como ASP clásico.

En el último ASP clásico, ASP 3.0, hay seis objetos integrados disponibles para el programador, Application, ASPError, Request, Response, Server y Session. Cada objeto tiene un grupo de funcionalidades frecuentemente usadas y útiles para crear páginas web dinámicas.

Las páginas pueden ser generadas mezclando código de scripts del lado del servidor (incluyendo acceso a base de datos) con HTML. Por ejemplo:

<%if x=1 then%> <b>X igual a uno</b><%else%> <b>X diferente a uno</b><%end if%>

Este código trae como resultado en html

<b>X igual a uno</b>

cuando se establece la variable del lado del servidor a X=1.

Se facilita la programación de sitios web mediante varios objetos integrados, como por ejemplo un objeto de sesión basada en cookies, que mantiene las variables mientras se pasa de página a página.

Desde 2002, el ASP clásico está siendo reemplazado por ASP.NET, que, entre otras cosas, reemplaza los lenguajes interpretados como VBScript o JScript por lenguajes compilados a código intermedio (llamado MSIL o Microsoft Intermediate Language) como Visual Basic, C#, o cualquier otro lenguaje que soporte la plataforma .NET. El código MSIL se compila con posterioridad a código nativo.

Page 8: Lenguajaes d p

Java es un lenguaje de programación orientado a objetos desarrollado por Sun Microsystems a principios de los años 1990. Las aplicaciones Java están típicamente compiladas en un 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 del bytecode por un procesador Java también es posible.

El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel como punteros. JavaScript, un lenguaje interpretado, comparte un nombre similar y una sintaxis similar, pero no está directamente relacionado con Java.

Sun Microsystems proporciona una implementación GNU General Public License de un compilador Java y una máquina virtual Java, conforme a las especificaciones del Java Community Process, aunque la biblioteca de clases que se requiere para ejecutar los programas Java no es software libre.

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.

Java y DB [editar]

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.

Java permite conectarse por medio de puentes JDBC o a través de Driver's 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.

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.

Un buen ejemplo de como conectar java con el JDBC sería:

Page 9: Lenguajaes d p

public boolean Conectar(String DBName) { boolean val = true; //Creación de la URL String url = "jdbc:odbc:" + DBName; try { //Seleccionar y cargar el driver a ser usado. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //Conexión con JDBC con = DriverManager.getConnection(url); } catch (JDBCException jdbc) { //En caso de error con la conexión con JDBC-Server con = null; val = false; JOptionPane .showMessageDialog( new JFrame(), jdbc.toString() .substring( 49, jdbc.toString() .length()) + "\n\nCausas probables del error:\n1- El usuario no tiene los permisos para acceder a " + DBName + ".\nVerifique he inténtelo nuevamente.\nGracias!", "Error!.- No hubo conexión con la base de datos.", 0); } catch (ClassNotFoundException cnfe) { //En caso de error con el driver. con = null; val = false; JOptionPane.showMessageDialog(new JFrame(), cnfe.toString() .substring(34, cnfe.toString().length()), "Error!.- Falta Driver.", 0); } return val; }

Industria relacionada [editar]

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 1 así como de la máquina virtual2 a través del JCP. Es debido a este esfuerzo que se mantiene un estándar de facto.

Son innumerables las compañías que desarrollan aplicaciones para Java. La industria de la telefonía móvil está fuertemente influenciada por la tecnología Java.

Page 10: Lenguajaes d p

El entorno de desarrollo Eclipse ha tomado un lugar importante entre la comunidad de desarrolladores Java.

Estado actual [editar]

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.

Java e Internet [editar]

Entre junio y julio de 1994, tras una sesión maratónica 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.

Ese año renombraron el lenguaje como Java tras descubrir que "Oak" era ya una marca comercial registrada para adaptadores de tarjetas gráficas. 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: James Gosling, Arthur Van Hoff, y Andy Bechtolsheim. Otros abogan por el siguiente acrónimo, Just Another Vague Acronym ("sólo otro acrónimo ambiguo más"). 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. 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.

En octubre de 1994, se les hizo una 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, 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. [1] Dos semanas más tarde la primera versión de Java fue publicada.

Historia reciente [editar]

Las aplicaciones java son las más usadas en los teléfonos móviles por no ocupar tanto espacio en la memoria, dejando mucho espacio libre para otros archivos que no pueden cambiarse y que ocupan mucho

Page 11: Lenguajaes d p

espacio como los mp3 entre otros. Principalmente se utiliza java para juegos pero hay muchas otras formas interesantes de usos.

En la Web [editar]

En el cliente [editar]

La capacidad de la continuidad del uso de Java por el gran público. Flash está más extendido para animaciones interactivas y los desarrolladores estén empezando a usar la tecnología AJAX también en este campo. Java suele usarse para aplicaciones más complejas como la zona de juegos de Yahoo, Yahoo! Games, o reproductores de video (ej. [2]).

En el servidor [editar]

En la parte del servidor, Java es más popular que nunca, con muchos sitios empleando páginas JavaServer, conectores como Tomcat para Apache y otras tecnologías Java.

En el PC de escritorio [editar]

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.[3]

Las aplicaciones Java pueden necesitar gran cantidad de memoria física.

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.

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, un IDE con licencia libre de alta calidad, facilita enormemente las tareas de desarrollo.

Hay varias versiones del Entorno en Tiempo de Ejecución de Java, el JRE. Es necesario tener instalada la versión adecuada.

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.

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

Page 12: Lenguajaes d p

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.

Disponibilidad del JRE de Java [editar]

Una versión del 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, é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 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.

Historial de versiones [editar]

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 librería estándar. Desde 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 JSR 901.

JDK 1.0 (23 de enero de 1996) — Primer lanzamiento.

comunicado de prensa

JDK 1.1 (19 de febrero de 1997) — Principales adiciones incluidas: comunicado de prensa

o una reestructuración intensiva del modelo de eventos AWT (Abstract Windowing Toolkit)

o clases internas (inner classes) o JavaBeans o JDBC (Java Database Connectivity), para la integración de

bases de datos o RMI (Remote Method Invocation)

J2SE 1.2 (8 de diciembre de 1998) — Nombre clave Playground. Esta y las siguientes versiones fueron recogidas

Page 13: Lenguajaes d p

bajo la denominación Java 2 y el nombre "J2SE" (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: comunicado de prensa

o la palabra reservada (keyword) strictfp o reflexión en la programación o la API gráfica ( Swing) fue integrada en las clases básicas o la máquina virtual (JVM) de Sun fue equipada con un

compilador JIT (Just in Time) por primera vez o Java Plug-in o Java IDL, una implementación de IDL (Interfaz para

Descripción de Lenguaje) para la interoperabilidad con CORBA

o Colecciones (Collections)

J2SE 1.3 (8 de mayo de 2000) — Nombre clave Kestrel.

Los cambios más notables fueron:comunicado de prensa lista completa de cambios

o 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)

o RMI fue cambiado para que se basara en CORBA o JavaSound o se incluyó el Java Naming and Directory Interface (JNDI)

en el paquete de librerías principales (anteriormente disponible como una extensión)

o Java Platform Debugger Architecture (JPDA)

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 JSR 59. Los cambios más notables fueron: comunicado de prensalista completa de cambios

o Palabra reservada assert (Especificado en JSR 41.) o Expresiones regulares modeladas al estilo de las

expresiones regulares Perl o Encadenación de excepciones Permite a una excepción

encapsular la excepción de bajo nivel original. o non-blocking NIO (New Input/Output) (Especificado en JSR

51.) o Logging API (Specified in JSR 47.) o API I/O para la lectura y escritura de imágenes en

formatos como JPEG o PNG o Parser XML integrado y procesador XSLT (JAXP)

(Especificado en JSR 5 y JSR 63.)

Page 14: Lenguajaes d p

o Seguridad integrada y extensiones criptográficas (JCE, JSSE, JAAS)

o Java Web Start incluido (El primer lanzamiento ocurrió en Marzo de 2001 para J2SE 1.3) (Especificado en JSR 56.)

J2SE 5.0 (30 de septiembre de 2004) — Nombre clave: Tiger. (Originalmente numerado 1.5, esta notación aún es usada internamente.[4]) Desarrollado bajo JSR 176, Tiger añadió un número significativo de nuevas características comunicado de prensa

o 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 conversion de tipos (type casting). (Especificado por JSR 14.)

o Metadatos — también llamados anotaciones, 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 JSR 175.)

o Autoboxing/unboxing — Conversiones automáticas entre tipos primitivos (Como los int) y clases de envoltura primitivas (Como Integer). (Especificado por JSR 201.)

o Enumeraciones — la palabra reservada enum crea una typesafe, lista ordenada de valores (como Dia.LUNES, Dia.MARTES, etc.). Anteriormente, esto solo podía ser llevado a cabo por constantes enteras o clases construidas manualmente (enum pattern). (Especificado por JSR 201.)

o 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. void drawtext(String... lines)). 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.

o Bucle for mejorado — La sintaxis para el bucle for 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:

{|| style="width:32px" || void displayWidgets (Iterable<Widget> widgets) { for (Widget w : widgets) { w.display(); } }

Page 15: Lenguajaes d p

Este ejemplo itera sobre el objeto Iterable widgets, asignando, en orden, cada uno de los elementos a la variable w, y llamando al método display() de cada uno de ellos. (Especificado por JSR 201.) |}

Java SE 6 (11 de diciembre de 2006) — Nombre clave Mustang. Estuvo en desarrollo bajo la JSR 270. En esta versión, Sun cambió el nombre "J2SE" por Java SE y eliminó el ".0" del número de versión.[5]. Está disponible en http://java.sun.com/javase/6/. Los cambios más importantes introducidos en esta versión son:

o 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.

o Incluye el motor Rhino, de Mozilla, una implementación de Javascript en Java.

o 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.

o Mejoras en la interfaz gráfica y en el rendimiento.

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.

o Soporte para XML dentro del propio lenguaje. o Un nuevo concepto de superpaquete. o Soporte para closures. o Introducción de anotaciones estándar para detectar fallos

en el software. No oficiales:

o NIO2 o Java Module System. o Java Kernel. o Nueva API para el manejo de Dias y Fechas, la cual

reemplazara las antiguas clases Date y Calendar. o Posiblidad de operar con clases BigDecimal usando

operandos.

[6]

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 librería 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 y Java2D, han sido introducidas y muchos de los métodos y clases originales de JDK 1.0 están obsoletas.

Filosofía [editar]

Page 16: Lenguajaes d p

El lenguaje Java se creó con cinco objetivos principales:

1. Debería usar la metodología de la programación orientada a objetos.

2. Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos.

3. Debería incluir por defecto soporte para trabajo en red. 4. Debería diseñarse para ejecutar código en sistemas remotos de

forma segura. 5. Debería ser fácil de usar y tomar lo mejor de otros lenguajes

orientados a objetos, como C++.

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.

Orientado a Objetos [editar]

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 use estén unidos a sus operaciones. Así, los datos y el código (funciones o métodos) se combinan en entidades llamadas 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.),

Page 17: Lenguajaes d p

el objeto “aluminio” puede ser reutilizado en el campo de la construcción, del automóvil, de la aviación, etc.

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 librerías de objetos.

Independencia de la plataforma [editar]

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. Es lo que significa 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’’’.

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 (VM), 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 librerías 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).

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.

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

Page 18: Lenguajaes d p

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.

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.

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.

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, "Write once, run anywhere" como "Write once, debug everywhere" (o “Escríbelo una vez, ejecútalo en todas partes” por “Escríbelo una vez, depúralo en todas partes”)

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.

El recolector de basura [editar]

Page 19: Lenguajaes d p

Un argumento en contra de lenguajes como C++ es que los programadores se encuentran con la carga añadida de tener que administrar la memoria solicitada dinámicamente de forma manual:

En C++, el desarrollador puede asignar memoria en una zona conocida como heap (montículo) para crear cualquier objeto, y posteriormente desalojar el espacio asignado cuando desea borrarlo. Un olvido a la hora de desalojar memoria previamente solicitada puede llevar a una fuga de memoria, ya que el sistema operativo seguirá pensando que esa zona de memoria está siendo usada por una aplicación cuando en realidad no es así. Así, un programa mal diseñado podría consumir una cantidad desproporcionada de memoria. Además, si una misma región de memoria es desalojada dos veces el programa puede volverse inestable y llevar a un eventual cuelgue. No obstante, se debe señalar que C++ también permite crear objetos en la pila de llamadas de una función o bloque, de forma que se libere la memoria (y se ejecute el destructor del objeto) de forma automática al finalizar la ejecución de la función o bloque.

En Java, este problema potencial es evitado en gran medida por el recolector automático 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 (que, desde un punto de vista de bajo nivel es una dirección de memoria). 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). Aún 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++ [cita requerida].

La recolección de basura de Java es un proceso prácticamente invisible al desarrollador. Es decir, el programador no tiene conciencia de cuándo la recolección de basura tendrá lugar, ya que ésta no tiene necesariamente que guardar relación con las acciones que realiza el código fuente.

Debe tenerse en cuenta que la memoria es sólo uno de los muchos recursos que deben ser gestionados.

Críticas [editar]

Page 20: Lenguajaes d p

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.

General [editar]

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 GPL, 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.

El lenguaje [editar]

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.

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’’’.

A diferencia de C++, Java no dispone de operadores de sobrecarga definidos por el usuario. Sin embargo esta fue una decisión de diseño que puede verse como una ventaja, ya que esta característica puede hacer los programas difíciles de leer y mantener.

Apariencia [editar]

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

Page 21: Lenguajaes d p

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. Mención merece la versión optimizada del lenguaje.

Rendimiento [editar]

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.

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 funciones virtuales.

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.

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

Page 22: Lenguajaes d p

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.

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 librerías nativas (JNI, Java Native Interfaces).

Sintaxis [editar]

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.

Hola Mundo [editar]

”Para conocer el origen del programa “Hola Mundo” véase: Hello world program”

Aplicaciones autónomas [editar]// Hola.javapublic class Hola { public static void main(String[] args) { System.out.println("Hola, mundo!"); } }

Este ejemplo necesita una pequeña explicación.

Todo en Java está dentro de una clase, incluyendo programas autónomos.

El código fuente se guarda en archivos con el mismo nombre que la clase que contienen y con extensión “.java”. Una clase (class) declarada pública (public) debe seguir este convenio. En el ejemplo anterior, la clase es Hola, por lo que el código fuente debe guardarse en el fichero “Hola.java”

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

Page 23: Lenguajaes d p

concatenación del nombre de la clase que la encierra, el símbolo “$”, y un número entero.

Los programas que se ejecutan de forma independiente y autónoma, deben contener el método ”main()”.

La palabra reservada ”void” indica que el método main no devuelve nada.

El método main debe aceptar un array de objetos tipo String. Por acuerdo se referencia como ”args”, aunque puede emplearse cualquier otro identificador.

La palabra reservada ”static” indica que el método es un método de clase, asociado a la clase en vez de a instancias de la misma. El método main debe ser estático o ’’de clase’’.

La palabra reservada public 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 ”private” o ”protected”.

La utilidad de impresión (en pantalla por ejemplo) forma parte de la librería estándar de Java: la clase ‘’’System’’’ define un campo público estático llamado ‘’’out’’’. El objeto out es una instancia de ‘’’PrintStream’’’, que ofrece el método ‘’’println(String)’’’ para volcar datos en la pantalla (la salida estándar).

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 java –cp . Hola 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).

Applets [editar]

Las applets de Java son programas incrustados en otras aplicaciones, normalmente una página Web que se muestra en un navegador.

// Hola.javaimport java.applet. Applet;import java.awt. Graphics; public class Hola extends Applet { public void paint(Graphics gc) { gc.drawString("Hola, mundo!", 65, 95); } } &lt;!-- Hola.html --&gt;<html> <head> <title>Applet Hola Mundo</title> </head>

Page 24: Lenguajaes d p

<body> <applet code="Hola" width="200" height="200"> </applet> </body></html>

La sentencia import 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.

La clase Hola extiende (extends) a la clase Applet, es decir, es una subclase de ésta. La clase Applet permite a la aplicación mostrar y controlar el estado del applet. La clase Applet es un componente del AWT (Abstract Windowing 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.

La clase Hola sobrecarga el método paint(Graphics) heredado de la superclase contenedora (Applet en este caso), para acceder al código encargado de dibujar. El método paint() recibe un objeto Graphics que contiene el contexto gráfico para dibujar el applet. El método paint() llama al método drawString(String, int, int) del objeto Graphics para mostrar la cadena de caracteres Hola, mundo! en la posición (65, 96) del espacio de dibujo asignado al applet.

La referencia al applet es colocada en un documento HTML usando la etiqueta <applet>. Esta etiqueta o tag tiene tres atributos: code="Hola" indica el nombre del applet, y width="200" height="200" establece la anchura y altura, respectivamente, del applet. Un applet también pueden alojarse dentro de un documento HTML usando los elementos object, o embed, aunque el soporte que ofrecen los navegadores Web no es uniforme.[7][8]

Servlets [editar]

Los servlets son componentes de la parte del servidor de Java EE, encargados de generar respuestas a las peticiones recibidas de los clientes.

// Hola.javaimport java.io.*;import javax.servlet.*; public class Hola extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { response.setContentType("text/html");

Page 25: Lenguajaes d p

PrintWriter pw = response.getWriter(); pw.println("Hola, mundo!"); pw.close(); }}

Las sentencias import indican al compilador de Java la inclusión de todas las clases públicas e interfaces de los paquetes java.io y javax.servlet en la compilación.

La clase Hola extiende (extends), 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.

La clase Hola 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 service() 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 service() puede lanzar (throws) excepciones de tipo ServletException e IOException si ocurre algún tipo de anomalía.

El método setContentType(String) en el objeto respuesta establece el tipo de contenido MIME a "text/html", 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 "Hola, mundo!" 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.

Aplicaciones con ventanas [editar]

Swing es la librería para la interfaz gráfica de usuario avanzada de la plataforma Java SE.

// Hola.java import javax.swing.*; public class Hola extends JFrame { Hola() { setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); add(new JLabel("Hola, mundo!")); pack(); }

Page 26: Lenguajaes d p

public static void main(String[] args) { new Hola().setVisible(true); } }

Las sentencias import indican al compilador de Java que las clases e interfaces del paquete javax.swing se incluyan en la compilación.

La clase Hola extiende (extends) la clase javax.swing.JFrame, que implementa una ventana con una barra de título y un control para cerrarla.

El constructor Hola() 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 "Hola, mundo!", 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.

El método main() es llamado por la JVM al comienzo del programa. Crea una instancia de la clase Hola 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 main(), ya que el código del que depende se encuentra en un hilo de ejecución independiente ya lanzado, y que permanecerá activo hasta que todas las ventanas hayan sido destruidas.

Recursos [editar]

JRE [editar]

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.

Page 27: Lenguajaes d p

Componentes [editar]

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 librerías son:

o Las bibliotecas centrales, que incluyen: Una colección de bibliotecas para implementar

estructuras de datos como listas, arrays, árboles y conjuntos.

Bibliotecas para análisis de XML. Seguridad. Bibliotecas de internacionalización y localización.

o Bibliotecas de integración, que permiten la comunicación con sistemas externos. Estas librerías incluyen:

La API para acceso a bases de datos JDBC (Java DataBase Conectivity).

La interfaz JNDI (Java Naming and Directory Interface) para servicios de directorio.

RMI (Remote Method Invocation) y CORBA para el desarrollo de aplicaciones distribuidas.

o Bibliotecas para la interfaz de usuario, que incluyen: El conjunto de herramientas nativas AWT (Abstract

Windowing Toolkit), que ofrece componentes GUI (Graphical User Interface), mecanismos para usarlos y manejar sus eventos asociados.

Las Bibliotecas de Swing, construidas sobre AWT pero ofrecen implementaciones no nativas de los componentes de AWT.

APIs para la captura, procesamiento y reproducción de audio.

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 librerías y las aplicaciones externas.

Plugins o conectores que permiten ejecutar applets en los navegadores Web.

Java Web Start, para la distribución de aplicaciones Java a través de Internet.

Documentación y licencia.

APIs [editar]

Sun define tres plataformas en un intento por cubrir distintos entornos de aplicación. Así, ha distribuido muchas de sus APIs (Application Program Interface) de forma que pertenezcan a cada una de las plataformas:

Page 28: Lenguajaes d p

Java ME (Java Platform, Micro Edition) o J2ME — orientada a entornos de limitados recursos, como teléfonos móviles, PDAs (Personal Digital Assistant), etc.

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.

Java EE (Java Platform, Enterprise Edition) o J2EE — orientada a entornos distribuidos empresariales o de Internet.

Las clases en las APIs de Java se organizan en grupos disjuntos llamados paquetes. 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.

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.

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.

Extensiones y arquitecturas relacionadas [editar]

Las extensiones de Java están en paquetes que cuelgan de la raíz javax: javax.*. No se incluyen en la JDK o el JRE. Algunas de las extensiones y arquitecturas ligadas estrechamente al lenguaje Java son:

Java EE (Java Platform, Enterprise Edition; antes J2EE) —para aplicaciones distribuidas orientadas al entorno empresarial

Java ME (Java Platform, Micro Edition; antes J2ME)—para dispositivos de recursos limitados como teléfonos móviles y PDAs

JMF (Java Media Framework) JNDI (Java Naming and Directory Interface) JSML (Java Speech API Markup Language) JDBC (Java Database Connectivity) JDO (Java Data Objects) JAI (Java Advanced Imaging) JAIN (Java API for Integrated Networks) JDMK (Java Dynamic Management Kit) Jini (una arquitectura de red para la construcción de sistemas

distribuidos Jiro Java Card JavaSpaces

Page 29: Lenguajaes d p

JML (Java Modeling Language) JMI (Java Metadata Interface) JMX (Java Management Extensions) JSP (JavaServer Pages) JSF (JavaServer Faces) JNI (Java Native Interface) JXTA (Protocolos abiertos para redes virtuales Peer-to-Peer o

P2P) Java 3D (Una API de alto nivel para programación gráfica en 3D) JOGL (Java OpenGL—Una API de bajo nivel para programación

gráfica usando OpenGL) LWJGL (Light Weight Java Game Library—Una API de bajo nivel

para acceso a OpenGL, OpenAL y varios dispositivos de entrada)

MARF (Modular Audio Recognition Framework) OSGi (Dynamic Service Management and Remote Maintenance)

Java en código abierto [editar]

¿Hasta donde Java es Software libre? [editar]

En diciembre de 2006, Sun está en pleno relanzamiento de su plataforma Java bajo la licencia GPL de GNU. Cuando este cambio de licencia haya terminado, esperamos que Java ya no sea una trampa (fuente, (Ver la nota que hay en el recuadro amarillo))

Compromiso de Sun Microsystems con el código abierto [editar]

La importancia del código abierto en relación con Java puede verse entre otras cosas, en que el presidente y CEO de Sun, Jonathan Schwartz, ha retado a la compañía a que ofrezca código abierto para todo el software que produce Sun (fuente), Sun ya hace mucho tiempo que empezó a apostar por el código abierto cuando liberó StarOffice (Llamado ahora OpenOffice).

Sun ha aportado más líneas de código abierto que cualquier otra organización (fuente) También Richard Stallman opina eso mismo (fuente)

El éxito del código abierto - Artículo puesto en el sito oficial en Español de Sun Microsystems, en el que habla de la apuesta de Sun Microsystems por el código abierto.

Alternativas libres [editar]

Blackdown Java para Linux, incluye un plugin para Mozilla GNU Classpath de GNU - actualmente está siendo fusionado con

libgcj del Compilador para Java de GNU

Page 30: Lenguajaes d p

Críticas referentes a Java y el software libre [editar]

Free But Shackled — The Java Trap, de Richard Stallman, 12 de abril, 2004. (respuesta de James Gosling)

o Traducción al Español de este artículo: 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, mostrandose partidarios ambos por su uso en software libre.

Software libre basado en Java [editar]

Azureus Limewire iRATE Radio

Véase también [editar]

Java syntax Java keywords Java virtual machine Java platform Java applet Java Platform, Standard Edition (Java SE, J2SE) JavaOS Comparison of Java and C++ Comparison of C# and Java Java User Group Java Community Process JavaOne Join Java programming language Javapedia Inferno operating system

Listados [editar]

Lista de artículos con código fuente de Java incluido Lista de lenguajes de script de Java Software de la plataforma Java Herramientas de desarrollo Java Lista de máquinas virtuales

Referencias [editar]

Jon Byous, Java technology: The early years. Sun Developer Network, sin fecha[ca. 1998]. Recuperado 21 de abril de 2005.

Page 31: Lenguajaes d p

James Gosling, A brief history of the Green project. Java.net, sin fecha [ca. Q1/1998]. Recuperado 22 abril de 2005.

James Gosling, Bill Joy, Guy Steele, y Gilad Bracha, The Java language specification, tercera edición. Addison-Wesley, 2005. ISBN 0-321-24678-0.

Tim Lindholm y Frank Yellin. The Java Virtual Machine specification, segunda edición. Addison-Wesley, 1999. ISBN 0-201-43294-3.

Ejemplos De Programación Dinámica [editar]

Ejecución de n tareas en tiempo mínimo en un sistema de dos procesadores A y B

Programas en disco Problema de los sellos con programación dinámica Problema de la mochila con programación dinámica Problema del producto de una secuencia de matrices con

programación dinámica Problema de las monedas con programación dinámica Camino de coste mínimo entre dos nodos de un grafo dirigido Problema de la división de peso Problema de las vacas con programación dinámica Problema del Cambio de Palabra Programación Dinámica en

JAVA

Notas [editar]

1. ↑ Especificación del lenguaje Java 2. ↑ Especificación de la máquina virtual Java

Enlaces externos [editar]

Sun [editar]

Sitio oficial de Sun Microsystems en español Sitio oficial de Java para desarrolladores, etc Sitio oficial de Java no técnico para usuarios no avanzados The Java Language Specification, Tercera edición Especificación

oficial del lenguaje Java Tutorial de Sun sobre el Lenguaje de programación Java Libro blanco original de Java, 1996 Pruebe su VM Curso Gratuito de Introducción a Java

Peticiones para la especificación de Java (Java Specification Requests) [editar]

Hay varias JSRs relacionadas al lenguaje Java y las APIs del núcleo.

Page 32: Lenguajaes d p

JSR 14 Add Generic Types To The Java Programming Language (J2SE 5.0)

JSR 41 A Simple Assertion Facility (J2SE 1.4) JSR 47 Logging API Specification (J2SE 1.4) JSR 51 New I/O APIs for the Java Platform (J2SE 1.4) JSR 59 J2SE Merlin Release Contents (J2SE 1.4) JSR 121 Application Isolation API (aún no incluida) JSR 133 Java Memory Model and Thread Specification Revision

(J2SE 5.0) JSR 166 Concurrency Utilities (J2SE 5.0) JSR 175 A Metadata Facility for the Java Programming Language

(J2SE 5.0) JSR 176 J2SE 5.0 (Tiger) Release Contents (J2SE 5.0) JSR 201 Extending the Java Programming Language with

Enumerations, Autoboxing, Enhanced for loops and Static Import (J2SE 5.0)

JSR 203 More New I/O APIs for the Java Platform ("NIO.2") (Java SE 7)

JSR 204 Unicode Supplementary Character Support (J2SE 5.0) – support for Unicode 3.1

JSR 270 Java SE 6 ("Mustang") Release Contents (Java SE 6) JSR 901 Java Language Specification (J2SE 5.0)

Tutoriales [editar]

The Java Tutorial de Sun Microsystems (online) David Flanagan, Java in a Nutshell, Third Edition. O'Reilly &

Associates, 1999. ISBN 1-56592-487-8 Thinking in Java, de Bruce Eckel (online) Java Course, de A.B. Downey. Introduction to Programming Using Java Texto online de David J.

Eck How to Think Like a Computer Scientist versión de Java An introduction to Computer Science using Java By Bradley

Kjell. This text focuses on the principles and fundamentals of programming languages and computers in general, and uses Java as it's language of instruction.

A Java tutorial by Hamed Alhoori, instructor at the University Of Bahrain.

Full Java Tutorial

En Castellano:

o Curso de Java practico o Applets Java o Tutorial de Java básico o Manual de Java

Page 33: Lenguajaes d p

o Apuntes de java o [9] Introduccion a java

Recursos [editar]

Java (Sun) Desarrollo de Software en Java Comunidad virtual para el

intercambio de información en castellano sobre desarrollo de software en Java para profesionales practicantes, docentes y estudiantes.

Computer-Books.us Colección de libros sobre Java disponibles para descarga gratuita.

Javapedia project La Wiki de Java.net Sun Certification Resource JavaRSS.com Portal de sitios Web sobre lenguaje Java. developerWorks Java Zone - Comunidad de recursos Java JavaWhat.com Directorio de recursos de Java Información, ejemplos de programas, mini tutoriales, fuentes de

información Desarrollo en JavaDesarrollo en Java Ejemplos, programas, foros y manuales en java

IDEs para Java [editar]

BEA Workshop – software comercial, desarrollado por BEA Systems, integrado con BEA WebLogic

BlueJ – libre, desarrollado como un proyecto de investigación universiatario. BlueJ es también un entorno interactivo adecuado para aprender Java

Eclipse – libre y de código abierto, Eclipse es desarrollado por la Fundación Eclipse

IntelliJ IDEA – software comercial, IntelliJ IDEA es desarrollado por JetBrains

JBuilder – software comercial (existe una versión gratuita). JBuilder es desarrollado por Borland

JCreator – software comercial(existe una versión gratuita) desarrollado por Xinox

JDeveloper – IDE gratuito desarrollado por Oracle Corporation e integrado con Oracle Application Server

NetBeans – IDE y plataforma base para aplicaciones ricas de escritorio (Rich Apps) gratuito de código abierto desarrollado por NetBeans.org

Sun Java Studio Enterprise – software comercial (gratis para los miembros de Sun Developer Network), desarrollado por Sun Microsystems

WebSphere Developer & Development Studio – software comercial, desarrollado por IBM, integrado con WebSphere Application Server

Page 34: Lenguajaes d p

JGrasp - Software gratuito desarrollado por el Department of Computer Science and Software Engineering en el the Samuel Ginn College of Engineering de la Universidad de Auburn. Es un ambiente de desarrollo muy ligero para Java, C, C++, Objective C, Ada y VHDL. Integra diagramas UML para Java y Diagramas de Estructuras de Control.

Historia [editar]

Conozca más sobre la tecnología Java

La tecnología Java se creó como una herramienta de programación en una pequeña operación secreta y anónima denominada "the Green Project" en Sun Microsystems en el año 1991.

El equipo secreto ("Green Team"), compuesto por trece personas y dirigido por James Gosling, se encerró en una oficina desconocida de Sand Hill Road en Menlo Park, interrumpió todas las comunicaciones regulares con Sun y trabajó sin descanso durante 18 meses.

Intentaban anticiparse y prepararse para el futuro de la informática. Su conclusión inicial fue que al menos en parte se tendería hacia la convergencia de los dispositivos digitales y los ordenadores.

El resultado fue un lenguaje de programación que no dependía de los dispositivos denominado "Oak".

Para demostrar cómo podía contribuir este nuevo lenguaje al futuro de los dispositivos digitales, el equipo desarrolló un controlador de dispositivos de mano para uso doméstico destinado al sector de la televisión digital por cable. Por desgracia, la idea resultó ser demasiado avanzada para el momento y el sector de la televisión digital por cable no estaba listo para el gran avance que la tecnología Java les ofrecía.

Pero poco tiempo después Internet estaba listo para la tecnología Java y, justo a tiempo para su presentación en público en 1995, el equipo pudo anunciar que el navegador Netscape Navigator incorporaría la tecnología Java.

Actualmente, a punto de cumplir los 10 años de existencia, la plataforma Java ha atraído a cerca de 4 millones de desarrolladores de software, se utiliza en los principales sectores de la industria de todo el mundo y está presente en un gran número de dispositivos, ordenadores y redes de cualquier tecnología de programación.

De hecho, su versatilidad y eficiencia, la portabilidad de su plataforma y la seguridad que aporta, la han convertido en la tecnología ideal para su aplicación a redes, de manera que hoy en día, más de 2.500 millones de dispositivos utilizan la tecnología Java. Más de 700

Page 35: Lenguajaes d p

millones de ordenadores 708 millones de teléfonos móviles y otros dispositivos de mano (fuente: Ovum) 1000 millones de tarjetas inteligentes Además de sintonizadores, impresoras, web cams, juegos, sistemas de navegación para automóviles, terminales de lotería, dispositivos médicos, cajeros de pago en aparcamientos, etc. Hoy en día, puede encontrar la tecnología Java en redes y dispositivos que comprenden desde Internet y superordenadores científicos hasta portátiles y teléfonos móviles; desde simuladores de mercado en Wall Street hasta juegos de uso doméstico y tarjetas de crédito: Java está en todas partes.

El mejor modo de conocer todas estas aplicaciones es accediendo a java.com, un lugar fundamental para realizar compras y conocer los productos que, asimismo, constituye un recurso de información central para empresas, consumidores y desarrolladores de software que utilicen la tecnología Java.

Por qué los desarrolladores de software eligen la tecnología Java

El lenguaje de programación Java ha sido totalmente mejorado, ampliado y probado por una comunidad activa de unos cuatro millones de desarrolladores de software.

La tecnología Java, una tecnología madura, extremadamente eficaz y sorprendentemente versátil, se ha convertido en un recurso inestimable ya que permite a los desarrolladores: Desarrollar software en una plataforma y ejecutarlo en prácticamente cualquier otra plataforma Crear programas para que funcionen en un navegador Web y en servicios Web Desarrollar aplicaciones para servidores como foros en línea, tiendas, encuestas, procesamiento de formularios HTML, etc. Combinar aplicaciones o servicios basados en la tecnología Java para crear servicios o aplicaciones totalmente personalizados Desarrollar potentes y eficientes aplicaciones para teléfonos móviles, procesadores remotos, productos de consumo de bajo coste y prácticamente cualquier dispositivo digital

Page 36: Lenguajaes d p

Visual Basic es un lenguaje de programación desarrollado por Alan Cooper para Microsoft. El lenguaje de programación es un dialecto de BASIC, con importantes añadidos. Su primera versión fue presentada en 1991 con la intención de simplificar la programación utilizando un ambiente de desarrollo completamente gráfico que facilitara la creación de interfaces gráficas y en cierta medida también la programación misma. Visual Basic fue discontinuado por Microsoft hace ya varios años. Muchos programadores estan migrando a Real Basic o hacia Delphi que es un entorno de desarrollo mas avanzado y mucho mas actual (ultima edicion en 2007 y con planes anunciados hasta el 2009). Microsoft propone abandonar el desarrollo en Win32 y pasar al Visual Basic.NET que presenta serias incompatibilidades con el codigo Visual Basic existente.

Características generales [editar]

Es un lenguaje de fácil aprendizaje pensado tanto para programadores principiantes como expertos, guiado por eventos, y centrado en un motor de formularios que facilita el rápido desarrollo de aplicaciones gráficas. Su sintaxis, derivada del antiguo BASIC, ha sido ampliada con el tiempo al agregarse las características típicas de los lenguajes estructurados modernos. Se ha agregado una implementación limitada de la programación orientada a objetos (los propios formularios y controles son objetos), aunque sí admite el polimorfismo mediante el uso de los Interfaces, no admite la herencia. No requiere de manejo de punteros y posee un manejo muy sencillo de cadenas de caracteres. Posee varias bibliotecas para manejo de bases de datos, pudiendo conectar con cualquier base de datos a través de ODBC (Informix, DBase, Access, MySQL, SQL Server, PostgreSQL ,etc) a través de ADO.

Es utilizado principalmente para aplicaciones de gestión de empresas, debido a la rapidez con la que puede hacerse un programa que utilice una base de datos sencilla, además de la abundancia de programadores en este lenguaje.

El compilador de Microsoft genera ejecutables que requieren una DLL para que funcionen, en algunos casos llamada MSVBVMxy.DLL (acrónimo de "MicroSoft Visual Basic Virtual Machine x.y", siendo x.y la versión) y en otros VBRUNXXX.DLL ("Visual Basic Runtime X.XX"), que provee todas las funciones implementadas en el lenguaje. Además existen un gran número de bibliotecas (DLL) que facilitan el acceso a muchas funciones del sistema operativo y la integración con otras aplicaciones. Sin embargo esto sólo es una limitación en sistemas obsoletos, ya que las bibliotecas necesarias para ejecutar

Page 37: Lenguajaes d p

programas en Visual Basic vienen de serie en todas las versiones de Windows desde Windows 2000.

Derivados [editar]

Su derivado VBScript es el lenguaje predeterminado para Active Server Pages (ASP).

Además, una extensión propia del lenguaje llamada Visual Basic for Applications (VBA) permite codificar módulos (a veces llamados macros) para las aplicaciones de Microsoft Office.

Especialmente a partir de la versión 6 del lenguaje, se permite la interacción y generación de objetos remotos que puedan ser invocados desde páginas de scripts (concretamente las ASP, aunque no es imposible hacer un enlace empleando JSP), alojándolos en servidores de web.

Visual Basic.NET, parte de .NET, es un lenguaje prácticamente equivalente en funcionalidades a C# (por ejemplo, no admite pseudo-punteros), añadiendo capacidades de POO como herencia, polimorfismo...

Versiones [editar]

Las versiones de Visual Basic para Windows son muy conocidas, pero existe una versión de Microsoft Visual Basic 1.0 para MS-DOS (ediciones Profesional y Estándar) menos difundida y que data de 1992. Era un entorno que, aunque en modo texto, incluía un diseñador de formularios en el que se podían arrastrar y soltar distintos controles.

La última versión sólo para 16 bits, la 3.0, incluía ya una detallada biblioteca de componentes para toda clase de usos. Durante la transición de Windows 3.11 a Windows 95, apareció la versión 4.0, que podía generar programas de 16 y 32 bits a partir de un mismo código fuente, a costa de un gran aumento en el tamaño de los archivos "runtime" necesarios. Además, se sustituyen los controles VBX por los nuevos OCX. Con la versión 5.0, se implementó por primera vez la posibilidad de compilar a código nativo, obteniendo una mejora de rendimiento considerable. Tanto esta como la posterior 6.0 soportaban características propias de los lenguajes orientados a objetos, aunque careciendo de algunos ítems importantes como la herencia, el polimorfismo y la sobrecarga. La version 6.0 continua utilizándose masivamente.

Las versiones actuales de Visual Basic se basan en la plataforma .NET, la versión 7 del lenguaje fue implementada por Microsoft en el programa Visual Basic .NET mientras que la versión 8 fue implementada el programa Visual Basic 2005. Ambas versiones tienen muchas de las características del lenguaje original tienen numerosas diferencias que los hacen incompatibles. En muchos casos

Page 38: Lenguajaes d p

para portar un código escrito en Visual Basic 6 a Visual Basic .Net se hace necesario reescribir parte del código. La nueva versión del lenguaje es mayormente equivalente a C# aunque presenta algunas diferencias. Por eso hay un debate sobre la validez de esta nueva versión del lenguaje y sus ventajas y desventajas sobre C#.

Ventajas e inconvenientes [editar]

Ventajas

La facilidad del lenguaje permite crear aplicaciones para Windows en muy poco tiempo. En otras palabras, permite un desarrollo eficaz y menor inversión en tiempo que con otros lenguajes.

Permite generar librerías dinámicas (DLL) ActiveX de forma nativa y Win32 (no ActiveX, sin interfaz COM) mediante una reconfiguración de su enlazador en el proceso de compilación.

Permite la utilización de formularios (Forms) tanto a partir de recursos (como en otros lenguajes) como utilizando un IDE para diseñarlos.

Posibilidad de desarrollar y ejecutar aplicaciones de Visual Basic 6.0 en Windows Vista sin realizar cambios en la mayoría de los casos pero no se logra aprovechar al máximo las caracteristicas de este sistema como permite hacerlo Visual Basic 2005 o el próximo Visual Basic 9 de Visual Studio Orcas (Noviembre 2007).

Inconvenientes

Es software propietario por parte de Microsoft, por tanto nadie que no sea del equipo de desarrollo de esta compañía decide la evolución del lenguaje.

En Visual Basic 6.0 y anteriores sólo existe un compilador e IDE, llamado igual que el lenguaje.

No existe forma alguna de exportar el código a otras plataformas fuera de Windows.

Los ejecutables generados son relativamente lentos en Visual Basic 6.0 y anteriores al ser codigo pseudo-interpretado.

Por defecto permite la programación sin declaración de variables. (que puede ser sencillamente corregida escribiendo la frase Option Explicit en el encabezado de cada formulario, en cuyo caso será menester declarar todas las variables a utilizar, lo que a la postre genera código más puro).

Su sintaxis no es case sensitive (no distinge entre minusculas y mayúsculas como C++ por ejemplo)

NO permite programación a bajo nivel ni incrustrar secciones de código en ASM.

Sólo permite el uso de funciones de librerías dinámicas (DLL) stdcall.

Page 39: Lenguajaes d p

Fuerte dependencia de librerías y componentes en las versiones 6.0 y anteriores, lo que dificultaba la distribución de los desarrollos entre maquinas.

Algunas funciones están indocumentadas. La escasa implementación de POO en Visual Basic 6.0 y

anteriores no permite sacar el máximo provecho de este modelo de programación.

NO soporta tratamiento de procesos como parte del lenguaje. El manejo de errores que tiene mediante la orden on error no

sigue los patrones estructurados. NO incluye operadores de desplazamiento de bits como

parte del lenguaje. NO permite el manejo de memoria dinámica, punteros, etc.

como parte del lenguaje. NO avisa de ciertos errores o advertencias (se puede

configurar el compilador para generar ejecutables sin los controladores de desbordamiento de enteros o las comprobaciones de límites en matrices entre otros, dejando así más de la mano del programador la tarea de controlar dichos errores)

El tratamiento de mensajes de Windows es básico e indirecto.

La gran gama de controles incorporados son, sin embargo en algunos casos, muy generales, lo que lleva a tener que reprogramar nuevos controles para una necesidad concreta de la aplicación. Esto cambia radicalmente en Visual Basic .NET donde es posible reprogramar y mejorar o reutilizar los controles existentes.

Los controles personalizados no mejoran la potencia de la API de Windows, y en determinados casos acudir a ésta será el único modo de conseguir el control personalizado deseado.

Su periodo de Soporte Tecnico lo determina Microsoft. En el caso de Visual Basic 6.0 su Soporte Extendido dura hasta el 04 de Abril de 2008.

Entornos de desarrollo [editar]

Existen dos entornos de desarrollo IDE para Visual Basic: el Microsoft Visual Basic x.0 para versiones desde la 1.0 hasta la 6.0, (con las diferencias entre las versiones desde la 1.0 (MS-DOS/Windows 3.1) hasta la 3.0 (16 bits, Windows 3.1) y las de la 4.0 (16/32 bits, Windows 3.1/95/NT) hasta la 6.0 (32 bits, Windows 9x/Me/NT/2000/XP/Vista) y el Microsoft Visual Studio .NET, entorno integrado para varios lenguajes entre ellos Visual Basic .NET (32/64 Bits, Windows XP/Vista), con edición standard y profesional (más completa en herramientas pero con licencia comercial) y edición express (más limitada en herramientas pero gratuita), ambos diseñados por Microsoft. Existen alternativas gratuitas como SharpDevelop para .NET y Proyecto Mono.

Page 40: Lenguajaes d p

Compiladores [editar]

Dada la naturaleza del lenguaje, el compilador por excelencia es Microsoft Visual Basic que a su vez es un IDE para el lenguaje; sin embargo existen muchos otros IDEs y compiladores entre los que se encuentran

SharpDevelop Mono Microsoft .NET framework SDK PowerBasic Objeto, Propiedad y Metodo

C+++

El C++ es un lenguaje de programación, diseñado a mediados de los años 1980, por Bjarne Stroustrup, como extensión del lenguaje de programación C.

Se puede decir que C++ es un lenguaje que abarca tres paradigmas de la programación: la programación estructurada, la programación genérica y la programación orientada a objetos.

Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más

Page 41: Lenguajaes d p

modernos. Existen también algunos intérpretes como ROOT (enlace externo). Las principales características del C++ son las facilidades que proporciona para la programación orientada a objetos y para el uso de plantillas o programación genérica (templates).

Además posee una serie de propiedades difíciles de encontrar en otros lenguajes de alto nivel:

Posibilidad de redefinir los operadores (sobrecarga de operadores)

Identificación de tipos en tiempo de ejecución (RTTI)

C++ está considerado por muchos como el lenguaje más potente, debido a que permite trabajar tanto a alto como a bajo nivel, sin embargo es a su vez uno de los que menos automatismos trae (obliga a hacerlo casi todo manualmente al igual que C) lo que "dificulta" mucho su aprendizaje.

El nombre C++ fue propuesto por Rick Masciatti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En C++, "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C.

Un ejemplo [editar]

A continuación se cita un programa de ejemplo un "Hola Mundo" escrito en C++:

#include <iostream> using namespace std; int main(){ cout << "¡Hola mundo!" << endl; return 0;}

Conceptos generales de la programación orientada a objetos [editar]

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 ).

Objeto: Es la implementacion 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.

Page 42: Lenguajaes d p

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.

Herencia: Es la capacidad que tienen las clases para heredar propiedades y métodos de otras clases.

Tipos Primitivos en C++ [editar]

Los tipos de datos en C++ pueden clasificarse como "enteros" (sin decimales) o "flotantes" (con decimales, tienen representación con coma flotante):

1. Enteros 1. int 2. long int 3. long long 4. short 5. char 6. wchar_t

2. Flotantes 1. float (IEEE754 Simple) 2. double (IEEE754 Normal) 3. long double (IEEE754 Extendido)

El modificador unsigned se puede aplicar a enteros para obtener números sin signo (por defecto los enteros contienen signo), con lo que se consigue un rango mayor de números naturales.

Tamaños Asociados [editar]

Según la máquina y el compilador que se utilice los tipos primitivos pueden ocupar un determinado tamaño en memoria. La siguiente lista ilustra el número de bits que ocupan los distintos tipos primitivos en un PC de la familia 386 con gcc.

+ Tamaños de tipos primitivos bajo i386 (GCC)

Cabe notar que los tamaños en bits destacados anteriormente son correctos sólo para arquitecturas x86 bajo los compiladores más comunes (GCC, Visual Studio...). Otras arquitecturas pueden requerir distintos tamaños de tipos de datos primitivos. C++ no dice nada acerca de cuál es el número de bits en un byte, ni del tamaño de estos tipos; más bien, ofrece solamente las siguientes "garantías de tipos":

TipoNúmero de Bits

char 8

short 16

int 32

float 32

double

64

Page 43: Lenguajaes d p

Un tipo char tiene el tamaño mínimo en bytes asignable por la máquina, y todos los bits de este espacio deben ser "accesibles".

El tamaño reconocido de char es de 1. Es decir,

sizeof(char)

siempre devuelve 1.

Un tipo short tiene al menos el mismo tamaño que un tipo char. Un tipo long tiene al menos el doble tamaño en bytes que un

tipo short. Un tipo int tiene un tamaño entre el de short y el de long,

ambos inclusive, preferentemente el tamaño de un apuntador de memoria de la máquina.

Un tipo unsigned tiene el mismo tamaño que su versión signed.

wchar_t [editar]

Para la versión del estándar que se publicó en 1999, se decidió añadir el tipo de dato wchar_t, que permite el uso de caracteres UNICODE, a diferencia del tradicional char, que contempla simplemente al código de caracteres ASCII extendido. A su vez, se ha definido para la mayoría de las funciones y clases tanto de C como de C++ una versión para trabajar con wchar_t, donde usualmente se prefija el caracter w al nombre de la función (en ocasiones el caracter es un infijo). Por ejemplo:

#strcpy - wstrcpy#std::string - std::wstring#std::cout - std::wcout

Cabe resaltar que en C, se define wchar_t como:

typedef unsigned short wchar_t;

mientras que en C++ es en sí mismo un tipo de dato.

La Palabra Clave "void" [editar]

La palabra clave void define en C++ el concepto de no existencia, o no atribución de un tipo en una variable o declaración. Como tal, puede ser usada para destacar que una función no recibe parámetros, como en:

int funcion (void);

, aunque la tendencia actual es la de no colocar la palabra "void".

Page 44: Lenguajaes d p

Además se utiliza para determinar que una función no retorna un valor, como en:

void funcion (int parametro);

Cabe destacar que void no es un tipo. Una función como la declarada anteriormente no puede retornar un valor por medio de return: la palabra clave va sola. No es posible una declaración del tipo:

void t;

En este sentido, void se comporta de forma ligeramente diferente a como lo hace en C, especialmente en cuanto a su significado en declaraciones y prototipos de funciones.

Sin embargo, la forma especial void * puede utilizarse como un ajuste que convierte cualquier variable a una "variable sin tipo", la cual puede sólo ser accedida y utilizada bajo una operación de cast. Por ejemplo:

void * memoria;

Indica que memoria es un puntero a alguna parte, donde se guarda información de algún tipo. El programador es responsable de definir estos "algún", eliminando toda ambigüedad. Una ventaja de la declaración "void *" es que puede representar a la vez varios tipos de datos, dependiendo de la operación de cast escogida. La memoria que hemos apuntado en alguna parte, en el ejemplo anterior, bien podría almacenar un entero, un flotante, una cadena de texto, o un programa, o combinaciones de éstos. Es responsabilidad del programador recordar qué tipo de datos hay y garantizar el acceso adecuado.

Principios [editar]

Todo programa en C++ debe tener la función main() (a no ser que se especifique en tiempo de compilación otro punto de entrada, que en realidad es la función que tiene el main() :

int main(){}

La función main debe tener uno de los siguientes prototipos:int main()int main(int argc, char** argv)

La primera es la forma por defecto de un programa que no recibe parámetros ni argumentos. La segunda forma tiene dos parámetros: argc, un número describiendo el número de argumentos del

Page 45: Lenguajaes d p

programa (incluyendo el nombre del programa mismo), y argv, un puntero a un array de punteros, de argc elementos, donde el elemento argv[i] representa el i-ésimo argumento entregado al programa.

El tipo de retorno de main es int. Al finalizar la función main, debe incluirse el valor de retorno (por ejemplo, return 0;, aunque el estándar prevé solamente dos posibles valores de retorno: EXIT_SUCCESS y EXIT_ERROR, definidas en el archivo cstddef), o salir por medio de la función exit. Alternativamente puede dejarse en blanco, en cuyo caso el compilador es responsable de agregar la salida adecuada.

El Concepto de Clase [editar]

Los objetos en C++ son abstraídos mediante una Clase. Según el paradigma de la programación orientada a objetos un objeto consta de:

1. Métodos o funciones 2. Atributos o Variables Miembro

Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas características (atributos). Su número de patas, el color de su pelaje o su tamaño son algunos de sus atributos. Las funciones que lo hagan ladrar, cambiar su comportamiento... esas son las funciones de la clase.

Este es otro ejemplo de una clase:

class Punto{//por defecto los miembros son 'private' para que solo se puedan modificar desde la propia clase.private: // Variable miembro privada int id;protected: // Variables miembro protegidas int x; int y;public: // Constructor Punto(); // Destructor ~Punto(); // Funciones miembro o métodos int ObtenerX(); int ObtenerY();};

Page 46: Lenguajaes d p

Constructores [editar]

Son unos métodos especiales que se ejecutan automáticamente al crear un objeto de la clase. En su declaración no se especifica el tipo de dato que devuelven, y poseen el mismo nombre que la clase a la que pertenecen. Al igual que otros métodos, puede haber varios constructores sobrecargados, aunque no pueden existir constructores virtuales.

Como característica especial a la hora de implementar un constructor, justo después de la declaración de los parámetros, se encuentra lo que se llama "lista de inicializadores". Su objetivo es llamar a los constructores de los atributos que conforman el objeto a construir.

Cabe destacar que no es necesario declarar un constructor al igual que un destructor... Pues el compilador lo puede hacer (no es la mejor forma de programar xd)...

Tomando el ejemplo de la Clase Punto, si deseamos que cada vez que se cree un objeto de esta clase las coordenadas del punto sean igual a cero podemos agregar un constructor como se muestra a continuación:

// Clase Punto//-----------------------------------------------------------------------class Punto{public: // Coordenadas del punto float x; float y; // Constructor Punto() : x ( 0 ) , y ( 0 ) // Inicializamos las variables "x" e "y" {} };//----------------------------------------------------------------------- // Main para demostrar el funcionamiento de la clase #include <iostream> // Esto nos permite utilizar la funcion COUT using namespace std; int main(){

Page 47: Lenguajaes d p

Punto MiPunto; // creamos un elemento de la clase Punto llamado MiPunto cout<<"Coordenada X:"<<MiPunto.x<<endl; // mostramos el valor acumulado en la variable x cout<<"Coordenada Y:"<<MiPunto.y<<endl; // mostramos el valor acumulado en la variable y return 0;}

Si compilamos y ejecutamos el anterior programa, obtenemos una salida que debe ser similar a la siguiente:

Coordenada X:0 Coordenada Y:0

Destructores [editar]

Los destructores son funciones miembro especiales llamadas automáticamente en la ejecución del programa, y que por tanto no deben ser llamadas explícitamente por el programador. Su cometido es liberar los recursos computacionales que el objeto de dicha clase haya adquirido en tiempo de ejecución al expirar este.

Los destructores son invocados automáticamente al alcanzar el flujo del programa el fin del ámbito en el que está declarado el objeto.

Existen dos tipos de destructores pueden ser públicos o privados, según si se declaran:

si es publico se llama desde cualquier parte del programa para destruir el objeto.

si es privado no se permite la destrucción del objeto por el usuario.

Funciones Miembro [editar]

Función miembro es aquella que está declarada en ámbito de clase. Son similares a las funciones habituales, con la salvedad de que el compilador realizara el proceso de Decoración de nombre (Name Mangling en inglés): Cambiara el nombre de la función añadiendo un identificador de la clase en la que está declarada, pudiendo incluir caracteres especiales o identificadores numéricos. Además, las funciones miembro reciben implícitamente un parámetro adicional: El puntero this, que referencia al objeto que ejecuta la función.

Las funciones miembro se invocan accediendo primero al objeto al cual refieren, con la sintaxis: myobject.mymemberfunction(), esto es un claro ejemplo de una funcion miembro..

Page 48: Lenguajaes d p

Plantillas [editar]

Las plantillas son el mecanismo de C++ para implantar el paradigma de la programación genérica. Permiten que una clase o función trabaje con tipos de datos abstractos, especificándose más adelante cuales son los que se quieren usar. Por ejemplo, es posible construir un vector genérico que pueda contener cualquier tipo de estructura de datos. De esta forma se pueden declarar objetos de la clase de este vector que contengan enteros, flotantes, polígonos, figuras, fichas de personal, etc.

La declaración de una plantilla se realiza anteponiendo la declaración template <typename A, ....> a la declaración de la estructura (clase, estructura o función) deseado.

Por ejemplo:

template <typename T>T max(T x, T y){ if (x > y) return x; else return y;}

La función max() es un ejemplo de programación genérica, y dados dos parámetros de un tipo T (que puede ser int, long, float, double, etc.) devolverá el mayor de ellos (usando el operador >). Al ejecutar la función con parámetros de un cierto tipo, el compilador intentará "calzar" la plantilla a ese tipo de datos, o bien generará un mensaje de error si fracasa en ese proceso.

Especialización [editar]

El siguiente ejemplo:

template <typename A> int myfunction(A a);

crea una plantilla bajo la cual pueden ser definidas en el código de cabecera cualesquiera funciones especializadas para un tipo de datos como int myfunction(int), int myfuntion(std::string), int myfunction(bool), etcétera:

int myfunction (int a) { return a + 5; }; int myfunction (std::string a) { return -a.size();

Page 49: Lenguajaes d p

}; int myfunction (bool a) { return (a & rand() ); };

Cada una de estas funciones tiene su propia definición (cuerpo). Cada cuerpo diferente, no equivalente ("no convertible") corresponde a una especialización. Si una de estas funciones no fuera definida, el compilador tratará de aplicar las conversiones de tipos de datos que le fuesen permitidas para "calzar" una de las plantillas, o generará un mensaje de error si fracasa en ese proceso.

Todas las definiciones habilitadas de una plantilla deben estar disponibles al momento de la compilación, por lo cual no es posible actualmente "compilar" una plantilla como archivo de objeto, sino simplemente compilar especializaciones de la plantilla. Por lo tanto, las plantillas se distribuyen junto con el código fuente de la aplicación. En otras palabras, no es posible compilar la plantilla std::vector< > a código objeto, pero sí es posible, por ejemplo, compilar un tipo de datod std::vector<std::string>.

Clases Abstractas [editar]

En C++ es posible definir clases abstractas. Una clase abstracta, o clase base abstracta (ABC), es una que está diseñada sólo como clase padre de las cuales se deben derivar clases hijas. Una clase abstracta se usa para representar aquellas entidades o métodos que después se implementarán en las clases derivadas, pero la clase abstracta en sí no contiene ninguna implementación -- solamente representa los métodos que se deben implementar. Por ello, no es posible instanciar una clase abstracta, pero sí una clase concreta que implemente los métodos definidos en ella.

Las clases abstractas son útiles para definir interfaces, es decir, un conjunto de métodos que definen el comportamiento de un módulo determinado. Estas definiciones pueden utilizarse sin tener en cuenta la implementación que se hará de ellos.

En C++ los métodos de las clases abstractas se definen como funciones virtuales puras.

class Abstracta{ public: virtual int metodo() = 0;}; class ConcretaA : public Abstracta{

Page 50: Lenguajaes d p

public: int metodo() { //haz algo return foo () + 2; }}; class ConcretaB : public Abstracta{ public: int metodo() { //otra implementacion return baz () - 5; }};

En el ejemplo, la clase ConcretaA es una implementación de la clase Abstracta, y la clase ConcretaB es otra implementación. Debe notarse que el = 0 es la notación que emplea C++ para definir funciones virtuales puras.

Espacios de Nombres [editar]

Una adición a las características de C son los espacios de nombre (namespace en inglés), los cuales pueden describirse como áreas virtuales bajo las cuales ciertos nombres de variable o tipos tienen validez. Esto permite evitar las ocurrencias de conflictos entre nombres de funciones, variables o clases.

El ejemplo más conocido en C++ es el espacio de nombres std::, el cual almacena todas las definiciones nuevas en C++ que difieren de C (algunas estructuras y funciones), así como las funcionalidades propias de C++ (streams) y los componentes de la biblioteca STL.

Por ejemplo:

#include <iostream>// Las funciones en esta cabecera existen dentro del espacio de nombres std:: namespace mi_paquete{ int mi_valor;}; int main(){ int mi_valor= 3; mi_paquete::mi_valor= 4;

Page 51: Lenguajaes d p

std::cout<< mi_valor<< '\n'; // imprime '3' std::cout<< mi_paquete::mi_valor<< '\n'; // imprime '4' return 0; }

Como puede verse, las invocaciones directas a mi_valor darán acceso solamente a la variable descrita localmente; para acceder a la variable del paquete mi_paquete es necesario acceder específicamente el espacio de nombres. Un atajo recomendado para programas sencillos es la directiva using namespace, que permite acceder a los nombres de variables del paquete deseado en forma directa, siempre y cuando no se produzca alguna ambigüedad o conflicto de nombres.

Excepciones [editar]

C++ permite la existencia de excepciones, las cuales son una metodología de flujo de ejecución basada en la prueba del código deseado (try) seguida por la intercepción de ciertas condiciones bajo un flujo de programa adicional (catch). La declaración de estas condiciones se hace "arrojando" (throw) sentencias especiales que son capturadas por el flujo catch correspondiente.

Por ejemplo:

#include <iostream> // Demuestra el uso de try y catch int main(){std::string x = "Hola Mundo"; try { std::cout<< x.at(99)<<std::endl;}catch (std::exception& X) { std::cerr<< X.what()<<std::endl;} return 0; }

En el ejemplo anterior, se hace el intento de acceder al caracter número 99 de la cadena "Hola Mundo", el cual no existe. El tipo de datos std::string arroja en estos casos, en la llamada a la función "at", una excepción, del tipo std::out_of_range, derivado de std::exception. El bloque catch "atrapará" la excepción arrojada como una variable X,

Page 52: Lenguajaes d p

para la cual el método what() muestra un mensaje con la causa del error (en nuestro caso, un mensaje similar a "Index Out of Range").

Es buena idea al crear nuevas excepciones derivarlas de std::exception ya que es el bloque catch que muchos programadores colocan por defecto.

Si una excepción se propaga sin ser atrapada por un bloque catch, y llegara hasta el punto de terminación del programa, se produce la terminación abrupta de éste ("abort").

Herencia [editar]

Existen varios tipos de herencia entre clases en el lenguaje de programación C++. Estos son:

Herencia Simple [editar]

La herencia en C++ es un mecanismo de abstracción creado para poder facilitar, y mejorar el diseño de las clases de un programa. Con ella se pueden crear nuevas clases a partir de clases ya hechas, siempre y cuando tengan un tipo de relación especial.

En la herencia, las clases derivadas "heredan" los datos y las funciones miembro de las clases base, pudiendo las clases derivadas redefinir estos comportamientos (polimorfismo) y añadir comportamientos nuevos propios de las clases derivadas. Para no romper el principio de encapsulamiento (ocultar datos cuyo conocimiento no es necesario para el uso de las clases), se proporciona un nuevo modo de visibilidad de los datos/funciones: "protected". Cualquier cosa que tenga visibilidad protected se comportará como pública en la clase Base y en las que componen la jerarquía de herencia, y como privada en las clases que NO sean de la jerarquía de la herencia.

Antes de utilizar la herencia, nos tenemos que hacer una pregunta, y si tiene sentido, podemos intentar usar esta jerarquía: Si la frase <claseB> ES-UN <claseA> tiene sentido, entonces estamos ante un posible caso de herencia donde clase A será la clase base y clase B la derivada.

Ejemplo: clases Barco, Acorazado, Carguero, etc... un Acorazado ES-UN Barco, un Carguero ES-UN Barco, un Trasatlántico ES-UN Barco, etc...

En este ejemplo tendríamos las cosas generales de un Barco (en C++)

class Barco { protected:

Page 53: Lenguajaes d p

char* nombre; float peso; public: //Constructores y demás funciones básicas de barco};

y ahora las características de las clases derivadas, podrían (a la vez que heredan las de barco) añadir cosas propias del subtipo de barco que vamos a crear, por ejemplo:

Class Carguero: public Barco { // Esta es la manera de especificar que hereda de Barco private: float carga; //El resto de cosas}; Class Acorazado: public Barco { private: int numeroArmas; int Soldados; // Elresto de cosas};

Por último, hay que mencionar que existen 3 clases de herencia que se diferencian en el modo de manejar la visibilidad de los componentes de la clase resultante:

Herencia publica (class Derivada: public Base ) : Con este tipo de herencia se respetan los comportamientos originales de las visibilidades de la clase Base en la clase Derivada.

Herencia privada (clase Derivada: private Base) : Con este tipo de herencia todo componente de la clase Base, será privado en la clase Derivada (ojo! siempre será privado aunque ese dato fuese público en la clase Base)

Herencia protegida (clase Derivada: protected Base) : Con este tipo de herencia, todo componente publico y protegido de la clase Base, será protegido en la clase Derivada, y los componentes privados, siguen siendo privados.

Herencia Múltiple [editar]

La herencia múltiple es el mecanismo que permite al programador hacer clases derivadas a partir, no de una sola clase base, sino de varias. Para entender esto mejor, pongamos un ejemplo: Cuando ves a quien te atiende en una tienda, como persona que es, podrás suponer que puede hablar, comer, andar, pero, por otro lado, como empleado que es, también podrás suponer que tiene un jefe, que puede cobrarte dinero por la compra, que puede devolverte el

Page 54: Lenguajaes d p

cambio, etc... Si esto lo trasladamos a la programación sería herencia múltiple (clase empleado_tienda):

class Persona { ... Hablar(); Caminar(); ...}; class Empleado { Persona jefe; int sueldo; Cobrar(); ...}; class empleado_tienda: public Persona, Empleado { ... AlmacenarStock(); ComprobarExistencias(); ...};

Por tanto, es posible utilizar más de una clase para que otra herede sus características.

Sobrecarga de Operadores [editar]

Es posible definir el comportamiento de un operador del lenguaje para que trabaje con tipos de datos definidos por el usuario. No todos los operadores de C++ son factibles de sobrecargar, y, entre aquellos que pueden ser sobrecargados, se deben cumplir condiciones especiales. En particular, los operadores sizeof y :: no son sobrecargables.

No es posible en C++ crear un operador nuevo.

Los comportamientos de los operadores sobrecargados se implementan de la misma manera que una función, salvo que esta tendrá un nombre especial: Tipo de dato de devolución operator<token del operador> (parámetros)

Los siguientes operadores pueden ser sobrecargados:

Operadores Unarios o Operador * (de indirección) o Operador -> (de indirección) o Operador +

Page 55: Lenguajaes d p

o Operador - o Operador ++ o Operador --

Operadores Binarios o Operador + o Operador - o Operador * o Operador / o Operador % o Operador << o Operador >> o Operador & o Operador ^ o Operador | o Operador [] o Operador ()

Operadores de Asignación o Operador = o Operador += o Operador -= o Operador *= o Operador /= o Operador %= o Operador <<= o Operador >>= o Operador &= o Operador ^= o Operador |=

Otros operadores o Operador , (coma) o Operador new o Operador delete

Dado que estos operadores son definidos para un tipo de datos definido por el usuario, éste es libre de asignarles cualquiera semántica que desee. Sin embargo, se considera de primera importancia que las semánticas sean tan parecidas al comportamiento natural de los operadores como para que el uso de los operadores sobrecargados sea intuitivo. Por ejemplo, el uso del operador unario - debiera cambiar el "signo" de un "valor".

Biblioteca Estándar de Plantillas (STL) [editar]

Los lenguajes de programación suelen tener una serie de bibliotecas integradas para la manipulación de datos a nivel más básico. En C++, además de poder usar las bibliotecas de C, se puede usar la nativa STL (Standard Template Library), propia del lenguaje. Proporciona una serie de clases parametrizadas (véase más arriba plantillas) que permite efectuar operaciones sobre el almacenado de datos,

Page 56: Lenguajaes d p

procesado y flujos de entrada/salida. La STL más que una biblioteca es un conjunto de ellas. De esta forma únicamente se incluyen en el fichero ejecutable final aquellas que sean necesarias para la aplicación que se esté programando, reduciendo drásticamente el uso innecesario de memoria.

ostreams / istreams [editar]

Cabe destacar las clases basic_ostream y basic_stream, y los objetos cout y cin, pertenecientes a estas clases, respectivamente. Proporcionan la entrada y salida estándar de datos (teclado/pantalla). También está disponible cerr, similar a cout, usado para la salida estándar de errores. Estas clases tienen sobrecargados los operadores << y >>, respectivamente, con el objeto de ser útiles en la inserción/extracción de datos a dichos flujos. Son operadores inteligentes, ya que son capaces de adaptarse al tipo de datos que reciben, aunque tendremos que definir el comportamiento de dicha entrada/salida para clases/tipos de datos definidos por el usuario. Por ejemplo:

ostream& operator<<(ostream& fs,const Punto& punto){ fs << punto.x << "," << punto.y; return fs;}

De esta forma, para mostrar un punto, solo habría que realizar la siguiente expresión:

//...Punto p(4,5);//...cout << "Las coordenadas son: " << p << endl;//...

Es posible formatear la entrada/salida, indicando el número de dígitos decimales a mostrar, si los textos se pasarán a minúsculas o mayúsculas, si los números recibidos están en formato octal o hexadecimal, etc.

fstreams [editar]

Tipo de flujo para el manejo de ficheros. La definición previa de ostreams/istreams es aplicable a este apartado. Existen tres clases (ficheros de lectura, de escritura o de lectura/escritura): ifstream,ofstream y fstream.

Pueden abrirse pasando al constructor los parámetros relativos a la ubicación del fichero y el modo de apertura:

Page 57: Lenguajaes d p

ios::ate al abrir el fichero, se posicionará al final

ios::trunc Al abrir, se borra el contenido

ios::app Modo "append": Se abrirá el fichero en modo de anexado

ios::binary Apertura de un fichero binario (esto es un concepto relativo al sistema operativo en cuestión, luego en muchas ocasiones, no es necesario)

Para cerrar un fichero, puede usarse el método close, o esperar a que el destructor de las clases lo cierre automáticamente.

sstreams [editar]

Se destacan dos clases, ostringstream e istringstream. Todo lo anteriormente dicho es aplicable a estas clases. Tratan a una cadena como si de un flujo de datos se tratase. ostringstream permite elaborar una cadena de texto insertando datos cual flujo, e istringstream puede extraer la información contenida en una cadena (pasada como parámetro en su constructor) con el operador >>. Ejemplos:

ostringstream s;s << nombre << "," << edad << "," << estatura << "," << punto(5,6) << endl;cout << s.str();istringstream s(cadena);s >> nombre >> edad >> estatura >> p;

Contenedores [editar]

Son clases plantillas especiales utilizadas para almacenar tipos de datos genéricos, sean cuales sean. Según la naturaleza del almacenado, disponemos de varios tipos:

Vectores: Se definen por vector<tipo_de_dato> nombre_del_vector;

Equivalen a los array de cualquier lenguaje, con diversas salvedades. Tienen tamaño dinámico, con lo que se puede insertar elementos aún si el vector está lleno. A diferencia de los vectores clásicos a bajo nivel de C, también pueden lanzar excepciones si se accede a un elemento cuyo rango está fuera del vector en cuestión, usando, en vez del operador [], el método at().

Colas dobles: son parecidas a los vectores, pero tienen mejor eficiencia para agregar o eliminar elementos en las "puntas".

Listas. Adaptadores de secuencia.

Page 58: Lenguajaes d p

Contenedores asociativos: map y multimap, que permiten asociar una "clave" con un "valor".

Contenedores asociativos: set y multiset, que ofrecen solamente la condición de "pertenencia", sin la necesidad de garantizar un ordenamiento particular de los elementos que contienen.

Iteradores [editar]

Pueden considerarse como una generalización de la clase de "puntero". Un iterador es un tipo de dato que permite el recorrido y la búsqueda de elementos en los contenedores. Como las estructuras de datos (contenedores) son clases genéricas, y los operadores (algoritmos) que deben operar sobre ellas son también genéricos (funciones genéricas), Stepanov y sus colaboradores tuvieron que desarrollar el concepto de iterador como elemento o nexo de conexión entre ambos. El nuevo concepto resulta ser una especie de punteros que señalan a los diversos miembros del contenedor (punteros genéricos que como tales no existen en el lenguaje).

Algoritmos [editar]

Combinando la utilización de templates y un estilo específico para denotar tipos y variables, la STL ofrece una serie de funciones que representan operaciones comunes, y cuyo objetivo es "parametrizar" las operaciones en que estas funciones se ven involucradas de modo que su lectura, comprensión y mantenimiento, sean más fáciles de realizar.

Un ejemplo es la función copy, la cual simplemente copia variables desde un lugar a otro. Más estrictamente, copia los contenidos cuyas ubicaciones están delimitadas por dos iteradores, al espacio indicado por un tercer iterador. La sintaxis es:

copy (inicio_origen, fin_origen, inicio_destino);

. De este modo, todos los datos que están entre inicio_origen e fin_origen, exclusive el dato ubicado en este último, son copiados a un lugar descrito o apuntado por inicio_destino.

Entre las funciones más conocidas están swap (variable1, variable2), que simplemente intercambia los valores de variable1 y variable2; max (variable1, variable2) y su símil min (variable1, variable2), que retornan el máximo o mínimo entre dos valores; find (inicio, fin, valor) que busca valor en el espacio de variables entre inicio y fin; etcétera.

Los algoritmos son muy variados, algunos incluso tienen versiones específicas para operar con ciertos iteradores o contenedores, y proveen un nivel de abstracción extra que permite obtener un código

Page 59: Lenguajaes d p

más "limpio", que "describe" lo que se está haciendo, en vez de hacerlo paso a paso explícitamente.

Diferencias de Tipos respecto de C [editar]

En C++, cualquier tipo de datos que sea declarado completo (fully qualified, en inglés) se convierte en un tipo de datos único. Las condiciones para que un tipo de datos T sea declarado completo son a grandes rasgos las siguientes:

Es posible al momento de compilación conocer el espacio asociado al tipo de datos (es decir, el compilador debe conocer el resultado de sizeof(T)).

T Tiene al menos un constructor, y un destructor, bien declarados.

Si T es un tipo compuesto, o es una clase derivada, o es la especificación de una plantilla, o cualquier combinación de las anteriores, entonces las dos condiciones establecidas previamente deben aplicar para cada tipo de dato constituyente.

En general, esto significa que cualquier tipo de datos definido haciendo uso de las cabeceras completas, es un tipo de datos completo.

En particular, y, a diferencia de lo que ocurría en C, los tipos definidos por medio de struct o enum son tipos completos. Como tales, ahora son sujetos a sobrecarga, conversiones implícitas, etcétera.

Los tipos enumerados, entonces, ya no son simplemente alias para tipos enteros, sino que son tipos de datos únicos en C++. El tipo de datos bool, igualmente, pasa a ser un tipo de datos único, mientras que en C funcionaba en algunos casos como un alias para alguna clase de dato de tipo entero.

Compiladores [editar]

Uno de los compiladores libres de C++ es el de GNU, el compilador G++ (parte del proyecto Gcc, que engloba varios compiladores para distintos lenguajes), descargable desde la página web de GCC.

Otros compiladores comunes:

Apple C++. Borland C++ Codewarrior C++ Comeau C++ Cygwin (GNU C++) Dev C++

Page 60: Lenguajaes d p

Digital Mars C++ DJ Delorie's C++ development system for DOS/Windows (GNU

C++) Edison Design Group C++ Front End Green Hills C++ HP C++ para UNIX y HP C++ para OpenVMS. IBM C++ Intel C++ MINGW - Minimalist GNU for Windows. The LLVM Compiler Infrastructure. Mentor Graphics/Microtec Research C++ Microsoft C++ Microsoft Visual C++ Toolkit 2003 Paradigm C++ The Portland Group C++ SGI C++ Sun C++ Sun Studio. WindRiver's Diab C++

Visual Basic .NET (VB.NET)

es un lenguaje de programación orientado a objetos que se puede considerar una evolución de Visual Basic implementada sobre el framework .NET. Su introducción resultó muy controvertida, ya que debido a cambios significativos en el lenguaje VB.NET no es compatible hacia atrás con Visual Basic, cosa que causó gran división en la comunidad de desarrolladores de Visual Basic.

La gran mayoría de programadores de VB.NET utilizan el entorno de programación Microsoft Visual Studio .Net en alguna de sus versiones (Visual Studio .NET, Visual Studio .NET 2003 o Visual Studio .NET 2005), aunque existen otras alternativas, como SharpDevelop (que además es libre).

Como pasa con todos los lenguajes de programación basados en .NET, los programas escritos en VB.NET requieren el Framework .NET para ejecutarse.

Versiones de Visual Basic .NET [editar]

A fecha de hoy, Septiembre de 2007, existen 3 versiones publicadas y una versión en fase Beta que se espera sea publicada a finales de 2007 o principios de 2008.

Page 61: Lenguajaes d p

Visual Basic .NET (VB 7) [editar]

Esta es la versión original de Visual Basic .NET. Fue publicada junto con Visual C# en 2002 como uno de los lenguajes disponibles para la entonces nueva plataforma de programación .NET de Microsoft.

Visual Basic .NET 2003 (VB 7.1) [editar]

Visual Basic .NET 2003 fue publicado como parte Visual Studio 2003, que también incluía Visual C# 2003, Visual J# 2003 y por primera vez también incluía el .NET Compact Framework.

Esta revisión de Visual Basic .NET y de Visual Studio .NET requieren el Framework .NET 1.1.

Visual Basic 2005 (VB 8.0) [editar]

Visual Basic 2005 es, hasta este momento (Agosto de 2007), la última versión publicada de Visual Basic .NET. Esta versión fue publicada como parte de Visual Studio 2005, y requiere el Framework .NET 2.0.

En esta versión se incluyeron varias novedades, entre las que se cuentan:

Editar y Continuar - probablemente la característica que más echaban de menos los desarrolladores que venían de Visual Basic. Esta característica permite la modificación el código en tiempo de depuración, aumentando notablemente la velocidad a la hora de depurar los programas.

Evaluación de expresiones en tiempo de diseño El pseudo-espacio de nombres My que proporciona:

o Acceso rápido a ciertas áreas del Framework .NET que de otra manera requerirían una cantidad significante de código para usarse.

o Clases generadas dinámicamente (Quizás la más significativa sea My.Forms)

Mejoras en el conversor de VB a VB.NET 1 la palabra clave Using, que simplifica el uso de objetos que

requieren el método Dispose para liberar memoria Just My Code, que "esconde" el código autogenerado por el IDE

Visual Studio .NET Data Source binding, que facilita enormemente la vinculación

de los datos con los formularios Genéricos, o como son conocidos en C++, templates. Clases parciales, un método para definir partes de una clase en

un fichero y otras partes en otros ficheros. Esto resulta especialmente útil a la hora de integrar el código generado por el usuario con el código autogenerado por el IDE.

Page 62: Lenguajaes d p

Comentarios XML que pueden ser procesados por herramientas de documentación del código como NDOC, o SandCastle.

Sobrecarga de operadores.

Visual Basic 2008 'Orcas' (VB 9.0) [editar]

Visual Basic 2008, hasta ahora conocido por el nombre en clave 'Orcas' es la siguiente evolución de Visual Basic .NET. Está previsto que se publique con Visual Studio 2008 a finales de 2007 o principios de 2008. Esta versión de Visual Basic, así como todo el entorno Visual Studio 2008 incorporará la versión 3.5 del Framework .NET.

Para esta versión se añadirán varias novedades, incluyendo:

Soporte para LINQ (Language Integrated Query) expresiones Lambda Literales XML

Evoluciones previstas [editar]

Visual Basic 'VBx' (VB 10.0) [editar]

Visual Basic 10, también conocido como VBx, ofrecerá soporte para entorno de ejecución dinámico.

Está previsto que VB 10 forme parte de Microsoft Silverlight 1.1.

Relación con Visual Basic [editar]

Si Visual Basic .NET debe considerarse una mera versión de Visual Basic, o si debe considerarse como un nuevo lenguaje de programación es un tema que ha traído mucha discusión, y que aún la trae.

La sintaxis básica es prácticamente la misma entre VB y VB.NET, con la excepción de los añadidos para soportar nuevas características como el control estructurado de excepciones, la programación orientada a objetos, o los Genéricos.

Las diferencias entre VB y VB.NET son profundas, sobretodo en cuanto a metodología de programación y librerías, pero ambos lenguajes siguen manteniendo un gran parecido, cosa que facilita notablemente el paso de VB a VB.NET.

Versiones del entorno de programación para Visual Basic [editar]

Al mismo tiempo que evolucionaba el lenguaje, las herramientas que Microsoft proporciona para programar también evolucionaban para adaptarse a las novedades.

Page 63: Lenguajaes d p

Visual Studio .NET [editar]

Visual Studio .NET se publicó en 2002 y fué la primera versión de Visual Studio en introducir el framework .NET. Esta versión de Visual Studio introdujo, junto con el Framework .NET tres nuevos lenguajes de programación, C#, VB.NET y Visual J#.

En esta primera versión de Visual Studio .NET se podían programar aplicaciones Windows.Forms (aplicaciones de escritorio) y aplicaciones ASP.NET (Aplicaciones Web).

Visual Studio .NET 2003 [editar]

Visual Studio .NET 2003 se publicó en 2003 fue una actualización menor de Visual Studio .NET, básicamente propiciada por la introducción de la versión 1.1 del Framework .NET.

En esta versión se añadió por primera vez la posibilidad de programar para dispositivos móviles usando .NET, ya fuera usando el Compact Framework, o ASP.NET.

Visual Studio 2005 [editar]

Visual Studio 2005 se publicó en 2005 y supuso una actualización bastante importante, tanto del entorno de desarrollo como del Framework y por lo tanto de los lenguajes asociados.

Visual Studio 2005 supuso la introducción varia novedades en el entorno:

Soporte para Genéricos en Intellisense. Soporte para WebServices usando ASP.NET. Servidor web local para realizar pruebas sin depender de IIS. Integración con SQL Server 2005. Diseñadores de DataSets y bases de datos adaptados a

ADO.NET 2.0 Soporte extendido para arquitecturas de 64 bits.

Visual Basic 2005 Express [editar]

Con la introducción en el mercado de la versión 2005 de Visual Studio Microsoft publicó lo que se conoce como ediciones Express de distintos programas. Las versiones Express son versiones limitadas pero gratuitas, pensadas para usos no profesionales.

Visual Basic 2005 Express es una versión de Visual Studio 2005 limitada, esta versión permite solo programar en VB.NET, y además limita el tipo de proyectos que se pueden desarrollar.

Page 64: Lenguajaes d p

Entornos de Desarrollo (IDEs) alternativos a Visual Studio [editar]

Para desarrollar en VB.NET existen algunas alternativas a Visual Studio, quizás la más notable sea SharpDevelop.

SharpDevelop [editar]

SharpDevelop es un entorno de programación integrado que permite programar en C# y en VB.NET.

Este es un entorno publicado bajo licencia LGPL, lo que implica que es libre y que disponemos del código fuente.

MonoDevelop [editar]

MonoDevelop es una implementación de SharpDevelop para programar usando Mono, una implementación libre de .NET que funciona en distintos sistemas operativos.

Desarrollo multiplataforma [editar]

Gracias a Mono y al esfuerzo que ha realizado la gente de este proyecto para implementar una versión compatible 100% con .NET que incluye la inmensa mayoría de la librerías y una implementación multiplataforma de Windows.Forms, resulta posible programar para distintos sistemas operativos usando VB.NET.

Obtenido de "http://es.wikipedia.org/wiki/Visual_Basic.NET"