Mostrando entradas con la etiqueta laboratorio. Mostrar todas las entradas
Mostrando entradas con la etiqueta laboratorio. Mostrar todas las entradas

jueves, 23 de mayo de 2013

Ejemplo 1 Entrada y salida de datos en java


El código fuente:

Clase principal:
public class Ejemplo1 {
    
   public static void main(String[] a3d) {
        Datos objeto  = new Datos();
     objeto.obtenerCaracter();
     objeto.mostrarDato();
//   objeto.obtenerFlujo();
//   objeto.mostrarDatos();
    }
}
Clase Datos:
public class Datos {
 
    // atributos globales
      private static char flujo;//variable temporal que recibe el dato
      private String linea = null; 
    
       
       //metodo para obtener Un caracter.
       public void obtenerCaracter(){
       System.out.println("Ingresar un dato");
           try {
               flujo=(char) System.in.read();// se castea para pertenecer al mismo tipo de variable
           } catch (IOException ex) {
               Logger.getLogger(Datos.class.getName()).log(Level.SEVERE, null, ex);
           }
       
       }
    //metodo para obtner flujo
    public void obtenerFlujo(){
         
   
    InputStreamReader Flujo_bytes= new InputStreamReader (System.in);
    BufferedReader entrada= new BufferedReader (Flujo_bytes);
    System.out.println("Ingresar un flujo de datos");  
      // System.out.flush();
           try {
             
               //       
                           linea= entrada.readLine();
           } catch (IOException ex) {
               Logger.getLogger(Datos.class.getName()).log(Level.SEVERE, null, ex);
           }
       
        
        
    }
    public void mostrarDatos(){
    System.out.println("Dato ingresado: "+linea);   
    }
    
     public void mostrarDato(){
    System.out.println("Dato ingresado: "+flujo);   
    }

}

lunes, 6 de mayo de 2013

Flujo de datos en java

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikvUAFmJVseJ4vGsBY8_fwBZvwUSZmjEVTendHw3ndL-fXZuoaDlNAtvGhSDrdrMdC55u2a6BaWJ20DloHV1Ziwc7a8GrOiAA3vbtFqeJJ-yq2NaBf6Frr10Zmz_kxjV3AsNHI48NEkheq/s1600/Flujo+de+datos.jpg
 Para introducirnos en el amplio mundo  de la programación   hablaremos de la importancia del manejo de los datos entrada y salida de los mismos, ya que esto es solo una muestra de lo que veremos el resto  de nuestras próximas publicaciones, el uso adecuado de los datos.
Es decir,  con la finalidad de comprender las funciones, mostrare código fuente  para que puedan analizar y usar en sus proyectos.
Por supuesto que se dará una breve explicación del funcionamiento y su implementacion.

Entrada y salida de datos en java ( Teclado y pantalla)

Lo que debemos saber de entrada de datos.
En la mayoría de casos la fuente de entrada de datos es el teclado  y la fuente de salida de datos es la pantalla.
La entrada y salida estándar son flujos de datos que actúan como canales de comunicación permitiendo la interacción entre un programa y su entorno en el sistema. En Java podemos tener acceso a estos flujos de datos desde la clase
java.lang.System.

La clase System define un objeto de la clase BufferedIputStream, cuya referencia viene dada  por in. El objeto esta asociado al flujo estándar de entrada, que por defecto  es el teclado. Los elementos  básicos de este flujo  son caracteres individuales , no cadenas como ocurre con el objeto out. Entre los métodos de las clase se encuentra  read(), que devuelve el carácter actual en el  buffer de  entrada (solamente 1 carácter).

Los Buffer son Espacios de memoria principal que se reservan para el almacenamiento intermedio de datos procedentes o con destino a los periféricos. Los dos esquemas más usuales de reserva de zonas que incorporan los Sistemas Operativos para mejorar su rendimiento son el buffer simple y el buffer doble.

Lo que debemos saber de salida de datos.
El objeto out definido en la clase System esta asociado con el flujo de salida, que dirige los datos a consola y permite visualizar en la pantalla de su equipo.

System.out  es una referencia a un objeto de la clase PrintStream, el cual contiene los métodos esenciales para mostrar la salida de datos por pantalla a través de un  buffer. Entre ellos tenemos:
print(); Transfiere una cadena de caracteres al buffer de la pantalla.
println(); Transfiere una cadena de caracteres y el caracter de fin de linea al buffer de la pantalla.
flus();  El buffer con las cadenas almacenadas se vuelcan en pantalla.

Ejemplo 1:
El código siguiente es un ejemplo simple de entrada de datos desde la consola.
Pero hacemos énfasis en el concepto anterior, donde explica que con el metodo  read(), solamente obtendremos un solo carácter.

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class EDDSimples {
    private static char flujo;//variable temporal que recibe el dato

    public static void main(String[] args) {
        System.out.println("Ingresar un dato");
        try {
            flujo=(char) System.in.read();// se castea para pertenecer al mismo tipo de variable
        } catch (IOException ex) {
            Logger.getLogger(EDDSimples.class.getName()).log(Level.SEVERE, null, ex);
        }
        
           System.out.println("El dato ingresado: "+flujo);
    }
}

Resultado del primer ejemplo


Ejemplo 2:
El código siguiente es un ejemplo simple de entrada de datos desde la consola.
Ahora no  recaudaremos un solo carácter  sino que  obtendremos todos los datos encontrados en una linea. Usando InputStreamReader se obtiene el flujos de bytes y es trasladado a flujos de caracteres.

BufferedReader Crea un flujo de caracteres de entrada de búfer que utiliza una memoria intermedia de entrada de tamaño predeterminado.
La variable linea solo obtiene la conversión de bytes a cadenas de caracteres.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

public class EDDSimples {
    

   public static void main(String[] args) {
        
    String linea = null;   
    InputStreamReader Flujo_bytes= new InputStreamReader (System.in);
    BufferedReader entrada= new BufferedReader (Flujo_bytes);
    System.out.println("Ingresar un flujo de datos");    
    System.out.flush();
        try {
            linea= entrada.readLine();
        } catch (IOException ex) {
            Logger.getLogger(EDDSimples.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        System.out.println("Dato ingresado: "+linea);   
    }
}


Salida del ejemplo 2

viernes, 3 de mayo de 2013

Tipo de datos simples o primitivos


https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYo39Kq2EXrL_bDRHFmFl1FDnlnzQcqeEcBHBo56KbriDqL0x2PjxefozlK4F7PmnWC5gNRV2Q4ekWovDwaTyyAON-8Z5VUQq0zXmqkF8UgwVdV7CNjU0p2CNT91j__tSRzc7S5C7bWFXF/s1600/Esquema+de+datos+simples.jpg«La mayoría de los buenos programadores programan no porque esperan que les paguen o que el público los adore, sino porque programar es divertido.»

-Linus Torvalds

 En el  desarrollo de software los equipos informáticos se han convertido en una herramienta imprescindible en las empresas actuales, desde las grandes hasta las muy pequeñas, incluyendo a los trabajadores autónomos  disponen de un equipo informático que les ayuda en su proceso productivo de la información  Por lo que los datos se han convertido en algo muy importante, su gestión y su resguardo  es de gran interés de los desarrolladores.

Hay solamente cuatro diferentes tipos de datos que consideramos mas simples o primitivos. Otros tipos de datos son tipos que representan datos mas complejos. Los tipos tienen que ver con la clase de dato, una variable puede alojar y determinar que clase de operaciones se pueden desarrollar con el dato alojado en ella.

Datos primitivos o fundamentales

Lo que debemos saber

El dato es una representación simbólica (numérica, alfabética  algorítmica), un atributo o característica de una entidad. Los datos describen hechos empíricos, sucesos y entidades.

 Carácter: Frecuentemente se les conoce como Char, porque generalmente los lenguajes de programación están en ingles. Este tipo de dato representa a los caracteres simples, como 'd'. Un tipo de dato complejo que se deriva del tipo carácter  es aquel que reúne mas de un carácter y forma palabras o frases, se llama tipo cadena o string. Ejemplo: la variable nombre Empleado de tipo string puede alojar el dato  "Hola mundo".

Booleano: Los valores booleanos son valores lógicos y pueden ser falso o verdadero. En estos valores se indica el verdadero con el numero 1 y el falso con el 0.  

Entero: Los enteros están entre los tipos de datos mas utilizados en los lenguajes de programación  Hay diferentes clases de números enteros y difieren por el tamaño de ellos, incluyendo enteros cortos y enteros largos. Por ejemplo, en Java, los enteros cortos se alojan en 8 bits, mientras que los enteros de tipo largo, ocupan hasta 64 bits de longitud. Los números enteros son positivos y negativos, por ejemplo -15 y 1000. Notemos que no tienen punto decimal.

Real( Float): Los números reales son números con parte decimal, por ejemplo -10.0, 113288.0 y 12.45. Sin embrago, hay lenguajes de programación como NetLogo, que no hacen diferencia entre numeros enteros y reales cuando son exactos, como el caso de 1 y 1.0.









Tipos de datos en java

Para java los tipos de datos simples representan  valores escalares, valores individuales, como pueden ser char o los enteros. Java no soporta un gran numero de tipos de datos predefinidos, pero tiene la capacidad para crear sus propios tipos de datos a partir de la construcción class. 
Estos son los principales tipos de datos básicos en java, sus tamaños en bytes y el rango de valores que puede almacenar.



Los tipos fundamentales en java son:
Entero: (números completos y sus negativos) de tipo int.
Variantes de enteros: Tipos byte, short y long.
Reales números decimales: tipo float, double.
Caracteres: letras, dígitos, símbolos y signos de puntuación.
Bolean: true y false.

martes, 30 de abril de 2013

Instalacion de Oracle JDK en Ubuntu 13.04 (Forma manual)


Saludos:
A continuación les dejo un instructivo, para instalar JDK en Ubuntu, de una forma general y muy sencilla.
En el se contiene 2 formas de instalación Manual y en linea.



 

Y les adjunto un vídeo  como seguir los pasos de la guía:

Instalación de Oracle JDK en Ubuntu 13.04 (forma en linea)

Saludos:
A continuación les dejo un instructivo, para instalar JDK en Ubuntu, de una forma general y muy sencilla.
En el se contiene 2 formas de instalación Manual y en linea.





Y les adjunto un vídeo como realizar la instalación siguiendo la guía:

lunes, 15 de abril de 2013

Base de Datos Relacionales (Fundamentos)

Afrontando retos, se alcanza el conocimiento



En este tema expondremos  el concepto general de modelo de datos, incidiendo en los conceptos de estática y dinámica de un modelo de datos.Posteriormente analizaremos de forma detallada el modelo de datos que emplean. Nos enfocaremos en   la estrecha relación que existe entre el elemento básico de este modelo, y el concepto matemático de relación.


 


Estructura de datos
Componentes: Entidades, atributos y vínculos.

Elementos y relaciones
Vínculos: 1 a 1, 1 a muchos, muchos a muchos

ESTRUCTURA DE UNA BASE DE DATOS

Una Base de Datos está compuesta por un conjunto de tablas o archivos. Para una mayor comprensión




Entidad
Representa cualquier objeto distinguible en un modelo de negocios que se debe representar en la base de datos


Atributos
Es toda unidad fundamental que describe un dato.


Clases de atributo:
Obligatorio (NOT NULL, *)
Opcional (NULL, °)



Tupla
Es el conjunto de atributos que describen una entidad.



La información almacenada en cada uno de estos archivos se conoce con el nombre de Entidad. Por lo tanto una entidad es cualquier persona, cosa o evento, real o imaginario, de interés para la organización y acerca del cual se capturan, almacenan o procesan datos.
Además, cada uno de estos archivos está formado por un conjunto de registros que describe, a través de losatributos o datos (columna), cada entidad en él almacenado. Un atributo es pues, cualquier detalle que sirve para identificar, clasificar, cuantificar o expresar el estado de una entidad.
Todos los registros de un archivo, identificados por las filas de cada tabla, poseen el mismo formato, o sea tienen el mismo conjunto de datos o atributos, identificados por las columnas, que describen a las entidades.
En otras palabras los registros están formados por un conjunto de datos almacenados en los campos de cada atributo; y cada registro debe contener el conjunto de atributos necesarios, para describir completamente cada entidad sobre la cual una organización necesita almacenar y obtener información.


TIPOS DE ARCHIVO

Los archivos pueden clasificarse en cuatro tipos básicos; que son: los archivos maestros, los archivos de transacciones, los archivos de control y los archivos de planeamiento. Esta clasificación dependerá de la relación lógica que tengan que tener los datos, para dar apoyo a la actividad de la organización.
ARCHIVO MAESTRO
Un archivo maestro es un conjunto de registros que se refieren a algún aspecto importante de las actividades de una organización, como por ejemplo el archivo de VENDEDORES. Un archivo maestro también puede reflejar la historia de los eventos que afectan a una entidad determinada, como es en el caso de un archivo HISTÓRICO DE VENTAS. Otros ejemplos son los archivos maestros de: PLAN DE CUENTAS; BANCOS, NÓMINA DEL PERSONAL, CLIENTES, VENDEDORES, PRODUCTOS, PROVEEDORES, COMPETIDORES.
ARCHIVO DE TRANSACCIONES.
Un archivo de transacciones es un archivo temporal que persigue básicamente dos propósitos; uno es el de acumular datos de eventos en el momento que ocurran, y el segundo propósito es el de actualizar los archivos maestros para reflejar los resultados de las transacciones actuales. En otras palabras, guardan información sobre los eventos que afectan a la organización y sobre los cuales se calculan datos; como es en el caso de los archivos de VENTAS, ORDENES DE PRODUCCIÓN o PAGO DE SALARIOS. Otros ejemplos de archivos de transacciones son los archivos de: REGISTROS CONTABLES, COSTOS, FACTURAS, PAGOS A RECIBIR, PROCESOS DE EXPORTACIÓN, CONSULTA DE CLIENTES, PEDIDOS DE CLIENTES Y PEDIDOS A PROVEEDORES.
ARCHIVOS DE CONTROL.
Los archivos de control contienen datos de los archivos maestros y de transacciones, para permitir el análisis del desempeño de la organización. Estos archivosgeneran medidas de control de los negocios, como ser el VOLUMEN DE VENTA POR PRODUCTO, VOLUMEN DE VENTA POR VENDEDOR, VOLUMEN DE VENTA POR CLIENTE, COMPRAS POR PROVEEDOR, COSTO DE REPOSICIÓN.
ARCHIVO DE PLANEAMIENTO.
Los archivos de planeamiento, contienen datos referentes a los niveles esperados de los datos existentes en los archivos maestros y de transacciones; como por ejemplo: PROGRAMA DE VENTAS, PROGRAMA DE COMPRAS, PROGRAMA DE PRODUCCIÓN; PRESUPUESTO FINANCIERO. Por lo tanto los datos existentes en un archivo de planeamiento provienen de los archivos maestros, de transacciones, y de control.


Clave principal y externa (foranea)


El índice con campo clave principal de una tabla es utilizado para buscar registros y crear combinaciones entre tablas.- No admite valores duplicados en los mismos,- El orden de los campos en una clave principal de múltiples campos determina el orden predeterminado de la tabla.- Si no se crea ninguna clave principal cuando se esta guardando la tabla aparecerá automáticamente- si se define Yes, creara un campo de tipo Auto numérico a la tabla y se establecerá dicho campo como clave principal, si se elige no, no se creara ninguna clave principal.

Es llamada clave Externa, es uno o mas campos de un tabla que hacen referencia al campo o campos de clave principal de otra tabla, una clave externa indica como esta relacionadas las tablas. Los datos en los campos de clave externa y clave principal deben coincidir, aunque los nombres de los campos no sean los mismos.- Los campos continuos se deben de marcos ambos campos y de la misma forma como se selecciona la Llave Primaria se debe de seleccionar la Llave Externa o Llave Foránea, utilizando el botón de Barra de Herramientas, Mouse o utilizando el Menú y la opción Edit.


Tipo de Relaciones


Entre dos tablas de cualquier base de datos relacional pueden haber dos tipos de relaciones, relaciones uno a uno y relaciones uno a muchos:



 Relación Uno a Uno: Cuando un registro de una tabla sólo puede estar relacionado con un único registro de la otra tabla y viceversa.
Por ejemplo: tenemos dos tablas una de profesores y otra de departamentos y queremos saber qué profesor es jefe de qué departamento, tenemos una relación uno a uno entre las dos tablas ya que un departamento tiene un solo jefe y un profesor puede ser jefe de un solo departamento.


 Relación Uno a Varios: Cuando un registro de una tabla (tabla secundaria) sólo puede estar relacionado con un único registro de la otra tabla (tabla principal) y un registro de la tabla principal puede tener más de un registro relacionado en la tabla secundaria, en este caso se suele hacer referencia a la tabla principal como tabla 'padre' y a la tabla secundaria como tabla 'hijo', entonces la regla se convierte en 'un padre puede tener varios hijos pero un hijo solo tiene un padre (regla más fácil de recordar).
Por ejemplo: tenemos dos tablas una con los datos de diferentes poblaciones y otra con los habitantes, una población puede tener más de un habitante, pero un habitante pertenecerá (estará empadronado) en una única población. En este caso la tabla principal será la de poblaciones y la tabla secundaria será la de habitantes. Una población puede tener varios habitantes pero un habitante pertenece a una sola población. Esta relación se representa incluyendo en la tabla 'hijo' una columna que se corresponde con la clave principal de la tabla 'padre', esta columna es lo denominamos clave foránea (o clave ajena o clave externa).
Una clave foránea es pues un campo de una tabla que contiene una referencia a un registro de otra tabla. Siguiendo nuestro ejemplo en la tabla habitantes tenemos una columna población que contiene el código de la población en la que está empadronado el habitante, esta columna es clave ajena de la tabla habitantes, y en la tabla poblaciones tenemos una columna codigo de poblacion clave principal de la tabla.

Relación Varios a Varios: Cuando un registro de una tabla puede estar relacionado con más de un registro de la otra tabla y viceversa. En este caso las dos tablas no pueden estar relacionadas directamente, se tiene que añadir una tabla entre las dos que incluya los pares de valores relacionados entre sí.
Por ejemplo: tenemos dos tablas una con los datos de clientes y otra con los artículos que se venden en la empresa, un cliente podrá realizar un pedido con varios artículos, y un artículo podrá ser vendido a más de un cliente.
No se puede definir entre clientes y artículos, hace falta otra tabla (por ejemplo una tabla de pedidos) relacionada con clientes y con artículos. La tabla pedidos estará relacionada con cliente por una relación uno a muchos y también estará relacionada con artículos por un relación uno a muchos

lunes, 4 de febrero de 2013

Conceptos de Programación Orientada a Ojetos

"En la programación orientada a objetos se
unen datos y procesos "


Programar en términos comprensibles es trata de encontrar solución a diversos problemas. Existen una serie de principios fundamentales para comprender cómo se modeliza la realidad al crear un programa bajo el paradigma de la orientación a objetos.

Características y conceptos de programación Orientada a Objetos


Principios de abstracción:
Mediante la abstracción la mente humana modela la realidad en forma de objetos. Para ello busca parecidos entre la realidad y la posible implementación de objetos del programa que simulen el funcionamiento de los objetos reales.Los seres humanos no pensamos en las cosas como un conjunto de cosas menores; por ejemplo, no vemos un cuerpo humano como un conjunto de células. Los humanos entendemos la realidad como objetos con comportamientos bien definidos. No necesitamos conocer los detalles de porqué ni cómo funcionan las cosas; simplemente solicitamos determinadas acciones en espera de una respuesta; cuando una persona desea desplazarse, su cuerpo le responde comenzando a caminar. Pero la abstracción humana se gestiona de una manera jerárquica, dividiendo sucesivamente sistemas complejos en conjuntos de subsistemas, para así entender más fácilmente la realidad. Esta es la forma de pensar que la orientación a objeto intenta cubrir.

Principio de encapsulación
El encapsulamiento permite a los objetos elegir qué información es publicada y qué información es ocultada al resto de los objetos. Para ello los objetos suelen presentar sus métodos como interfaces públicas y sus atributos como datos privados e inaccesibles desde otros objetos. Para permitir que otros objetos consulten o modifiquen los atributos de los objetos, las clases suelen presentar métodos de acceso. De esta manera el acceso a los datos de los objetos es controlado por el programador, evitando efectos laterales no deseados. Con el encapsulado de los datos se consigue que las personas que utilicen un objeto sólo tengan que comprender su interfaz, olvidándose de cómo está implementada, y en definitiva, reduciendo la complejidad de utilización.

Principios de modularidad
Mediante la modularidad, se propone al programador dividir su aplicación en varios módulos diferentes (ya sea en forma de clases, paquetes o bibliotecas), cada uno de ellos con un sentido propio.Esta fragmentación disminuye el grado de dificultad del problema al que da respuesta el programa, pues se afronta el problema como un conjunto de problemas de menor dificultad, además de facilitar la comprensión del programa.

Principios de polimorfismo
Polimorfismo quiere decir "un objeto y muchas formas". Esta propiedad permite que un objeto presente diferentes comportamientos en función del contexto en que se encuentre. Por ejemplo un método puede presentar diferentes implementaciones en función de los argumentos que recibe, recibir diferentes números de parámetros para realizar una misma operación, y realizar diferentes acciones dependiendo del nivel de abstracción en que sea llamado.

Principios de herencias
La mayoría de nosotros ve de manera natural nuestro mundo como objetos que se relacionan entre sí de una manera jerárquica. También se puede agregar que la herencias es el proceso por el cual un objeto adquiere las propiedades de otro objeto.  Por ejemplo, un perro es un mamífero, y los mamíferos son animales, y los animales seres vivos.Del mismo modo, las distintas clases de un programa se organizan mediante la jerarquías.

Principio del paso de mensajes
Mediante el denominado pasos de mensajes, un objeto puede solicitar de otro objeto que realice una acción determinada o que modifique su estado. El paso de mensajes se suele implementar como llamadas a los métodos de otros objetos. Desde el punto de vista de la programación estructurada, esto correspondería con la llamada a funciones.

Las clases
Las clases son abstracciones que representan a un conjunto de objetos con un comportamiento e interfaz común. Podemos definir una clase como "un conjunto de cosas (físicas o abstractas) que tienen el mismo comportamiento y características. Una clase no es más que una plantilla para la creación de objetos.
Las clases presentan el estado de los objetos a los que representan mediante variables denominadas atributos . Cuando se instancia un objeto el compilador crea en la memoria dinámica un espacio para tantas variables como atributos tenga la clase a la que pertenece el objeto.
Los métodos son las funciones mediante las que las clases representan el comportamiento de los objetos. En dichos métodos se modifican los valores de los atributos del objeto, y representan las capacidades del objeto (en muchos textos se les denomina servicios).
Desde el punto de vista de la programación estructurada, una clase se asemejaría a un módulo, los atributos a las variables globales de dicho módulo, y los métodos a las funciones del módulo.


Principio de Ocultación
Este principio nos dice que los datos deben protegerse dependiendo del uso que se les va a dar y el contexto en el que se este. Para dar acceso a datos se debe utilizar interfaces o funciones.
•Visibilidad:
•Privado: visto únicamente desde dentro de la misma clase. Estos no se heredan.
•Protegido: visto desde la misma clase y para las clases que la hereden.
•Publico: visto desde dentro y fuera de la clase. Este modificador permite que accedan otros objetos desde fuera.

domingo, 3 de febrero de 2013

Antecedentes del lenguaje java

“Primero aprende informática y toda la teoría. Después desarrolla un estilo de programación.Entonces, olvídalo todo y hackea.”
George Carrette


Hola amigos para dar inicio a estos tutos de programación en java,  daré inicio con una breve explicación del origen de este lenguaje. Esto como forma introductoria para tener muy en cuenta los fundamentos.  Las siguientes publicaciones me enfocare en describir las herramientas necesarias para entrar de lleno en la programación. 

¿Que es el lenguaje java?

En términos muy sencillos diremos:
Para crear un programa y que la computadora interprete y ejecute las instrucciones escritas en el, se debe usar un Lenguaje de programación. Java es un lenguaje de programación y la primera plataforma informática creada por Sun Microsystems en 1995. Una de las tecnologías subyacentes que permite el uso de programas punteros, como herramientas, juegos y aplicaciones de negocios.

Su origen:
Java surgió en 1991 cuando un grupo de ingenieros de Sun Microsystems trataron de diseñar un nuevo lenguaje de programación destinado a electrodomésticos. No fue creado originalmente para la red internet. Sun Microsystems comenzó a desarrollarlo con el objetivo de crear un lenguaje, independiente de la plataforma y del sistema operativo, para el desarrollo de electrónica de consumo (dispositivos electrónicos inteligentes, como televisores, vídeos, equipos de música, etc.).

En Diciembre de 1950 Patrick Naughton, ingeniero de Sun Microsystems, reclutó a varios colegas entre ellos James Gosling y Mike Sheridan para trabajar sobre un nuevo proyecto conocido como "El proyecto verde". Con la ayuda de otros ingenieros, empezaron a trabajar en una pequeña oficina en Sand Hill Road en Menlo Park, California. Y así interrumpió todas las comunicaciones regulares con Sun y trabajó sin descanso durante 18 meses. Debido a la existencia de distintos tipos de CPUs y a los continuos cambios, era importante conseguir una herramienta independiente del tipo de CPU utilizada. Desarrollaron un código “neutro” que no dependía del tipo de electrodoméstico, el cual se ejecutaba sobre una “máquina hipotética o virtual” denominada Java Virtual Machine (JVM). Era la JVM quien interpretaba el código neutro convirtiéndolo a código particular de la CPU utilizada. Esto permitía lo que luego se ha convertido en el principal lema del lenguaje: “Write Once, Run Everywhere”. A pesar de los esfuerzos realizados por sus creadores, ninguna empresa de electrodomésticos se interesó por el nuevo lenguaje.


Como lenguaje de programación para computadores, Java se introdujo a finales de 1995. La clave fue la incorporación de un intérprete Java en la versión 2.0 del programa Netscape Navigator, produciendo una verdadera revolución en Internet. Java 1.1 apareció a principios de 1997, mejorando sustancialmente la primera versión del lenguaje. Java 1.2, más tarde rebautizado como Java 2, nació a finales de 1998. Java incorpora en el propio lenguaje muchos aspectos que en cualquier otro lenguaje son extensiones propiedad de empresas de software o fabricantes de ordenadores (threads, ejecución remota, componentes, seguridad, acceso a bases de datos, etc.). Por eso muchos expertos opinan que Java es el lenguaje ideal para aprender la informática moderna, porque incorpora todos estos conceptos de un modo estándar, mucho más sencillo y claro que con las citadas extensiones de otros lenguajes. Esto es consecuencia de haber sido diseñado más recientemente y por un único equipo. El principal objetivo del lenguaje Java es llegar a ser el “nexo universal” que conecte a los usuarios con la información, esté ésta situada en el ordenador local, en un servidor de Web, en una base de datos o en cualquier otro lugar.
Java es un lenguaje muy completo (de hecho se está convirtiendo en un macro-lenguaje: Java 1.0 tenía 12 packages; Java 1.1 tenía 23 y Java 1.2 tiene 59). En cierta forma casi todo depende de casi todo. Por ello, conviene aprenderlo de modo iterativo: primero una visión muy general, que se va refinando en sucesivas iteraciones. Una forma de hacerlo es empezar con un ejemplo completo en el que ya aparecen algunas de las características más importantes. La compañía Sun describe el lenguaje Java como “simple, orientado a objetos, distribuido, interpretado, robusto, seguro, de arquitectura neutra, portable, de altas prestaciones, multitarea y dinámico”.