Está en la página 1de 8

Más sobre Clases

y Métodos

Programación
Orientada a
Objetos

1
Más sobre clases
Las clases como forma de encapsular
En Java, las clases son usadas para agrupar y manejar los detalles de
métodos relacionados. Por ejemplo, la clase de sistema provista por el JDK,
java.lang. Math, contiene funciones matemáticas simples y funciones
trigonométricas entre otras. De manera similar, cuando construimos un
programa, escribimos una sola clase que contiene todos los métodos que
sirven para correr nuestro programa.

Una aplicación típica de POO debiera consistir en varias clases y una de ellas,
solo una, contener el único punto de inicio: el método main junto a los
métodos generales, es decir que sirven a toda a la aplicación, por ejemplo,
como un menú de llamada a los distintos métodos ubicados en las restantes
clases de la aplicación. Cuando todos los métodos que necesitamos han sido
escritos, deberán ser convocados desde esta clase principal. Esta clase es
nuestro programa. Las clases, a su vez, pueden estar contenidas en packages
(paquetes). Las clases de sistema, por ejemplo la clase Math mencionada
antes, se encuentra en el package java.lang. A veces, el nombre de la clase
es interpretado como el path de directorios donde está ubicado el package.
La mayoría de los programadores escriben sus clases dentro del directorio
donde están trabajando. Este es llamado el default package (paquete por
defecto). Todas las clases dentro del default package están disponibles para
el programa principal (o la clase donde está el método main). Luego, es
posible que un programa esté compuesto por métodos guardados en
diferentes clases. En un videojuego uno podría imaginar que una clase
contiene todos los métodos que soportan los gráficos, otra guarda los
métodos de puntuación y la última guarda las rutinas relacionadas con el
dispositivo de input (teclado, mouse, etc.). Con esto queda claro que el
método main debe ser declarado public, de otra forma no podríamos correr
el programa.

Nombres de métodos
Los programas grandes conllevan un esfuerzo importante en su
planificación. En la práctica, la construcción de programas no triviales
requiere el uso de un gran número de componentes, usualmente asociados
La estructura de un
a diferentes funciones lógicas o distintos objetos dentro de los programas.
programa debería
modelar la estructura
del problema. En Java este tipo de modularización depende fuertemente del uso de
métodos.

2
Si consideramos que tenemos que realizar las siguientes tareas de
programación:

 El cálculo de una lista del primer millón de números primos. Es claro que
un componente de ese programa es calcular si un número es o no primo.
 La construcción de un procesador de textos.
 El manejo de la ventana de ayuda es una porción lógica aislada del
programa.
 El lanzamiento de una nave espacial. Las pruebas previas al vuelo las hace
(en algún nivel) una entidad lógica aislada. A su vez, estas pruebas pueden
estar agrupadas en varios módulos.

En cada una de estas tareas, algunas características aparecen aisladas. Aún


cuando no sepamos como están programadas, nosotros podemos estar
confiados de que el código que las soporta está aislado dentro del programa.

En la mayoría de los lenguajes de programación, el método (procedimiento


o función) es usado para implementar código que realiza una tarea
específica y bien documentada. El método organizacional que identifica los
componentes lógicos de un proceso complejo y realiza esas tareas con sus
propios procedimientos es llamado abstracción procedural y es la forma
más básica que se encuentra en la mayoría de los lenguajes de
programación.

En realidad, ya hemos visto un método: el método main. Siempre que


corremos una aplicación, Java, localiza el método main y ejecuta sus
instrucciones en orden. Usted puede probar esto escribiendo un programa
con dos métodos: main y maine. Cuando corremos el programa, las únicas
instrucciones que se ejecutan son aquellas que se encuentran en el método
main. La declaración del método main siempre debe ser:

public static void main(String args[])


Siguiendo CamelCase,
en Java los nombres La palabra reservada public indica que este método está disponible para ser
de métodos se inician
usado fuera de la definición de clase que lo contiene. En particular, esto hace
con minúscula y las
restantes palabras que posible que se pueda llamar al método main para que sea corrido. Si el
forman el nombre se método no fuera public, podría ser declarado protected o private, haciendo
inician con mayúscula. imposible que desde otra clase se lo pueda usar o referenciar.

La palabra reservada static indica que este método siempre está disponible.

3
Métodos: ¿procedimientos o funciones?
La palabra reservada void indica que, una vez completado, el método no deja
o devuelve nada, los métodos que tienen esta definición se llaman
procedimientos, como veremos enseguida.

Puede parecer extraño que nosotros podamos producir una respuesta al


completar la ejecución del programa o método, pero existen métodos (por
ejemplo, el método que calcula la raíz cuadrada de un número) que están
diseñados para producir valores para ser usados en el método que lo
convocó. Estos métodos que devuelven valores al finalizar son llamados
funciones y se caracterizan porque en vez de void tienen la indicación del
tipo de dato que devuelven. Los que no producen valores de respuestas y
finalizan sin ninguna devolución directa son llamados procedimientos.

Para definir sin ambigüedad qué método se debe a ejecutar, el nombre


completo del método debe incluir el nombre de la clase que lo contiene.

En la mayoría de los casos cuando usamos métodos comunes de paquetes


provistos en el mismo lenguaje en la clase “Standard”, el nombre de la clase
puede ser evitado, pero en otros casos (por ejemplo Math.sin), Java
considera un error omitir el nombre de la clase.

