La Mquina Virtual Java (JVM) es el entorno en el que se
ejecutan los programas Java, su misin principal es la de
garantizar la portabilidad de las aplicaciones Java.
Define esencialmente un ordenador abstracto y especifica las instrucciones (bytecodes) que este ordenador puede ejecutar. El intrprete Java especfico ejecuta las instrucciones que se guardan en los archivos cuya extensin es .class. Las tareas principales de la JVM son las siguientes:
Reservar espacio en memoria para los objetos creados Liberar la memoria no usada (garbage collection). Asignar variables a registros y pilas Llamar al sistema husped para ciertas funciones, como los accesos a los dispositivos Vigilar el cumplimiento de las normas de seguridad de las aplicaciones Java MQUINA VIRTUAL Java es un lenguaje de propsito general, de alto nivel, y orientado a objetos.
Es un lenguaje de programacin orientado a objetos puro, en el sentido de que no hay ninguna variable, funcin o constante que no est dentro de una clase. Se accede a los miembros dato y las funciones miembro a travs de los objetos y de las clases. Por razones de eficiencia, se han conservado los tipos bsicos de datos, int, float, double, char, etc, similares a los del lenguaje C/C++. MQUINA VIRTUAL HERENCIA La herencia es un principio fundamental de la Programacin Orientada a Objetos (POO) ya que esta permite la creacin jerarquas.
La idea de la herencia es permitir la creacin de nuevas clases basadas en clases existentes; podemos agregar nuevos campos, agregar o sobre cargar mtodos (override).
La clase ya existente es llamada superclass, o clase base, o clase padre. La clase nueva es llamada subclase, clase derivada, o clase hija. ENCAPSULAMIENTO Este concepto consiste en ocultar del estado o de los datos propios de un objeto, de forma que slo es posible modificar los mismos mediante los mtodos definidos para dicho objeto.
Cada objeto est aislado del exterior, de forma que la aplicacin es un conjunto de objetos que colaboran entre s mediante el paso de mensajes invocando sus operaciones o mtodos. De esta forma, los detalles de implementacin permanecen "ocultos" a las personas que usan las clases, evitando as modificaciones o accesos indebidos a los datos que almacenan las clases. DECLARACIN DE LA CLASE En el caso ms general, la declaracin de una clase puede contener los siguientes elementos:
[public] interface Interfase [extends InterfaseMadre1 [, InterfaseMadre2 ]] MODIFICADORES DE ACCESO Definir una clase como pblica (public) significa que puede ser usada por cualquier clase en cualquier paquete. Si no lo es, solamente puede ser utilizada por clases del mismo paquete.
Una clase final (final) es aquella que no puede tener clases que la hereden. Esto se utiliza bsicamente por razones de seguridad (para que una clase no pueda ser reemplazada por otra que la herede), o por diseo de la aplicacin. MODIFICADORES DE ACCESO Una clase abstracta (abstract) es una clase que puede tener herederas, pero no puede ser instanciada. Es, literalmente, abstracta (como la clase Number definida en java.lang). Para qu sirve? Para modelar conceptos. Por ejemplo, la clase Number es una clase abstracta que representa cualquier tipo de nmeros (y sus mtodos no estn implementados: son abstractos); las clases descendientes de sta, como Integer o Float, s implementan los mtodos de la madre Number, y se pueden instanciar. EXTENDS La instruccin extends indica de qu clase desciende la nuestra. Si se omite, Java asume que desciende de la superclase Object.
Cuando una clase desciende de otra, esto significa que hereda sus atributos y sus mtodos (es decir que, a menos que los redefinamos, sus mtodos son los mismos que los de la clase madre y pueden utilizarse en forma transparente, a menos que sean privados en la clase madre o, para subclases de otros paquetes, protegidos o propios del paquete). INTERFACE Una interfase (interface) es una clase que no implementa sus mtodos sino que deja a cargo la implementacin a otras clases. Las interfases pueden, asimismo, descender de otras interfases pero no de otras clases. Todos sus mtodos son por definicin abstractos y sus atributos son finales (aunque esto no se indica en el cuerpo de la interfase).
Son tiles para generar relaciones entre clases que de otro modo no estn relacionadas (haciendo que implementen los mismos mtodos), o para distribuir paquetes de clases indicando la estructura de la interfase pero no las clases individuales (objetos annimos).
Cuando una clase implementa (implements) una o ms interfases, debe contener la implementacin de todos los mtodos (con las mismas listas de parmetros) de dichas interfases. MODIFICADORES DE ACCESO Las clases native son aquellas que se implementan en otro lenguaje (por ejemplo C o C++) propio de la mquina. Sun aconseja utilizarlas bajo riesgo propio, ya que en realidad son ajenas al lenguaje.
Las clases synchronized permiten sincronizar varios threads para el caso en que dos o ms accedan concurrentemente a los mismos datos. De nuevo, ms detalles habr en el futuro, cuando hablemos de threads.
La clusula throws sirve para indicar que la clase genera determinadas excepciones. CUERPO DE CLASE En Java no hay variables globales; todas las variables se declaran dentro del cuerpo de la clase o dentro de un mtodo. Las variables declaradas dentro de un mtodo son locales al mtodo; las variables declaradas en el cuerpo de la clase se dice que son miembros de la clase y son accesibles por todos los mtodos de la clase.
Por otra parte, adems de los atributos de la propia clase se puede acceder a todos los atributos de la clase de la que desciende. ATRIBUTOS Finalmente, los atributos miembros de la clase pueden ser atributos de clase o atributos de instancia; se dice que son atributos de clase si se usa la palabra clave static: en ese caso la variable es nica para todas las instancias (objetos) de la clase (ocupa un nico lugar en memoria). Si no se usa static, el sistema crea un lugar nuevo para esa variable con cada instancia (o sea que es independiente para cada objeto).
La declaracin sigue siempre el mismo esquema:
[private|protected|public] [static] [final] [transient] [volatile] Tipo NombreVariable [= Valor]; MODIFICADORES DE ACCESO Java tiene 4 tipos de acceso diferente a las variables o mtodos de una clase: privado, protegido, pblico o por paquete (si no se especifica nada). De acuerdo a la forma en que se especifica un atributo, objetos de otras clases tienen distintas posibilidades de accederlos: S: puede acceder N: no puede acceder X: puede acceder al atributo en objetos que pertenezcan a la subclase, pero no en los que pertenecen a la clase madre. Acceso desde: private protected public (package) la propia clase S S S S subclase en el mismo paquete N S S S otras clases en el mismo paquete N S S S subclases en otros paquetes N X S N otras clases en otros paquetes N N S N COMPORTAMIENTO Static sirve para definir un atributo como de clase, o sea nico para todos los objetos de la clase.
Final, como en las clases, determina que un atributo no pueda ser sobreescrito o redefinido. O sea: no se trata de una variable, sino de una constante.
Transient denomina atributos que no se graban cuando se archiva un objeto, o sea que no forman parte del estado permanente del mismo. COMPORTAMIENTO Volatile se utiliza con variables modificadas asincrnicamente por objetos en diferentes threads (literalmente "hilos", tareas que se ejecutan en paralelo); bsicamente esto implica que distintas tareas pueden intentar modificar la variable simultneamente, y volatile asegura que se vuelva a leer la variable (por si fue modificada) cada vez que se la va a usar (esto es, en lugar de usar registros de almacenamiento como buffer). TIPOS DE VARIABLES Los tipos de variables disponibles son bsicamente 3: Tipos bsicos (no son objetos) Arreglos (arrays) Clases e interfases TIPOS BSICOS DE DATOS Tipo Tamao/Formato Descripcin byte 8-bit complemento a 2 Entero de un byte short 16-bit complemento a 2 Entero corto int 32-bit complemento a 2 Entero long 64-bit complemento a 2 Entero largo float 32-bit IEEE 754 Punto flotante, precisin simple double 64-bit IEEE 754 Punto flotante, precisin doble char 16-bit caracter Unicode Un caracter boolean true, false Valor booleano (verdadero o falso) TIPOS BSICOS DE DATOS Los arrays son arreglos de cualquier tipo (bsico o no).
Los arreglos siempre son dinmicos, por lo que no es vlido poner algo como: Integer cadena[5];
Aunque s es vlido inicializar un arreglo, como en: int das[ ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; char letras[ ] = { 'E', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D' }; String nombres[ ] = new String[12];
En Java, para todas las variables de tipo bsico se accede al valor asignado a la misma directamente (no se conoce la direccin de memoria que ocupa). Para las dems (arrays, clases o interfases), se accede a travs de un puntero a la variable. El valor del puntero no es accesible ni se puede modificar (como en C); Java no necesita esto y adems eso atentara contra la robustez del lenguaje. MTODOS Los mtodos, como las clases, tienen una declaracin y un cuerpo.
Bsicamente, los mtodos son como las funciones de C: implementan, a travs de funciones, operaciones y estructuras de control, el clculo de algn parmetro que es el que devuelven al objeto que los llama. Slo pueden devolver un valor (del tipo TipoDevuelto), aunque pueden no devolver ninguno (en ese caso TipoDevuelto es void). El valor de retorno se especifica con la instruccin return, dentro del mtodo.
Los mtodos pueden utilizar valores que les pasa el objeto que los llama (parmetros), indicados con tipo1 nombre1, tipo2 nombre2 en el esquema de la declaracin.
Estos parmetros pueden ser de cualquiera de los tipos ya vistos. Si son tipos bsicos, el mtodo recibe el valor del parmetro; si son arrays, clases o interfases, recibe un puntero a los datos (referencia). MTODOS MODIFICADORES DE ACCESO Public, private y protected actan exactamente igual para los mtodos que para los atributos.
Los mtodos estticos (static), son, como los atributos, mtodos de clase; si el mtodo no es static es un mtodo de instancia. El significado es el mismo que para los atributos: un mtodo static es compartido por todas las instancias de la clase.
Es final un mtodo que no puede ser redefinido por ningn descendiente de la clase. MODIFICADORES DE ACCESO Los mtodos abstractos (abstract) son aquellos de los que se da la declaracin pero no la implementacin (o sea que consiste slo del encabezamiento). Cualquier clase que contenga al menos un mtodo abstracto (o cuya clase madre contenga al menos un mtodo abstracto que no est implementado en la hija) es una clase abstracta. ESTRUCTURAS ITERATIVAS: IF La ms comn de todas, permite ejecutar una instruccin (o secuencia de instrucciones) si se da una condicin dada (o, mediante la clusula else, ejecutar otra secuencia en caso contrario).
if (expresin_booleana) { instrucciones_si_true; } else { instrucciones_si_false; } El operador ?: es el operador ternario. Puede emplearse para sustituir a una sentencia if-then-else. Su sintaxis es: exp1 ? exp2: exp3; Donde exp1 es una expresin booleana SWITCH Permite ejecutar una serie de operaciones para el caso de que una variable tenga un valor entero dado. La ejecucin saltea todos los case hasta que encuentra uno con el valor de la variable, y ejecuta desde all hasta el final del case o hasta que encuentre un break, en cuyo caso salta al final del case. El default permite poner una serie de instrucciones que se ejecutan en caso de que la igualdad no se de para ninguno de los case.
switch (expresin_entera) { case (valor1): instrucciones_1; [break;] case (valor2): instrucciones_2; [break;] .. case (valorN): instrucciones_N; [break;]
default: instrucciones_por_defecto; } WHILE Permite ejecutar un grupo de instrucciones mientras se cumpla una condicin dada:
while (expresin_booleana) { instrucciones }
Dowhile Similar al anterior, slo que la condicin se evala al final del ciclo y no al principio:
do { instrucciones } while (expresin_booleana); FOR Se emplea para ejecutar en forma repetida una serie de instrucciones; es un poco ms complejo:
for ( instrucciones_iniciales; condicin_booleana; instruccion_repetitiva_x ) { instrucciones }