PDF de programación - Inicialización y limpieza - Piensa en Java

Imágen de pdf Inicialización y limpieza - Piensa en Java

Inicialización y limpieza - Piensa en Javagráfica de visualizaciones

Publicado el 4 de Noviembre del 2020
469 visualizaciones desde el 4 de Noviembre del 2020
1,4 MB
42 paginas
Creado hace 19a (21/11/2004)
4: Inicialización

y limpieza

A medida que progresa la revolución computacional, la programación "insegura"
se ha convertido en uno de los mayores culpables del encarecimiento de la pro-
gramación.

Dos de estos aspectos de seguridad son la inicialización y la limpieza. Muchos de los fallos que se
dan en C ocurren cuando el programador olvida inicializar una variable. Esto es especialmente ha-
bitual con las bibliotecas, cuando los usuarios no saben cómo inicializar un componente de una bi-
blioteca, o incluso cuándo deben hacerlo. La limpieza o eliminación es un problema especial porque
es fácil olvidarse de un elemento una vez que ya no se utiliza, puesto que ya no tiene importancia.
Por consiguiente, los recursos que ese elemento utilizaba quedan reservados y es fácil acabar que-
dándose sin recursos (y el más importante, la memoria).

C++ introdujo el concepto de constructor, un método especial invocado automáticamente en la crea-
ción de un objeto. Java también adoptó el constructor, y además tiene un recolector de basura que
libera automáticamente recursos de memoria cuando dejan de ser utilizados. Este capítulo examina
los aspectos de inicialización y eliminación, y su soporte en Java.

Inicialización garantizada

c o n

constructor

Es posible imaginar la creación de un método denominado inicializar( ) para cada clase que se escri-
ba. El nombre se debe invocar antes de utilizar el objeto. Por desgracia, esto significa que el usuario
debe recordar llamar al método. En Java, el diseñador de cada clase puede garantizar que se inicialice
cada objeto proporcionando un método especial llamado constructor. Si una clase tiene un constructor,
Java llama automáticamente al constructor cuando se crea un objeto, antes de que los usuarios puedan
siquiera pensar en poner sus manos en él. Por consiguiente, la inicialización queda garantizada.

El siguiente reto es cómo llamar a este método. Hay dos aspectos. El primero es que cualquier nom-
bre que se use podría colisionar con un nombre que nos gustaría utilizar como miembro en una cla-
se. El segundo es que dado que el compilador es el responsable de invocar al constructor, debe sa-
ber siempre qué método invocar. La solución de C++ parece la mejor y más lógica, por lo que se
utiliza también en Java: el nombre del constructor es el mismo que el nombre de la clase. Tiene sen-
tido que un método así se invoque automáticamente en la inicialización.

He aquí hay una clase con un constructor simple:

/ / : c04:ConstructorSimple.java
/ / Muestra de un constructor simple.

128

Piensa en Java

