lunes, 8 de junio de 2015

Lenguaje java

Características del lenguaje.
 Características del lenguaje. La principal característica de Java es la de ser un lenguaje compilado e interpretado. Todo programa en Java ha de compilarse y el código que se genera bytecodes es interpretado por una máquina virtual. De este modo se consigue la independencia de la máquina, el código compilado se ejecuta en máquinas virtuales que si son dependientes de la plataforma. Java es un lenguaje orientado a objetos de propósito general. Aunque Java comenzará a ser conocido como un lenguaje de programación de applets que se ejecutan en el entorno de un navegador web, se puede utilizar para construir cualquier tipo de proyecto. Su sintaxis es muy parecida a la de C y C++ pero hasta ahí llega el parecido. Java no es una evolución ni de C++ ni un C++ mejorado.
 Introducción a Java. En el diseño de Java se prestó especial atención a la seguridad. Existen varios niveles de seguridad en Java, desde el ámbito del programador, hasta el ámbito de la ejecución en la máquina virtual. Con respecto al programador, Java realiza comprobación estricta de tipos durante la compilación, evitando con ello problemas tales como el desbordamiento de la pila. Pero, es durante la ejecución donde se encuentra el método adecuado según el tipo de la clase receptora del mensaje; aunque siempre es posible forzar un enlace estático declarando un método como final.
Todas las instancias de una clase se crean con el operador new(), de manera que un recolector de basura se encarga de liberar la memoria ocupada por los objetos que ya no están referencia dos. La máquina virtual de Java gestiona la memoria dinámica mente. Una fuente común de errores en programación proviene del uso de punteros. En Java se han eliminado los punteros, el acceso a las instancias de clase se hace a través de referencias. Además, el programador siempre está obligado a tratar las posibles excepciones que se produzcan en tiempo de ejecución. Java define procedimientos para tratar estos errores. Java también posee mecanismos para garantizar la seguridad durante la ejecución comprobando, antes de ejecutar código, que este no viola ninguna restricción de seguridad del sistema donde se va a ejecutar. También cuenta con un cargador de clases, de modo que todas las clases cargadas a través de la red tienen su propio espacio de nombres para no interferir con las clases locales. Otra característica de Java es que está preparado para la programación concurrente sin necesidad de utilizar ningún tipo de biblioteca. Finalmente, Java posee un gestor de seguridad con el que poder restringir el acceso a los recursos del sistema. A menudo se argumenta que Java es un lenguaje lento porque debe interpretar los bytecodes a código nativo antes de poder ejecutar un método, pero gracias a la tecnología JIT, este proceso se lleva a cabo una única vez, después el código en código nativo se almacena de tal modo que está disponible para la siguiente vez que se llame.

Sintaxis de Java
En este capítulo se mostrarán las construcciones básicas de los lenguajes Java. Comienza el capítulo mostrando los tres tipos de comentarios que proporciona Java. Los comentarios de documentación resultan de especial importancia a la hora de comentar código. Se muestra cómo utilizar la herramienta de documentación javadoc. El capítulo sigue con la sintaxis válida para los identificadores, y se listan las palabras reservadas del lenguaje. El capítulo se cierra con la enumeración de los separadores y sus usos.
Tipos de datos en Java.
En este capítulo se presentan los tipos de datos que se pueden utilizar en Java. En Java existen dos grupos de tipos de datos, tipos primitivos y tipos referencia. Los tipos de datos primitivos son los mismo que en C/C++, int, float, double etcétera; los tipos referencias sirven para acceder a los atributos y métodos de los objetos. En este capítulo también se presentan los operadores definidos en el lenguaje, como crear arrays y la clase para contener cadenas /String).
Tipos de datos primitivos.
En este capítulo se presentan los tipos de datos que se pueden utilizar en Java. En Java existen dos grupos de tipos de datos, tipos primitivos y tipos referencia. Los tipos de datos primitivos son los mismo que en C/C++, int, float, double etcétera; los tipos referencias sirven para acceder a los atributos y métodos de los objetos. En este capítulo también se presentan los operadores definidos en el lenguaje, como crear arrays y la clase para contener cadenas /String).
Tipos de datos primitivos.
En Java existen además de objetos tipos de datos primitivos (int, float, etcétera). Al contrario que en C o C++ en Java el tamaño de los tipos primitivos no depende del sistema operativo o de la arquitectura, en todas las arquitecturas y bajo todos los sistemas operativos el tamaño en memoria es el mismo. En la Tabla 3-1 se muestran estos tamaños.

Los tipos de datos primitivos en Java.

Es posible recubrir los tipos primitivos para tratarlos como cualquier otro objeto en Java. Así por ejemplo existe una clase envoltura del tipo primitivo int llamado Integer. La utilidad de estas clases envoltura quedará clara cuando veamos las clases contenedoras de datos.
Tipos de datos referencia.
En Java los objetos, instancias de clases, se manejan a través de referencias. Cuando se crea una nueva instancia de una clase con el operador new este devuelve una referencia al tipo de la clase. Para aclararlo veamos un ejemplo:
Punto un Punto = new Punto();
El operador new() reserva espacio en memoria para contener un objeto del tipo Punto y devuelve una referencia que se asigna a un Punto. A partir de aquí accedemos al objeto a través de su referencia. Es posible, por tanto, tener varias referencias al mismo objeto. Presta atención al siguiente fragmento de código.
 Punto un Punto = new Punto();
unPunto.print();
Punto otro Punto = un Punto;
otroPunto.setX(1.0f);
otroPunto.setY(2.0f);
unPunto.print();
 La salida por pantalla es:
 Coordenadas del punto (0.0,0.0)
 Coordenadas del punto (1.0,2.0) .
Como las dos referencias hacen referencia a la misma instancia, los cambios sobre el objeto se pueden realizar a través de cualquiera de ellas.
Operadores. Precedencia.
Java tiene prácticamente los mismos operadores que C++.
En la Tabla 3-2 se muestran todos los operadores de Java, su precedencia y una pequeña descripción. 



La precedencia de los operadores se puede forzar haciendo uso de paréntesis. Ya que en Java no existen punteros tampoco existen los operadores dirección, referencia y sizeof() tan familiares a los programadores de C/C++.
Constantes
def: Una constante es un dato cuyo valor no puede cambiar durante la ejecución del programa. Recibe un valor en el momento de la compilación y este permanece inalterado durante todo el programa.
Como ya se ha comentado en el tema sobre las partes de un programa, las constantes se declaran en una sección que comienza con la palabra reservada const. Después de declarar una constante ya puedes usarla en el cuerpo principal del programa. Tienen varios usos: ser miembro en una expresion, en una comparación, asignar su valor a una variable, etc.
En el siguiente ejemplo se contemplan varios casos: 

  
  const
    Min = 0;
    Max = 100;
    Sep = 10;
  var 
    i : integer;

  begin
    i := Min;
    while i < Max do begin
      writeln(i);
      i := i + Sep
    end
  end.
     
En este ejemplo se declaran tres constantes (Min, Max y Sep). En la primera línea del cuerpo del programa se asigna una constante a una variable. En la siguiente, se usa una constante en una comparación. Y en la cuarta, la constante Sep interviene en una expresión que se asigna a una variable. El resultado de ejecutar este programa sería una impresión en pantalla de los números: 0, 10, 20, 30, 40, 50, 60, 70, 80 y 90.

Se puede hacer una división de las constantes en tres clases:
  • constantes literales (sin nombre)
  • constantes declaradas (con nombre)
  • constantes expresion
Constantes literales
Son valores de cualquier tipo que se utilizan directamente, no se declaran ya que no tienen nombre. En el siguiente ejemplo tienes un par de constantes literales (el 3, el 4, y el 3.1416):
VolumenEsfera := 4/3 * 3.1416 * Radio * Radio * Radio;
Constantes declaradas
También llamadas constantes con nombre, son las que se declaran en la sección const asignándoles un valor directamente. Por ejemplo:

const
Pi = 3.141592; (* valor real *)
Min = 0; (* entero *)
Max = 99; (* entero *)
Saludo = 'Hola'; (* cadena caract. *)
Constantes expresión
También se declaran en la sección const, pero a estas no se les asigna un valor directamente, sino que se les asigna una expresión. Esta expresión se evalúa en tiempo de compilación y el resultado se le asigna a la constante. Ejemplo:
const
Min = 0;
Max = 100;
Intervalo = 10;
N = (Max - Min) div Intervalo;
Centro = (Max - Min) div 2;


Variables
def: Una variable es un nombre asociado a un elemento de datos que está situado en posiciones contiguas de la memoria principal, y su valor puede cambiar durante la ejecución de un programa.
Toda variable pertenece a un tipo de dato concreto. En la declaración de una variable se debe indicar el tipo al que pertenece. Así tendremos variables enteras, reales, booleanas, etc. Por otro lado, distinguimos tres partes fundamentales en la vida de una variable:
  •  Declaración
  •  Iniciación
  •  utilización
Declaración de variables
Esta es la primera fase en la vida de cualquier variable. La declaración se realiza en la sección que comienza con la palabra var. Si quieres más información, puedes ir al apartado que trata sobre la declaración de variables en el tema Estructura de un programa.
Nota: Toda variable que vaya a ser utilizada en Pascal tiene que ser previamente declarada.
Iniciación de variables
Esto no es más que darle un valor inicial a una variable. Así como lo primero que se hace con una variable es declararla, lo siguiente tiene que ser iniciarla. Esto se hace para evitar posibles errores en tiempo de ejecución, pues una variable tiene un valor indeterminado después de declararla. Principalmente, existen dos maneras de otorgar valores iniciales a variables:
  • Mediante una sentencia de asignación
  • Mediante uno de los procedimientos de entrada de datos (read o readln)
