Métodos CI-1101, Programación I Prof. Braulio Solano Rojas ¿Para qué? Será nuestra mejor herramienta para dividir el problema en subproblemas. Nos permitirán evitar repetirnos (redundancia de código). Mejorarán el mantenimiento que le podremos dar a nuestros programas. ¿Qué son? Son bloques de código a los cuales asignamos un nombre. Este nombre es significativo con respecto de la unidad de acción del bloque de código al cual representan. Pueden recibir parámetros (para configurar los efectos del método). Pueden devolver valores o solamente tener un efecto en el ambiente. Un ejemplo… En Java, por ejemplo, existe un método llamado: double Math.sqrt(double numero) Este método recibe un número y devuelve su raíz cuadrada al código que lo invoque. ¿Cómo se compone un método? El método se compone de un encabezado y un cuerpo. El encabezado se compone de: El tipo del valor que retorna, que también puede ser vacío (“void”) El nombre del método. Uno o más parámetros (cada uno compuesto de su tipo y nombre). El cuerpo se compone de: El bloque de instrucciones que se van a ejecutar cuando se invoca el método. Dentro del bloque puede existir una instrucción para retornar el valor resultante (se coloca solamente cuando el valor de retorno no es vacío). Métodos en JAVA class NombreClase { public TipoDevuelto NombreMétodo (tipo param1, tipo param2, más parametros…) { // Inicia el código del método // Pueden definirse instrucciones en este bloque // ValorDevuelto es el valor que devuelve el // método si el TipoDevuelto es diferente de void return ValorDevuelto; } // Termina de especificar el código del método } // Termina de especificar la clase Métodos estáticos Las variables o métodos estáticos son definiciones que van a ser compartidas por todas las instancias de objeto de la misma clase. Los métodos estáticos existen siempre, incluso cuando no se han creado objetos de la clase. Para invocar a un método estático solamente se utiliza el nombre de la clase. El método main es estático La razón por la cual el método main es estático es simplemente que se requiere poder invocarlo al inicio del programa cuando aún no se ha creado ninguna instancia (objetos). Llamado a un método Para llamar a un método se utiliza su nombre seguido de ( ). Dentro de los paréntesis vamos a colocar los parámetros que configuren su ejecución. Estos valores o parámetros se separan con coma. Si el método devuelve algún valor, dicho valor debe ser evaluado en el punto donde se invocó al método. Las clases Byte, Integer, Double, Float y Character Las clases Byte, Boolean, Integer, Double, Float y Character son clases envoltorias que poseen métodos estáticos para los objetos a cuyo tipo se refieren. Por ejemplo, hay un método que toma una hilera y la convierte al tipo indicado: int valor = Integer.parseInt(“25”); double valor = Double.parseDouble(“3.1417”); Clase Math La clase Math posee unconjunto de métodos estáticos para realizar operaciones matemáticas comunes: Math.random() genera un número aleatorio en el rango [0,1[. Math.sqrt(x) calcula la raíz cuadrada de "x". Math.pow(x, y) calcula xy. Math.sin(x) y Math.cos(x) corresponden a las funciones trigonométricas seno y coseno. Alcance de las variables dentro de los métodos Al nombrar una variable, JAVA primero busca el nombre entre las variables locales, parámetros, y por último en las variables del objeto. Para evitar conflictos de nombres, se utiliza this.variable para las variables del objeto instancia. "this" es el nombre del objeto dentro de él mismo. Si un método invoca un segundo método, este útlimo no puede acceder a las variables del primero a menos que estas sean pasadas como parámetro. Sobrecarga de métodos La sobrecarga de métodos es un medio para tener métodos con el mismo nombre, pero con tipos y / o número de parámetros distintos. Con esto se logra tener diferentes versiones de una misma operación, que varía según el número o el tipo de los parámetros. Sobrecarga de métodos La distinción entre métodos con el mismo nombre se hace entonces por medio de sus parámetros, dado que el verdadero nombre de un método incluye sus parámetros. No se aceptan dos métodos donde lo único que cambia entre ellos es su valor de retorno. En este caso sus nombres son iguales y el compilador no sabrá a cual versión del método invocar. Métodos públicos, protegidos y privados Tal como las variables dentro de una clase los métodos pueden ser públicos, protegidos o privados. Un método público es accesible fuera de la clase. Un método privado no es accesible fuera de la clase. Los métodos protegidos se comportan como públicos pero se convierten a privados en las clases que heredan. Encadenamiento de métodos El encadenamiento de métodos permite resumir llamados a métodos sobre el mismo objeto. Por ejemplo, las instrucciones anteriores se pueden resumir a: objeto.metodo1(); objeto.metodo2(); objeto.metodo1().metodo2(); Recomendación: ¡No lo use porque es semánticamente ambiguo! ¿Cómo funciona el encadenamiento de métodos? Para encadenar métodos es necesario que el objeto actual devuelva luego de llevar a cabo su método una referencia de sí mismo para que el siguiente método lo pueda utilizar. Clase &metodo() { // Modifica o usa la instancia de Clase // Luego devuelve una referencia de la // misma instancia que acaba de ser utilizada return this; } Métodos constructores y destructores El constructor es el método que siempre es llamado automáticamente al iniciar el objeto. El destructor es el método que siempre es llamado automáticamente al terminar el objeto. Los constructores y destructores no devuelven valores. Recursividad La recursividad es una técnica para resolver problemas que permite plantear la solución en términos de sí misma. La recursividad cuando es bien utilizada permite crear código sucinto y fácilmente inteligible. Un ejemplo clásico de problema resuelto con recursividad es el factorial de un número entero.