class Roca {

Roca() {

/ / Éste es el constructor

System.out.println("Creando Roca");

public class ConstructorSimple {

public static void main (String[] args) {

for(int i = O; i < 10; itt)

new Roca ( ) ;

1

1 / / / : -

Ahora, al crear un objeto:

new Roca ( ) ;

se asigna almacenamiento y se invoca al constructor. Queda garantizado que el objeto será iniciali-
zado de manera adecuada antes de poder poner las manos sobre él.

Fíjese que el estilo de codificación de hacer que la primera letra de todos los métodos sea minús-
cula no se aplica a los constructores, dado que el nombre del constructor debe coincidir exactamente
con el nombre de la clase.

Como cualquier método, el constructor puede tener parámetros para permitir especificar cómo se
crea un objeto. El ejemplo de arriba puede cambiarse sencillamente de forma que el constructor re-
ciba un argumento:

/ / : c04:ConstructorSimple2.java
/ / Los constructores pueden tener parámetros.

class Roca2 {

Roca2 (int i) {

System.out.println(

"Creando la roca numero " + i) ;

1

1

public class Coristr uctorSimple2 {

public static void main(String[l args) {

for(int i = O; i < 10; i+t)

new Roca2 (i) :

4: Inicialización y limpieza

129

Los parámetros del constructor proporcionan un medio para pasar parámetros a la inicialización de
un objeto. Por ejemplo, si la clase Arbol tiene un constructor que toma un número entero que in-
dica la altura del árbol, crearíamos un objeto Arbol como éste:

Arbol a = new Arbol(l2); / / Un árbol de 12 metros

Si Arbol(int) es el único constructor, entonces el compilador no permitirá crear un objeto Arbol de
ninguna otra forma.

Los constructores eliminan un montón de problemas y simplifican la lectura del código. En el frag-
mento de código anterior, por ejemplo, no se verá ninguna llamada explícita a ningún método ini-
cidizar( ) que esté conceptualmente separado, por definición. En Java, la definición e inicialización
son conceptos que están unidos -no

se puede tener uno sin el otro.

El constructor es un tipo inusual de método porque no tiene valor de retorno. Esto es muy diferen-
te al valor de retorno void, en el que el método no devuelve nada pero se sigue teniendo la opción
de hacer que devuelva algo más. Los constructores no devuelven nada y no es necesario tener nin-
guna opción. Si hubiera un valor de retorno, y si se pudiera seleccionar el propio, el compilador, de
alguna manera, necesitaría saber qué hacer con ese valor de retorno.

Sobrecarga

métodos

Uno de los aspectos más importantes de cualquier lenguaje de programación es el uso de los nom-
bres. Al crear un objeto, se da un nombre a cierta región de almacenamiento. Un método es un nom-
bre que se asigna a una acción. Al utilizar nombres para describir el sistema, se crea un programa
más fácil de entender y de modificar por la gente. Es como escribir en prosa -la meta es comuni-
carse con los lectores.

Para hacer referencia a objetos y métodos se usan nombres. Los nombres bien elegidos hacen más
sencillo que todos entiendan un código.

Surge un problema cuando se trata de establecer una correspondencia entre el concepto de matiz
del lenguaje humano y un lenguaje de programación. A menudo, la misma palabra expresa varios
significados -se ha sobrecargado. Esto es útil, especialmente cuando incluye diferencias triviales. Se
dice "lava la camisa", "lava el coche" y "lava el perro". Sería estúpido tener que decir "IavaCamisas
la camisa", "lavacoche el coche" y "lavaperro el perro" simplemente para que el que lo escuche no
tenga necesidad de intentar distinguir entre las acciones que se llevan a cabo. La mayoría de los len-
guajes humanos son redundantes, por lo que incluso aunque se te olviden unas pocas palabras, se
sigue pudiendo entender. No son necesarios identificadores únicos -se puede deducir el significa-
do del contexto.

La mayoría de los lenguajes de programación (C en particular) exigen que se tenga un identiíicador
único para cada función. Así, no se podría tener una función llamada print( ) para imprimir enteros
si existe ya otra función llamada print( ) para imprimir decimales -cada
función requiere un nom-
bre único.

130

Piensa en Java

En Java ('y C++) otros factores fuerzan la sobrecarga de los nombres de método: el constructor.
Dado que el nombre del constructor está predeterminado por el nombre de la clase, sólo puede ha-
ber un nombre de constructor. Pero ¿qué ocurre si se desea crear un objeto de más de una mane-
ra? Por ejemplo, suponga que se construye una clase que puede inicializarse a sí misma de manera
estándar o leyendo información de un archivo. Se necesitan dos constructores, uno que no tome ar-
gumentos (el constructor por defecto, llamado también constructor sin parámetros), y otro que tome
como parámetro un Stnng, que es el nombre del archivo con el cual inicializar el objeto. Ambos son
constructores, por lo que deben tener el mismo nombre -el nombre de la clase. Por consiguiente,
la sobrecarga de métodos es esencial para permitir que se use el mismo nombre de métodos con dis-
tintos tipos de parámetros. Y aunque la sobrecarga de métodos es una necesidad para los cons-
tructores, es bastante conveniente y se puede usar con cualquier método.

He aquí un ejemplo que muestra métodos sobrecargados, tanto constructores como ordinarios:

/ / : c04:Sobrecarga.java
/ / Muestra de sobrecarga de métodos
/ / tanto constructores como ordinarios.
import java.util.*;

class Arbol {

int altura;
Arbol 0

visualizar ("Plantando un retoño") ;
altura = 0;

}
Arbol (int i) {

visualizar("Creando un nuevo arbol que tiene "

t i +

metros de alto");

altura = i;

1
void info ( )

{

visualizar("E1 arbol tiene " + altura

t " metros de alto");

void info(String S) {

visualizar(s + " : El arbol tiene "

+ altura t " metros de alto");

1
static void visualizar (String S) {

System.out.println ( S ) ;

1

public class sobrecarga {

public static void main (String[] args) {

4: Inicialización y limpieza

131

for(int i = O; i < 5; i++) {

Arbol t = new Arbol (i) ;
t.info();
t. info ("metodo sobrecargado") ;

1
/ / Constructor sobrecargado:
new Arbolo ;

1

1 / / / : -
Se puede crear un objeto Arbol, bien como un retoño, sin argumentos, o como una planta que cre-
ce en un criadero, con una altura ya existente. Para dar soporte a esto, hay dos constructores, uno
que no toma argumentos (a los constructores sin argumentos se les llama constructores por defecto1),
y uno que toma la altura existente.

Podríamos también querer invocar al método ido( ) de más de una manera. Por ejemplo, con un
parámetro String si se tiene un mensaje extra para imprimir, y sin él si no se tiene nada más que
decir. Parecería extraño dar dos nombres separados a lo que es obviamente el mismo concepto.
Afortunadamente, la sobrecarga de métodos permite usar el mismo nombre para ambos.

Distinguir métodos sobrecargados
Si los métodos tienen el mismo nombre, ¿cómo puede saber Java qué método se debe usar en cada
caso? Hay una regla simple: cada método sobrecar
  • Links de descarga
http://lwp-l.com/pdf18424

Comentarios de: Inicialización y limpieza - Piensa en Java (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad