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++.
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++.
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):
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:
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; |
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.
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:
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:
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
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: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.
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