Completa el nombre (o signatura) del método, entre paréntesis, la lista de


uno o más parámetros. Los parámetros describen los datos o recursos
necesarios que deben estar disponibles antes de que el método se aplique.
Las declaraciones de parámetros son similares a las declaraciones de
variables. Los parámetros múltiples son separados con comas. En el método
main tenemos un parámetro: un arreglo (indicado por los corchetes [ ]) de
cadenas (string). Este arreglo es simplemente una lista de cadenas que
podría ser útil a nuestro método main. Todos los métodos main deben ser
declarados de esta manera.

“Java identifica a los métodos por la signatura que está


determinada por su nombre y sus parámetros. Dos métodos
no pueden tener la misma signatura. En particular en Java, no
es posible declarar una función y un procedimiento con la
misma signatura. Es importante observar que si dos métodos
tiene el mismo nombre pero diferentes parámetros,
entonces, tienen signatura distinta y Java los compilará
correctamente. “ (Bailey, 2010)

4
Como un ejemplo de declaración de un método, consideremos la
declaración del método cos que está dentro de la clase Math. Su declaración
es:

public static double cos(double theta)

Los diseñadores de la clase Math estaba interesados en que todos pudieran


hacer uso de la función cos (coseno de un ángulo), por eso la declararon
public. La función está disponible en cada momento, pues es declarada
static. Para poder ser utilizada, la función necesita de un valor de entrada,
simbolizado por theta, un número decimal (double) que representa un
ángulo en radianes. La función devuelve un double entre −1,0 y 1,0.

La función sin (seno) tiene una declaración similar, aunque, obviamente, su


nombre es sin.

El método lineTo es un procedimiento contenido en la clase


DrawingWindow. A diferencia de otros métodos vistos, está solo disponible
cuando la DrawingWindow está funcionando. Su comportamiento,
entonces, es dinámico. Su declaración, en aquella clase, es:

public void lineTo(int x, int y)

Vale aclarar que estamos viendo declaraciones en sus clases de origen y que
para ser usados, Java debe conocer la clase de origen que lo contiene, en
algún caso con Math.’nombre’ y en otros casos con el prefijo de un objeto
creado a partir de la clase correspondiente.

La palabra void indica que lineTo no devuelve un valor. El efecto de invocar


este método es que se dibuja una línea en la DrawingWindow.

El procedimiento o método que tiene la palabra void en su definición provee


un mecanismo para encapsular, abstraer u ocultar los detalles de un proceso
particular. Por ejemplo, podríamos querer escribir un procedimiento que
simplemente espere por un segundo. Podría escribirse como sigue:

public static void espereUnSegundo()


{
long ahora = System.currentTimeMillis();
long despues = ahora + 1000; // un segundo son 1000 milisegundos
while (System.currentTimeMillis() < despues)
{
// nada!
}
}

5
Es claro que este procedimiento tiene un finalidad muy simple. Al usuario (el
programador) no le interesa conocer los detalles de implementación y por
lo tanto, preferirá usar este método. Estos detalles son, por ejemplo, que el
tiempo en Java se mide en milisegundos o que necesitamos un ciclo para
implementar el procedimiento. Para llamar, ejecutar o invocar este
procedimiento, tipeamos el nombre seguido por una lista vacía de
parámetros:

public static void main(String args[])


{
espereUnSegundo();
}

La lista de parámetros es vacía, pues este proceso (esperar un segundo) no


depende de ningún input que el usuario o el programa le deba dar.

¿Cuál es el efecto de correr el procedimiento? La computadora aparenta


detenerse por un segundo.

Teniendo en mente un procedimiento más versátil, podríamos preguntar:


¿podemos detener la computadora un número arbitrario de segundos? Por
supuesto que sí:

public static void espereNSegundos (int number)


{
int i;
for (i = 0; i < number; i++)
{
espereUnSegundo();
}
}

Aquí decimos que number es un parámetro formal, es decir, que


representará, dentro del método, el número de segundos que se va a
esperar.

Este número es claramente referenciado en las instrucciones que siguen:


hacemos un ciclo number veces cuando llamamos wait1second. La variable
que controla ese ciclo, i, es una variable local . Mantiene un valor mientras
el ciclo es activo.

Observemos que si no conocemos el valor de number, no podemos correr el


método. Es necesario, entonces, tener este número antes de que el método
sea invocado. Este número es llamado el parámetro real o argumento real.

6
Nosotros especificamos el parámetro real cuando llamamos a un
procedimiento.

espereNSegundos(60/5);

En este caso, la computadora detendrá la ejecución del programa por un


quinto de minuto o 12 segundos. Cualquier expresión que resulte en un int
es válida como parámetro real en este método. Este proceso (pasar de un
parámetro real a un parámetro formal) sirve para inicializar los valores de
los parámetros formales del método antes de que el método comience a
correr. Este proceso es llamado pasaje de parámetros. Debemos aclarar que
el método, en este caso, espera un int y que si el parámetro real es un
double, esto causará problemas.

7
Referencias
Bailey, D. A., & Bailey, D. W. (2000). “Methods” (pp. en Bailey, D. A. “Java
Elements: Principles of Programming in Java”. Boston, MA: Mc Graw Hill

También podría gustarte