Beruflich Dokumente
Kultur Dokumente
Los atributos, tambin llamados datos o variables miembro son porciones de informacin que un objeto posee o conoce de s mismo. Una clase puede tener cualquier nmero de atributos o no tener ninguno. Se declaran con un identificador y el tipo de dato correspondiente. Tipos :
Variables de instancia
Cuando se declara el atributo o variable miembro euros en la clase Precio de la siguiente forma:
public class Precio { // Declaracion de atributos o variables miembro public double euros; // Declaracion de metodos . . . }
genera dos instancias de la clase Precio. En este caso, cada una de las dos instancias, p y q, de la clase Precio tiene una variable de instancia euros propia. Las respectivas llamadas al mtodo pone para cada instancia (p.pone(56.8) y q.pone(75.6)),permiten asignar un valor a las variables de instancia correspondientes. Otro ejemplo. En la declaracin de la clase Fecha se incluyen tres atributos (dia, mes y ao) que son variables de instancia:
public class Fecha { // Declaracion de atributos o variables miembro private int dia; private int mes; private int anho; // Declaracion de metodos . . . }
Las variables de instancia pueden declararse como public o como private y pueden pertenecer a cualquiera de los tipos de datos primitivos de Java o bien, a otra clase existente en Java
o declarada por el usuario. En principio, la nica limitacin para el nmero de variables de instancia que puede declarar una clase es el espacio libre disponible en la memoria del sistema que ejecute el programa.
La creacin de varias instancias de la clase CuentaBancaria no conlleva la existencia de varias variables totalCuentas. Durante la ejecucin de un programa que utilice la clase CuentaBancaria slo existir una variable de clase totalCuentas, independientemente del nmero de instancias de la clase CuentaBancaria que se generen . Es ms, no es necesario siquiera que exista una instancia de la clase, para que lo haga la variable de clase. De hecho, se inicializan a false, cero o null (dependiendo de su tipo) antes de que se genere una instancia de la clase.
// Creacion de dos instancias de la clase CuentaBancaria CuentaBancaria c1 = new CuentaBancaria(); CuentaBancaria c2 = new CuentaBancaria();
Las variables de clase se emplean cuando slo es necesaria una copia por clase que, adems,est accesible por todas las instancias de la clase a la que pertenece. En este caso, al ser un atributo public y static, puede accederse directamente a la variable de clase (totalCuentas) a travs de una instancia (c1 o c2) o de la clase en s (CuentaBancaria). Un atributo esttico puede ser accedido desde cualquier instancia de la clase, ya que es miembro de la propia clase.
public class PruebaCuentaBancaria {
public static void main (String [] args) { CuentaBancaria c1 = new CuentaBancaria(); c1.totalCuentas++; System.out.println("Total cuentas: " + c1.totalCuentas); CuentaBancaria c2 = new CuentaBancaria(); c2.totalCuentas++; System.out.println("Total cuentas: " + c2.totalCuentas); // Acceso a traves de la clase: CuentaBancaria.totalCuentas++; System.out.println("Total cuentas: " + CuentaBancaria.totalCuentas); // Resto de sentencias . . . } }
Para operar con variables de clase tambin podemos implementar mtodos en la clase. Por ejemplo el siguiente mtodo inctotalCuentas incrementa en una unidad el valor de la variable de clase totalCuentas.
public static void inctotalCuentas() { totalCuentas++; }
Al ser declarado el mtodo inctotalCuentas como un mtodo public y static, puede llamarse mediante cualquiera de las instancias (c1 o c2) o de la clase en s (CuentaBancaria). Las variables de clase pueden declararse como public o como private y pueden pertenecer a cualquiera de los tipos de datos primitivos de Java o bien, a otra clase existente en Java o declarada por el usuario. En principio, la nica limitacin para el nmero de variables de clase que puede declarar una clase es el espacio libre disponible por el sistema que ejecute el programa.
La palabra reservada final indica que el atributo debe comportarse como una constante, es decir, no puede ser modificada una vez declarada e inicializada. Por otro lado, se puede separar la declaracin de la inicializacin de la variable final, realizndose sta ms tarde. En este caso, el valor asignado a la variable final puede
hacerse en funcin de otros datos o de llamadas a mtodos, con lo que el valor de la constante no tiene porqu ser el mismo para diferentes ejecuciones del programa
Ahora vamos a crear un ejemplo de clase que tendr un par de atributos y varios mtodos, unos de los cuales devolvern valores y otros no:
// RectanguloTexto.java // Primer ejemplo de clase con varios // mtodos y atributos // Introduccin a Java class RectanguloTexto {
// --- Atributos: // --- la base y la altura del rectngulo int altura; int base;
// --- Mtodo "fijaAltura": // --- Da valor al atributo "altura" // --- No devuelve ningn valor public void fijaAltura( int valor ) { altura = valor; }
// --- Mtodo "fijaBase": // --- Da valor al atributo "base" // --- No devuelve ningn valor public void fijaBase( int valor ) { base = valor; }
// --- Mtodo "leeAltura": // --- Devuelve el valor del atributo "altura", // --- para no acceder directamente a l public int leeAltura( ) { return altura; }
// --- Mtodo "leeBase": // --- Devuelve el valor del atributo "base", // --- para no acceder directamente a l
// --- Mtodo "leeArea": // --- Devuelve el area del cuadrado // --- para no acceder directamente a l public int leeArea( ) { return altura * base; }
// --- Mtodo "dibuja": // --- Dibuja un rectangulo en pantalla // --- No devuelve ningn valor public void dibuja( ) { // Para bucles // Cada linea horizontal // rectangulo que dibujamos
for (i=0; i<altura; i++) { // Cada fila horiz // Primero la fila esta vacia lineaActual = ""; // Luego aado cuadraditos for (j=0; j<base; j++) lineaActual = lineaActual + "#"; // Y finalmente escribo la lea System.out.println( lineaActual ); } }
// --- Mtodo "main": // --- Cuerpo de la aplicacin, // --- Dibuja un par de rectangulos de ejemplo public static void main( String args[] ) { RectanguloTexto r = new RectanguloTexto(); r.fijaAltura( 10 ); r.fijaBase( 20 ); System.out.println( "El rea del rectngulo es" ); System.out.println( r.leeArea() ); System.out.println( "Vamos a dibujarlo..." ); r.dibuja(); }
Comentemos cosas:
Nuestra clase rectngulo tiene dos atributos: la base y la altura (ambos son nmeros enteros). Tiene varios mtodos. Los ms "comprensibles" son "dibuja", que lo muestra el rectngulo en pantalla (y no devuelve ningn valor, por eso lo definimos como "void"), y "leeArea", que devuelve un nmero entero ("int"), que es el rea del rectngulo. Pero tambin hemos incluido mtodos leeAltura, leeBase, fijaAltura y fijaBase. Esto es para lograr otra de las caractersticas deseables de la Programacin Orientada a Objetos, que ya habamos comentado: la ocultacin de los detalles. As, un cualquier aplicacin que emplease nuestra clase RectanguloTexto no necesita saber cmo son internamente los atributos "altura" y "base" para acceder a ellos. Si ms adelante, nosotros decidimos optimizar al mximo el espacio y utilizar atributos de tipo "byte" (por ejemplo), bastara con modificar ligeramente estos 4 mtodos para que conviertan de "byte" a "int" y viceversa, pero todas las aplicaciones que se basen en esta clase seguiran funcionando sin cambios. Este tipo de detalles hacen que un programa sea ms "robusto".