Variables y metodos de instancia

  • 6 views
Uploaded on

 

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
6
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. VARIABLES Y METODOS DE INSTANCIA 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 MiClase { int i; public MiClase() { i = 10; } public void Suma_a_i( int j ) { i = i + j; } } La clase MiClase contiene una variable (i) y dos métodos, MiClase que es el constructor de la clase y Suma_a_i( int j ). Ambito de una variable 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 } } Métodos y Constructores Los métodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. El constructor es un tipo específico de método que siempre tiene el mismo nombre que la clase.
  • 2. Cuando se declara una clase en Java, se pueden declarar uno o más constructores opcionales que realizan la inicialización cuando se instancia (se crea una ocurrencia) un objeto de dicha clase. Utilizando el código de ejemplo anterior, cuando se crea una nueva instancia de MiClase, se crean (instancian) todos los métodos y variables, y se llama al constructor de la clase: MiClase mc; mc = new MiClase(); La palabra clave new se usa para crear una instancia de la clase. Antes de ser instanciada con new no consume memoria, simplemente es una declaración de tipo. Después de ser instanciado un nuevo objeto mc, el valor dei en el objeto mc será igual a 10. Se puede referenciar la variable (de instancia) i con el nombre del objeto: mc.i++; // incrementa la instancia de i de mc Al tener mc todas las variables y métodos de MiClase, se puede usar la primera sintaxis para llamar al método Suma_a_i() utilizando el nuevo nombre de clase mc: mc.Suma_a_i( 10 ); y ahora la variable mc.i vale 21. Finalizadores Java no utiliza destructores (al contrario que C++) ya que tiene una forma de recoger automáticamente todos los objetos que se salen del alcance. No obstante proporciona un método que, cuando se especifique en el código de la clase, el reciclador de memoria (garbage collector) llamará: // Cierra el canal cuando este objeto es reciclado protected void finalize() { close(); } En esta sección, discutimos el uso de la palabra clave static para crears campos ys métodos que pertenecen a la clase, en lugar de a una instancia de la clase. Variables de Clase
  • 3. Cuando un número de objetos se crean del mismo esquema de la clase, cada uno tiene sus propias copias distintas de variables de instancia. En el caso de la claseBicycle, las variables de instancia son cadence, gear, y speed. Cada objeto Bicycle tiene sus propios valores para estas variables, almacenados en diversas posiciones de memoria. A veces, deseas tener variables que sean comunes a todos los objetos. Esto se logra con el modificador static. Los campos que tienen el modificador static en su declaración se llaman campos estáticos o variables de la clase. Estas están asociadas con la clase, en lugar de a cualquier objeto. Cada instancia de la clase comparte una variable de clase, que está en una localización fija en memoria. Cualquier objeto puede cambiar el valor de una variable de clase, pero las variables de clase pueden también ser manipuladas sin crear una instancia de la clase. Por ejemplo, suponga que desea crear un número de objetos Bicycle y asignar a cada uno un número de serie, comenzando con 1 para el primer objeto. Este número de identificación es único a cada objeto y es por lo tanto una variable de instancia. Al mismo tiempo, necesita un campo para llevar la cuanta de cuántos objetos Bicycle se han creado de modo que sepas qué ID asignar al siguiente. Este campo no se relaciona con ningún objeto individual, sino con la clase en como un todo. Para esto necesita una variable de clase, numberOfBicycles, como sigue: public class Bicycle{ private int cadence; private int gear; private int speed; // agregar una variable de instancia para el ID de objeto private int id; // agregar una variable de clase para el número de objetos Bicycle instanciados private static int numberOfBicycles = 0; ...... } Las variables de clase se referencian por el nombre de clase en sí mismo, como en Bicycle.numberOfBicycles Esto hace claro que son variables de clase.
  • 4. Nota: Puede también referirse a campos estáticos con una referencia de objeto como myBike.numberOfBicycles pero esto no se recomienda porque no hace claro que estas son variables de clase. Puede usar el constructor de Bicycle para establecer la variable de instancia id e incrementar la variable de clase numberOfBicycles: public class Bicycle{ private int cadence; private int gear; private int speed; private int id; private static int numberOfBicycles = 0; public Bicycle(int startCadence, int startSpeed, int startGear){ gear = startGear; cadence = startCadence; speed = startSpeed; // incrementar el número de bicicletas y asignar un número de ID id = ++numberOfBicycles; } // nuevo método para regresar la variable de instancia ID public int getID() { return id; } ..... } Métodos de Clase El lenguaje de programación Java soporta métodos estáticos así como variables estáticas. Los métodos estáticos, que tienen el modificador static en sus declaraciones, se deben invocar con el nombre de la clase, sin la necesidad de crear una instancia de la clase, como en ClassName.methodName(args)
  • 5. Nota: Puede también referirse a métodos estáticos con una referencia de objeto como instanceName.methodName(args) pero no se recomienda porque no hace claro que estas son variables de clase. Un uso común para los métodos estáticos es el acceder a campos estáticos. Por ejemplo, podríamos agregar un método estático a la clase Bicycle para acceder el campo estático numberOfBicycles: public static int getNumberOfBicycles() { return numberOfBicycles; } No todas las combinaciones de variables de instancia y de clase se permiten:  Los métodos de instancia pueden acceder variables de la instancia y a métodos de la instancia directamente.  Los métodos de instancia pueden acceder variables de la clase y a métodos de la clase directamente.  Los métodos de la clase pueden acceder variables de la clase y a métodos de la clase directamente.  Los métodos de la clase no pueden acceder variables de la instancia o a métodos de la instancia directamente—estos deben utilizar una referencia de objeto. También, los métodos de la clase no pueden utilizar la palabra clave this ya que no hay instancia de this a la cual referirse. Constantes El modificador static, junto con el modificador final, también se utiliza para definir constantes. El modificador final indica que el valor de este campo no puede cambiar. Por ejemplo, la siguiente declaración de variable define una constante llamada PI, cuyo valor es una aproximación de pi (el cociente de la circunferencia de un círculo a su diámetro): static final double PI = 3.141592653589793; Las constantes definidas de esta manera no pueden ser reasignadas, y es un error de tiempo de compilación si su programa intenta hacerlo. Por convención,
  • 6. el nombre de valores constantes se deletreado en letras mayúsculas. Si el nombre se compone de más de una palabra, las palabras se separan por un guión bajo (_). Nota: Si se define un tipo primitivo o una cadena como una constante y el valor es conocido en tiempo de compilación, el compilador substituye el nombre de la constante en todas partes en el código con su valor. Esta se llama constante de tiempo de compilación. Si el valor de la constante cambia en el mundo exterior (por ejemplo, si se legisla que el pi realmente debe ser 3.975), necesitará recompilar cualquier clase que utilice esta constante para obtener el valor actual. La Clase Bicycle Después de todas las modificaciones hechas en esta sección, la clase Bicycle es ahora: public class Bicycle{ private int cadence; private int gear; private int speed; private int id; private static int numberOfBicycles = 0; public Bicycle(int startCadence, int startSpeed, int startGear){ gear = startGear; cadence = startCadence; speed = startSpeed; id = ++numberOfBicycles; } public int getID() { //obtener ID return id; } public static int getNumberOfBicycles() { //obtener número de bicicletas return numberOfBicycles;
  • 7. } public int getCadence(){ //obtener cadencia return cadence; } public void setCadence(int newValue){ //establecer cadencia cadence = newValue; } public int getGear(){ //obtener engrane return gear; } public void setGear(int newValue){ //establecer engrane gear = newValue; } public int getspeed(){ //obtener velocidad return speed; } public void applyBrake(int decrement){ //aplicar frenos speed -= decrement; } public void speedUp(int increment){ //acelerar speed += increment; } }