lunes, 20 de febrero de 2012

2.4 Métodos

Para descargar el documento de este tema, haz clic aquí

Los métodos o funciones miembro se definen dentro de la clase a la que pertenecen y constituyen la interfaz o forma de acceder a la estructura interna de los objetos es decir a los datos privados.
Los métodos definen cual son las operaciones que se pueden realizar con los atributos de los objetos de la clase. 
La ejecución de un programa orientado a objetos consiste, en recibir, interpretar y responder unos objetos a los mensajes que envían otros objetos.
En P.O.O. un mensaje está asociado siempre con un método, de manera que cuando un objeto recibe un mensaje la respuesta a ese mensaje es ejecutar el método asociado.
Para que se pueda hacer una llamada a un método éste tiene que estar definido:
Definición de un método
[modificadores] tipo nombreMétodo ([ Tipo1 Parámetro1, Tipo2 Parámetro2, ...])  //Declaración o cabecera del método

Definición de variables locales;   //Sólo accesibles desde la función
Sentencias;                                                                                                                                Cuerpo del método.
[return [(] expresión [)]];  // Puede  no ser la última y puede aparecer más de una vez en la función.
}
Declaración o cabecera:
  • Modo de acceso: Especifica el tipo de acceso permitido indicando que usuarios de la clase podrán acceder a ese método, los métodos son la única forma de acceso a los atributos privados. Por defecto los métodos tienen protección paquete, es decir son accesibles desde cualquier clase que pertenezca al mismo paquete. Todas las clases de un mismo fichero .java pertenecen a un mismo paquete.
    • public: Accesible desde cualquier otra clase.
    • package: Accesible sólo desde el mismo paquete.
    • protected: Se comporta como un método público para los métodos del mismo paquete o de las subclases y para el resto como un método privado.
    • private: Sólo accesible a través de métodos de la propia clase.
  • Tipo del valor de retorno: Un método puede devolver un valor a quien lo llama o no devolver nada. El valor devuelto por un método puede ser de un tipo primitivo de datos o una referencia, pero nunca  puede devolver más de un valor. El valor de retorno nunca puede ser un objeto de una superclase, sí de la misma clase o de una subclase. Si el método no devuelve nada el tipo devuelto por el método es el tipo void.
  • Nombre: Por convenio, los nombres de los métodos comienzan con minúscula. Si el nombre del método es un nombre compuesto cada nueva palabra empieza con mayúsculas. Los nombres de los métodos suelen ser verbos.
Ejemplo:    calcularPerimetro                     pintar               finalizar
  • Posible lista de parámetros, la lista de parámetros formales es opcional, la función podría no tenerlos, en caso de que los haya se trata de variables locales (sólo accesibles y visibles desde el propio método) separadas por comas de las que se debe de especificar el tipo y nombre de cada una, se inicializan en la llamada recibiendo los valores especificados por los argumentos de la llamada. Aunque la función no lleve parámetros hay que poner los paréntesis. 
Cuerpo del método:
  • Definición de variables locales. Dentro de los métodos se pueden definir variables que sólo son accesibles dentro del método en donde se han definido. Este tipo de variables no se inicializan por defecto, y, aunque no se inicialicen en el momento de su definición se deben de inicializar antes de utilizarlas pues sino el compilador detecta un error.
  • Instrucciones necesarias para realizar determinada tarea.
  • La instrucción return devuelve el control de la ejecución al método que hizo la llamada. Si el método no devuelve nada y se elimina la sentencia return la función termina con la llave final o llave de cierre de la función, en este caso el tipo devuelto por el método es el tipo void. Si el método retorna un valor, la función no puede ser del tipo void y la sentencia return además de producir la salida de la función  especifica el valor de retorno al método que hizo la llamada. En una función puede haber más de una sentencia return pero sólo se ejecuta una.

Llamada a un método
Para que un método se ejecute hay que llamarlo. La llamada o invocación a un método provoca la ejecución de las instrucciones que lo componen, una vez se han ejecutado el control de la ejecución vuelve a quien hizo la llamada.
La llamada al método consta de:
-  Nombre del método.
- Posible lista de argumentos, llamados también parámetros actuales, entre paréntesis y separados por comas.

