viernes, 7 de diciembre de 2012

6.2 MÉTODOS DE UNA CLASE


  • Los métodos de una clase constituyen la lógica de la clase, es decir, contienen el código que manipula el estado del objeto. Además constituyen el mecanismo utilizado para implementar los mensajes entre objetos. Quiere decir, cuando un objeto se comunica con otro por un mensaje lo hace por medio de la invocación al método correspondiente del objeto. Y el mecanismo para invocar un método en java es por medio de las referencias usando el operador de la siguiente forma:
    referencia.metodo (parametros);

    Declaración de los Métodos

    Veamos la forma de declarar un método. La estructura general de una declaración tiene dos partes, la declaración y el cuerpo del método.
    Métodos de clase
    La Declaracion_del_metodo proporciona información sobre su nombre, la accesibilidad del método, el número de parámetros que recibe, etc. El Cuerpo_del_metodo contiene el conjunto de sentencias que manipula los datos de cada objeto.

    Sobrecarga de métodos

    Cada método tiene una "firma" por así decirlo, que son su nombre, el tipo y número de sus parámetros. Existe una característica para tener dos métodos (ó constructores) con el mismo nombre. Esta característica se denominasobrecarga de métodos.
    Hemos estudiado la construcción de distintos constructores para una clase y hemos puesto como ejemplo el caso de una clase Publicacion. Veamos lo implementado hasta el momento y cómo los constructores nos dan un ejemplo de sobrecarga de métodos:
    sobrecarga de métodos
    El compilador resolverá que constructor debe ejecutar en cada momento en función del número de parámetros y su tipo. Si se llama al constructor sin parámetros se ejecutará el primer constructor y en caso de hacerlo con dos parámetrosString se ejecutará el segundo.
    Nota: El concepto de sobrecarga de métodos se puede aplicar siempre que los parámetros sean diferentes, bien por su tipo, bien por que el número de parámetros de un método o otro es diferente. Hay que tener cuidado con los tipos: int, byte y short ya que aunque son tipos diferentes, si hacemos la llamada aún método con un número entero no sabría a cual de los métodos llamar, ya que un entero puede ser considerado de las tres formas. Con double y float no pasa, porque acordaros que hemos de forzar a que Java entienda un decimal como float, sino lo entiende como double.
    Los métodos de clase al igual que las variables de clase, se aplican a la clase como un todo y no a sus instancias.

    Se utiliza de igual manera la palabra clave static para indicar que un método es un método de clase: 
    static valorRetorno nombreMetodo( <lista argumentos opcionales> )
    {
         /* cuerpo del método */
    }
    
Para acceder a las variables o métodos de clase se utiliza el mismo operador punto ( . ).

Aunque se puede acceder a las variables y métodos de clase a través de un objeto, está permitido y se recomienda utilizar mejor el nombre de la clase,
   /* Utilizar esto */
   nombreClase.nombreVarClase;
   nombreClase.nombreMetodoClase();

   /* en lugar de esto */
   nombreObjeto.nombreVarClase;
   nombreObjeto.nombreMetodoClase();
Ejemplo

/* Usuario3.java */

class Usuario3
{
     static char MAS = 'm';
     static char FEM = 'f';

     String nombre;
     int edad;
     String direccion;
     char sexo;

     Usuario3( )
     {
        nombre = null;
        edad = 0;
        direccion = null;
        sexo = '\0';
     }

     Usuario3(String nombre, int edad, String direccion,char sexo)
     {
        this.nombre = nombre;
        this.edad = edad;
        this.direccion = direccion;
        this.sexo = sexo;
     }

     Usuario3(Usuario3 usr)
     {
        nombre = usr.getNombre();
        edad = usr.getEdad();
        direccion = usr.getDireccion();
        sexo = usr.getSexo();
     }

     void setNombre(String n)
     {
        nombre = n;
     }

     String getNombre( )
     {
        return nombre;
     }

     void setEdad(int e)
     {
        edad = e;
     }

     int getEdad()
     {
        return edad;
     }

     void setDireccion(String d)
     {
        direccion = d;
     }

     String getDireccion( )
     {
        return direccion;
     }

     void setSexo(char s)
     {
        sexo = s;
     }

     char getSexo( )
     {
        return sexo;
     }

     public String toString()
     {
        return nombre;
     }
}
/* ProgUsuario3.java */

class ProgUsuario3
{
   static int NUM_USUARIOS = 0;
   static java.util.Vector usuarios = new java.util.Vector();

   String nombreObj = null;

   ProgUsuario3(String nombre)
   {
     this.nombreObj = nombre;
   }

   static int getNumUsuarios()
   {
     return NUM_USUARIOS;
   }

   static void imprimeUsuario(Usuario3 usr)
   {
      System.out.println("\nNombre: " + usr.nombre );
      System.out.println("Edad: " + usr.getEdad() );
      System.out.println("Sexo: " + usr.getSexo() );
      System.out.println("Direccion: " + usr.getDireccion() );
   }

   void addUsuario(Usuario3 usr)
   {
      usuarios.addElement(usr);
      System.out.print(usr.toString( )+ " agregado por el "+ this.toString() +",");
      NUM_USUARIOS ++;
   }

   void delUsuario(Usuario3 usr)
   {
      boolean b = usuarios.removeElement(usr);
      if( b == true )
      {
         NUM_USUARIOS--;
         System.out.print(usr.toString( )+ " eliminado por el "+ this.toString() +",");
      }
      else System.out.println("No se pudo eliminar al usuario.");
   }

   public String toString()
   {
      return nombreObj;
   }

   public static void main(String args[])
   {
      ProgUsuario3 obj1 = new ProgUsuario3("objeto1");
      ProgUsuario3 obj2 = new ProgUsuario3("objeto2");

      Usuario3 usr1,usr2,usr3,usr4;

      usr1 = new Usuario3( );
      usr2 = new Usuario3("Usuario B",24,"La direccion A",Usuario3.FEM);
      usr1 = new Usuario3(usr2);
      usr1.setNombre("Usuario A");
      usr3 = new Usuario3("Usuario C",35,"La direccion C",Usuario3.MAS);
      usr4 = new Usuario3("Usuario D",15,"La direccion D",Usuario3.MAS);

      obj1.addUsuario(usr1);
      System.out.println( "\t Total: " +ProgUsuario3.getNumUsuarios() );
      obj2.addUsuario(usr2);
      System.out.println( "\t Total: " +obj1.getNumUsuarios() );
      obj1.addUsuario(usr3);
      System.out.println( "\t Total: " +ProgUsuario3.NUM_USUARIOS );
      obj2.addUsuario(usr4);
      System.out.println( "\t Total: " +getNumUsuarios() +"\n");

      obj2.delUsuario(usr4);
      System.out.println( "\t Total: " +ProgUsuario3.getNumUsuarios() );
      obj1.delUsuario(usr3);
      System.out.println( "\t Total: " +obj1.getNumUsuarios() );
      obj2.delUsuario(usr2);
      System.out.println( "\t Total: " +ProgUsuario3.NUM_USUARIOS );
      obj1.delUsuario(usr1);
      System.out.println( "\t Total: " +getNumUsuarios() +"\n");
   }
}

No hay comentarios:

Publicar un comentario