Variables Miembro
Una clase en Java puede contener variables y
métodos. Las variables pueden ser tipos primitivos como int, char, etc. Los
métodos son funciones.
Por ejemplo, en el siguiente trozo de código
podemos observarlo:
public class MiClase {
int i;
public MiClase() {
i = 10;
}
public void Suma_a_i( int j ) {
int suma;
suma = i + j;
}
}

La declaración de una variable
miembro aparece dentro del cuerpo de la clase, pero fuera del cuerpo de
cualquier método de esa clase. Si se declara dentro de un métodos, será una
variable local del método y no una variable miembro de la clase. En el ejemplo
anterior, i es una variable miembro de la clase y suma es
una variable local del método Suma_ a_i().
El tipo de una variable determina
los valores que se le pueden asignar y las operaciones que se pueden realizar
con ella.
El nombre de una variable ha de
ser un identificador válido en Java. Por convenio, los programadores Java
empiezan los nombres de variables con una letra minúscula, pero no es
imprescindible. Los nombres de las variables han de ser únicos dentro de la
clase y se permite que haya variables y métodos con el mismo nombre, a
diferencia de C++, en donde se produce un error de compilación si se da este
caso.
Para los programadores C++, se pueden señalar
algunas diferencias entre Java y C++ respecto a la sintaxis e interpretación en
la declaración de variables miembro de una clase, como son:
- En los
dos lenguajes se permite la declaración de variables miembro estáticas con
una sintaxis parecida, aunque en C++, se deben redeclarar estas
variables fuera de la definición de la clase utilizando el nombre de la
clase, el nombre de la variable y el operador de ámbito
- En los
dos lenguajes se permite la utilización de modificadores de acceso a las variables
miembro utilizando las palabras
clave public, private y protected, aunque la sintaxis
e interpretación son diferentes en los dos lenguajes
- Los dos
lenguajes reconocen la palabra clave volatile, aunque Java la ignora
- C++ no reconoce las palabras clave transient y final, utilizadas en la declaración de variables miembro en Java.
Aparte de las diferencias de sintaxis anteriores,
Java permite la inicialización de variables miembro de tipos primitivos en el
momento de la declaración y esto no es posible en C++.
La sintaxis completa de la declaración de una
variable miembro de una clase en Java sería:
[especificador_de_acceso][static][final][transient][volatile]
tipo nombreVariable [= valor_inicial];
Los bloques de sentencias compuestas en Java se
delimitan con dos llaves. Las variables de Java sólo son válidas desde el punto
donde están declaradas hasta el final de la sentencia compuesta que la engloba.
Se pueden anidar estas sentencias compuestas, y cada una puede contener su propio
conjunto de declaraciones de variables locales. Sin embargo, no se puede
declarar una variable con el mismo nombre que una de ámbito exterior.
El siguiente ejemplo intenta declarar dos variables
separadas con el mismo nombre. En C y C++ son distintas, porque están
declaradas dentro de ámbitos diferentes. En Java, esto es ilegal.
class Ambito {
int i = 1; // ámbito exterior
{ // crea un nuevo ámbito
int i = 2; // error de compilación
}
}
La declaración de una variable miembro dentro de la
definición de una clase sin anteponerle la palabra clave static, hace que
sea una variable de instancia en todos los objetos de la
clase. El significado de variable de instancia sería, más o menos, que
cualquier objeto instanciado de esa clase contiene su propia copia de toda
variable de instancia. Si se examinara la zona de memoria reservada a cada
objeto de la clase, se encontraría la reserva realizada para todas las
variables de instancia de la clase. En otras palabras, como un objeto es una
instancia de una clase, y como cada objeto tiene su propia copia de un dato
miembro particular de la clase, entonces se puede denominar a ese dato miembro
como variable de instancia.
En Java, se accede a las variables de instancia
asociadas a un objeto determinado utilizando el nombre del objeto, el operador
punto (.) y el nombre de la variable:
miObjeto.miVariableDeInstancia;
En C++, se puede acceder a las variables de
instancia de un objeto a través de la misma sintaxis, pero también utilizando
el operador flecha (->), que utiliza como origen una variable puntero que
apunta al objeto:
miVariablePuntero->miVariableDeInstancia;
La declaración de un dato miembro de una clase
usando static, crea una variable de clase o variable estática de la clase.
El significado de variable estática es que todas las instancias de la clase
(todos los objetos instanciados de la clase) contienen la mismas variables de
clase o estáticas. En otras palabras, en un momento determinado se puede querer
crear una clase en la que el valor de una variable de instancia sea el mismo (y
de hecho sea la misma variable) para todos los objetos instanciados a partir de
esa clase. Es decir, que exista una única copia de la variable de instancia,
entonces es cuando debe usarse la palabra clave static.
class Documento extends Pagina {
static int version = 10;
}
El valor de la variable version será el
mismo para cualquier objeto instanciado de la claseDocumento. Siempre
que un objeto instanciado de Documento cambie la variable version, ésta
cambiará para todos los objetos.
En C++, es necesario redeclarar todas las variables
estáticas fuera de la definición de la clase, produciendo una variable pseudo-global,
es decir, una variable que es global en lo que a los objetos de esa clase se
refiere.
Si se examinara en este caso la zona de memoria
reservada por el sistema para cada objeto, se encontraría con que todos los
objetos comparten la misma zona de memoria para cada una de las variables
estáticas, por ello se llaman también variables de clase, porque
son comunes a la clase, a todos los objetos instanciados de la clase.
Tanto en Java como en C++, se puede acceder a las
variables de clase utilizando el nombre de la clase y el nombre de la variable,
no es necesario instanciar ningún objeto de la clase para acceder a las
variables de clase.
En C++, a las variables de clase se accede
utilizando el operador de ámbito junto con el nombre de la clase y el nombre de
la variable:
miVariable::miVariableDeClase;
En Java, a las variables de clase se accede
utilizando el nombre de la clase, el nombre de la variable y el operador punto
(.). La siguiente línea de código, ya archivista, se utiliza para acceder a la
variable out de la clase System. En el proceso, se accede
al método println() de la variable de clase que presenta una
cadena en el dispositivo estándar de salida.
System.out.println( "Hola, Mundo"
);
Es importante recordar que todos los objetos de la
clase comparten las misma variables de clase, porque si alguno de ellos
modifica alguna de esas variables de clase, quedarán modificadas para todos los
objetos de la clase. Esto puede utilizarse como una forma de comunicación entre
objetos.
En Java, se utiliza la palabra
clave final para indicar que una variable debe comportarse como si
fuese constante, significando con esto que no se permite su
modificación una vez que haya sido declarada e inicializada.
Como es una constante, se le ha de proporcionar un
valor en el momento en que se declare, por ejemplo:
class Elipse {
final float PI = 3.14159;
. . .
}
Si se intenta modificar el valor de una
variable final desde el código de la aplicación, se generará
un error de compilación.
Si se usa la palabra clave final con una
variable o clase estática, se pueden crear constantes de clase, haciendo de
esto modo un uso altamente eficiente de la memoria, porque no se necesitarían
múltiples copias de las constantes.
La palabra clave final también se puede
aplicar a métodos, significando en este caso que los métodos no pueden ser
sobreescritos.
No hay comentarios:
Publicar un comentario