PDF de programación - Todo es un objeto - Piensa en Java

Imágen de pdf Todo es un objeto - Piensa en Java

Todo es un objeto - Piensa en Javagráfica de visualizaciones

Publicado el 6 de Noviembre del 2020
384 visualizaciones desde el 6 de Noviembre del 2020
969,0 KB
24 paginas
Creado hace 19a (21/11/2004)
2: Todo es

un objeto

Aunque se basa en C++, Java es más un lenguaje orientado a objetos "puro".

Tanto C++ como Java son lenguajes híbridos, pero en Java los diseñadores pensaban que esa "hi-
bridación" no era tan importante como lo era en C++. Un lenguaje híbrido permite múltiples estilos
de programación; la razón por la que C++ es híbrido es soportar la compatibilidad hacia atrás con el
lenguaje C. Dado que C++ es un superconjunto del lenguaje C, incluye muchas de las caracterís-
ticas no deseables de ese lenguaje, lo que puede provocar que algunos aspectos de C++ sean de-
masiado complicados.

El lenguaje Java asume que se desea llevar a cabo exclusivamente programación orientada a obje-
tos. Esto significa que antes de empezar es necesario cambiar la forma de pensar hacia el mundo
de la orientación a objetos (a menos que ya esté en él). El beneficio de este esfuerzo inicial es la ha-
bilidad para programar en un lenguaje que es más fácil de aprender y usar que otros muchos len-
guajes de POO. En este capítulo, veremos los componentes básicos- de un programa Java y apren-
deremos que todo en Java es un objeto, incluido un programa Java.

Los objetos se manipulan

mediante referencias

Cada lenguaje de programación tiene sus propios medios de manipular datos. Algunas veces, el
programador debe ser consciente constantemente del tipo de manipulación que se está producien-
do. ¿Se está manipulando directamente un objeto, o se está tratando con algún tipo de representa-
ción indirecta (un puntero en C o C++) que debe ser tratada con alguna sintaxis especial?

Todo esto se simplifica en Java. Todo se trata como un objeto, de forma que hay una única sintaxis
consistente que se utiliza en todas partes. Aunque se trata todo como un objeto, el identificador que
se manipula es una "referencia" a un objeto1. Se podría imaginar esta escena como si se tratara de

' Esto puede suponer un tema de debate. Existe quien piensa que "claramente, es un puntero", pero esto presupone una imple-
mentación subyacente. Además, las referencias de Java son mucho más parecidas en su sintaxis a las referencias de C++ que a pun-
teros. En la primera edición del presente libro, el autor decidió inventar un nuevo término, "empuñadura" porque las referencias
C++ y las referencias Java tienen algunas diferencias importantes. El autor provenía de C++ y no deseaba confundir a los progra-
madores de C++ que supuestamente serían la mejor audiencia para Java. En la 2" edición, el autor decidió que el término más co-
múnmente usado era el término "referencia", y que cualquiera que proviniera de C++ tendría que lidiar con mucho más que con la
terminología de las referencias, por lo que podrán incorporarse sin problemas. Sin embargo, hay personas que no están de acuer-
do siquiera con el término "referencia". El autor leyó una vez un libro en el que "era incorrecto decir que Java soporta el paso por
referencia", puesto que los identificadores de objetos en Java (en concordancia con el citado autor) son de hecho "referencias a ob-
jetos". 'Y (continúa el citado texto), todo se pasa de hecho por valor. Por tanto, si no se pasan parámetros por referencia, se está pa-
sando una referencia a un objeto por valor". Se podría discutir la precisión de semejantes explicaciones, pero el autor considera que
su enfoque simplifica el entendimiento del concepto sin herir a nadie (bueno, los abogados del lenguaje podrían decir que el autor
miente, pero creo que la abstracción que se presenta es bastante apropiada).

56

Piensa en Java

una televisión (el objeto) con su mando a distancia (la referencia). A medida que se hace uso de la
referencia, se está conectado a la televisión, pero cuando alguien dice "cambia de canal" o "baja el
volumen", lo que se manipula es la referencia, que será la que manipule el objeto. Si desea mover-
se por la habitación y seguir controlando la televisión, se toma el mando a distancia (la referencia),
en vez de la televisión.

Además, el mando a distancia puede existir por sí mismo, aunque no haya televisión. Es decir, el
mero hecho de tener una referencia no implica necesariamente la existencia de un objeto conecta-
do al mismo. De esta forma si se desea tener una palabra o frase, se crea una referencia String:

String S;

Pero esta sentencia solamente crea la referencia, y no el objeto. Si se decide enviar un mensaje a S
en este momento, se obtendrá un error (en tiempo de ejecución) porque S no se encuentra, de he-
cho, vinculado a nada (no hay televisión). Una práctica más segura, por consiguiente, es inicializar
la referencia en el mismo momento de su creación:

String S = "asdf';

Sin embargo, esta sentencia hace uso de una característica especial de Java: las cadenas de texto
pueden inicializarse con texto entre comillas. Normalmente, es necesario usar un tipo de iniciali-
zación más general para los objetos.

Uno debe crear

todos los objetos

Cuando se crea una referencia, se desea conectarla con un nuevo objeto. Así se hace, en general,
con la palabra clave new, que dice "Créame un objeto nuevo de ésos". Por ello, en el ejemplo ante-
rior se puede decir:

String s = new String ( "asdf" ) ;

Esto no sólo significa "Créame un nuevo String", sino que también proporciona información sobre
cómo crear el String proporcionando una cadena de caracteres inicial.

Por supuesto, String no es el único tipo que existe. Java viene con una plétora de tipos predefini-
dos. Lo más importante es que uno puede crear sus propios tipos. De hecho, ésa es la actividad
fundamental de la programación en Java, y es precisamente lo que se irá aprendiendo en este
libro.

Dónde reside el almacenamiento
Es útil visualizar algunos aspectos relativos a cómo se van disponiendo los elementos al ejecutar el
programa, y en particular, sobre cómo se dispone la memoria. Hay seis lugares diferentes en los que
almacenar información:

2: Todo es un objeto

57

1. Registros. Son el elemento de almacenamiento más rápido porque existen en un lugar dis-
tinto al de cualquier otro almacenamiento: dentro del procesador. Sin embargo, el número de
registros está severamente limitado, de forma que los registros los va asignando el compila-
dor en función de sus necesidades. No se tiene control directo sobre ellos, y tampoco hay nin-
guna evidencia en los programas de que los registros siquiera existan.

2 . La pila. Reside en la memoria RAM (memoria de acceso directo) general, pero tiene sopor-
te directo del procesador a través del puntero de pila. Éste se mueve hacia abajo para crear
más memoria y de nuevo hacia arriba para liberarla. Ésta es una manera extremadamente rá-
pida y eficiente de asignar espacio de almacenamiento, antecedido sólo por los registros. El
compilador de Java debe saber, mientras está creando el programa, el tamaño exacto y la vida
de todos los datos almacenados en la pila, pues debe generar el código necesario para mover
el puntero hacia arriba y hacia abajo. Esta limitación pone límites a la flexibilidad de nuestros
programas, de forma que mientras existe algún espacio de almacenamiento en la pila -re-
ferencias a objetos en particular-

los propios objetos Java no serán ubicados en la pila.

El montículo. Se trata de un espacio de memoria de propósito general (ubicado también en
el área RAM) en el que residen los objetos Java. Lo mejor del montículo es que, a diferencia
de la pila, el compilador no necesita conocer cuánto espacio de almacenamiento necesita asig-
nar al montículo o durante cuánto tiempo debe permanecer ese espacio dentro del montículo.
Por consiguiente, manejar este espacio de almacenamiento proporciona una gran flexibilidad.
Cada vez que se desee crear un objeto, simplemente se escribe el código, se crea utilizando la
palabra new, y se asigna el espacio de almacenamiento en el montículo en el momento en que
este código se ejecuta. Por supuesto hay que pagar un precio a cambio de esta flexibilidad: lle-
va más tiempo asignar espacio de almacenamiento del montículo que lo que lleva hacerlo en
la pila (es decir, si se pudieran crear objetos en la pila en Java, como se hace en C++).

4. Almacenamiento estático. El término "estático" se utiliza aquí con el sentido de "con una
ubicación/posición fija" (aunque también sea en RAM). El almacenamiento estático contiene
datos que están disponibles durante todo el tiempo que se esté ejecutando un programa.
Podemos usar la palabra clave static para especificar que un elemento particular de un objeto
sea estático, pero los objetos en sí nunca se sitúan en el espacio de almacenamiento estático.

5 . Almacenamiento constante. Los valores constantes se suelen ubicar directamente en el có-
digo del programa, que es seguro, dado que estos valores no pueden cambiar. En ocasiones,
las constantes suelen ser acordonadas por sí mismas, de forma que puedan ser opcionalmen-
te ubicadas en memoria de sólo lectura (ROM).

6 . Almacenamiento no-RAM. Si los datos residen completamente fuera de un programa, pue-
den existir mientras el programa no se esté ejecutando, fuera del control de dicho programa.
Los dos ejemplos principales de esto son los objetos de flujo de datos (strearn), que se con-
vierten en flujos o corrientes de bytes, generalmente para ser enviados a otra máquina, y los
objetos persistentes, que son ubicados en el disco para que mantengan su estado incluso cuan-
do el programa ha terminado. El truco con estos tipos de almacenamiento es convertir los ob-
jetos en algo que pueda existir en otro medio, y que pueda así recuperarse en forma de obje-
to basado en RAM cuando sea necesario. Java proporciona soporte para persistencia ligera, y

58

Piensa en Java

las versiones futuras de
  • Links de descarga
http://lwp-l.com/pdf18432

Comentarios de: Todo es un objeto - 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