Funcionalmente, un objeto puede hacer determinadas cosas. Es decir, hay cosas que sabemos que un objeto puede hacer pero el cómo lo hace, es irrelevante desde el punto de vista del diseño. A esto se le llama abstracción funcional.
Cuando definimos una clase, definimos:
-> Los atributos de los objetos.
-> La interfaz que expone.
-> El comportamiento de los objetos, es decir, su implementación.
Los métodos los definimos dentro de cada clase, no existen métodos en Java fuera de las clases. Además, no es posible definir métodos dentro de otros métodos.
Cuando definimos un método, éste puede devolver un tipo Primitivo de Java, una referencia a un objeto de una determinada clase o nada, a través de la palabra reservada void.
Para terminar la ejecución de un método utilizamos la palabra reservada return. Ésta debe ir acompañada de una expresión del tipo a devolver o, si el método devuelve void, la palabra return va sola. Cuando hacemos esto devolvemos el control al invocador del método. De esta manera, cuando ejecutamos un método de una clase no implementada por nosotros podemos “abstraernos” de la implementación de dicho método y con solo conocer la cabecera del método definida en su interfaz, podemos utilizar ese método.
Los parámetros reales (los que aparecen en la llamada al método) deben coincidir con los parámetros formales (los que vienen definidos en la cabecera del método).
Los parámetros se pueden pasar:
Por valor: Se le pasa al método una copia del valor, por lo tanto, las modificaciones realizadas sobre el parámetro dentro del método no afectan a la variable usada como tal. Ofrece seguridad, ya que conservamos el valor de la variable.
Por referencia: Se le pasa al método una referencia a los datos, por lo que el método invocado puede modificar los datos del invocador. Ofrece ahorro de memoria.
En Java, los tipos primitivos siempre se pasan por valor y los objetos siempre se pasan por referencia.
Con los métodos podemos llevar a cabo la abstracción funcional, dividiendo un problema grande en subproblemas más sencillos. La abstracción permite llevar a cabo el concepto de modularidad. Cada función agrupa a un conjunto de instrucciones altamente cohesionada, realizan una tarea específica y no es necesario conocer su implementación. Las funciones similares se agrupan en clases, véase funciones trigonométricas, aritméticas, etc…