Sie sind auf Seite 1von 65

PHP

es un lenguaje de programacin usado frecuentemente para la


creacin de contenido para sitios web con los cuales se puede
programar las paginas html y los codigos de fuente. PHP es un
acrnimo 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 creacin de aplicaciones para
servidores, o creacin de contenido dinmico para sitios web.
ltimamente tambin para la creacin de otro tipo de programas
incluyendo aplicaciones con interfaz grfica usando las libreras Qt o
GTK+.
Visin general [editar]
El fcil uso y la similitud con los lenguajes ms comunes de
programacin estructurada, como C y Perl, permiten a la mayora de
los programadores experimentados crear aplicaciones complejas con
una curva de aprendizaje muy suave. Tambin les permite
involucrarse con aplicaciones de contenido dinmico sin tener que
aprender todo un nuevo grupo de funciones y prcticas.
Debido al diseo de PHP, tambin es posible crear aplicaciones con
una interfaz grfica para el usuario (tambin llamada GUI), utilizando
la extensin PHP-Qt o PHP-GTK. Tambin puede ser usado desde la
lnea de rdenes, de la misma manera como Perl o Python pueden
hacerlo, esta versin de PHP se llama PHP CLI (Command Line
Interface).
Su interpretacin y ejecucin se da en el servidor web, en el cual se
encuentra almacenado el script, y el cliente slo recibe el resultado
de la ejecucin. Cuando el cliente hace una peticin al servidor para
que le enve una pgina web, generada por un script PHP, el servidor
ejecuta el intrprete de PHP, el cual procesa el script solicitado que
generar el contenido de manera dinmica, pudiendo modificar el
contenido a enviar, y regresa el resultado al servidor, el cual se
encarga de regresrselo al cliente. Adems es posible utilizar PHP
para generar archivos PDF, Flash, as como imgenes en diferentes
formatos, entre otras cosas.
Permite la conexin 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 creacin de Aplicaciones
web muy robustas.
PHP tambin tiene la capacidad de ser ejecutado en la mayora 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
ms populares ya que existe en versin CGI, mdulo para Apache, e
ISAPI.

El modelo PHP puede ser visto como una alternativa al sistema de


Microsoft que utiliza ASP.NET/C#/VB.NET, a ColdFusion de la compaa
Adobe (antes Macromedia), , a JSP/Java de Sun Microsystems, y al
famoso CGI/Perl. Aunque su creacin y desarrollo se da en el mbito
de los sistemas libres, bajo la licencia GNU, existe adems un IDE
(entorno integrado de desarrollo) comercial llamado Zend Optimizer.
Recientemente, CodeGear (la divisin de lenguajes de programacin
de Borland) ha sacado al mercado un entorno integrado de
programacin para PHP, denominado Delphi for PHP.
Historia [editar]
PHP fue originalmente diseado en Perl, seguidos por la escritura de
un grupo de CGI binarios escritos en el lenguaje C por el programador
dans-canadiense Rasmus Lerdorf en el ao 1994 para mostrar su
currculum vitae y guardar ciertos datos, como la cantidad de trfico
que su pgina web reciba. El 8 de junio de 1995 fue publicado
"Personal Home Page Tools" despus de que Lerdorf lo combinara
con su propio Form Interpreter para crear PHP/FI.
PHP 3.2.4.3 [editar]
Dos programadores israeles del Technion, Zeev Suraski y Andi
Gutmans, reescribieron el analizador sintctico (parser en ingls) en
el ao 1997 y crearon la base del PHP3, cambiando el nombre del
lenguaje a la forma actual. Inmediatamente comenzaron
experimentaciones pblicas de PHP3 y fue publicado oficialmente en
junio del 1998.
Para 1999, Suraski y Gutmans reescribieron el cdigo de PHP,
produciendo lo que hoy se conoce como Zend Engine o motor Zend,
un portmanteau de los nombres de ambos, Zeev y Andi. Tambin
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 versin de PHP 4 disponible en febrero de 2007
es la 4.4.7. Php.net anuncio el da 13 de Julio de 2007 que la versin 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 versin ms 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 slido y REAL para Programacin Orientada a Objetos


( o OOP) con PHP Data Objects.

Mejoras de rendimiento.
Mejor soporte para MySQL con extensin 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 versin, quedarn 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 orientacin a objetos

... Lista completa. (en ingls)


Usos de PHP [editar]
Los principales usos del PHP son los siguientes:

Programacin de pginas web dinmicas, habitualmente en


combinacin con el motor de base datos MySQL, aunque cuenta
con soporte nativo para otros motores, incluyendo el estndar
ODBC, lo que ampla en gran medida sus posibilidades de
conexin.
Programacin en consola, al estilo de Perl o Shell scripting.
Creacin de aplicaciones grficas independientes del
navegador, por medio de la combinacin 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 conexin con la mayora 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.
Capacidad de expandir su potencial utilizando la enorme
cantidad de mdulos (llamados ext's o extensiones).
Posee una amplia documentacin en su pgina oficial ([1]),
entre la cual se destaca que todas las funciones del sistema
estn explicadas y ejemplificadas en un nico archivo de ayuda.
Es libre, por lo que se presenta como una alternativa de fcil
acceso para todos.
Permite las tcnicas de Programacin Orientada a Objetos.
Permite crear los formularios para la web.
Biblioteca nativa de funciones sumamente amplia e incluida
No requiere definicin de tipos de variables ni manejo detallado
del bajo nivel.

Ejemplo de Cdigo PHP [editar]


A continuacin un ejemplo de una pgina web sencilla desarrollada
utilizando el lenguaje PHP (con coloreado de sintaxis):
<html>
<head>
<title>Ejemplo</title>
</head>
<body>
<?php
if (isset($_POST['muestra'])) {
echo 'Hola, '.htmlentities($_POST['nombre'])
.', tu comida favorita es:'. htmlentities($_POST['comida']);
} else {
?>
<form method="POST" action="?">
Cul es tu nombre?
<input type="text" name="nombre">
Cul 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 cdigo es posible observar las siguientes caractersticas:

Las variables enviadas por un formulario utilizando el mtodo


POST, son recibidas en el lenguaje dentro de la matriz $_POST,
lo cual facilita la obtencin de este tipo de datos. Este mismo
mtodo es utilizado por el lenguaje para todas las fuentes de
informacin en una aplicacin web, tales como cookies en la
matriz $_COOKIES, variables de URL en $_GET (que en
formularios puede servir para guardar los datos), variables de
sesin utilizando $_SESSION, y variables del servidor y del
cliente por medio de la matriz $_SERVER.
El cdigo PHP est incrustado dentro del HTML e interacta con
el mismo, lo que permite disear la pgina Web en un editor
comn de HTML y aadir el cdigo dinmico dentro de las
etiquetas <?php ?>.
El resultado muestra y oculta ciertas porciones del cdigo HTML
en forma condicional.
Es posible utilizar funciones propias del lenguaje para
aplicaciones Web como htmlentitites(), que convierte los
caracteres que tienen algn significado especial en el cdigo
HTML o que podran desplegarse errneamente en el navegador
como acentos o diresis, en sus equivalentes en formato HTML..

Historia [editar]
Versin

Fecha

Cambios ms importantes

8 de Junio de 1995

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

16 de Abril de 1996

Considerado por el creador como


la "ms rapida y simple
herramienta" para la creacin de
pginas webs dinmicas .

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

PHP 4.0

22 de Mayo de 2000

PHP 1.0

PHP
Version 2
(PHP/FI)

Se agregan avanzadas de dos


etapas analizar/ejecutar la

etiqueta-anlisis sistema llamado


entorno motor Zend.

PHP 4.1

10 de Diciembre de
2001

Introducidas las variables


superglobals ($_GET, $_SESSION,
etc.)

PHP 4.2

22 de Abril de 2002

Se deshabilitan register_globals
por defecto

PHP 4.3

27 de Diciembre de
2002

Introducido la CLI, en adicin a la


CGI

PHP 4.4

11 de Julio de 2005

PHP 5.0

13 de Julio de 2004

PHP 5.1

25 de Noviembre de
2005

PHP 5.2

2 de Noviembre de
2006

PHP 5.2.4 30 de agosto de 2007

Motor Zend II con un nuevo


modelo de objetos.

Habilitado el filtro de extensiones


por defecto

Active Server Pages


Active Server Pages (ASP) es una tecnologa del lado servidor de
Microsoft para pginas web generadas dinmicamente, que ha sido
comercializada como un anexo a Internet Information Server (IIS). La
tecnologa ASP est estrechamente relacionada con el modelo
tecnolgico de su fabricante. Intenta ser solucin para un modelo de
programacin rpida 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 tecnolgico es poder utilizar diversos
componentes ya desarrollados como algunos controles ActiveX. Otros
problemas que han hecho evolucionar esta tecnologa es el no
disponer de informacin "que oriente a quienes desean aprenderla y
resulta muy costosa en tiempo descubrir aqu y all toda la
informacin 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 clsico.
En el ltimo ASP clsico, 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 pginas
web dinmicas.
Las pginas pueden ser generadas mezclando cdigo 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 cdigo 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 programacin de sitios web mediante varios objetos
integrados, como por ejemplo un objeto de sesin basada en cookies,
que mantiene las variables mientras se pasa de pgina a pgina.

Desde 2002, el ASP clsico est siendo reemplazado por ASP.NET,


que, entre otras cosas, reemplaza los lenguajes interpretados como
VBScript o JScript por lenguajes compilados a cdigo intermedio
(llamado MSIL o Microsoft Intermediate Language) como Visual Basic,
C#, o cualquier otro lenguaje que soporte la plataforma .NET. El
cdigo MSIL se compila con posterioridad a cdigo nativo.
Java es un lenguaje de programacin orientado a objetos desarrollado
por Sun Microsystems a principios de los aos 1990. Las aplicaciones
Java estn tpicamente compiladas en un bytecode, aunque la
compilacin en cdigo mquina nativo tambin es posible. En el
tiempo de ejecucin, el bytecode es normalmente interpretado o
compilado a cdigo nativo para la ejecucin, aunque la ejecucin
directa por hardware del bytecode por un procesador Java tambin es
posible.
El lenguaje en s mismo toma mucha de su sintaxis de C y C++, pero
tiene un modelo de objetos ms 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 implementacin GNU General
Public License de un compilador Java y una mquina 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 tecnologas Java bajo la licencia GNU GPL, de
acuerdo con las especificaciones del Java Community Process, de tal
forma que prcticamente todo el Java de Sun es ahora software libre.
Java y DB [editar]
Muchos programadores quizs tengan mayor inters en realizar
programacin basada conjunto a Bases de Datos, pues Java no se
queda atrs, Java no implementa Bases de Datos, ya que solo es un
lenguaje de programacin, 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 travs de
Driver's a programas gestores de bases de datos, su independencia
entre ambos permite al usuario mantener siempre un enfoque,
separando el diseo 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 aplicacin


evitando cortes bruscos del programa y permitiendo continuar de esta
manera con la aplicacin. Java permite Applets (Vea ms adelante), lo
que permite montar cualquier aplicacin con Bases de Datos a travs
de la red de forma segura y slida.
Un buen ejemplo de como conectar java con el JDBC sera:
public boolean Conectar(String DBName) {
boolean val = true;
//Creacin de la URL
String url = "jdbc:odbc:" + DBName;
try {
//Seleccionar y cargar el driver a ser usado.
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//Conexin con JDBC
con = DriverManager.getConnection(url);
} catch (JDBCException jdbc) {
//En caso de error con la conexin 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 intntelo nuevamente.\nGracias!",
"Error!.- No hubo conexin 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 programacin Java y


de la plataforma JDK, mantiene fuertes polticas para mantener una
especificacin del lenguaje 1 as como de la mquina virtual2 a travs
del JCP. Es debido a este esfuerzo que se mantiene un estndar de
facto.
Son innumerables las compaas que desarrollan aplicaciones para
Java. La industria de la telefona mvil est fuertemente influenciada
por la tecnologa Java.
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 nmero de desarrolladores y
2.500 millones de dispositivos habilitados con tecnologa Java.
Java e Internet [editar]
Entre junio y julio de 1994, tras una sesin maratnica de tres das
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, propiciara que Internet se
convirtiese en un medio interactivo, como el que pensaban era la
televisin por cable. Naughton cre entonces un prototipo de
navegador, WebRunner, que ms tarde sera conocido como HotJava.
Ese ao renombraron el lenguaje como Java tras descubrir que "Oak"
era ya una marca comercial registrada para adaptadores de tarjetas
grficas. El trmino Java fue acuado en una cafetera frecuentada
por algunos de los miembros del equipo. Pero no est claro si es un
acrnimo o no, aunque algunas fuentes sealan que podra tratarse
de las iniciales de sus creadores: James Gosling, Arthur Van Hoff, y
Andy Bechtolsheim. Otros abogan por el siguiente acrnimo, Just
Another Vague Acronym ("slo otro acrnimo ambiguo ms"). La
hiptesis que ms fuerza tiene es la que Java debe su nombre a un
tipo de caf disponible en la cafetera cercana. Un pequeo signo que
da fuerza a esta teora es que los 4 primeros bytes (el nmero
mgico) 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 pblica Java y HotJava,
el navegador Web. El acontecimiento fue anunciado por John Gage, el
Director Cientfico de Sun Microsystems. El acto estuvo acompaado
por una pequea sorpresa adicional, el anuncio por parte de Marc
Andreessen, Vicepresidente Ejecutivo de Netscape, que Java sera

soportado en sus navegadores. El 9 de enero del ao siguiente, 1996,


Sun fund el grupo empresarial JavaSoft para que se encargase del
desarrollo tecnolgico. [1] Dos semanas ms tarde la primera versin
de Java fue publicada.
Historia reciente [editar]
Las aplicaciones java son las ms usadas en los telfonos mviles por
no ocupar tanto espacio en la memoria, dejando mucho espacio libre
para otros archivos que no pueden cambiarse y que ocupan mucho
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 pblico.
Flash est ms extendido para animaciones interactivas y los
desarrolladores estn empezando a usar la tecnologa AJAX tambin
en este campo. Java suele usarse para aplicaciones ms 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 ms popular que nunca, con muchos
sitios empleando pginas JavaServer, conectores como Tomcat para
Apache y otras tecnologas Java.
En el PC de escritorio [editar]
Aunque cada vez la tecnologa Java se acerca ms y ms al PC de
sobremesa, las aplicaciones Java han sido relativamente raras para
uso domstico, por varias razones.[3]

Las aplicaciones Java pueden necesitar gran cantidad de


memoria fsica.
La Interfaz Grfica de Usuario (GUI) no sigue de forma estricta
la Gua 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 optimizacin 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 Ejecucin de


Java, el JRE. Es necesario tener instalada la versin adecuada.
Las aplicaciones basadas en la Web estn tomando la delantera
frente a aquellas que funcionan como entidades
independientes. Las nuevas tcnicas de programacin producen
aplicaciones basadas en un modelo en red cada vez ms
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
archivos. Java tambin es el motor que usa MATLAB para el
renderizado de la interfaz grfica y para parte del motor de clculo.
Las aplicaciones de escritorio basadas en la tecnologa Swing y SWT
(Standard Widget Toolkit) suponen una alternativa a la plataforma
.Net de Microsoft.
Disponibilidad del JRE de Java [editar]
Una versin del JRE (Java Runtime Environment) est disponible en la
mayora 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 versin propia del JRE en su sistema operativo, el
Mac OS. Tambin es un producto que por defecto aparece en la
mayora 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
aplicacin instalada por defecto. Los desarrolladores de applets de
Java o bien deben insistir a los usuarios en la actualizacin del JRE, o
bien desarrollar bajo una versin antigua de Java y verificar el
correcto funcionamiento en las versiones posteriores.
Historial de versiones [editar]
Java ha experimentado numerosos cambios desde la versin
primigenia, JDK 1.0, as como un enorme incremento en el nmero de
clases y paquetes que componen la librera estndar. Desde J2SE 1.4,
la evolucin 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
Especificacin 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 reestructuracin intensiva del modelo de eventos
AWT (Abstract Windowing Toolkit)
o clases internas (inner classes)
o JavaBeans
o JDBC (Java Database Connectivity), para la integracin 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
bajo la denominacin 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 aadidas
incluan: comunicado de prensa
o la palabra reservada (keyword) strictfp
o reflexin en la programacin
o la API grfica ( Swing) fue integrada en las clases bsicas
o la mquina virtual (JVM) de Sun fue equipada con un
compilador JIT (Just in Time) por primera vez
o Java Plug-in
o Java IDL, una implementacin de IDL (Interfaz para
Descripcin de Lenguaje) para la interoperabilidad con
CORBA
o Colecciones (Collections)

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

Los cambios ms notables fueron:comunicado de prensa lista


completa de cambios

o
o
o

la inclusin de la mquina virtual de HotSpot JVM (la JVM


de HotSpot fue lanzada inicialmente en abril de 1999,
para la JVM de J2SE 1.2)
RMI fue cambiado para que se basara en CORBA
JavaSound
se incluy el Java Naming and Directory Interface (JNDI)
en el paquete de libreras principales (anteriormente
disponible como una extensin)
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
ms notables fueron: comunicado de prensalista completa de
cambios

o
o
o
o
o
o
o
o
o

Palabra reservada assert (Especificado en JSR 41.)


Expresiones regulares modeladas al estilo de las
expresiones regulares Perl
Encadenacin de excepciones Permite a una excepcin
encapsular la excepcin de bajo nivel original.
non-blocking NIO (New Input/Output) (Especificado en JSR
51.)
Logging API (Specified in JSR 47.)
API I/O para la lectura y escritura de imgenes en
formatos como JPEG o PNG
Parser XML integrado y procesador XSLT (JAXP)
(Especificado en JSR 5 y JSR 63.)
Seguridad integrada y extensiones criptogrficas (JCE,
JSSE, JAAS)
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 notacin an es usada
internamente.[4]) Desarrollado bajo JSR 176, Tiger aadi un
nmero significativo de nuevas caractersticas comunicado de
prensa
o Plantillas (genricos) provee conversion de tipos (type
safety) en tiempo de compilacin para colecciones y
elimina la necesidad de la mayora de conversion de tipos
(type casting). (Especificado por JSR 14.)
o Metadatos tambin llamados anotaciones, permite a
estructuras del lenguaje como las clases o los mtodos,
ser etiquetados con datos adicionales, que puedan ser
procesados posteriormente por utilidades de proceso de
metadatos. (Especificado por JSR 175.)
o Autoboxing/unboxing Conversiones automticas 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 poda ser
llevado a cabo por constantes enteras o clases
construidas manualmente (enum pattern). (Especificado
por JSR 201.)
o Varargs (nmero de argumentos variable) El ltimo
parmetro de un mtodo puede ser declarado con el
nombre del tipo seguido por tres puntos (e.g. void
drawtext(String... lines)). En la llamada al mtodo, puede
usarse cualquier nmero de parmetros de ese tipo, que
sern almacenados en un array para pasarlos al mtodo.
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 estndar Collection,


de la siguiente forma:
{|
| style="width:32px" |
|
void displayWidgets (Iterable<Widget> widgets) {
for (Widget w : widgets) {
w.display();
}
}
Este ejemplo itera sobre el objeto Iterable widgets, asignando, en
orden, cada uno de los elementos a la variable w, y llamando al
mtodo 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 versin, Sun
cambi el nombre "J2SE" por Java SE y elimin el ".0" del
nmero de versin.[5]. Est disponible en
http://java.sun.com/javase/6/. Los cambios ms importantes
introducidos en esta versin son:
o Incluye un nuevo marco de trabajo y APIs que hacen
posible la combinacin de Java con lenguajes dinmicos
como PHP, Python, Ruby y JavaScript.
o Incluye el motor Rhino, de Mozilla, una implementacin 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 grfica y en el rendimiento.

Java SE 7 Nombre clave Dolphin. En el ao 2006 an se


encontraba en las primeras etapas de planificacin. 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 Introduccin de anotaciones estndar 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]
Adems de los cambios en el lenguaje, con el paso de los aos se han
efectuado muchos ms cambios dramticos en la librera de clases de
Java (Java class library) que ha crecido de unos pocos cientos de
clases en JDK 1.0 hasta ms de tres mil en J2SE 5.0. APIs
completamente nuevas, como Swing y Java2D, han sido introducidas
y muchos de los mtodos y clases originales de JDK 1.0 estn
obsoletas.
Filosofa [editar]
El lenguaje Java se cre con cinco objetivos principales:
1. Debera usar la metodologa de la programacin orientada a
objetos.
2. Debera permitir la ejecucin de un mismo programa en
mltiples sistemas operativos.
3. Debera incluir por defecto soporte para trabajo en red.
4. Debera disearse para ejecutar cdigo en sistemas remotos de
forma segura.
5. Debera ser fcil de usar y tomar lo mejor de otros lenguajes
orientados a objetos, como C++.
Para conseguir la ejecucin de cdigo 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 caracterstica, orientado a objetos (OO), se refiere a un
mtodo de programacin y al diseo del lenguaje. Aunque hay
muchas interpretaciones para OO, una primera idea es disear el
software de forma que los distintos tipos de datos que use estn
unidos a sus operaciones. As, los datos y el cdigo (funciones o
mtodos) se combinan en entidades llamadas objetos. Un objeto
puede verse como un paquete que contiene el comportamiento (el
cdigo) 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 cdigo que
opera sobre los mismos, o viceversa. Esta separacin en objetos
coherentes e independientes ofrece una base ms estable para el
diseo de un sistema software. El objetivo es hacer que grandes
proyectos sean fciles de gestionar y manejar, mejorando como
consecuencia su calidad y reduciendo el nmero de proyectos fallidos.
Otra de las grandes promesas de la programacin orientada a objetos
es la creacin de entidades ms genricas (objetos) que permitan la
reutilizacin del software entre proyectos, una de las premisas
fundamentales de la Ingeniera del Software. Un objeto genrico

cliente, por ejemplo, debera en teora 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 podran verse como
piezas reutilizables que pueden emplearse en mltiples 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 reduccin
drstica del tiempo de desarrollo. Podemos usar como ejemplo de
objeto el aluminio. Una vez definidos datos (peso, maleabilidad, etc.),
y su comportamiento (soldar dos piezas, etc.), el objeto aluminio
puede ser reutilizado en el campo de la construccin, del automvil,
de la aviacin, etc.
La reutilizacin del software ha experimentado resultados dispares,
encontrando dos dificultades principales: el diseo de objetos
realmente genricos es pobremente comprendido, y falta una
metodologa para la amplia comunicacin de oportunidades de
reutilizacin. Algunas comunidades de cdigo abierto (open source)
quieren ayudar en este problema dando medios a los desarrolladores
para diseminar la informacin sobre el uso y versatilidad de objetos
reutilizables y libreras de objetos.
Independencia de la plataforma [editar]
La segunda caracterstica, 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 cdigo fuente escrito en lenguaje Java, para
generar un cdigo conocido como bytecode (especficamente Java
bytecode)instrucciones mquina simplificadas especficas de la
plataforma Java. Esta pieza est a medio camino entre el cdigo
fuente y el cdigo mquina que entiende el dispositivo destino. El
bytecode es ejecutado entonces en la mquina virtual (VM), un
programa escrito en cdigo nativo de la plataforma destino (que es el
que entiende su hardware), que interpreta y ejecuta el cdigo.
Adems, se suministran libreras adicionales para acceder a las
caractersticas de cada dispositivo (como los grficos, ejecucin
mediante hebras o threads, la interfaz de red) de forma unificada. Se
debe tener presente que, aunque hay una etapa explcita de
compilacin, el bytecode generado es interpretado o convertido a
instrucciones mquina del cdigo nativo por el compilador JIT (Just In
Time).
Hay implementaciones del compilador de Java que convierten el
cdigo fuente directamente en cdigo objeto nativo, como GCJ. Esto

elimina la etapa intermedia donde se genera el bytecode, pero la


salida de este tipo de compiladores slo 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 implementacin de Microsoft
no daba soporte a las interfaces RMI y JNI adems de haber aadido
caractersticas dependientes de su plataforma. Sun demand a
Microsoft y gan por daos y perjuicios (unos 20 millones de dlares)
as como una orden judicial forzando la acatacin de la licencia de
Sun. Como respuesta, Microsoft no ofrece Java con su versin de
sistema operativo, y en recientes versiones de Windows, su
navegador Internet Explorer no admite la ejecucin 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 mquina
virtual interpretada para conseguir la portabilidad. Sin embargo, el
resultado eran programas que se ejecutaban comparativamente ms
lentos que aquellos escritos en C o C++. Esto hizo que Java se ganase
una reputacin de lento en rendimiento. Las implementaciones
recientes de la JVM dan lugar a programas que se ejecutan
considerablemente ms rpido que las versiones antiguas,
empleando diversas tcnicas.
La primera de estas tcnicas es simplemente compilar directamente
en cdigo nativo como hacen los compiladores tradicionales,
eliminando la etapa del bytecode. Esto da lugar a un gran
rendimiento en la ejecucin, pero tapa el camino a la portabilidad.
Otra tcnica, conocida como compilacin JIT (Just In Time, o
compilacin al vuelo), convierte el bytecode a cdigo nativo
cuando se ejecuta la aplicacin. Otras mquinas virtuales ms
sofisticadas usan una recompilacin dinmica en la que la VM es
capaz de analizar el comportamiento del programa en ejecucin y
recompila y optimiza las partes crticas. La recompilacin dinmica
puede lograr mayor grado de optimizacin que la compilacin
tradicional (o esttica), ya que puede basar su trabajo en el
conocimiento que de primera mano tiene sobre el entorno de
ejecucin y el conjunto de clases cargadas en memoria. La
compilacin JIT y la recompilacin dinmica permiten a los programas
Java aprovechar la velocidad de ejecucin del cdigo nativo sin por
ello perder la ventaja de la portabilidad.
La portabilidad es tcnicamente difcil 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 acten de forma correcta en
mltiples plataformas de distinta arquitectura, el gran nmero de
estas con pequeos errores o inconsistencias llevan a que a veces se
parodie el eslogan de Sun, "Write once, run anywhere" como "Write

once, debug everywhere" (o Escrbelo una vez, ejectalo en todas


partes por Escrbelo una vez, depralo 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]
Un argumento en contra de lenguajes como C++ es que los
programadores se encuentran con la carga aadida de tener que
administrar la memoria solicitada dinmicamente de forma manual:
En C++, el desarrollador puede asignar memoria en una zona
conocida como heap (montculo) 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 aplicacin cuando en realidad no es as. As, un programa mal
diseado podra consumir una cantidad desproporcionada de
memoria. Adems, si una misma regin de memoria es desalojada
dos veces el programa puede volverse inestable y llevar a un
eventual cuelgue. No obstante, se debe sealar que C++ tambin
permite crear objetos en la pila de llamadas de una funcin o bloque,
de forma que se libere la memoria (y se ejecute el destructor del
objeto) de forma automtica al finalizar la ejecucin de la funcin o
bloque.
En Java, este problema potencial es evitado en gran medida por el
recolector automtico de basura (o automatic garbage collector). El
programador determina cundo se crean los objetos y el entorno en
tiempo de ejecucin 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 direccin 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 mtodo slo tiene entidad dentro de ste; al salir
del mtodo el objeto es eliminado). An as, es posible que se
produzcan fugas de memoria si el cdigo almacena referencias a
objetos que ya no son necesarioses decir, pueden an ocurrir, pero
en un nivel conceptual superior. En definitiva, el recolector de basura
de Java permite una fcil creacin y eliminacin de objetos, mayor
seguridad y puede que ms rpida que en C++ [cita requerida].

La recoleccin de basura de Java es un proceso prcticamente


invisible al desarrollador. Es decir, el programador no tiene conciencia
de cundo la recoleccin de basura tendr lugar, ya que sta no tiene
necesariamente que guardar relacin con las acciones que realiza el
cdigo fuente.
Debe tenerse en cuenta que la memoria es slo uno de los muchos
recursos que deben ser gestionados.
Crticas [editar]
Harold dijo en 1995 que Java fue creado para abrir una nueva va en
la gestin 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 programacin, todos los entornos, o todas las
necesidades.
General [editar]

Java no ha aportado capacidades estndares para aritmtica en


punto flotante. El estndar IEEE 754 para Estndar para
Aritmtica Binaria en Punto Flotante apareci en 1985, y desde
entonces es el estndar para la industria. Y aunque la
aritmtica flotante de Java (cosa que cambi desde el 13 de
Noviembre de 2006, cuando se abri el cdigo fuente y se
adopt la licencia GPL, aparte de la ya existente) se basa en
gran medida en la norma del IEEE, no soporta an algunas
caractersticas. Ms informacin al respecto puede encontrarse
en la seccin 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 orientacin a objetos, y as por
ejemplo, no todos los valores son objetos.
El cdigo Java puede ser a veces redundante en comparacin
con otros lenguajes. Esto es en parte debido a las frecuentes
declaraciones de tipos y conversiones de tipo manual (casting).
Tambin 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 construccin para los bucles
foreach.
A diferencia de C++, Java no dispone de operadores de
sobrecarga definidos por el usuario. Sin embargo esta fue una
decisin de diseo que puede verse como una ventaja, ya que

esta caracterstica puede hacer los programas difciles 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 grficos de la
plataforma nativa, el AWT no es capaz de funciones grficas
avanzadas sin sacrificar la portabilidad entre plataformas; ya que
cada una tiene un conjunto de APIs distinto, especialmente para
objetos grficos de alto nivel. Las herramientas de Swing, escritas
completamente en Java, evitan este problema construyendo los
objetos grficos a partir de los mecanismos de dibujo bsicos 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 Lookand-Feel de Windows), la mayora de los usuarios no saben cmo
cambiar la apariencia que se proporciona por defecto por aquella que
se adapta a la de la plataforma. Mencin merece la versin
optimizada del lenguaje.
Rendimiento [editar]
El rendimiento de una aplicacin est determinado por multitud de
factores, por lo que no es fcil hacer una comparacin que resulte
totalmente objetiva. En tiempo de ejecucin, el rendimiento de una
aplicacin Java depende ms de la eficiencia del compilador, o la JVM,
que de las propiedades intrnsecas del lenguaje. El bytecode de Java
puede ser interpretado en tiempo de ejecucin por la mquina virtual,
o bien compilado al cargarse el programa, o durante la propia
ejecucin, para generar cdigo nativo que se ejecuta directamente
sobre el hardware. Si es interpretado, ser ms lento que usando el
cdigo mquina intrnseco de la plataforma destino. Si es compilado,
durante la carga inicial o la ejecucin, la penalizacin est en el
tiempo necesario para llevar a cabo la compilacin.
Algunas caractersticas del propio lenguaje conllevan una
penalizacin en tiempo, aunque no son nicas de Java. Algunas de
ellas son el chequeo de los lmites de arrays, chequeo en tiempo de
ejecucin de tipos, y la indireccin de funciones virtuales.
El uso de un recolector de basura para eliminar de forma automtica
aquellos objetos no requeridos, aade una sobrecarga que puede
afectar al rendimiento, o ser apenas apreciable, dependiendo de la
tecnologa del recolector y de la aplicacin en concreto. Las JVM
modernas usan recolectores de basura que gracias a rpidos

algoritmos de manejo de memoria, consiguen que algunas


aplicaciones puedan ejecutarse ms eficientemente.
El rendimiento entre un compilador JIT y los compiladores nativos
puede ser parecido, aunque la distincin no est clara en este punto.
La compilacin mediante el JIT puede consumir un tiempo apreciable,
un inconveniente principalmente para aplicaciones de corta duracin
o con gran cantidad de cdigo. Sin embargo, una vez compilado, el
rendimiento del programa puede ser comparable al que consiguen
compiladores nativos de la plataforma destino, inclusive en tareas
numricas. Aunque Java no permite la expansin manual de llamadas
a mtodos, muchos compiladores JIT realizan esta optimizacin
durante la carga de la aplicacin y pueden aprovechar informacin
del entorno en tiempo de ejecucin para llevar a cabo
transformaciones eficientes durante la propia ejecucin de la
aplicacin. Esta recompilacin dinmica, como la que proporciona la
mquina virtual HotSpot de Sun, puede llegar a mejorar el resultado
de compiladores estticos tradicionales, gracias a los datos que slo
estn disponibles durante el tiempo de ejecucin.
Java fue diseado para ofrecer seguridad y portabilidad, y no ofrece
acceso directo al hardware de la arquitectura ni al espacio de
direcciones. Java no soporta expansin de cdigo ensamblador,
aunque las aplicaciones pueden acceder a caractersticas de bajo
nivel usando libreras 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 programacin
genrica, 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 vase:
Hello world program
Aplicaciones autnomas [editar]
// Hola.java
public class Hola
{
public static void main(String[] args) {
System.out.println("Hola, mundo!");
}
}

Este ejemplo necesita una pequea explicacin.

Todo en Java est dentro de una clase, incluyendo programas


autnomos.
El cdigo fuente se guarda en archivos con el mismo nombre
que la clase que contienen y con extensin .java. Una clase
(class) declarada pblica (public) debe seguir este convenio. En
el ejemplo anterior, la clase es Hola, por lo que el cdigo fuente
debe guardarse en el fichero Hola.java
El compilador genera un archivo de clase (con extensin
.class) por cada una de las clases definidas en el archivo
fuente. Una clase annima se trata como si su nombre fuera la
concatenacin del nombre de la clase que la encierra, el
smbolo $, y un nmero entero.
Los programas que se ejecutan de forma independiente y
autnoma, deben contener el mtodo main().
La palabra reservada void indica que el mtodo main no
devuelve nada.
El mtodo 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 mtodo es un
mtodo de clase, asociado a la clase en vez de a instancias de
la misma. El mtodo main debe ser esttico o de clase.
La palabra reservada public significa que un mtodo puede ser
llamado desde otras clases, o que la clase puede ser usada por
clases fuera de la jerarqua de la propia clase. Otros tipos de
acceso son private o protected.
La utilidad de impresin (en pantalla por ejemplo) forma parte
de la librera estndar de Java: la clase System define un
campo pblico esttico llamado out. El objeto out es una
instancia de PrintStream, que ofrece el mtodo
println(String) para volcar datos en la pantalla (la salida
estndar).
Las aplicaciones autnomas se ejecutan dando al entorno de
ejecucin de Java el nombre de la clase cuyo mtodo main debe
invocarse. Por ejemplo, una lnea 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 mtodo main se llama puede
especificarse tambin 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 pgina Web que se muestra en un navegador.
// Hola.java

import 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>
<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 cdigo fuente.
La clase Hola extiende (extends) a la clase Applet, es decir, es una
subclase de sta. La clase Applet permite a la aplicacin 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 grfica de usuario o GUI (Graphical User Interface), y
responder a eventos generados por el usuario.
La clase Hola sobrecarga el mtodo paint(Graphics) heredado de la
superclase contenedora (Applet en este caso), para acceder al cdigo
encargado de dibujar. El mtodo paint() recibe un objeto Graphics
que contiene el contexto grfico para dibujar el applet. El mtodo
paint() llama al mtodo drawString(String, int, int) del objeto
Graphics para mostrar la cadena de caracteres Hola, mundo! en la
posicin (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 tambin 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.java
import java.io.*;
import javax.servlet.*;
public class Hola extends GenericServlet {
public void service(ServletRequest request, ServletResponse
response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("Hola, mundo!");
pw.close();
}
}
Las sentencias import indican al compilador de Java la inclusin de
todas las clases pblicas e interfaces de los paquetes java.io y
javax.servlet en la compilacin.
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 mtodo service(ServletRequest,
ServletResponse), definido por la interfaz servlet para acceder al
manejador de la peticin de servicio. El mtodo service() recibe un
objeto de tipo ServletRequest que contiene la peticin del cliente y
un objeto de tipo ServletResponse, usado para generar la respuesta
que se devuelve al cliente. El mtodo service() puede lanzar (throws)
excepciones de tipo ServletException e IOException si ocurre algn
tipo de anomala.
El mtodo setContentType(String) en el objeto respuesta establece
el tipo de contenido MIME a "text/html", para indicar al cliente que la
respuesta a su peticin es una pgina con formato HTML. El mtodo
getWriter() del objeto respuesta devuelve un objeto de tipo
PrintWriter, usado como una tubera por la que viajarn los datos al
cliente. El mtodo println(String) escribe la cadena "Hola, mundo!"
en la respuesta y finalmente se llama al mtodo close() para cerrar
la conexin, que hace que los datos escritos en la tubera o stream
sean devueltos al cliente.

Aplicaciones con ventanas [editar]


Swing es la librera para la interfaz grfica 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();
}
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 compilacin.
La clase Hola extiende (extends) la clase javax.swing.JFrame, que
implementa una ventana con una barra de ttulo y un control para
cerrarla.
El constructor Hola() inicializa el marco o frame llamando al mtodo
setDefaultCloseOperation(int) heredado de JFrame para
establecer las operaciones por defecto cuando el control de cierre en
la barra de ttulo 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 mquina virtual y al
programa acabar su ejecucin. A continuacin se crea un objeto de
tipo JLabel con el texto "Hola, mundo!", y se aade al marco mediante
el mtodo add(Component), heredado de la clase Container. El
mtodo pack(), heredado de la clase Window, es invocado para
dimensionar la ventana y distribuir su contenido.
El mtodo 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 mtodo setVisible(boolean) de la superclase (clase de
la que hereda) con el parmetro a true. Vase que, una vez el marco
es dibujado, el programa no termina cuando se sale del mtodo
main(), ya que el cdigo del que depende se encuentra en un hilo de
ejecucin 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 Ejecucin
de Java) es el software necesario para ejecutar cualquier aplicacin
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 tambin 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 documentacin o el
depurador. Puede tambin obtenerse como un paquete
independiente, y puede considerarse como el entorno necesario para
ejecutar una aplicacin Java, mientras que un desarrollador debe
adems contar con otras facilidades que ofrece el JDK.
Componentes [editar]

Bibliotecas de Java, que son el resultado de compilar el cdigo


fuente desarrollado por quien implementa la JRE, y que ofrecen
apoyo para el desarrollo en Java. Algunos ejemplos de estas
libreras son:
o Las bibliotecas centrales, que incluyen:
Una coleccin de bibliotecas para implementar
estructuras de datos como listas, arrays, rboles y
conjuntos.
Bibliotecas para anlisis de XML.
Seguridad.
Bibliotecas de internacionalizacin y localizacin.
o Bibliotecas de integracin, que permiten la comunicacin
con sistemas externos. Estas libreras 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 reproduccin
de audio.
Una implementacin dependiente de la plataforma en que se
ejecuta de la mquina virtual de Java (JVM), que es la encargada

de la ejecucin del cdigo de las libreras y las aplicaciones


externas.
Plugins o conectores que permiten ejecutar applets en los
navegadores Web.
Java Web Start, para la distribucin de aplicaciones Java a
travs de Internet.
Documentacin y licencia.

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

Java ME (Java Platform, Micro Edition) o J2ME orientada a


entornos de limitados recursos, como telfonos mviles, PDAs
(Personal Digital Assistant), etc.
Java SE (Java Platform, Standard Edition) o J2SE para
entornos de gama media y estaciones de trabajo. Aqu se sita
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 informacin sobre
los paquetes que ofrece cada plataforma puede encontrarse en la
documentacin de sta.
El conjunto de las APIs es controlado por Sun Microsystems junto con
otras entidades o personas a travs del programa JCP (Java
Community Process). Las compaas o individuos participantes del JCP
pueden influir de forma activa en el diseo y desarrollo de las APIs,
algo que ha sido motivo de controversia.
En 2004, IBM y BEA apoyaron pblicamente la idea de crear una
implementacin de cdigo 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 estn en paquetes que cuelgan de la raz
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 telfonos mviles 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 construccin de sistemas
distribuidos
Jiro
Java Card
JavaSpaces
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 programacin grfica en 3D)
JOGL (Java OpenGLUna API de bajo nivel para programacin
grfica usando OpenGL)
LWJGL (Light Weight Java Game LibraryUna 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 cdigo 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 cdigo abierto
[editar]
La importancia del cdigo abierto en relacin con Java puede verse
entre otras cosas, en que el presidente y CEO de Sun, Jonathan
Schwartz, ha retado a la compaa a que ofrezca cdigo abierto para
todo el software que produce Sun (fuente), Sun ya hace mucho

tiempo que empez a apostar por el cdigo abierto cuando liber


StarOffice (Llamado ahora OpenOffice).
Sun ha aportado ms lneas de cdigo abierto que cualquier otra
organizacin (fuente) Tambin Richard Stallman opina eso mismo
(fuente)

El xito del cdigo abierto - Artculo puesto en el sito oficial en


Espaol de Sun Microsystems, en el que habla de la apuesta de
Sun Microsystems por el cdigo 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

Crticas 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 Traduccin al Espaol de este artculo: Libre pero
encadenado. La trampa del Java. (Ntese que hay una
nota en un recuadro amarillo que habla de la situacin
actual con respecto a lo que se dice en ese artculo)

Notar que este artculo fue escrito antes de la liberacin del cdigo
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

Vase tambin [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 artculos con cdigo fuente de Java incluido


Lista de lenguajes de script de Java
Software de la plataforma Java
Herramientas de desarrollo Java
Lista de mquinas virtuales

Referencias [editar]

Jon Byous, Java technology: The early years. Sun Developer


Network, sin fecha[ca. 1998]. Recuperado 21 de abril de 2005.
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 edicin. Addison-Wesley, 2005.
ISBN 0-321-24678-0.
Tim Lindholm y Frank Yellin. The Java Virtual Machine
specification, segunda edicin. Addison-Wesley, 1999. ISBN 0201-43294-3.

Ejemplos De Programacin Dinmica [editar]

Ejecucin de n tareas en tiempo mnimo en un sistema de dos


procesadores A y B
Programas en disco
Problema de los sellos con programacin dinmica
Problema de la mochila con programacin dinmica
Problema del producto de una secuencia de matrices con
programacin dinmica
Problema de las monedas con programacin dinmica
Camino de coste mnimo entre dos nodos de un grafo dirigido
Problema de la divisin de peso
Problema de las vacas con programacin dinmica
Problema del Cambio de Palabra Programacin Dinmica en
JAVA

Notas [editar]
1. Especificacin del lenguaje Java
2. Especificacin de la mquina virtual Java
Enlaces externos [editar]

Sun [editar]

Sitio oficial de Sun Microsystems en espaol


Sitio oficial de Java para desarrolladores, etc
Sitio oficial de Java no tcnico para usuarios no avanzados
The Java Language Specification, Tercera edicin Especificacin
oficial del lenguaje Java
Tutorial de Sun sobre el Lenguaje de programacin Java
Libro blanco original de Java, 1996
Pruebe su VM
Curso Gratuito de Introduccin a Java

Peticiones para la especificacin de Java (Java Specification


Requests) [editar]
Hay varias JSRs relacionadas al lenguaje Java y las APIs del ncleo.

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 (an 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 versin 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
o
o
o
o
o

Curso de Java practico


Applets Java
Tutorial de Java bsico
Manual de Java
Apuntes de java
[9] Introduccion a java

Recursos [editar]

Java (Sun)
Desarrollo de Software en Java Comunidad virtual para el
intercambio de informacin en castellano sobre desarrollo de
software en Java para profesionales practicantes, docentes y
estudiantes.
Computer-Books.us Coleccin 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
Informacin, ejemplos de programas, mini tutoriales, fuentes de
informacin
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 investigacin
universiatario. BlueJ es tambin un entorno interactivo
adecuado para aprender Java
Eclipse libre y de cdigo abierto, Eclipse es desarrollado por la
Fundacin Eclipse

IntelliJ IDEA software comercial, IntelliJ IDEA es desarrollado


por JetBrains
JBuilder software comercial (existe una versin gratuita).
JBuilder es desarrollado por Borland
JCreator software comercial(existe una versin 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 cdigo 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
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 ms sobre la tecnologa Java
La tecnologa Java se cre como una herramienta de programacin en
una pequea operacin secreta y annima denominada "the Green
Project" en Sun Microsystems en el ao 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 informtica.
Su conclusin inicial fue que al menos en parte se tendera hacia la
convergencia de los dispositivos digitales y los ordenadores.
El resultado fue un lenguaje de programacin que no dependa de los
dispositivos denominado "Oak".
Para demostrar cmo poda contribuir este nuevo lenguaje al futuro
de los dispositivos digitales, el equipo desarroll un controlador de
dispositivos de mano para uso domstico destinado al sector de la
televisin digital por cable. Por desgracia, la idea result ser
demasiado avanzada para el momento y el sector de la televisin

digital por cable no estaba listo para el gran avance que la tecnologa
Java les ofreca.
Pero poco tiempo despus Internet estaba listo para la tecnologa Java
y, justo a tiempo para su presentacin en pblico en 1995, el equipo
pudo anunciar que el navegador Netscape Navigator incorporara la
tecnologa Java.
Actualmente, a punto de cumplir los 10 aos de existencia, la
plataforma Java ha atrado 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 nmero de dispositivos,
ordenadores y redes de cualquier tecnologa de programacin.
De hecho, su versatilidad y eficiencia, la portabilidad de su plataforma
y la seguridad que aporta, la han convertido en la tecnologa ideal
para su aplicacin a redes, de manera que hoy en da, ms de 2.500
millones de dispositivos utilizan la tecnologa Java. Ms de 700
millones de ordenadores 708 millones de telfonos mviles y otros
dispositivos de mano (fuente: Ovum) 1000 millones de tarjetas
inteligentes Adems de sintonizadores, impresoras, web cams,
juegos, sistemas de navegacin para automviles, terminales de
lotera, dispositivos mdicos, cajeros de pago en aparcamientos, etc.
Hoy en da, puede encontrar la tecnologa Java en redes y dispositivos
que comprenden desde Internet y superordenadores cientficos hasta
porttiles y telfonos mviles; desde simuladores de mercado en Wall
Street hasta juegos de uso domstico y tarjetas de crdito: 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 informacin
central para empresas, consumidores y desarrolladores de software
que utilicen la tecnologa Java.
Por qu los desarrolladores de software eligen la tecnologa Java
El lenguaje de programacin Java ha sido totalmente mejorado,
ampliado y probado por una comunidad activa de unos cuatro
millones de desarrolladores de software.
La tecnologa Java, una tecnologa madura, extremadamente eficaz y
sorprendentemente verstil, se ha convertido en un recurso
inestimable ya que permite a los desarrolladores: Desarrollar software
en una plataforma y ejecutarlo en prcticamente cualquier otra
plataforma Crear programas para que funcionen en un navegador
Web y en servicios Web Desarrollar aplicaciones para servidores como
foros en lnea, tiendas, encuestas, procesamiento de formularios
HTML, etc. Combinar aplicaciones o servicios basados en la tecnologa
Java para crear servicios o aplicaciones totalmente personalizados

Desarrollar potentes y eficientes aplicaciones para telfonos mviles,


procesadores remotos, productos de consumo de bajo coste y
prcticamente cualquier dispositivo digital

Visual Basic
es un lenguaje de programacin desarrollado por Alan Cooper para
Microsoft. El lenguaje de programacin es un dialecto de BASIC, con
importantes aadidos. Su primera versin fue presentada en 1991
con la intencin de simplificar la programacin utilizando un ambiente
de desarrollo completamente grfico que facilitara la creacin de
interfaces grficas y en cierta medida tambin la programacin
misma. Visual Basic fue discontinuado por Microsoft hace ya varios
aos. 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.
Caractersticas generales [editar]
Es un lenguaje de fcil aprendizaje pensado tanto para
programadores principiantes como expertos, guiado por eventos, y
centrado en un motor de formularios que facilita el rpido desarrollo
de aplicaciones grficas. Su sintaxis, derivada del antiguo BASIC, ha
sido ampliada con el tiempo al agregarse las caractersticas tpicas de
los lenguajes estructurados modernos. Se ha agregado una
implementacin limitada de la programacin 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


travs de ODBC (Informix, DBase, Access, MySQL, SQL Server,
PostgreSQL ,etc) a travs de ADO.
Es utilizado principalmente para aplicaciones de gestin de empresas,
debido a la rapidez con la que puede hacerse un programa que utilice
una base de datos sencilla, adems 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
(acrnimo de "MicroSoft Visual Basic Virtual Machine x.y", siendo x.y
la versin) y en otros VBRUNXXX.DLL ("Visual Basic Runtime X.XX"),
que provee todas las funciones implementadas en el lenguaje.
Adems existen un gran nmero de bibliotecas (DLL) que facilitan el
acceso a muchas funciones del sistema operativo y la integracin con
otras aplicaciones. Sin embargo esto slo es una limitacin en
sistemas obsoletos, ya que las bibliotecas necesarias para ejecutar
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).
Adems, una extensin propia del lenguaje llamada Visual
Basic for Applications (VBA) permite codificar mdulos (a
veces llamados macros) para las aplicaciones de Microsoft
Office.
Especialmente a partir de la versin 6 del lenguaje, se permite
la interaccin y generacin de objetos remotos que puedan ser
invocados desde pginas de scripts (concretamente las ASP,
aunque no es imposible hacer un enlace empleando JSP),
alojndolos en servidores de web.
Visual Basic.NET, parte de .NET, es un lenguaje prcticamente
equivalente en funcionalidades a C# (por ejemplo, no admite
pseudo-punteros), aadiendo capacidades de POO como
herencia, polimorfismo...

Versiones [editar]
Las versiones de Visual Basic para Windows son muy conocidas, pero
existe una versin de Microsoft Visual Basic 1.0 para MS-DOS
(ediciones Profesional y Estndar) menos difundida y que data de
1992. Era un entorno que, aunque en modo texto, inclua un
diseador de formularios en el que se podan arrastrar y soltar
distintos controles.

La ltima versin slo para 16 bits, la 3.0, inclua ya una detallada


biblioteca de componentes para toda clase de usos. Durante la
transicin de Windows 3.11 a Windows 95, apareci la versin 4.0,
que poda generar programas de 16 y 32 bits a partir de un mismo
cdigo fuente, a costa de un gran aumento en el tamao de los
archivos "runtime" necesarios. Adems, se sustituyen los controles
VBX por los nuevos OCX. Con la versin 5.0, se implement por
primera vez la posibilidad de compilar a cdigo nativo, obteniendo
una mejora de rendimiento considerable. Tanto esta como la posterior
6.0 soportaban caractersticas 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
utilizndose masivamente.
Las versiones actuales de Visual Basic se basan en la plataforma
.NET, la versin 7 del lenguaje fue implementada por Microsoft en el
programa Visual Basic .NET mientras que la versin 8 fue
implementada el programa Visual Basic 2005. Ambas versiones
tienen muchas de las caractersticas del lenguaje original tienen
numerosas diferencias que los hacen incompatibles. En muchos casos
para portar un cdigo escrito en Visual Basic 6 a Visual Basic .Net se
hace necesario reescribir parte del cdigo. La nueva versin del
lenguaje es mayormente equivalente a C# aunque presenta algunas
diferencias. Por eso hay un debate sobre la validez de esta nueva
versin 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 inversin en tiempo que con otros
lenguajes.
Permite generar libreras dinmicas (DLL) ActiveX de forma
nativa y Win32 (no ActiveX, sin interfaz COM) mediante una
reconfiguracin de su enlazador en el proceso de compilacin.
Permite la utilizacin de formularios (Forms) tanto a partir de
recursos (como en otros lenguajes) como utilizando un IDE para
disearlos.
Posibilidad de desarrollar y ejecutar aplicaciones de Visual
Basic 6.0 en Windows Vista sin realizar cambios en la mayora
de los casos pero no se logra aprovechar al mximo las
caracteristicas de este sistema como permite hacerlo Visual
Basic 2005 o el prximo 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 compaa decide la
evolucin del lenguaje.
En Visual Basic 6.0 y anteriores slo existe un compilador e
IDE, llamado igual que el lenguaje.
No existe forma alguna de exportar el cdigo 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 programacin sin declaracin 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 cdigo ms puro).
Su sintaxis no es case sensitive (no distinge entre minusculas y
maysculas como C++ por ejemplo)
NO permite programacin a bajo nivel ni incrustrar secciones
de cdigo en ASM.
Slo permite el uso de funciones de libreras dinmicas (DLL)
stdcall.
Fuerte dependencia de libreras y componentes en las versiones
6.0 y anteriores, lo que dificultaba la distribucin de los
desarrollos entre maquinas.
Algunas funciones estn indocumentadas.
La escasa implementacin de POO en Visual Basic 6.0 y
anteriores no permite sacar el mximo provecho de este
modelo de programacin.
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 dinmica, 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 lmites en matrices entre otros, dejando as
ms de la mano del programador la tarea de controlar dichos
errores)
El tratamiento de mensajes de Windows es bsico 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 aplicacin. 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 edicin standard y profesional (ms
completa en herramientas pero con licencia comercial) y edicin
express (ms limitada en herramientas pero gratuita), ambos
diseados por Microsoft. Existen alternativas gratuitas como
SharpDevelop para .NET y Proyecto Mono.
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 programacin, diseado a mediados de los
aos 1980, por Bjarne Stroustrup, como extensin del lenguaje de
programacin C.
Se puede decir que C++ es un lenguaje que abarca tres paradigmas
de la programacin: la programacin estructurada, la programacin
genrica y la programacin orientada a objetos.
Actualmente existe un estndar, denominado ISO C++, al que se han
adherido la mayora de los fabricantes de compiladores ms
modernos. Existen tambin algunos intrpretes como ROOT (enlace
externo). Las principales caractersticas del C++ son las facilidades
que proporciona para la programacin orientada a objetos y para el
uso de plantillas o programacin genrica (templates).
Adems posee una serie de propiedades difciles de encontrar en
otros lenguajes de alto nivel:

Posibilidad de redefinir los operadores (sobrecarga de


operadores)
Identificacin de tipos en tiempo de ejecucin (RTTI)

C++ est considerado por muchos como el lenguaje ms 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 ao 1983,
cuando el lenguaje fue utilizado por primera vez fuera de un
laboratorio cientfico. Antes se haba usado el nombre "C con clases".
En C++, "C++" significa "incremento de C" y se refiere a que C++ es
una extensin de C.
Un ejemplo [editar]

A continuacin 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 programacin orientada a objetos
[editar]

Clase: Es una plantilla que define la estructura de un conjunto


de objetos, que al ser creados se llamarn las instancias de la
clase. Esta estructura est compuesta por la definicin de los
atributos y la implementacin de las operaciones ( mtodos ).
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.
Identidad: Caracterstica de cada objeto que lo diferencia de los
dems, 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 mtodos 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 representacin 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


nmeros sin signo (por defecto los enteros contienen signo), con lo
que se consigue un rango mayor de nmeros naturales.
Tamaos Asociados [editar]
Segn la mquina y el compilador que se utilice los tipos primitivos
pueden ocupar un determinado tamao en memoria. La siguiente
lista ilustra el nmero de bits que ocupan los distintos tipos primitivos
en un PC de la familia 386 con gcc.
+ Tamaos de tipos primitivos bajo i386 (GCC)
Cabe notar que los tamaos en bits destacados
anteriormente son correctos slo para
arquitecturas x86 bajo los compiladores ms
comunes (GCC, Visual Studio...). Otras
arquitecturas pueden requerir distintos
tamaos de tipos de datos primitivos. C++ no
dice nada acerca de cul es el nmero de bits
en un byte, ni del tamao de estos tipos; ms
bien, ofrece solamente las siguientes "garantas
de tipos":

Tipo

Nmero de
Bits

char

short 16
int

32

float

32

doubl
64
e

Un tipo char tiene el tamao mnimo en bytes asignable por la


mquina, y todos los bits de este espacio deben ser
"accesibles".
El tamao reconocido de char es de 1. Es decir,

sizeof(char)
siempre devuelve 1.

Un tipo short tiene al menos el mismo tamao que un tipo char.


Un tipo long tiene al menos el doble tamao en bytes que un
tipo short.
Un tipo int tiene un tamao entre el de short y el de long,
ambos inclusive, preferentemente el tamao de un apuntador
de memoria de la mquina.
Un tipo unsigned tiene el mismo tamao que su versin signed.

wchar_t [editar]
Para la versin del estndar que se public en 1999, se decidi aadir
el tipo de dato wchar_t, que permite el uso de caracteres UNICODE, a
diferencia del tradicional char, que contempla simplemente al cdigo
de caracteres ASCII extendido. A su vez, se ha definido para la
mayora de las funciones y clases tanto de C como de C++ una
versin para trabajar con wchar_t, donde usualmente se prefija el

caracter w al nombre de la funcin (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 atribucin de un tipo en una variable o declaracin. Como tal,
puede ser usada para destacar que una funcin no recibe parmetros,
como en:
int funcion (void);
, aunque la tendencia actual es la de no colocar la palabra "void".
Adems se utiliza para determinar que una funcin no retorna un
valor, como en:
void funcion (int parametro);
Cabe destacar que void no es un tipo. Una funcin como la
declarada anteriormente no puede retornar un valor por medio de
return: la palabra clave va sola. No es posible una declaracin 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 slo ser accedida y utilizada bajo una operacin de cast. Por
ejemplo:
void * memoria;
Indica que memoria es un puntero a alguna parte, donde se guarda
informacin de algn tipo. El programador es responsable de definir
estos "algn", eliminando toda ambigedad. Una ventaja de la

declaracin "void *" es que puede representar a la vez varios tipos de


datos, dependiendo de la operacin de cast escogida. La memoria
que hemos apuntado en alguna parte, en el ejemplo anterior, bien
podra 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 funcin main() (a no ser que se
especifique en tiempo de compilacin otro punto de entrada, que en
realidad es la funcin que tiene el main() :
int main()
{}
La funcin 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
parmetros ni argumentos. La segunda forma tiene dos parmetros:
argc, un nmero describiendo el nmero de argumentos del 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 funcin main, debe
incluirse el valor de retorno (por ejemplo, return 0;, aunque el
estndar prev solamente dos posibles valores de retorno:
EXIT_SUCCESS y EXIT_ERROR, definidas en el archivo cstddef), o salir
por medio de la funcin 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 abstrados mediante una Clase. Segn el
paradigma de la programacin orientada a objetos un objeto consta
de:
1. Mtodos o funciones
2. Atributos o Variables Miembro
Un ejemplo de clase que podemos tomar es la clase perro. Cada perro
comparte unas caractersticas (atributos). Su nmero de patas, el
color de su pelaje o su tamao 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 mtodos
int ObtenerX();
int ObtenerY();
};
Constructores [editar]
Son unos mtodos especiales que se ejecutan automticamente al
crear un objeto de la clase. En su declaracin 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 mtodos, puede haber varios
constructores sobrecargados, aunque no pueden existir constructores
virtuales.
Como caracterstica especial a la hora de implementar un constructor,
justo despus de la declaracin de los parmetros, 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
continuacin:
// 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()
{
Punto MiPunto;
llamado MiPunto

// creamos un elemento de la clase Punto

cout<<"Coordenada X:"<<MiPunto.x<<endl;
valor acumulado en la variable x
cout<<"Coordenada Y:"<<MiPunto.y<<endl;
valor acumulado en la variable y
return 0;
}

// mostramos el
// mostramos el

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
automticamente en la ejecucin del programa, y que por tanto no
deben ser llamadas explcitamente por el programador. Su
cometido es liberar los recursos computacionales que el objeto de
dicha clase haya adquirido en tiempo de ejecucin al expirar este.
Los destructores son invocados automticamente al alcanzar el flujo
del programa el fin del mbito en el que est declarado el objeto.

Existen dos tipos de destructores pueden ser pblicos o privados,


segn si se declaran:

si es publico se llama desde cualquier parte del programa para


destruir el objeto.

si es privado no se permite la destruccin del objeto por el


usuario.

Funciones Miembro [editar]


Funcin 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 Decoracin de nombre (Name
Mangling en ingls): Cambiara el nombre de la funcin aadiendo un
identificador de la clase en la que est declarada, pudiendo incluir
caracteres especiales o identificadores numricos. Adems, las
funciones miembro reciben implcitamente un parmetro adicional: El
puntero this, que referencia al objeto que ejecuta la funcin.
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..
Plantillas [editar]
Las plantillas son el mecanismo de C++ para implantar el paradigma
de la programacin genrica. Permiten que una clase o funcin
trabaje con tipos de datos abstractos, especificndose ms adelante
cuales son los que se quieren usar. Por ejemplo, es posible construir
un vector genrico 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, polgonos, figuras,
fichas de personal, etc.
La declaracin de una plantilla se realiza anteponiendo la declaracin
template <typename A, ....> a la declaracin de la estructura (clase,
estructura o funcin) deseado.
Por ejemplo:
template <typename T>
T max(T x, T y)
{
if (x > y)
return x;
else
return y;
}

La funcin max() es un ejemplo de programacin genrica, y dados


dos parmetros de un tipo T (que puede ser int, long, float, double,
etc.) devolver el mayor de ellos (usando el operador >). Al ejecutar
la funcin con parmetros 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.
Especializacin [editar]
El siguiente ejemplo:
template <typename A> int myfunction(A a);
crea una plantilla bajo la cual pueden ser definidas en el cdigo de
cabecera cualesquiera funciones especializadas para un tipo de datos
como int myfunction(int), int myfuntion(std::string), int
myfunction(bool), etctera:
int myfunction (int a) {
return a + 5;
};
int myfunction (std::string a) {
return -a.size();
};
int myfunction (bool a) {
return (a & rand() );
};
Cada una de estas funciones tiene su propia definicin (cuerpo). Cada
cuerpo diferente, no equivalente ("no convertible") corresponde a una
especializacin. 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 compilacin, 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 cdigo fuente de la
aplicacin. En otras palabras, no es posible compilar la plantilla
std::vector< > a cdigo 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 diseada slo como clase

padre de las cuales se deben derivar clases hijas. Una clase abstracta
se usa para representar aquellas entidades o mtodos que despus
se implementarn en las clases derivadas, pero la clase abstracta en
s no contiene ninguna implementacin -- solamente representa los
mtodos que se deben implementar. Por ello, no es posible instanciar
una clase abstracta, pero s una clase concreta que implemente los
mtodos definidos en ella.
Las clases abstractas son tiles para definir interfaces, es decir, un
conjunto de mtodos que definen el comportamiento de un mdulo
determinado. Estas definiciones pueden utilizarse sin tener en cuenta
la implementacin que se har de ellos.
En C++ los mtodos de las clases abstractas se definen como
funciones virtuales puras.
class Abstracta
{
public:
virtual int metodo() = 0;
};
class ConcretaA : public Abstracta
{
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 implementacin de la clase
Abstracta, y la clase ConcretaB es otra implementacin. Debe notarse
que el = 0 es la notacin que emplea C++ para definir funciones
virtuales puras.
Espacios de Nombres [editar]

Una adicin a las caractersticas de C son los espacios de nombre


(namespace en ingls), 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 ms 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;
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 darn acceso
solamente a la variable descrita localmente; para acceder a la
variable del paquete mi_paquete es necesario acceder
especficamente 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 ambigedad o
conflicto de nombres.
Excepciones [editar]
C++ permite la existencia de excepciones, las cuales son una
metodologa de flujo de ejecucin basada en la prueba del cdigo
deseado (try) seguida por la intercepcin de ciertas condiciones bajo
un flujo de programa adicional (catch). La declaracin 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
nmero 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 funcin "at",
una excepcin, del tipo std::out_of_range, derivado de std::exception.
El bloque catch "atrapar" la excepcin arrojada como una variable X,
para la cual el mtodo 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 excepcin se propaga sin ser atrapada por un bloque catch, y
llegara hasta el punto de terminacin del programa, se produce la
terminacin abrupta de ste ("abort").
Herencia [editar]
Existen varios tipos de herencia entre clases en el lenguaje de
programacin C++. Estos son:
Herencia Simple [editar]
La herencia en C++ es un mecanismo de abstraccin creado para
poder facilitar, y mejorar el diseo 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 relacin 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 aadir

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 pblica en la clase Base y en las que componen la
jerarqua de herencia, y como privada en las clases que NO sean de la
jerarqua de la herencia.
Antes de utilizar la herencia, nos tenemos que hacer una pregunta, y
si tiene sentido, podemos intentar usar esta jerarqua: 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 ESUN Barco, un Carguero ES-UN Barco, un Trasatlntico ES-UN Barco,
etc...
En este ejemplo tendramos las cosas generales de un Barco (en C+
+)
class Barco {
protected:
char* nombre;
float peso;
public:
//Constructores y dems funciones bsicas de barco
};
y ahora las caractersticas de las clases derivadas, podran (a la vez
que heredan las de barco) aadir 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 pblico 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 Mltiple [editar]


La herencia mltiple 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, podrs
suponer que puede hablar, comer, andar, pero, por otro lado, como
empleado que es, tambin podrs suponer que tiene un jefe, que
puede cobrarte dinero por la compra, que puede devolverte el
cambio, etc... Si esto lo trasladamos a la programacin sera herencia
mltiple (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 ms de una clase para que otra herede
sus caractersticas.
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 funcin, salvo que esta
tendr un nombre especial: Tipo de dato de devolucin
operator<token del operador> (parmetros)
Los siguientes operadores pueden ser sobrecargados:

Operadores Unarios
o Operador * (de indireccin)
o Operador -> (de indireccin)
o Operador +
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 Asignacin
o Operador =
o Operador +=
o Operador -=
o Operador *=
o Operador /=
o Operador %=
o Operador <<=

Operador >>=
Operador &=
Operador ^=
Operador |=
Otros operadores
o Operador , (coma)
o Operador new
o Operador delete
o
o
o
o

Dado que estos operadores son definidos para un tipo de datos


definido por el usuario, ste es libre de asignarles cualquiera
semntica que desee. Sin embargo, se considera de primera
importancia que las semnticas 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 Estndar de Plantillas (STL) [editar]
Los lenguajes de programacin suelen tener una serie de bibliotecas
integradas para la manipulacin de datos a nivel ms bsico. En C++,
adems 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 (vase ms arriba plantillas) que
permite efectuar operaciones sobre el almacenado de datos,
procesado y flujos de entrada/salida. La STL ms 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
aplicacin que se est programando, reduciendo drsticamente 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 estndar de datos (teclado/pantalla).
Tambin est disponible cerr, similar a cout, usado para la salida
estndar de errores. Estas clases tienen sobrecargados los operadores
<< y >>, respectivamente, con el objeto de ser tiles en la
insercin/extraccin 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 habra que realizar la
siguiente expresin:
//...
Punto p(4,5);
//...
cout << "Las coordenadas son: " << p << endl;
//...
Es posible formatear la entrada/salida, indicando el nmero de dgitos
decimales a mostrar, si los textos se pasarn a minsculas o
maysculas, si los nmeros recibidos estn en formato octal o
hexadecimal, etc.
fstreams [editar]
Tipo de flujo para el manejo de ficheros. La definicin 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 parmetros relativos a la
ubicacin del fichero y el modo de apertura:
ios::binary Apertura de un
ios::ate al
ios::app Modo fichero binario (esto es un
ios::trunc Al
abrir el
"append": Se concepto relativo al
abrir, se
fichero, se
abrir el fichero sistema operativo en
borra el
posicionar al
en modo de
cuestin, luego en
contenido
final
anexado
muchas ocasiones, no es
necesario)
Para cerrar un fichero, puede usarse el mtodo close, o esperar a que
el destructor de las clases lo cierre automticamente.
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 informacin contenida en una cadena
(pasada como parmetro 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 genricos, sean cuales sean. Segn 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 tamao dinmico, con lo que se puede
insertar elementos an si el vector est lleno. A diferencia de
los vectores clsicos a bajo nivel de C, tambin pueden lanzar
excepciones si se accede a un elemento cuyo rango est fuera
del vector en cuestin, usando, en vez del operador [], el
mtodo at().

Colas dobles: son parecidas a los vectores, pero tienen mejor


eficiencia para agregar o eliminar elementos en las "puntas".
Listas.
Adaptadores de secuencia.
Contenedores asociativos: map y multimap, que permiten
asociar una "clave" con un "valor".
Contenedores asociativos: set y multiset, que ofrecen
solamente la condicin de "pertenencia", sin la necesidad de
garantizar un ordenamiento particular de los elementos que
contienen.

Iteradores [editar]
Pueden considerarse como una generalizacin de la clase de
"puntero". Un iterador es un tipo de dato que permite el recorrido y la
bsqueda de elementos en los contenedores. Como las estructuras de
datos (contenedores) son clases genricas, y los operadores
(algoritmos) que deben operar sobre ellas son tambin genricos
(funciones genricas), Stepanov y sus colaboradores tuvieron que
desarrollar el concepto de iterador como elemento o nexo de
conexin entre ambos. El nuevo concepto resulta ser una especie de
punteros que sealan a los diversos miembros del contenedor
(punteros genricos que como tales no existen en el lenguaje).
Algoritmos [editar]

Combinando la utilizacin de templates y un estilo especfico 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, comprensin y mantenimiento, sean ms fciles de
realizar.
Un ejemplo es la funcin copy, la cual simplemente copia variables
desde un lugar a otro. Ms estrictamente, copia los contenidos cuyas
ubicaciones estn 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 estn 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 ms conocidas estn swap (variable1, variable2),
que simplemente intercambia los valores de variable1 y variable2;
max (variable1, variable2) y su smil min (variable1, variable2), que
retornan el mximo o mnimo entre dos valores; find (inicio, fin, valor)
que busca valor en el espacio de variables entre inicio y fin; etctera.
Los algoritmos son muy variados, algunos incluso tienen versiones
especficas para operar con ciertos iteradores o contenedores, y
proveen un nivel de abstraccin extra que permite obtener un cdigo
ms "limpio", que "describe" lo que se est haciendo, en vez de
hacerlo paso a paso explcitamente.
Diferencias de Tipos respecto de C [editar]
En C++, cualquier tipo de datos que sea declarado completo (fully
qualified, en ingls) 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 compilacin 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
especificacin de una plantilla, o cualquier combinacin 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 ocurra en C, los tipos
definidos por medio de struct o enum son tipos completos.
Como tales, ahora son sujetos a sobrecarga, conversiones implcitas,
etctera.
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 pgina web de GCC.
Otros compiladores comunes:

Apple C++.
Borland C++
Codewarrior C++
Comeau C++
Cygwin (GNU C++)
Dev C++
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 programacin orientado a objetos que se puede
considerar una evolucin de Visual Basic implementada sobre el
framework .NET. Su introduccin result muy controvertida, ya que
debido a cambios significativos en el lenguaje VB.NET no es
compatible hacia atrs con Visual Basic, cosa que caus gran divisin
en la comunidad de desarrolladores de Visual Basic.
La gran mayora de programadores de VB.NET utilizan el entorno de
programacin 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
adems es libre).
Como pasa con todos los lenguajes de programacin 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 versin en fase Beta que se espera sea publicada a finales de
2007 o principios de 2008.
Visual Basic .NET (VB 7) [editar]
Esta es la versin 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 programacin .NET de Microsoft.
Visual Basic .NET 2003 (VB 7.1) [editar]
Visual Basic .NET 2003 fue publicado como parte Visual Studio 2003,
que tambin inclua Visual C# 2003, Visual J# 2003 y por primera vez
tambin inclua el .NET Compact Framework.
Esta revisin 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
versin publicada de Visual Basic .NET. Esta versin fue publicada
como parte de Visual Studio 2005, y requiere el Framework .NET 2.0.
En esta versin se incluyeron varias novedades, entre las que se
cuentan:

Editar y Continuar - probablemente la caracterstica que ms


echaban de menos los desarrolladores que venan de Visual
Basic. Esta caracterstica permite la modificacin el cdigo en
tiempo de depuracin, aumentando notablemente la velocidad
a la hora de depurar los programas.
Evaluacin de expresiones en tiempo de diseo
El pseudo-espacio de nombres My que proporciona:
o Acceso rpido a ciertas reas del Framework .NET que de
otra manera requeriran una cantidad significante de
cdigo para usarse.
o Clases generadas dinmicamente (Quizs la ms
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 mtodo Dispose para liberar memoria
Just My Code, que "esconde" el cdigo autogenerado por el IDE
Visual Studio .NET
Data Source binding, que facilita enormemente la vinculacin
de los datos con los formularios
Genricos, o como son conocidos en C++, templates.
Clases parciales, un mtodo 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 cdigo generado por
el usuario con el cdigo autogenerado por el IDE.
Comentarios XML que pueden ser procesados por herramientas
de documentacin del cdigo 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 evolucin de Visual Basic .NET. Est previsto
que se publique con Visual Studio 2008 a finales de 2007 o principios
de 2008. Esta versin de Visual Basic, as como todo el entorno Visual
Studio 2008 incorporar la versin 3.5 del Framework .NET.
Para esta versin se aadirn 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, tambin conocido como VBx, ofrecer soporte para
entorno de ejecucin dinmico.
Est previsto que VB 10 forme parte de Microsoft Silverlight 1.1.
Relacin con Visual Basic [editar]
Si Visual Basic .NET debe considerarse una mera versin de Visual
Basic, o si debe considerarse como un nuevo lenguaje de
programacin es un tema que ha trado mucha discusin, y que an
la trae.
La sintaxis bsica es prcticamente la misma entre VB y VB.NET, con
la excepcin de los aadidos para soportar nuevas caractersticas
como el control estructurado de excepciones, la programacin
orientada a objetos, o los Genricos.
Las diferencias entre VB y VB.NET son profundas, sobretodo en
cuanto a metodologa de programacin y libreras, pero ambos
lenguajes siguen manteniendo un gran parecido, cosa que facilita
notablemente el paso de VB a VB.NET.
Versiones del entorno de programacin para Visual Basic
[editar]
Al mismo tiempo que evolucionaba el lenguaje, las herramientas que
Microsoft proporciona para programar tambin evolucionaban para
adaptarse a las novedades.
Visual Studio .NET [editar]
Visual Studio .NET se public en 2002 y fu la primera versin de
Visual Studio en introducir el framework .NET. Esta versin de Visual
Studio introdujo, junto con el Framework .NET tres nuevos lenguajes
de programacin, C#, VB.NET y Visual J#.
En esta primera versin de Visual Studio .NET se podan 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 actualizacin
menor de Visual Studio .NET, bsicamente propiciada por la
introduccin de la versin 1.1 del Framework .NET.

En esta versin se aadi por primera vez la posibilidad de programar


para dispositivos mviles 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 actualizacin
bastante importante, tanto del entorno de desarrollo como del
Framework y por lo tanto de los lenguajes asociados.
Visual Studio 2005 supuso la introduccin varia novedades en el
entorno:

Soporte para Genricos en Intellisense.


Soporte para WebServices usando ASP.NET.
Servidor web local para realizar pruebas sin depender de IIS.
Integracin con SQL Server 2005.
Diseadores 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 introduccin en el mercado de la versin 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 versin de Visual Studio 2005
limitada, esta versin permite solo programar en VB.NET, y adems
limita el tipo de proyectos que se pueden desarrollar.
Entornos de Desarrollo (IDEs) alternativos a Visual Studio
[editar]
Para desarrollar en VB.NET existen algunas alternativas a Visual
Studio, quizs la ms notable sea SharpDevelop.
SharpDevelop [editar]
SharpDevelop es un entorno de programacin 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 cdigo fuente.
MonoDevelop [editar]

MonoDevelop es una implementacin de SharpDevelop para


programar usando Mono, una implementacin 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 versin compatible 100% con .NET
que incluye la inmensa mayora de la libreras y una implementacin
multiplataforma de Windows.Forms, resulta posible programar para
distintos sistemas operativos usando VB.NET.
Obtenido de "http://es.wikipedia.org/wiki/Visual_Basic.NET"

Das könnte Ihnen auch gefallen