copias de valores primitivos (como valores de tipo
int
y
double
) y copias de referencias a objetos (incluyendo las
referencias a arreglos). Los objetos en sí no pueden pasarse a los métodos. Cuando un método modifi ca un pará-
metro de tipo primitivo, las modifi caciones a ese parámetro no tienen efecto en el valor original del argumento en
el método que hizo la llamada. Por ejemplo, cuando la línea 30 en
main
de la fi gura 7.13 pasa
arreglo[ 3 ]
al
método
modificarElemento
, la instrucción en la línea 45 que duplica el valor del parámetro
elemento
no tiene
efecto sobre el valor de
arreglo[ 3 ]
en
main
. Esto también se aplica para los parámetros de tipo por referen-
cia. Si usted modifi ca un parámetro de tipo por referencia al asignarle la referencia de otro objeto, el parámetro
hace referencia al nuevo objeto, pero la referencia almacenada en la variable del método que hizo la llamada sigue
haciendo referencia al objeto original.
Aunque la referencia a un objeto se pasa por valor, un método puede de todas formas interactuar con el obje-
to al que se hace referencia, llamando a sus métodos
public
mediante el uso de la copia de la referencia al objeto.
Como la referencia almacenada en el parámetro es una copia de la referencia que se pasó como argumento, el
parámetro en el método que se llamó y el argumento en el método que hizo la llamada hacen referencia al mismo
objeto en la memoria. Por ejemplo, en la fi gura 7.13, tanto el parámetro
arreglo2
en el método
modificarArre
glo
como la variable
arreglo
en
main
hacen referencia al mismo objeto en la memoria. Cualquier modifi cación
que se realice usando el parámetro
arreglo2
se lleva a cabo en el mismo objeto al que hace referencia la varia-
ble que se pasó como argumento en el método que hizo la llamada. En la fi gura 7.13, las modifi caciones realizadas
en
modificarArreglo
en las que se utiliza
arreglo2
, afectan al contenido del objeto arreglo al que hace referencia
arreglo
en
main
. De esta forma, con una referencia a un objeto, el método que se llamó puede manipular el
objeto del método que hizo la llamada directamente.
Tip de rendimiento 7.1
Pasar arreglos por referencia tiene sentido por cuestiones de rendimiento. Si los arreglos se pasaran por valor, se
pasaría una copia de cada elemento. En los arreglos grandes que se pasan con frecuencia, esto desperdiciaría tiempo
y consumiría una cantidad considerable de almacenamiento para las copias de los arreglos.
7.8 Ejemplo práctico: la clase
LibroCalificaciones
que usa un
arreglo para almacenar las califi caciones
En esta sección desarrollaremos aún más la clase
LibroCalificaciones
, que presentamos en el capítulo 3 y
expandimos en los capítulos 4 y 5. Recuerde que esta clase representa un libro de califi caciones utilizado por
un instructor para almacenar y analizar un conjunto de califi caciones de estudiantes. Las versiones anteriores de
esta clase procesan un conjunto de califi caciones introducidas por el usuario, pero no mantienen los valores de las
califi caciones individuales en variables de instancia de la clase. Por ende, los cálculos repetidos requieren que el
usuario vuelva a introducir las mismas califi caciones. Una manera de resolver este problema sería almacenar cada
califi cación introducida por el usuario en una instancia individual de la clase. Por ejemplo, podríamos crear las
variables de instancia
calificacion1
,
calificacion2
, …,
calificacion10
en la clase
LibroCalificaciones
para
almacenar 10 califi caciones de estudiantes. No obstante, el código para totalizar las califi caciones y determinar
el promedio de la clase sería voluminoso, y la clase no podría procesar más de 10 califi caciones a la vez. En esta
sección resolvemos este problema, almacenando las califi caciones en un arreglo.
Almacenar las califi caciones de los estudiantes en un arreglo en la clase
LibroCalificaciones
La versión de la clase
LibroCalificaciones
(fi gura 7.14) que presentamos aquí utiliza un arreglo de enteros para
almacenar las califi caciones de varios estudiantes en un solo examen. Esto elimina la necesidad de introducir varias
veces el mismo conjunto de califi caciones. El arreglo
calificaciones
se declara como una variable de instancia
en la línea 7; por lo tanto, cada objeto
LibroCalificaciones
mantiene su propio conjunto de califi caciones. El
constructor de la clase (líneas 10 a 14) tiene dos parámetros: el nombre del curso y un arreglo de califi caciones.
Cuando una aplicación (por ejemplo, la clase
PruebaLibroCalificaciones
en la fi gura 7.15) crea un objeto
LibroCalificaciones
, la aplicación pasa un arreglo
int
existente al constructor, el cual asigna la referencia del
arreglo a la variable de instancia
calificaciones
(línea 13). El tamaño del arreglo
calificaciones
se determina
en base a la clase que pasa el arreglo al constructor. Por ende, un objeto
LibroCalificaciones
puede procesar un
número de califi caciones variable. Los valores de las califi caciones en el arreglo que se pasa podría introducirlos
un usuario desde el teclado, o podrían leerse desde un archivo en el disco (como veremos en el capítulo 14). En
7.8 Ejemplo práctico: la clase
LibroCalificaciones
que usa un arreglo para almacenar las califi caciones
279
07_MAQ_CAP_07.indd279
4/19/081:23:00AM