capítulo 5: métodos - Inicio

Anuncio
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca CAPÍTULO 5: MÉTODOS Avanzamos en el desarrollo de la materia y en este capítulo abordaremos una
técnica que se puede aplicar para resolver problemas de complejidad media y
alta, a través de algoritmos y programas Java. El objetivo de la técnica es
facilitar el proceso de programación.
Los problemas que se han propuesto, analizado y programado hasta el
momento, son sencillos, y para resolverlos se necesita de una tarea específica
(escrita en una sola clase y en un solo método – el método principal); pero
existen problemas, cuya solución involucra más de una tarea, es decir que
necesitaremos más de una clase y otros métodos adicionales, a más del
principal.
Cuando un problema es bastante grande se suele aplicar el principio “divide y
vencerás”, dividir un problema en varios problemas pequeños, resolver cada
uno de esos problemas pequeños y la suma de esas soluciones, resuelve el
problema original. En programación, cada problema pequeño será resuelto a
través de métodos.
Una de las ventajas de trabajar con métodos es la facilidad que traen para
depurar un programa (encontrar errores), ya que si tengo un método que
calcula el factorial de un número y al ejecutar el programa veo que el factorial
no es correcto, el problema se encuentra en las acciones (sentencias) que
forman el método, no en otro lugar. Es decir que si falla una tarea concreta
debo buscar dentro del programa, el método que realiza esa tarea y
concentrarnos en las acciones de ese método.
Antes de comenzar con el análisis del pseudocódigo y los programas Java es
necesario estudiar ciertas definiciones que se presentan a continuación.
5.1 Definiciones Acuda al texto básico y revise el Capítulo 9 “Métodos” (página
204). Al inicio del punto 9.1 encontramos una definición del
concepto de método 1 y una clasificación de los mismos, es
necesario que lea por completo este tema antes de continuar.
Observe también como la estructura del pseudocódigo que
hemos utilizado hasta el momento cambia, para permitir la
definición de otros métodos además del método principal.
¿Qué le pareció la lectura? ¿Comprendió? Si es así avancemos y repasemos
ciertos elementos de la lectura anterior.
1
En otras metodologías de programación se suele hablar de funciones y procedimientos.
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Tanto en Java como en el pseudocódigo que estamos usando, puede existir un
único método principal en donde se inicia el funcionamiento del programa y
del algoritmo.
Analice detenidamente lo que se menciona en la página 205 del texto básico, el
párrafo anterior al ejemplo. Mientras cada método realiza una tarea específica,
el método principal hace las veces de director determinando cuando llamar a
cada uno de los métodos, es decir tiene la lógica general.
Antes de continuar es necesario que estudie por completo el acápite 9.2
“Métodos que no regresan valor” en la página 210 del texto básico, en donde se
explica a detalle la estructura de una clase con más de un método. Observe en
la página 211 en la parte 3 como los métodos tienen su propia sección de
declaraciones de: constantes, tipos y variables, así como también sus propias
acciones.
Por lo anterior podemos ver como un método tiene la capacidad de: declarar
variables, constantes y tipos; ejecutar todas las acciones que sean necesarias
empleando cualquiera de las estructuras de control estudiadas. Es decir tiene
todo lo necesario para realizar su tarea específica.
Una vez revisada la forma que tienen los algoritmos que poseen varios
métodos, iniciemos un estudio detallado de las acciones que se necesitan para
trabajar con métodos.
5.2 Creación / invocación de métodos Recurra una vez más al texto básico y lea detenidamente las
páginas desde la 204 a la 210. En ellas se plantea y desarrolla
un ejercicio que le ayudará a comprender las tareas de
creación e invocación de métodos.
¿Qué le pareció la lectura? ¿Comprendió? Si es así avancemos y repasemos
ciertos elementos de la lectura anterior.
Si bien en las páginas 204 y 205 se muestra el nuevo esquema de un algoritmo
que soporta métodos, la mejor manera de comprender, como crear e invocar un
método se muestra en el ejemplo que se describe en la página 205, el mismo
se implementa en las páginas 206 a la 208; y finalmente es explicado en las
páginas 208 a la 210 del texto básico. Recuerde leer detenidamente las
explicaciones de los algoritmos que se encuentran desarrollados en el texto
básico, antes de pasar a analizar cualquier programa Java de esta guía
didáctica.
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca La estructura del programa en Java es bastante similar a la forma que tiene el
pseudocódigo, veamos la “traducción” del algoritmo de la página 206 del texto
básico.
Ilustración 1 Programa Ayuda, que muestra la invocación y construcción de métodos
Tal y como se menciona en la explicación del algoritmo que se encuentra en la
página 208 del texto básico para la elaboración del programa que se muestra
en la Ilustración 70, en las líneas 15-18 podemos ver las declaraciones de clase
o globales, fíjese que están fuera del método principal, luego de la declaración
de la clase, las líneas 33, 36, 39 y 42 hacen la invocación a los métodos que se
han definido más adelante.
Recuerden que dijimos que un programa se ejecuta línea tras línea de forma
consecutiva, cuando se encuentra la invocación o llamada a un método sucede
lo siguiente: (supóngase que estamos en la línea 33) se encuentra la invocación
al método y el flujo del programa se pasa a dicho método, es decir que se
ejecutaría la línea 49 (como se muestra en la Ilustración 71), una vez que
terminó de ejecutarse el método (de acuerdo a las necesidades del usuario), el
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca flujo del programa pasa de la línea 69 a la línea 34 (una línea después de la
invocación al método) devolviendo el flujo de control del programa al método
principal. Así sucederá con todas las invocaciones a los métodos.
La definición de un método en Java se muestra a continuación:
Ilustración 2 Método de la clase Ayuda
Un método en Java, al igual que en el pseudocódigo, debe declararse fuera del
método principal (en el programa el método principal termina en la línea 46 –
Vea la Ilustración 70) y antes de finalizar la clase (en el programa termina en la
línea 135).
El método anterior, así como todos los métodos de esta clase son métodos que
no retornan o devuelven algún valor, por lo que en sus definiciones, y antes del
nombre, se ubica la palabra void, la misma que señala que ese método no
devuelve ningún valor. Los métodos que no retornan valor son uno de los tipos
de métodos que existen, en el texto básico se describen en el apartado 9.1.
Veamos otro ejemplo de la declaración del método que ayuda a dividir.
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 3 Otro método de la clase Ayuda 2
Dentro de un método se puede ubicar cualquiera de las estructuras de
control que hemos estudiado y realizar cualquiera de las acciones que
hemos empleado (incluida la llamada a funciones matemáticas) e incluso
invocar a otros métodos.
Para que el programa Java funcione se agregó la palabra reservada static en
algunos lugares, como por ejemplo en las declaraciones de clase (líneas 15-18
de la Ilustración 70); en las declaraciones de los métodos (líneas: 20 método
principal; 48 método ayudaSumar y 112
método ayudaDividir 3 , Ilustración
70, Ilustración 71 y Ilustración 72 respectivamente). Sin ser demasiado técnicos,
podemos decir que la palabra static se usa para trabajar sin la creación de
objetos, este concepto lo entenderá de una mejor manera en el siguiente
capítulo.
Si ha sido observador se dará cuenta que las declaraciones de los métodos que
se muestran en las ilustraciones Ilustración 70, Ilustración 71 y Ilustración 72, a
diferencia del método principal, utilizan la palabra reservada private. Tanto
public (que se usó en el método principal), como private se conocen como
modificadores de acceso y determinan desde donde (otras clases) se puede
invocar al método, no entraremos en muchos detalles 4 .
2
Dentro de la programación Java éste método únicamente funciona si la división es exacta, ya que las
variables que contienen los resultados son variables enteras.
3
Los otros métodos no se incluyeron, pero los puede encontrar en el CD de la guía.
4
Para detalles consulte la siguiente dirección: http://mundogeek.net/archivos/2009/03/30/modificadoresen-java/
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Trabajar con métodos exige que dominemos otros conceptos. A continuación
abordaremos esa temática
5.3 Otros conceptos importantes En el trabajo con métodos existen otros conceptos que deben
ser analizados, por ello les sugiero revisar el tema 9.3
“Variables globales, locales y parámetros” del texto básico
¿Qué le pareció la lectura? ¿Comprendió? Si es así avancemos y repasemos
ciertos elementos de la lectura anterior.
Las definiciones que vamos a estudiar están relacionadas con los tipos de
variables que existen cuando se trabaja con métodos. Comencemos a estudiar
aquellas variables que se pueden usar en toda la clase.
5.3.1 Variables globales Aunque el término variables globales no se aplica en los lenguajes orientados a
objetos, para seguir la notación del libro lo mantendremos. En el próximo
capítulo lo reemplazaremos por atributos o propiedades.
Una variable global se define luego de la declaración de la clase (tanto en Java
como en el pseudocódigo) y antes de la declaración del método principal. Un
ejemplo lo puede encontrar en el algoritmo que se muestra en la página 212
del texto básico, y en Java en la Ilustración 70, líneas desde la 15 a la 18.
Estas variables globales pueden usarse en todos los métodos de la clase. Fíjese
en la variables globales num1, num2, resuNi, resuMaq de la Ilustración 70,
las mismas se usan en los métodos que se muestran en las ilustraciones
Ilustración 71 y Ilustración 72. Podemos decir que el ámbito de una variable
global es toda la clase.
El ámbito de una variable, define los límites de uso de la misma, es decir
desde que sitio hasta que sitio se puede usar la variable.
El uso de una variable fuera de su ámbito provoca errores en programación.
Para la explicación de los otros conceptos los invitamos a ver el siguiente
algoritmo y programa en Java.
Algoritmo VARIOS CONCEPTOS
Clase Utilidades
1. Método principal
a. Declaraciones
Variables
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca opcion, res, num, b, e: Entero
b. DO
1. Imprimir 1. Cálculo factorial 2. Potenciación 3. Salir Opción:
2. Leer opcion
3. SWITCH opcion
1:
a. Solicitar un número
b. Leer num
c. res = calcularFactorial(num)
d. Imprimir res
2:
a. Solicitar base y exponente
b. Leer b, e
c. res = potencia(b, e)
d. Imprimir res
4. ENDSWITCH
c. WHILE opcion != 3
d. Fin Método principal
2. Método calcularPotencia(numero : Entero) : Entero
a. Declaraciones
Variables
fac, i:Entero
b. Calcular a = 1
c. FOR i = numero; i > 1; i-1. fac = fac * i
d. ENDFOR
e. return fac
f. Fin Método calcularFactorial
3. Método potencia(base:Entero, exponente:Entero):Entero
a. Declaraciones
Variables
pot, i:Entero
b. Calcular pot = 1
c. FOR i = 0; i < exponente; i++
1. pot = pot * base
d. ENDFOR
e. return pot
f. Fin Método potencia
Fin Clase Utilidades
Fin
En este algoritmo se presentan dos opciones, la primera opción calcula el
factorial de un número, por lo tanto se necesita: que se ingrese un número
(líneas a. y b. bajo el caso 1 del SWITCH) y luego invocar a un método que
calcula y devuelve el factorial del número que se ingresó (línea c. bajo el caso 1
del SWITCH). La segunda opción permite elevar un número a un potencia, por
lo que solicita que se ingrese dos números (que se asignan a las variables b y
e, líneas a. y b. bajo la opción 2 del SWITCH), para luego invocar a un método
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca que eleva el número b a la potencia e (Vea la línea c. bajo el caso 2 del
SWITCH).
El programa en Java que equivale al algoritmo anterior se ha divido en 2
ilustraciones (con el fin de facilitar la explicación) que se muestran a
continuación:
Ilustración 4 Clase Utilidades – Método principal
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 5 Clase Utilidades - Métodos
Como lo analizamos anteriormente las variables globales se pueden emplear en
toda la clase, pero las siguientes variables que estudiaremos solamente se
pueden usar dentro de un método.
5.3.2 Variables locales Antes de continuar es necesario que revise el texto básico en la página 213, en
ella se dice que una variable es local cuando ha sido definida dentro de un
método. Las variables locales tienen una restricción, no pueden utilizarse fuera
del método donde fueron declaradas. Recuerde que los límites de uso de una
variable se denominan ámbito. Ejemplos de variables locales podemos
encontrar en el método principal y en los métodos calcularFactorial y
potencia del algoritmo VARIOS CONCEPTOS en el punto 5.3.2 de esta guía
didáctica; el ámbito de las variables que mencionamos anteriormente es cada
uno de sus métodos, mientras que en Java, las variables declaradas en las
líneas: 17, 18, 28, 35, 48 y 58 (Ilustración 73 y Ilustración 74) son variables
locales y su ámbito lo explicamos en los siguientes líneas.
Dentro de la programación en Java el concepto de variable local es más amplio,
debido a que en Java es posible declarar una variable en cualquier sitio dentro
de un método o dentro de una clase, es decir no existe un sección específica
para realizar las declaraciones; en la Ilustración 74 fíjese en las variables num
(línea 28), b y e (línea 35).
Esta manera de trabajo, produce que el ámbito de la variable sea definido por
el bloque al cual pertenece, recuerde que un bloque en Java se define por las
llaves de apertura y cierre ({}). Entonces las variables opcion y res (líneas 17
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca y 18 de la Ilustración 74) pueden usarse en el bloque del método principal
(líneas desde la 15 hasta la 45); mientras que las variables num, b y e pueden
usarse dentro del bloque de la estructura switch (líneas desde la 26, hasta la
43).
Tal y como lo mencionamos anteriormente tratar de usar una variable fuera de
su ámbito produce un error, por ejemplo no podemos usar la variable opcion
en alguno de los métodos, así como tampoco se puede usar la variable pot en
los métodos principal o calcularFactorial.
Otro tipo especial de variables se denomina parámetros y al igual que las
variables locales existen en los métodos. Estudiemos en detalle a los
parámetros en el siguiente acápite.
5.3.3 Parámetros El tema de parámetros lo podemos encontrar la página 214 del texto básico,
aunque éste hace una excelente explicación de los temas, este punto necesita
reforzarse.
Desde nuestro punto de vista, un parámetro es un mecanismo de comunicación
con los métodos. Esta comunicación sirve para enviar los valores con los que
trabajará ese método; recuerde las funciones que analizamos en los capítulos
anteriores, como por ejemplo RaizCuad(x), debíamos enviarle el valor (x) a la
función o método para que este calcule la raíz cuadrada; es decir le informamos
o comunicamos al método.
Un parámetro o una lista de parámetros, se ubica luego del nombre del método
encerrado entre paréntesis y debe tener un nombre y un tipo de dato. Si se
tiene una lista de parámetros cada uno de ellos se separa mediante comas. Un
parámetro es una variable representativa que será reemplazada por un valor al
momento de ejecutar el método.
Si analizamos nuevamente el algoritmo VARIOS CONCEPTOS, elaborado en esta
guía didáctica en páginas anteriores; vemos algunos ejemplos de parámetros
en los métodos: calcularFactorial y potencia; mientras que en Java
(Ilustración 73 e Ilustración 74) podemos ver parámetros en los métodos:
principal (línea 15) 5 , calcularFactorial(línea 47) y potencia(línea 57). En el
método potencia vemos una lista de parámetros, mientras que en los otros
observamos un solo parámetro.
De lo anterior podemos generalizar y decir que para la invocación de métodos
que necesitan un parámetro, se debe enviar un valor (a través de una variable
por ejemplo) que reemplazará al parámetro 6 y que permiten la ejecución de los
5
6
Sí el método principal recibe como parámetro un arreglo de tipo String llamado arg.
Cuando se invoca a un método se cambia el nombre de parámetro por argumento.
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca métodos. En el algoritmo revise el punto c. del caso 1 del SWITCH; en Java vea
la línea 31 de la Ilustración 73.
En cambio, cuando se trabaja con métodos que tienen una lista de parámetros
(vea el método potencia), para invocarlos se debe enviar el número exacto de
parámetros (el mismo número que el método tiene en su definición), en el
orden correcto y los tipos de dato apropiados; caso contrario se produce un
error. Es importante respetar el orden en el envío de los parámetros, porque
cambiar el orden de los parámetros al invocar un método produce resultados
incorrectos. Imagínese que quiero elevar dos a su tercera potencia debería
invocar al método potencia así: potencia(2, 3), pero si cambio el orden,
potencia(3, 2) el resultado cambia.
Una vez analizadas algunas características de los parámetros pasemos a
estudiar los tipos de parámetros que existen.
5.3.3.1 Parámetros por valor y por referencia Para entender estos conceptos revise las páginas desde la 214 a las 217 del
texto básico. Una aclaración: en Java los tipos de datos int, double y sus
derivados se pasan únicamente por valor y no existe forma de pasarlos por
referencia.
Luego retomaremos este tema, cuando hablemos de objetos ya que un objeto
se pasa por referencia. Este es su comportamiento por defecto y no se necesita
usar o escribir alguna palabra reservada.
Como se mencionó en el apartado 5.2 “Creación / Invocación de métodos” de
esta guía didáctica existen métodos que no retornan valor, pero existe otro tipo
de métodos que a diferencia de los anteriores devuelven un valor y que
analizaremos a continuación.
5.4 Métodos que regresan valor Para tratar este tema, lea el contenido del texto básico que se
encuentra en el apartado 9.5 “Métodos que regresan valor” en
la página 227.
¿Qué le pareció la lectura? ¿Comprendió? Si es así avancemos y repasemos
ciertos elementos de la lectura anterior.
Este tipo de métodos devuelven, a quién los invoca, el resultado de la ejecución
de las acciones que lo conforman.
Las diferencias (a nivel de algoritmo) más notables, con los métodos que no
retornan valores, se encuentran en la definición del método ya que luego de los
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca paréntesis se ubican los dos puntos y el tipo de dato del valor que devuelve.
Además, los métodos que devuelven valor, debe tener por lo menos una
sentencia – acción return, en algunos métodos se puede emplear una o más.
Vea la definición de métodos que devuelven valor, en la página 227 del texto
básico. Podemos observar algunos ejemplos en los métodos calcularFactorial
y potencia del algoritmo VARIOS CONCEPTOS (desarrollado en esta guía
didáctica en el acápite 5.3.1), además del algoritmo de la página 228 del texto
básico.
En Java en las líneas 15 y 47 de la Ilustración 74, vemos la definición de los
métodos, a diferencia del pseudocódigo, el tipo de dato de retorno, se señala
antes del nombre del método. Puede ver el uso de la sentencia return en las
líneas 54 y 65 de la misma ilustración.
Generalmente el valor que retorna el método se asigna a una variable para
luego usar esta variable en otra acción o sentencia. Es necesario tomar en
cuenta el tipo de dato de la variable, ya que debe coincidir con el tipo de dato
de retorno del método, sino es así se da un error. Un método que retorno un
valor real, no puede ser asignado a una variable tipo entero, ya que son datos
incompatibles.
Todo lenguaje de programación incluye con conjunto de métodos previamente
elaborados que permiten realizar ciertas acciones, así que analicemos
brevemente este tema.
5.5 Uso de librerías de métodos En la página 217 del texto básico lea el acápite 9.4 “Funciones
estándar”, por favor revíselas y comprenda su funcionamiento.
A estas funciones deben tenerlas como base y consultarlas en
caso de ser necesario.
¿Qué le pareció la lectura? ¿Comprendió? Si es así avancemos y repasemos
ciertos elementos de la lectura anterior.
Con respecto al mundo Java, no cubriremos totalmente este tema con el afán
de NO causar confusiones y únicamente trabajaremos con los métodos
definidos en la clase Math, que se cubrió en el capítulo 2, en concreto en el
tema 2.2.
A continuación presentamos un programa en Java que muestra algunas de las
funciones estándares definidas en el texto básico y su traducción en Java.
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 6 Muestra algunas de las funciones estándares en Java
El programa anterior muestra como obtener la longitud (el número de
caracteres) que tiene una variable tipo String (texto), vea la línea 30. La
longitud de un texto siempre será un valor entero.
En las líneas 35 y 37 se transforma un variable tipo String (Texto) a un tipo de
dato entero y luego a real.
Para la generación de números aleatorios en Java se usa un objeto de la clase
Random (vea la línea 19) y para la generación se debe fijar el límite superior,
ya que el inferior siempre será 0 (cero), vea la línea 40, en este caso los
posibles valores de la variable aleatorio serían números enteros comprendidos
entre 0 y 10.
Como lo mencionamos anteriormente no entraremos en detalles extensos.
Antes de pasar a la sección de ejercicios le invitamos a revisar algunas
recomendaciones que le ayudarán a trabajar con los métodos. Estas
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca recomendaciones han sido elaborados en base a nuestras experiencias
laborales.
5.5 Recomendaciones para trabajar con métodos Es necesario dar un conjunto de recomendaciones para encontrar y trabajar con
métodos.
•
Para encontrar un método: Trate de dividir un problema en varias partes.
Muchos de los problemas se pueden dividir en varias partes, pero no
caiga en exageraciones (cada línea de código en un método). Una serie
numérica “compleja” (con varias acciones y tipos de números) es ideal
para usar métodos, un método para calcular el factorial de un número,
otro método para determinar si un número es primo, otro para encontrar
el siguiente elemento de la serie de Fibonacci, etc.
•
Si bien no existe una regla estándar que diga cuál es el límite de
métodos que debe tener un buen programa, cree los métodos que son
útiles y aporten claridad al programa. Uno de los objetivos de trabajar
con métodos es aportar claridad a la programación si luego de construir
los métodos, el programa es más complicado de entender, vuelva a
pensar si ha planteado los métodos correctamente.
•
Una de las formas que nos han permitido encontrar métodos de una
manera sencilla ha sido preguntarnos ¿este código lo usaré en otros
programas? Si la respuesta es afirmativa entonces ese código debe ser
un método, sino es así no es conveniente crear un método. Piense por
ejemplo en el código que nos permite determinar si un número es primo,
este código lo podemos usar en varios programas, así que podríamos
crear un método.
•
Una de las formas de encontrar posibles métodos es encontrar acciones
o sentencias que se repiten una y otra vez dentro de nuestro programa;
una vez ubicadas estas sentencias las agrupamos en un método.
Extracción del factor común.
•
Una vez dividido el problema, analice cada uno de los partes para
encontrar que datos debe recibir el método (encontrar parámetros) y si
es necesario que el método devuelva algún valor (valor de retorno).
•
Aunque en el texto básico no se menciona, en nuestra experiencia, el
mejor método es aquel que entre sus sentencias (acciones) no solicita ni
lee datos. Reemplace la solicitudes/lecturas de datos por parámetros ya
que es el medio de comunicación para enviarle datos a un método y la
lectura la puede hacer en el método principal por ejemplo.
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Una vez cubiertos los detalles de los métodos, desarrollemos una serie de
ejercicios que les ayudarán a entender y ampliar su conocimiento sobre ellos.
No olvide leer detenidamente el análisis que se hace de cada uno de los
ejercicios.
1.6 Ejercicios Importante: en el análisis de los ejercicios desarrollados se utiliza números
para referirse a líneas de código de los programas Java. Mientras que, para los
algoritmos escritos en pseudocódigo se utiliza letras del alfabeto y a veces la
combinación de letras y números.
1. Escriba un algoritmo y luego un programa en Java que posea 2 métodos,
el primero de ellos permite determinar si un número es par. El segundo
método calcula el número impar según su posición (Ejemplo el usuario
ingresa la posición 1 el método debe devolver 1, posición 2 se devuelve
3, posición 3 se devuelve 5 y así sucesivamente). Recuerde usar
parámetros para comunicar valores a los métodos.
Algoritmo VARIOS MÉTODOS
Clase UtilSeries
1. Método Principal
a. Declaraciones
Variables
nro, pos, res : Entero
b. Soliciar un número y la posición
c. Leer nro pos
d. IF esPar(nro) == True THEN
1. Imprimir “Es par”
e. ELSE
1. Imprimir “Es Impar”
f. ENDIF
g. res = obtenerImpar(pos)
h. Imprimir res
i. Fin Método principal
2. Método esPar(num : Entero) : Boleano
a. IF num MOD 2 == 0 THEN
1. return True
b. ELSE
1. return False
c. ENDIF
d. Fin Método esPar
3. Método obtenerImpar(po : Entero) : Entero
a. Declaraciones
Variables
impar : Entero
b. Calcular impar = (po * 2) - 1
c. return impar
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca d. Fin Método obtenerImpar
Fin Clase UtilSeries
Fin
El programa Java se muesta a continuación:
Ilustración 7 Programa con métodos útiles para series
Análisis:
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Tenga presente que: para el análisis del código Java todas los números
de líneas hacen referencia a la Ilustración 76.
Antes que realizar un análisis de los datos de entrada del método
principal es importante analizar los datos que recibe el método
(parámetros) y la información que devuelve a través de la sentencia
return.
Los métodos reciben los valores con los que van trabajar (Fíjese en los
puntos 2 y 3 del algoritmo, mientras que en el código Java vea las líneas
37 y 45) se realizan las declaraciones (Vea el punto a bajo 3 del
algoritmo o la línea 46 del código Java). Las acciones son simples, ambos
métodos devuelven un valor por lo que el uso de la sentencia return es
necesario, fíjese como el método esPar usa dos sentencias return (Vea
los puntos: 1. bajo a. y 1. bajo b. del método esPar ó las líneas 39 y 41
del código Java), lo que es perfectamente válido y podrá encontrar varios
ejercicios así. Mientras que el método obtenerImpar únicamente la usa
una sola vez, vea el punto 3. bajo c. o la línea 49 del código Java.
Algo importante, que puede resultar peculiar, es el uso del método esPar
en el método principal (vea el punto d. del algoritmo o la línea 26 del
código Java). La invocación del método es parte de una condición, es
decir que si el valor que devuelve el método es verdadero se ingresa al
bloque del IF, caso contrario se ejecuta el bloque del ELSE.
2. Elabore un algoritmo y luego un programa en Java, que a través del uso
de métodos: devuelva un número mayor a un número entero positivo
que es enviado como parámetro, pero con la condición que el número
devuelto sea primo. Otro método que según una posición devuelve un
término de la serie de Fibonacci que corresponda (Ejemplo: posición 1,
Fibonacci 0; posición 2, Fibonacci 1; posición 3, Fibonacci 1; posición 4,
Fibonacci 2; etc.)
Los métodos que se solicitan en esta pregunta se agregarán al algoritmo
que se construyó en el ejercicio anterior. Incluimos los métodos luego de
la línea d. Fin Método obtenerImpar.
4. Método esPrimo (num : Entero) : Boleano
a. Declaraciones
Variables
i : Entero
b. FOR i = 2; i < num; i ++
1. IF num % i == 0 THEN
a. return False
2. ENDIF
c. ENDFOR
d. return True
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca e. Fin Método esPrimo
5. Método sigPrimo (n : Entero) : Entero
a. Declaraciones
Variables
sPrimo : Entero
encontrePrimo : Boleano
b. Calcular sPrimo = n
c. WHILE encontrePrimo == false
1. sPrimo ++
2. IF esPrimo(sPrimo) == true THEN
a. encontrePrimo = true
3. ENDIF
d. ENDWHILE
e. return sPrimo
f. Fin Método sigPrimo
6. Método obtenerElementoFibonacci (posElem : Entero) : Entero
a. Declaraciones
Variables
ant, sig, fib, i : Entero
b. ant = 0, sig = 1, fib = 0
c. IF posElem == 1 THEN
1. return ant
d. ELSE
1. IF posElem == 2 THEN
a. return sig
2. ELSE
a. FOR i = 2; i < posElem; i ++
1. fib = ant + sig
2. ant = sig
3. sig = fib
b. ENDFOR
3. ENDIF
e. ENDIF
f. Fin Método obtenerElementosFibonacci
El código Java es el siguiente:
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 8 Otros métodos útiles para el trabajo con series
Análisis:
Es necesrio que recuerde lo siguiente: para el análisis del código Java
todas los números de líneas hacen referencia a la Ilustración 77.
El método esPrimo (punto 4 del algoritmo y línea 52 Java) recibe un
parámetro que es el número a evaluar para deteminar si es primo. Para
verificar si un número es primo, se busca si existe algún divisor entre
dos y el número menos uno (ciclo FOR en el punto b, bajo 4; o línea 53
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca del código Java) si existe algún divisor (IF en el punto 1 bajo b del
método esPrimo; o en la línea 54). Si es así ese número no es primo y
se devuelve falso, si se llega a ejecutar todo el ciclo FOR se devuelve
verdadero indicando que ese número es primo.
El método sigPrimo recibe como parámetro un número que sirve de
base y para encontrar el siguiente primo mayor que esa base. La idea del
algoritmo es generar un número (en este caso mayor al parámetro – Vea
los puntos b. bajo 5. y 1. bajo c. en el método sigPrimo o las líneas 65
y 68 del código del código Java) y verificar si es primo. La verificación se
hace usando el método esPrimo que se definió y explicó previamente. Si
se encuentra un número primo se termina el ciclo repetitivo y se
devuelve ese número primo.
Finalmente el método obtenerElementoFibonacci recibe como
parámetro la posición del elemento de la serie de Fibonacci a devolver.
Recuerde que los dos primeros elmentos de Fibonacci no se generan sino
que son la base, por eso se usan las sentencias IF (punto c. bajo 6. y 1.
bajo d. en el método obtenerElementoFibonacci o de las líneas 81 y
83 del código Java) en caso que la posición se refiera a esos elementos.
Para los demás elementos se aplica la fórmula: el siguiente elemento es
igual a la suma de los dos anteriores (ciclo FOR punto a. bajo 2. en el
método obtenerElementoFibonacci o línea 86 del código Java), el ciclo
inicia en dos porque pasaron ya dos elementos de Fibonacci (los
elementos raíz); se repite la generación de términos de Fibonacci hasta
alcanzar la posición señalada por el parámetro.
3. Resuelva el problema número 5 de los ejercicios del capítulo 3, pero
usando los métodos que se han definido en estos ejercicios.
El algoritmo:
Algoritmo SERIE CON MÉTODOS
Clase Serie
1. Método principal
a. Declaraciones
Variables
cont, nroTerminos, primo, fibo : Entero
suma : Real
b. suma = 0, cont = 0
c. Solicitar el número de terminos
d. Leer nroTerminos
e. WHILE cont < nroTerminos
1. primo = sigPrimo(cont)
2. fibo = obtenerElementoFibonacci(cont + 1)
3. suma = suma + Pot(primo, fibo)
4. cont ++
f. ENDWHILE
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca g. Imprimir suma
2. Fin Método principal
Fin Clase
Fin
El programa en Java es el siguiente:
Ilustración 9 Una serie resuelta con métodos
Análisis:
Tenga presente que: para el análisis del código Java todas los números
de líneas hacen referencia a la Ilustración 78.
La entrada del programa es el número de términos a sumar es decir el
límite máximo a sumar.
El proceso es bastante sencillo ya que únicamente consta de
invocaciones a los métodos que se definieron en los ejercicios anteriores,
que en este caso se usan para realizar las operaciones. Se invoca al
método sigPrimo para encontrar el siguiente primo según un número,
en este caso es contador. El siguiente método a invocar es
obtenerElementoFibonacci el mismo que devuelve un elemento de la
serie de Fibonacci según su posición. Con estos valores se realiza la
potenciación, se incrementa el contador y finalmente se imprime la
suma.
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca 4. Crear un método que devuelva alguna operación (1: suma, 2: resta, 3:
multiplicación) de una matriz nxn.
El algoritmo es el siguiente:
Algoritmo
Clase Métodos.
1. Método Principal
a. Declaraciones
n: entero
A,B,Result : arreglo [][] entero
b. Solicitar el orden de la matriz
c. Leer n
d. Inicializar A[n][n]
e. Inicializar [n][n]
f. Inicializar Result[n][n]
g. A= IngresarMatriz(n)
h. B= IngresarMatriz(n)
i. Imprimir el Menú de opciones:
Sumar A+B
Restar A-B
Multiplicar AXB
j. Elija la opcion:
k. Leer opcion
l. SWITCH(opcion)
1. Result= sumar(A,B)
2. Result= restar(A,B)
3. Result= multiplicar(A,B)
m.END SWITCH
n. Llamar método Presentar(Result)
2. Fin del método principal
1. 3. Método IngresarMatriz(n entero): arreglo [][] entero
a. Declaraciones
orden: entero
E : arreglo [n][n] entero
Orden=longitud(E)
b. Solicitar el orden de la matriz
c. FOR i=0 ; i< orden ;i++
1. FOR j=0 ;j<orden ;j++
a. Solicitar el valor de los elementos
b.Leer E[i][j]
2. ENDFOR
d. ENDFOR
e. Return E
4.Fin de Método
5. Método Multiplicar(A: arreglo[][] ,B: arreglo[][]):arreglo [][] entero
a,Declaraciones
Orden, suma, i, j: entero
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca resultado : arreglo [][] entero
b. Orden=longitud(A)
c. FOR i=0 ;i< orden ;i++
1. FOR j=0 ;j<orden ;j++
a. Suma=0
b. FOR k = 0; k < orden; k++
1. suma += A[i][k] * B[k][j]
c. ENDFOR
d. resultado[i][j] = suma;
2. ENDFOR
d. ENDFOR
e. Return resultado
6. Fin de Método
7. Método Sumar(A: arreglo[][], B: arreglo[][]): arreglo [][] entero
a. Declaraciones
Orden, suma, i, j: entero
resultado : arreglo [][] entero
b. Orden=longitud(A)
c.
FOR i=0 ; i< orden ;i++
1. FOR j=0 ;j<orden ;j++
a. resultado[i][j]=A[i][j]+B[i][j];;
2. ENDFOR
d. ENDFOR
e. Return resultado
8. Fin de Método
9. Método restar(A: arreglo[][], B: arreglo[][]): arreglo [][] entero
a. Declaraciones
Orden, suma, i, j: entero
resultado : arreglo [][] entero
b. Orden=longitud(A)
c. FOR i=0 ; i< orden ; i++
1. FOR j=0 ; j<orden ; j++
a. resultado[i][j]=A[i][j]-B[i][j];;
2. ENDFOR
d. ENDFOR
e. Return resultado
10. Fin de Método
11. Método Presentar(A: arreglo[][])
a. Declaraciones
1. j: entero
2. resultado : arreglo [][] entero
b. Orden=longitud(A)
c. FOR i=0 ; i< orden ; i++
1. FOR j=0 ; j<orden ; j++
a. Imprimir A[i][j]
2. ENDFOR
d. ENDFOR
12 Fin de Método
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Fin de la Clase
El código Java se muestra a continuación:
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca Ilustración 10 Métodos que trabajan con matrices
Análisis:
Recuerde que: Para el análisis del código Java todas los números de
líneas hacen referencia a la Ilustración 79.
El problema implica que deben ingresarse dos matrices de un orden N,
es decir (NXN). Luego mediante métodos (línea 38 a 40) se realizarán
las operaciones de suma, resta o multiplicación de acuerdo a la opción
que indique el usuario. Se ha realizado métodos para el ingreso de las
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca matrices (línea 26 y 27) y también para la presentación(línea 43).
Iniciaremos el análisis del método ingreso_matrices (línea 48 a 58) que
recibe como parámetros de entrada el orden N de la matriz, el método
retorna una matriz entera. Además observe que dentro del método se ha
creado una matriz denominada E, la cual recibe los valores ingresados
por el usuario.
Analizando el método multiplicar, vemos que recibe como parámetro
dos matrices de tipo entero (A y B), y cuyo valor de retorno es otra
matriz. Observe que la matriz resultado (línea 61) tiene igual número
de filas y columnas, debido a que se realiza la multiplicación de una
matriz cuadrada. Seguido podemos observar el proceso de multiplicación
de matrices cuadradas, mediante ciclos FOR anidados, tal y como se lo
ha explicado en capítulos anteriores.
Al igual que el método anterior los métodos suma y resta reciben como
parámetros las dos matrices (A y B) y como devuelven como resultado
otra matriz entera. La única diferencia ente estos métodos se encuentra
en las operaciones que se realizan (suma y resta) vea las líneas 80 y 88.
En ambos métodos se utilizan ciclos FOR anidados para realizar las
operaciones.
5. Elaborar un algoritmo que permita leer un número entero e indique si es
capicúa (un números es capicúa si se lee igual de izquierda a derecha
que en sentido contrario). Utilizar un método que reciba como parámetro
el número, y que devuelva TRUE si es capicúa o FALSE en caso contrario.
Ejemplo: 1991.
Algoritmo CAPICÚA
Clase Métodos8.
1. Método Principal
a. Declaraciones
Cantidad, i,j : Entero
valor: Boolenao
b. Solicitar cantidad a validar
c. Leer cantidad
d. Valor=esCapicua(cantidad)
e. IF valor==verdadero THEN
1.Imprimir la cantidad es capicúa
f. ELSE
2. Imprimir la cantidad no es capicúa
g. ENDIF
2. Fin del método principal
3. Método esCapicua(cantidad :Entero): Booleano
a. Declaraciones
palabra: Cadena
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca estado: boolean
b. palabra=trasformar a cadena(cantidad)
c. estado=true
d. FOR i=0; i<palabra.longitud; i++
1. IF palabra.subCaracter(i)!=
palabra.subcaracter(palabra.longitud()-i-1 THEN
a. Asignar estado=false;
f. ENDIF
g. return estado
4. Fin de Método
Fin de la clase
El código Java se muestra a continuación:
Ilustración 11 Programa Java que determina si un número es Capicúa
Análisis:
No olvide que: para el análisis del código Java todas los números de
líneas hacen referencia a la Ilustración 80.
El programa tiene como entrada una cadena de texto ingresada por el
usuario (línea 21) que sirve como parámetro para el método esCapicua
(línea 28).
Este método permite conocer si un número tiene la
propiedad de leerse el mismo número al revés, como lo indica el
enunciado. Para esto es necesario convertir un número a texto (línea 31)
para poder extraer cada uno de sus caracteres . Se utiliza una estructura
FOR que recorre la cadena y evalúa cada uno de los caracteres (línea
34). Finalmente se retorna el estado del proceso.
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Escuela de Ciencias de la Computación – UTPL Fundamentos de la Programación Autores: Ing. Jorge López, Ing. Greyson Alberca En el presente capítulo estudiamos como dividir un programa en métodos, es
decir hemos hecho modulares nuestros programas. Se cubrió los diferentes
conceptos que giran alrededor de los métodos, los tipos que existen y algunas
funciones estándares; para finalmente analizar algunas recomendaciones para
trabajar con métodos.
Para ampliar el conocimiento adquirido acerca de métodos en el lenguaje de
programación Java, les proponemos que lea el siguiente material adicional.
Material adicional:
En el CD que se adjuntó en la guía didáctica, puede revisar
(programación-en-java-i\Contenidos\LecturaObligatoria\)
los
archivos:
8-sentenciareturnymetodos.pdf
14-tiposdemetodos.pdf
Esta obra ha sido licenciada con Creative Commons Ecuador 3.0 de Reconocimiento - No comercial Compartir igual (http://creativecommons.org/licenses/by-nc-sa/3.0/ec/).
Documentos relacionados
Descargar