Veamos un ejemplo que reúne los dos casos: 
   begin
      ...
     i:=1;
     readln(n);
     while i < n do begin
        (* cuerpo del bucle *)
        i := i + 1
     end;
      ...
   end.
        

Utilización de variables
Una vez declarada e iniciada una variable, es el momento de utilizarla. Esta es la parte que presenta un mayor abanico de posibilidades. A continuación tienes unas cuantas:
  • Incrementar su valor:
i := i + 1
  • Controlar un bucle:
for i:=1 to 10 do ...
  • Chequear una condición:
if i<10 then ...
  • Participar en una expresión:
n := (Max - Min) div i
  • Y otras que ya irás descubriendo


Expresiones

Una expresión es una construcción hecha de variables, operadores e invocaciones de métodos, las cuales son construidas de acuerdo a la sintaxis del lenguaje, que evalúa un único valor. Usted ya ha visto ejemplos de expresiones, ilustradas en negrita a continuación:
     int cadence = 0;                           
     anArray[0] = 100;
     System.out.println("Element 1 at index 0: " + anArray[0]);
 
     int result = 1 + 2; // result es ahora 3
     if(value1 == value2) System.out.println("value1 == value2");
El tipo de datos del valor regresado por una expresión depende de los elementos usados en la expresión. La expresión cadence = 0 regresa un int porque el operador de asignación regresa un valor del mismo tipo que el operando a la izquierda; en este caso, cadence es un int. Como puede ver por las otras expresiones, una expresión puede regresar otros tipos de valores también, tales como boolean o String.
Java le permite construir expresiones compuestas a partir de varias expresiones más pequeñas siempre y cuando los tipos de datos requeridos por una parte de la expresión concuerden con el tipo de datos del otro. Aquí está un ejemplo de una expresión compuesta:
 
1 * 2 * 3
En este ejemplo particular, el orden en que la expresión se evalúa no es importante porque el resultado de la multiplicación es independiente del orden; el resultado es siempre el mismo, no importa en qué orden aplica las multiplicaciones. Sin embargo, esto no es cierto para todas las expresiones. Por ejemplo, la siguiente expresión da diferentes resultados, dependiendo de si efectúa la adición o la operación de división primero:
x + y / 100     // ambiguo
Puede especificar exactamente cómo una expresión será evaluada usando paréntesis: ( y ). Por ejemplo, para hacer que la expresión anterior no sea ambigua, podría escribir lo siguiente:
 
(x + y) / 100    // no ambigua, recomendada
Si no indica explícita mente el orden de la operación a efectuarse, el orden se determina por la precedencia asignada a los operadores en uso en la expresión. Los operadores que tienen una precedencia mayor se evalúan primero. Por ejemplo, el operador de división tiene una precedencia mayor que la del operador de adición. Por eso, las siguientes dos declaraciones son equivalentes:
x + y / 100 
 
 
x + (y / 100) // no ambigua, recomendada
Cuando escriba expresiones compuestas, sea explícito e indique con paréntesis cuáles operadores deberían evaluarse primero. Esta práctica hace que el código sea más fácil de leer y mantener.

Declaraciones

Las declaraciones son rudimentariamente equivalentes a las oraciones en lenguaje natural. Una declaración forma una unidad completa de ejecución. Los siguientes tipos de expresiones pueden convertirse en una declaración al terminar la expresión con un punto y coma (semicolon) (;).
  • Expresiones de asignación
  • Cualquier uso de ++ o --
  • Invocaciones de métodos
  • Expresiones de creación de objetos
Tales declaraciones son llamadas declaraciones de expresión. Aquí están algunos ejemplos de declaraciones de expresión.
aValue = 8933.234;                      // declaración de asignación
aValue++;                               // declaración de incremento
System.out.println("Hello World!");     // declaración de invocación de métodos
Bicycle myBike = new Bicycle(); // declaración de creación de objetos
Además de las declaraciones de expresión, existen otros dos tipos de declaraciones: sentencias (declaraciones) de de declaración y declaraciones de control de flujo. Una sentencia de declaración declara una variable. Usted ha visto ya muchos ejemplos de sentencias de declaración:
double aValue = 8933.234; //"sentencia" de declaración
Finalmente, las declaraciones de control de flujo regulan el orden en que se ejecutan las declaraciones. Aprenderá sobre declaraciones de control de flujo en la siguiente sección, Declaraciones de control de flujo.

Bloques

Un bloque es un grupo de cero o más declaraciones entre llaves { } y puede usarse en cualquier lugar que una única declaración se permita. El siguiente ejemplo, BlockDemo, ilustra el uso de bloques:
class BlockDemo {
     public static void main(String[] args) {
          boolean condition = true;
          if (condition) { // inicia el bloque 1
               System.out.println("Condición es verdadera.");
          } // finaliza el bloque uno
          else { // inicia el bloque 2
               System.out.println("Condición es falsa.");
          } // finaliza el bloque 2
     }
}



No hay comentarios:

Publicar un comentario