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. A pesar de sus esfuerzos, ninguna empresa de electrodomésticos se interesó por el nuevo lenguaje, pero Java se introdujo como lenguaje de programación para computadores a finales de 1995 y se convirtió en una revolución para Internet. Java ha evolucionado desde entonces con nuevas versiones que mejoran sustancialmente la primera versión del lenguaje.
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Unidad 2. Lenguaje orientado a objetos
1.
2. 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.
3. 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.
4. 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.
5. 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).
6. 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.
7. 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.
8. 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.
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 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. 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á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:
15. 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.
16. 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:
17. 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.