Si un método no está definido como static la llamada o invocación al método hay que hacerla a través de un objeto que pertenezca a la clase que define el método y se dice que se envía un mensaje al objeto.
nombreObjeto.nombreMétodo([lista de argumentos])
El método se aplica al objeto de la clase a través del operador punto (.)
En este caso el objeto es siempre el argumento implícito del objeto. Los métodos pueden tener además argumentos explícitos que son los que van entre paréntesis a continuación del nombre del método.
Cuando se accede al método de un objeto se interpreta que el objeto ha recibido un mensaje y el objeto responde al mensaje ejecutando el método. Los mensajes que puede recibir un objeto se corresponden con el nombre de los métodos de su clase.
Si el método devuelve un valor, la llamada a la función debe de formar parte de una expresión que recoja el valor retornado por la función.

Métodos de clase o métodos static. 
Son métodos que no tienen como finalidad actuar sobre los atributos privados de los objetos. Se trata de un bloque de sentencias que se agrupan bajo un mismo nombre por tener alguna relación lógica que las encamina a realizar una tarea específica.  
Se aplican en general donde se necesiten, al no actuar sobre objetos, no pueden acceder a un miembro no static, los objetos no son el argumento implícito en la llamada, (no actúan sobre objetos concretos a través del operador punto (.), pero pueden recibir objetos de su clase como argumentos explícitos). Un miembro static si puede ser accedido a través de métodos no static.
IMPORTANTE
- Los métodos static no pueden acceder a variables ni llamar a métodos no static.
- Los métodos y variables static si pueden ser accedidos o llamados desde  miembros no static.
Los métodos estáticos se crean anteponiendo al nombre del método la palabra static. Si se define un método como estático es posible llamarlo sin crear un objeto. Como ocurre con los campos, para invocar un método estático hay dos posibilidades:
   Invocarlo directamente a través del nombre de la clase a la que pertenece.
   Invocarlo a través de un objeto de la clase previamente creado.
Pero en la llamada se suele utilizar el nombre de la clase en lugar del nombre de un objeto de la clase.
Esta es la razón por la que el método main es static, para que pueda ser invocado aunque no exista un objeto de la clase
Los métodos y variables de clase es lo más parecido que tiene Java a las funciones y variables globales de C/C++.

El método main

Toda aplicación Java ha de tener un método main y sólo uno, es el punto de entrada y salida de la aplicación, es public, static y no devuelve nada. Generalmente en una clase se definirá más de un método. Cuando tras compilar la clase se ejecuta, Java busca el método llamado main y comienza ejecutando el programa desde él. Si no existe el método main se produce un error.
Cuando una clase contiene varios métodos, el método main suele ser el último en describirse
Paso de parámetros a una función o método. 
Los parámetros de una función son variables locales que se inicializan en el momento de la llamada al método. Fuera de la función no se conocen y no pueden ser accedidas. Se crean al entrar en la función y se destruyen al salir de ella.
El paso de parámetros o argumentos a las funciones se puede hacer de dos formas:
-         Paso por valor
-         Paso por  referencia 

Paso por valor

Los parámetros de la función reciben una copia del valor de los argumentos de la llamada.
Las modificaciones que se hagan sobre los parámetros formales no afectan al valor de los parámetros actuales.
Es el único modo de pasar las variables de los tipos básicos o primitivos.
Paso por dirección o referencia

Los parámetros formales reciben una copia de la referencia a un objeto. Los parámetros formales serán por tanto de  tipo referenciado.
Es la forma de pasar los objetos a las funciones y la única forma de poder modificar dentro de un método una variable de tipo primitivo es incluyéndola como variable miembro de una clase y pasar como argumento una referencia a un objeto de dicha clase.

El método actua directamente sobre el objeto, si modifica sus datos una vez termine la ejecución del método los objetos quedan modificados.  
Con este paso de parámetros se permite, de una forma implícita, que una función devuelva más de un valor a la función que la llama.

1 comentario: