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. La
reducida potencia de cálculo y memoria de los electrodomésticos llevó a desarrollar
un lenguaje sencillo capaz de generar código de tamaño muy reducido.
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.
Applets y aplicaciones.
Aplicaciones
Son los programas básicos de Java. Se ejecutan en una determinada máquina, por el Java Runtime
Enviroment (JRE). Para crear una aplicación hace falta incluir en alguna de las clases que
compongan la aplicación un método denominado:
public static void main(String[] s){ }
Hay que indicar al JRE (comando java del JDK) el nombre de la clase (previamente compilada a
.class), que queremos ejecutar. Cuando se ejecute el programa lo que realmente se ejecutará será el
método main() de la clase indicada al JRE. Las aplicaciones soportan métodos nativos, o sea, incluir
en el programa código escrito en otros lenguajes de programación, así como violar algunas de las
directrices de seguridad.
En cada fichero Java (.java) sólo debe haber una clase pública.
Applets
Las applets o miniaplicaciones Java, son programas que deben incluirse en páginas
Web para ser observadas por otra aplicación (visualizador de applets o navegador
Web), y que se ejecutan cuando el usuario intenta visualizarlas (cargando la página
Web).
Las applets deben incluir un método de nombre start(), que será ejecutado cuando
el navegador intente mostrar por pantalla la applet.
Estas aplicaciones, son seguras (cumplen la especificación Java), y al ser
distribuibles por Internet no permiten incluir métodos nativos Java.
JavaBeans
Los JavaBeans son componentes gráficos de Java, que se pueden incorporar a otros
componentes gráficos. Se incluyen en la API de Java (paquete java.beans).
Existe una herramienta de Sun, denominada BDK (Beans Developer Kit), que es un
conjunto de herramientas para desarrollar JavaBeans. El BDK, es el JDK para el
desarrollo de JavaBeans.
Existen ya multitud de bibliotecas con JavaBeans, para que puedan ser utilizados.
JavaScript
JavaScript es un subconjunto del lenguaje Java que puede codificarse directamente
sobre cualquier documento HTML; el código fuente de JavaScript forma parte del
propio documento HTML.
JavaScript tiene menos potencia que Java, a cambio de más control sobre el
navegador Web que lo ejecute.
Se utiliza sobre todo para dar animación e interactividad a páginas Web.
JavaScript posee una habilidad limitada para interactuar con applets Java, pero Java
no puede interactuar de ningún modo con JavaScript.
Servlets
Son módulos que permiten sustituir o utilizar el lenguaje Java en lugar de
programas CGI (Common Gateway Interface) a la hora de dotar de interactividad a
las páginas Web.
Estas aplicaciones se ejecutan como aplicaciones servidoras en Internet, y
normalmente incluyen bucles infinitos a la espera de peticiones a las que atender.
Los Servlets no tienen entorno gráfico, ya que se ejecutan en el servidor. Reciben
datos y su respuesta más habitual suele ser código HTML (páginas Web).
 Simple
Es un lenguaje sencillo de aprender. Su sintaxis es la de C++ “simplificada”. Los
creadores de Java partieron de la sintaxis de C++ y trataron de eliminar de este todo
lo que resultase complicado o fuente de errores en este lenguaje. La herencia
múltiple, la aritmética de punteros, por la gestión de memoria dinámica (que en
Java se elimina de modo transparente para el programador gracias al recogedor
basura) son ejemplos de "tareas complicadas" de C++ y en Java se han eliminado
poco simplificado.
 Orientado a Objetos
Posiblemente sea el lenguaje más orientado a objetos de todos los existentes; en
Java todo, a excepción de los tipos fundamentales de variables (int, char, long...) es
un objeto.
 Distribuido
Java está muy orientado al trabajo en red, soportando protocolos como TCP/IP,
UDP, HTTP y FTP. Por otro lado el uso de estos protocolos es bastante sencillo
comparándolo con otros lenguajes que los soportan.
 Robusto
El compilador Java detecta muchos errores que otros compiladores solo detectarían
en tiempo de ejecución o incluso nunca. A esclarecer así por ejemplo " if(a=b) then
... " o " int i; h=i*2; "son dos ejemplos en los que el compilador Java no nos dejaría
compilar este código; sin embargo un compilador C compilaría el código y
generaría un ejecutable que ejecutaría esta sentencia sin dar ningún tipo de error).
 Seguro
Sobre todo un tipo de desarrollo: los Applet. Estos son programas diseñados para
ser ejecutados en una página web. Java garantiza que ningún Applet puede escribir
o leer de nuestro disco o mandar información del usuario que accede a la página a
través de la red (como, por ejemplo, la dirección de correo electrónico). En general
no permite realizar cualquier acción que pudiera dañar la máquina o violar la
intimidad del que visita la página web.
 Portable
En Java no hay aspectos dependientes de la implementación, todas las
implementaciones de Java siguen los mismos estándares en cuanto a tamaño y
almacenamiento de los datos.
 Arquitectura Neutral
El código generado por el compilador Java es independiente de la arquitectura:
podría ejecutarse en un entorno UNIX, Mac o Windows. El motivo de esto es que el
que realmente ejecuta el código generado por el compilador no es el procesador del
ordenador directamente, sino que este se ejecuta mediante una máquina virtual.
 Rendimiento medio
Actualmente la velocidad de procesado del código Java es semejante a la de C++,
hay ciertos pruebas estándares de comparación (benchmarks) en las que Java gana
a C++ y viceversa. Esto es así gracias al uso de compiladores just in time,
compiladores que traduce los bytecodes de Java en código para una determinada
CPU, que no precisa de la máquina virtual para ser ejecutado, y guardan el
resultado de dicha conversión, volviéndolo a llamar en caso devolverlo a necesitar,
con lo que se evita la sobrecarga de trabajo asociada a la interpretación del
bytecode.
 Multithread
Soporta de modo nativo los threads, sin necesidad del uso de de librerías
específicas (como es el caso de C++). Esto le permite además que cada Thread de
una aplicación java pueda correr en una CPU distinta, si la aplicación se ejecuta en
una máquina que posee varias CPU.
9
 enteros: int, long, short, byte
Const. 1, -1, 1024, 1L
 reales: float, double
Const. 1.0, -3.14159, 1.5e4, 1.0f
 caracter: char
Const. ‘a’, ‘X’, ‘@’
 lógico: boolean
Const. true, false
Constantes de String: “Hola“,“12 de Abril“
10
int i;
int i = 1;
double pi = 3.14159;
char c = ‘a’;
boolean estamos_bien = true;
Las declaraciones de variables pueden ir en cualquier
parte del programa pero siempre antes de que la
variable sea usada. Hay que tener cuidado con el rango
de validez (scope) de la declaración
11
 Aritmeticas: suma + 20 * c / (mod % 3)
 Relacionales: a > b, b >= c, c != 4, a == 0
 De String: “hola “+ nombre + “ hoy es “+
dia + “de”+mes
 Casts: (int) pi (pi = 3.1) (int) (Math.random()*100)+1)
 Otros: a == 1 ? a+1 : a-1
 Asignacion: a = 1;
 Asignación como operador: a = b = c = d = 0;
boolean cero = ( b = c - 10) == 0;
12
 Java no reclama si un tipo de menor rango se
convierte a uno de mayor rango.
byte < short < int < long < float < double
Tipo Bits Rango
int 32 -2**31 .. 2**31-1
short 16 -2**15 .. 2**15-1
byte 8 -2**7 .. 2**7-1
long 64 -2**63 .. 2**63-1
float 32 -10**32 .. 10**32
double 64 -10**300 .. 10**300
13
 int i = 1;
 long l = i; //ok
 l = 1000000000000;float f = l; //ok
 double d= 1.0e24; int i = d; // Error
 float f = 1.0f; int i = f; // Error
 short s = i; //Error
 double d = 1.0; int i = (int)d; //ok
 int i = 256;
 byte b = (byte)i; //ok pero b ==0;
Los operadores básicos de Java son + , - , * , / para suma, resta, producto y división.
El operador / representa la división de enteros si ambos operandos son enteros. Su
módulo puede obtenerse mediante el operador % (7/4= 1; 7% 4=3). Además existen
los operadores decremento e incremento: -- y ++ respectivamente. La
operación que realizan son incrementar y decrementar en una unidad a la variable a
la que se aplican. Su acción es distinta según se apliquen antes (++a) o después
(a++) de la variable. El siguiente programa ilustra estos distintos efectos:
Salida por pantalla del
programa anterior:
 if
Permite crear estructuras condicionales
simples; en las que al cumplirse una
condición se ejecutan una serie de
instrucciones. Se puede hacer que otro
conjunto de instrucciones se ejecute si la
condición es falsa. La condición es cualquier
expresión que devuelva un resultado de true
o false. La sintaxis de la instrucción if es(La
parte else es opcional):
 switch
Esta instrucción evalúa una expresión, y
según el valor de la misma ejecuta
instrucciones. Cada case contiene un valor de
la expresión; si efectivamente la expresión
equivale a ese valor, se ejecutan las
instrucciones de ese case y de los siguientes.
La instrucción break se utiliza para salir del
switch.
 while
La instrucción while permite crear bucles. Un
bucle es un conjunto de sentencias que se
repiten si se cumple una determinada
condición. Los bucles while agrupan
instrucciones las cuales se ejecutan
continuamente hasta que una condición que
se evalúa sea falsa. La condición se mira antes
de entrar dentro del while y cada vez que se
termina de ejecutar las instrucciones del
while
 do-while
Crea un bucle muy similar al anterior, en la
que también las instrucciones del bucle se
ejecutan hasta que una condición pasa a ser
falsa. La diferencia estriba en que en este tipo
de bucle la condición se evalúa después de
ejecutar las instrucciones; lo cual significa
que al menos el bucle se ejecuta una vez.
Sintaxis:
 for
Es un bucle más complejo
especialmente pensado para rellenar
arrays o para ejecutar instrucciones
controladas por un contador. Una vez
más se ejecutan una serie de
instrucciones en el caso de que se
cumpla una determinada condición.
La expresión inicial es una instrucción que se ejecuta una sola vez: al entrar por
primera vez en el bucle for (normalmente esa expresión lo que hace es dar valor
inicial al contador del bucle). La condición es cualquier expresión que devuelve un
valor lógico. En el caso de que esa expresión sea verdadera se ejecutan las
instrucciones. Cuando la condición pasa a ser falsa, el bucle deja de ejecutarse. La
condición se valora cada vez que se terminan de ejecutar las instrucciones del bucle.
Después de ejecutarse las instrucciones interiores del bucle, se realiza la expresión
que tiene lugar tras ejecutarse las instrucciones del bucle (que, generalmente,
incrementa o decrementa al contador). Luego se vuelve a evaluar la condición y así
sucesivamente hasta que la condición sea falsa.

Unidad 2. Lenguaje orientado a objetos

  • 2.
    Java surgió en1991 cuando un grupo de ingenieros de Sun Microsystems trataron de diseñar un nuevo lenguaje de programación destinado a electrodomésticos. La reducida potencia de cálculo y memoria de los electrodomésticos llevó a desarrollar un lenguaje sencillo capaz de generar código de tamaño muy reducido. 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.
  • 3.
    Applets y aplicaciones. Aplicaciones Sonlos programas básicos de Java. Se ejecutan en una determinada máquina, por el Java Runtime Enviroment (JRE). Para crear una aplicación hace falta incluir en alguna de las clases que compongan la aplicación un método denominado: public static void main(String[] s){ } Hay que indicar al JRE (comando java del JDK) el nombre de la clase (previamente compilada a .class), que queremos ejecutar. Cuando se ejecute el programa lo que realmente se ejecutará será el método main() de la clase indicada al JRE. Las aplicaciones soportan métodos nativos, o sea, incluir en el programa código escrito en otros lenguajes de programación, así como violar algunas de las directrices de seguridad. En cada fichero Java (.java) sólo debe haber una clase pública.
  • 4.
    Applets Las applets ominiaplicaciones Java, son programas que deben incluirse en páginas Web para ser observadas por otra aplicación (visualizador de applets o navegador Web), y que se ejecutan cuando el usuario intenta visualizarlas (cargando la página Web). Las applets deben incluir un método de nombre start(), que será ejecutado cuando el navegador intente mostrar por pantalla la applet. Estas aplicaciones, son seguras (cumplen la especificación Java), y al ser distribuibles por Internet no permiten incluir métodos nativos Java. JavaBeans Los JavaBeans son componentes gráficos de Java, que se pueden incorporar a otros componentes gráficos. Se incluyen en la API de Java (paquete java.beans). Existe una herramienta de Sun, denominada BDK (Beans Developer Kit), que es un conjunto de herramientas para desarrollar JavaBeans. El BDK, es el JDK para el desarrollo de JavaBeans. Existen ya multitud de bibliotecas con JavaBeans, para que puedan ser utilizados.
  • 5.
    JavaScript JavaScript es unsubconjunto del lenguaje Java que puede codificarse directamente sobre cualquier documento HTML; el código fuente de JavaScript forma parte del propio documento HTML. JavaScript tiene menos potencia que Java, a cambio de más control sobre el navegador Web que lo ejecute. Se utiliza sobre todo para dar animación e interactividad a páginas Web. JavaScript posee una habilidad limitada para interactuar con applets Java, pero Java no puede interactuar de ningún modo con JavaScript. Servlets Son módulos que permiten sustituir o utilizar el lenguaje Java en lugar de programas CGI (Common Gateway Interface) a la hora de dotar de interactividad a las páginas Web. Estas aplicaciones se ejecutan como aplicaciones servidoras en Internet, y normalmente incluyen bucles infinitos a la espera de peticiones a las que atender. Los Servlets no tienen entorno gráfico, ya que se ejecutan en el servidor. Reciben datos y su respuesta más habitual suele ser código HTML (páginas Web).
  • 6.
     Simple Es unlenguaje sencillo de aprender. Su sintaxis es la de C++ “simplificada”. Los creadores de Java partieron de la sintaxis de C++ y trataron de eliminar de este todo lo que resultase complicado o fuente de errores en este lenguaje. La herencia múltiple, la aritmética de punteros, por la gestión de memoria dinámica (que en Java se elimina de modo transparente para el programador gracias al recogedor basura) son ejemplos de "tareas complicadas" de C++ y en Java se han eliminado poco simplificado.  Orientado a Objetos Posiblemente sea el lenguaje más orientado a objetos de todos los existentes; en Java todo, a excepción de los tipos fundamentales de variables (int, char, long...) es un objeto.  Distribuido Java está muy orientado al trabajo en red, soportando protocolos como TCP/IP, UDP, HTTP y FTP. Por otro lado el uso de estos protocolos es bastante sencillo comparándolo con otros lenguajes que los soportan.
  • 7.
     Robusto El compiladorJava detecta muchos errores que otros compiladores solo detectarían en tiempo de ejecución o incluso nunca. A esclarecer así por ejemplo " if(a=b) then ... " o " int i; h=i*2; "son dos ejemplos en los que el compilador Java no nos dejaría compilar este código; sin embargo un compilador C compilaría el código y generaría un ejecutable que ejecutaría esta sentencia sin dar ningún tipo de error).  Seguro Sobre todo un tipo de desarrollo: los Applet. Estos son programas diseñados para ser ejecutados en una página web. Java garantiza que ningún Applet puede escribir o leer de nuestro disco o mandar información del usuario que accede a la página a través de la red (como, por ejemplo, la dirección de correo electrónico). En general no permite realizar cualquier acción que pudiera dañar la máquina o violar la intimidad del que visita la página web.  Portable En Java no hay aspectos dependientes de la implementación, todas las implementaciones de Java siguen los mismos estándares en cuanto a tamaño y almacenamiento de los datos.
  • 8.
     Arquitectura Neutral Elcódigo generado por el compilador Java es independiente de la arquitectura: podría ejecutarse en un entorno UNIX, Mac o Windows. El motivo de esto es que el que realmente ejecuta el código generado por el compilador no es el procesador del ordenador directamente, sino que este se ejecuta mediante una máquina virtual.  Rendimiento medio Actualmente la velocidad de procesado del código Java es semejante a la de C++, hay ciertos pruebas estándares de comparación (benchmarks) en las que Java gana a C++ y viceversa. Esto es así gracias al uso de compiladores just in time, compiladores que traduce los bytecodes de Java en código para una determinada CPU, que no precisa de la máquina virtual para ser ejecutado, y guardan el resultado de dicha conversión, volviéndolo a llamar en caso devolverlo a necesitar, con lo que se evita la sobrecarga de trabajo asociada a la interpretación del bytecode.  Multithread Soporta de modo nativo los threads, sin necesidad del uso de de librerías específicas (como es el caso de C++). Esto le permite además que cada Thread de una aplicación java pueda correr en una CPU distinta, si la aplicación se ejecuta en una máquina que posee varias CPU.
  • 9.
    9  enteros: int,long, short, byte Const. 1, -1, 1024, 1L  reales: float, double Const. 1.0, -3.14159, 1.5e4, 1.0f  caracter: char Const. ‘a’, ‘X’, ‘@’  lógico: boolean Const. true, false Constantes de String: “Hola“,“12 de Abril“
  • 10.
    10 int i; int i= 1; double pi = 3.14159; char c = ‘a’; boolean estamos_bien = true; Las declaraciones de variables pueden ir en cualquier parte del programa pero siempre antes de que la variable sea usada. Hay que tener cuidado con el rango de validez (scope) de la declaración
  • 11.
    11  Aritmeticas: suma+ 20 * c / (mod % 3)  Relacionales: a > b, b >= c, c != 4, a == 0  De String: “hola “+ nombre + “ hoy es “+ dia + “de”+mes  Casts: (int) pi (pi = 3.1) (int) (Math.random()*100)+1)  Otros: a == 1 ? a+1 : a-1  Asignacion: a = 1;  Asignación como operador: a = b = c = d = 0; boolean cero = ( b = c - 10) == 0;
  • 12.
    12  Java noreclama si un tipo de menor rango se convierte a uno de mayor rango. byte < short < int < long < float < double Tipo Bits Rango int 32 -2**31 .. 2**31-1 short 16 -2**15 .. 2**15-1 byte 8 -2**7 .. 2**7-1 long 64 -2**63 .. 2**63-1 float 32 -10**32 .. 10**32 double 64 -10**300 .. 10**300
  • 13.
    13  int i= 1;  long l = i; //ok  l = 1000000000000;float f = l; //ok  double d= 1.0e24; int i = d; // Error  float f = 1.0f; int i = f; // Error  short s = i; //Error  double d = 1.0; int i = (int)d; //ok  int i = 256;  byte b = (byte)i; //ok pero b ==0;
  • 14.
    Los operadores básicosde Java son + , - , * , / para suma, resta, producto y división. El operador / representa la división de enteros si ambos operandos son enteros. Su módulo puede obtenerse mediante el operador % (7/4= 1; 7% 4=3). Además existen los operadores decremento e incremento: -- y ++ respectivamente. La operación que realizan son incrementar y decrementar en una unidad a la variable a la que se aplican. Su acción es distinta según se apliquen antes (++a) o después (a++) de la variable. El siguiente programa ilustra estos distintos efectos: Salida por pantalla del programa anterior:
  • 15.
     if Permite crearestructuras condicionales simples; en las que al cumplirse una condición se ejecutan una serie de instrucciones. Se puede hacer que otro conjunto de instrucciones se ejecute si la condición es falsa. La condición es cualquier expresión que devuelva un resultado de true o false. La sintaxis de la instrucción if es(La parte else es opcional):  switch Esta instrucción evalúa una expresión, y según el valor de la misma ejecuta instrucciones. Cada case contiene un valor de la expresión; si efectivamente la expresión equivale a ese valor, se ejecutan las instrucciones de ese case y de los siguientes. La instrucción break se utiliza para salir del switch.
  • 16.
     while La instrucciónwhile permite crear bucles. Un bucle es un conjunto de sentencias que se repiten si se cumple una determinada condición. Los bucles while agrupan instrucciones las cuales se ejecutan continuamente hasta que una condición que se evalúa sea falsa. La condición se mira antes de entrar dentro del while y cada vez que se termina de ejecutar las instrucciones del while  do-while Crea un bucle muy similar al anterior, en la que también las instrucciones del bucle se ejecutan hasta que una condición pasa a ser falsa. La diferencia estriba en que en este tipo de bucle la condición se evalúa después de ejecutar las instrucciones; lo cual significa que al menos el bucle se ejecuta una vez. Sintaxis:
  • 17.
     for Es unbucle más complejo especialmente pensado para rellenar arrays o para ejecutar instrucciones controladas por un contador. Una vez más se ejecutan una serie de instrucciones en el caso de que se cumpla una determinada condición. La expresión inicial es una instrucción que se ejecuta una sola vez: al entrar por primera vez en el bucle for (normalmente esa expresión lo que hace es dar valor inicial al contador del bucle). La condición es cualquier expresión que devuelve un valor lógico. En el caso de que esa expresión sea verdadera se ejecutan las instrucciones. Cuando la condición pasa a ser falsa, el bucle deja de ejecutarse. La condición se valora cada vez que se terminan de ejecutar las instrucciones del bucle. Después de ejecutarse las instrucciones interiores del bucle, se realiza la expresión que tiene lugar tras ejecutarse las instrucciones del bucle (que, generalmente, incrementa o decrementa al contador). Luego se vuelve a evaluar la condición y así sucesivamente hasta que la condición sea falsa.