Fundamentos de programación

Name:
Location: Tuxtla Gutiérrez, Mexico

Friday, December 08, 2006

PROGRAMANDO CON EDITOR BLUE J

Tutorial de BlueJ



1 Prólogo

1.1 Acerca de BlueJ
Este tutorial es una introducción al uso del entorno de programación BlueJ. BlueJ es un
entorno de desarrollo para Java™ diseñado específicamente para la enseñanza en un
curso introductorio. Fue diseñado e implementado por el equipo de BlueJ en la
Universidad de Monash, Melbourne, Australia, y la Universidad de Southern Denmark,
Odense.

Más información sobre BlueJ se encuentra disponible en http://www.bluej.org.

1.2 Alcance y Audiencia
Este tutorial está hecho para las personas que desean familiarizarse con las
capacidades de este entorno de programación. Aquí no se explican las decisiones de
diseño que subyacen en la construcción del entorno o la investigación en la cual se basa.

Este tutorial no tiene la intención de enseñar Java. A los principiantes en la programación
en Java se les aconseja estudiar también con un texto introductorio o tomar un curso de
Java.

Este no es un manual de referencia comprensivo del entorno. Muchos detalles se
dejaron – se hace énfasis en una introducción breve y concisa, en vez de un cubrimiento
completo de características.

Cada sección comienza con una oración inicial de resumen. Esto permite a los usuarios
familiarizados con algunas partes decidir si ellos quieren leer o saltar cada parte en
particular. La sección 10 repite únicamente las líneas resumen como una referencia
rápida.

1.3 Copyright, licencia y redistribución
El Sistema BlueJ y su tutorial están disponibles libremente para cualquier persona y para
cualquier clase de uso. El sistema y su documentación pueden ser redistribuidos
libremente.

Ninguna parte del sistema BlueJ o su documentación pueden ser vendidos para obtener
lucro o incluidos en un paquete que sea vendido para lucro sin autorización escrita de los
autores.

El copyright © para BlueJ está reservado a M. Kölling y J. Rosenberg.


Prólogo

1.4 Realimentación
Comentarios, preguntas, correcciones, críticas y cualquier otra clase de realimentación
concerniente al sistema BlueJ o a su tutorial son bienvenidas y acogidas activamente.
Por favor escriba un correo electrónico a Michael Kölling ( mik@mip.sdu.dk ).


2 Instalación

BlueJ es distribuido en tres formatos diferentes: uno para sistemas Windows, uno para
MacOS, y uno para los otros sistemas. La instalación es fácil y rápida.

Prerrequisitos

Usted debe tener J2SE v1.3 ( o. JDK 1.3 ) o posterior instalado en sus sistema para
utilizar BlueJ. Si usted no tiene instalado el JDK usted puede descargarlo del sitio web de
Sun en http://java.sun.com/j2se/. En MacOS X, una versión reciente del JDK está
preinstalada – usted no necesita instalarla. Si usted encuentra una página de descargas
que ofrece el “JRE”( Java Runtime Environment ) y el “SDK” ( Software Development Kit
), usted debe descargar el “SDK” – el JRE no es suficiente.

2.1 Instalación en Windows
El archivo de distribución para los sistemas Windows es llamado bluejsetup-xxx.exe,
donde xxx es un número de versión. Por ejemplo, la distribución de Bluej versión 1.2.0 se
llama bluejsetup-120.exe. Usted puede tener este archivo en disco, o puede descargarlo
del sitio web de Bluej http://www.bluej.org. Ejecute este instalador.

El instalador le permite seleccionar un directorio para instalarlo. El también ofrece la
opción de instalar un acceso directo en el menú de inicio y en el escritorio.

Luego de finalizada la instalación, usted encontrará el programa bluej.exe en el directorio
de instalación de BlueJ.

La primera vez que usted lance BlueJ, él buscará el sistema Java ( JDK ). Si él
encuentra disponible más de un sistema Java ( e.j. usted tiene JDK 1.3.1 y JDK 1.4
instalado ), una ventana de diálogo le dejará seleccionar uno de ellos para utilizarlo. Si él
no encuentra un sistema Java, a usted se le solicitará que lo localice ( esto puede ocurrir
cuando un sistema JDK ha sido instalado, pero las correspondientes entradas de registro
han sido removidas ).

El instalador de BlueJ también instala un programa llamado vmselect.exe. Usando este
programa, usted puede cambiar posteriormente cuál versión de Java utiliza BlueJ.
Ejecute vmselect para ejecutar BlueJ con una versión diferente de Java.

La selección del JDK es almacenado para cada versión de BlueJ. Si usted tiene
diferentes versiones instaladas de BlueJ, usted puede usar una versión de BlueJ con el
JDK 1.3.1 y otra versión de BlueJ con JDK 1.4. Cambiar la versión de Java para BlueJ
hará que se cambie para todas las instalaciones de BlueJ de la misma versión para el
mismo usuario.


Instalación

2.2 Instalación en Macintosh
Por favor note que BlueJ se ejecuta solamente en MacOS X. El archivo de distribución
para MacOS es llamado BlueJ-xxx.sit, donde xxx es un número de versión. Por ejemplo,
la distribución de Bluej versión 1.2.0 se llama BlueJ-120.sit. Usted puede tener este
archivo en disco, o puede descargarlo del sitio web de Bluej http://www.bluej.org.

Este archivo puede ser descomprimido por el expansor StuffIt. Muchos navegadores
descomprimirán este archivo por usted. De otro modo, haciendo doble clic se
descomprimirá.

Luego de descomprimir, usted tendrá una carpeta llamada BlueJ-xxx. Mueva esta
carpeta dentro de su carpeta de Aplicaciones ( o donde quiera que a usted le guste
guardarlo ). No son necesarias posteriores instalaciones.

2.3 Instalación en Linux/Unix y otros sistemas
El archivo de distribución para MacOS es llamado BlueJ-xxx.sit, donde xxx es un número
de versión. Por ejemplo, la distribución de Bluej versión 1.2.0 se llama BlueJ-120.sit.
Usted puede tener este archivo en disco, o puede descargarlo del sitio web de Bluej
http://www.bluej.org.

El archivo de distribución general es un archivo jar ejecutable. Se llama bluej-xxx.jar,
donde xxx es el número de versión. Por ejemplo, la distribución de Bluej versión 1.2.0 se
llama bluej-120.jar. Usted puede tener este archivo en disco, o puede descargarlo del
sitio web de Bluej http://www.bluej.org.

Ejecute el instalador a través del siguiente comando. NOTA: Para este ejemplo, el
archivo utilizado es el de la distribución bluej-120.jar – usted necesita utilizar el nombre
del archivo que vaya a utilizar ( con el número de versión correcto ).

<>/bin/java -jar bluej-120.jar
<> es el directorio, donde el JDK fue instalado.

Una ventana se lanza, permitiéndole escoger el directorio de instalación de Bluej yla
versión del JDK utilizada para ejecutar BlueJ. Importante: El camino para BlueJ ( esto es,
cualquiera de los directorios padre ) no deben contener espacios en blanco.

Haga clic en Install. Luego de finalizar, BlueJ deberá estar instalado.

2.4 Problemas de Instalación
Si usted tiene algún problema, verifique la sección Frequently Asked Questions ( FAQ )
en el sitio web de BlueJ ( http://www.bluej.org/help/faq.html ) y lea la sección How To Ask
For Help ( http://www.bluej.org/help/ask-help.html ).


3 Comenzando – edit / compile / execute

3.1 Lanzando BlueJ
En Windows y MacOS, está instalado un programa llamado BlueJ. Ejecútelo.

En sistemas Unix el instalador guarda un script llamado bluej en el directorio de
instalación. Desde una interfaz GUI, haga doble clic en el archivo. Desde una línea de
comandos usted puede iniciar BlueJ con o sin un proyecto como argumento:

$ bluej

o

$ bluej examples/people


Figura 1: La ventana principal de BlueJ


Comenzando -edit / compile / execute

3.2 Abriendo un proyecto
Resumen: Para abrir un proyecto, seleccione Open del menú Project.

Los proyectos en BlueJ, como los paquetes estándar en Java, son directorios
conteniendo los archivos incluidos en el proyecto.

Luego de iniciar BlueJ, use el comando de menú Project – Open... para seleccionar y abrir
un proyecto.

Algunos proyectos de ejemplo están incluidos en la distribución estándar de BlueJ en el
directorio examples.

Para esta sección del tutorial, abra el proyecto people, el cual está incluido en este
directorio. Usted puede encontrar el directorio examples en el directorio instalación de
BlueJ. Luego de abrir el proyecto, usted debería ver algo similar a la ventana mostrada
en la Figura 1. La ventana puede no lucir exactamente como en su sistema, pero las
diferencias deberían ser menores.

3.3 Creando objetos
Resumen: Para crear un objeto, seleccione un constructor del menú emergente de la
clase.

Una de las características fundamentales de BlueJ es que usted no puede ejecutar
únicamente una aplicación directamente, sino que también debe interactuar directamente
con objetos simples pertenecientes a cualquier clase y, ejecutar sus métodos públicos.
Una ejecución en BlueJ normalmente se realiza creando un objeto y luego invocando
uno de los métodos del objeto. Esto es muy útil durante el desarrollo de una aplicación –
usted puede probar clases individualmente tan pronto como hayan sido escritas. No hay
necesidad de escribir primero la aplicación.

Nota al pie: Los métodos estáticos pueden ser ejecutados directamente sin crear primero
un objeto. Uno de los métodos estáticos puede ser “main”, así podemos hacer lo mismo
que normalmente pasa en las aplicaciones – iniciar una aplicación sólo ejecutando un
método estático main. Regresaremos a esto luego. Primero, haremos algunas otras cosas,
cosas más interesantes las cuales normalmente no pueden ser realizadas en los entornos
Java.
Los cuadros que se ven en la parte central de la ventana principal ( etiquetados
Database, Person, Staff y Student ) son iconos representando las clases involucradas en
esta aplicación. Usted puede obtener un menú con operaciones, aplicable a una clase
haciendo clic en el icono de la clase con el botón derecho del ratón (Macintosh: ctrl.-clic1)
( Figura 2 ). Las operaciones mostradas son operaciones new con cada uno de los

1 Donde se mencione clic derecho en este tutorial, los usuarios Macintosh deberían leerlo como ctrl.-clic.


Comenzando -edit / compile / execute

constructores definidos para esta clase ( primero ) seguidas por algunas operaciones
proporcionadas por el entorno.


Figura 2: Operaciones de Clase ( menú emergente )

Queremos crear un objeto Staff, así usted debería hacer clic derecho sobre el icono de
Staff ( lo cual hace que emerja el menú mostrado en la Figura 2 ). El menú muestra dos
constructores para crear un objeto Staff, uno con parámetros y otro sin ellos. Primero,
seleccione el constructor sin parámetros. Aparece la ventana de diálogo mostrada en la
Figura 3.


Figura 3: Creación de Objeto sin parámetros


Comenzando -edit / compile / execute

Esta ventana de diálogo pregunta por un nombre para el objeto a ser creado. Al mismo
tiempo, se sugiere un nombre por defecto ( staff_1 ). Este nombre por defecto es lo
suficientemente bueno por ahora, así que sólo haga clic en OK. Un objeto Staff será
creado.

Desde que el objeto ha sido creado, él se coloca en el área de objetos ( Figura 4 ). Esto
es todo lo necesario para crear un objeto: seleccione un constructor del menú de la
clase, ejecútelo y usted tendrá el objeto en el área de objetos.


Figura 4: Un Objeto sobre el área de Objetos

Usted puede haber notado que la clase Person está etiquetada como <>
( ésta es una clase abstracta ). Usted notará ( si lo trata de probar ) que no puede crear
objetos desde clases abstractas ( como la especificación del lenguaje Java lo define ).

3.4 Ejecución
Resumen: Para ejecutar un método, selecciónelo del menú emergente del objeto.

Ahora que ha creado un objeto, usted puede ejecutar sus operaciones públicas. ( Java
llama a las operaciones métodos. ) Haga clic con el botón derecho del ratón sobre el
objeto y emerge un menú con las operaciones del objeto ( Figura 5 ). El menú muestra
los métodos disponibles para este objeto y dos operaciones especiales proporcionadas
por el entorno ( Inspect y Remove ). Discutiremos esto luego. Primero, concentrémonos
en los métodos.


Comenzando -edit / compile / execute


Figura 5: El menú de Objeto

Usted ve que existen los métodos getRoom y setRoom los cuales configuran y retornan
el número de la habitación para este miembro del staff. Haga un llamado a getRoom.
Simplemente selecciónelo de su menú de objeto y éste se ejecutará. Una ventana de
diálogo aparece mostrando el resultado del llamado ( Figura 6 ). En este caso el nombre
dice “( unknown room )” porque no especificamos ninguna habitación para esta persona.


Figura 6: Ventana mostrando el resultado de una función

Los métodos heredados de una superclase están disponibles a través de un submenú.
En la parte superior del menú emergente de objeto existen dos submenús, uno para los
métodos heredados de Object y otro para los de Person ( Figura 5 ). Usted puede llamar
a los métodos de Person ( tales como getName ) seleccionándolos desde el submenú.
Pruébelo. Usted notará que la respuesta es igualmente vaga: se responde “( unknown
name )”, debido a que no hemos dado un nombre a la persona.

Ahora tratemos de especificar un número de habitación. Esto se mostrará como un
llamado que tiene parámetros. ( Los llamados a getRoom y getName tienen valores de
retorno, pero no parámetros ).

Llame la función setRoom seleccionándola del menú. Una ventana de diálogo aparece
solicitándole que digite un parámetro ( Figura 7 ).


Comenzando -edit / compile / execute


Figura 7: Ventana de Diálogo del Llamado a una función con parámetros

En la parte superior de esta ventana de diálogo se muestra la interfaz del método a ser
llamado ( incluyendo el comentario y la signatura ). Debajo de esto, existe un campo de
entrada de texto donde usted puede digitar el parámetro. La signatura al comienzo nos
indica se que espera un parámetro de tipo String. Digite la nueva habitación, como una
cadena de caracteres ( incluyendo las comillas ) en el campo de texto y haga clic en OK.

Esto es todo – debido a que este método no retorna un parámetro, no hay ventana
resaltada. Llame de nuevo al método getRoom para verificar que la habitación realmente
ha sido cambiada.

Practique la creación de objetos y el llamado de métodos por un rato. Trate llamando al
constructor con argumentos y llame algunos otros métodos hasta que se familiarice con
estas operaciones.

3.5 Editando una clase
Resumen: Para editar el archivo fuente de una clase, haga doble clic sobre su icono de
clase.

Hasta ahora hemos tratado solamente son una interfaz de objetos. Ahora es tiempo de
profundizar. Usted puede ver la implementación de una clase seleccionando Open Editor
desde las operaciones de la clase. ( Recuerde: haga clic derecho sobre el icono de la
clase y se muestran las operaciones de la clase. ) Hacer doble clic sobre la clase es un
atajo para la misma función. El editor no se describe en mucho detalle dentro de este
tutorial, pero no es muy importante para su uso. Los detalles del editor serán descritos
luego. Por ahora, abra la implementación de la clase Staff. Encuentre la implementación
del método getRoom. El retorna, como su nombre lo sugiere, el número de la habitación
del miembro del staff. Cambiemos el método agregando el prefijo “room” al resultado de
la función( así que el método retorna, “room M.3.18” en lugar de sólo “M.3.18” ).

Podemos hacer esto cambiando la línea

return room;

por

return "room " + room;


Comenzando -edit / compile / execute

BlueJ soporta instrucciones Java por completo y sin modificar, así que no hay nada
especial acerca de cómo implemente sus clases.

3.6 Compilación
Resumen: Para compilar una clase, haga clic en el botón Compile en el editor. Para
compilar un proyecto, haga clic en el botón Compile en la ventana de proyecto.

Luego de insertar el texto ( antes de hacer cualquier otra cosa ), verifique la vista del
proyecto ( ventana principal ). Usted notará que ha cambiado el icono de clase para la
clase Staff: él ahora está rayado. La apariencia rayada marca las clases que no han sido
compiladas desde el último cambio. Regrese al editor.

Nota al lado: Usted debe preguntarse por qué los iconos de clase no fueron rayados
cuando usted abrió por primera vez este proyecto. Esto es porque las clases en el
proyecto People fueron distribuidas estando compiladas. A menudo los proyectos en
BlueJ son distribuidos sin compilar, así que espere ver más clases sin compilar al abrir un
por primera vez un proyecto.
En la barra de herramientas en la parte superior del editor existen algunos botones con
funciones utilizadas frecuentemente. Uno de ellos es Compile. Esta función le permite
compilar esta clase directamente desde el editor. Ahora haga clic en el botón Compile. Si
usted no tuvo ninguna equivocación, un mensaje debería aparecer en el área de
información en la parte inferior del editor, notificándolo que la clase ha sido compilada. Si
usted cometió una equivocación que se basa en un error de sintaxis, la línea de error es
marcada y un mensaje de error se muestra en el área de información. ( En el caso de
que su compilación funcione correctamente la primera vez, trate de introducir un error de
sintaxis ahora – tal como un punto y coma faltante – y compile de nuevo, observe qué
aparece )

Luego de que ha compilado exitosamente la clase, cierre el editor.

Nota al lado: No hay necesidad de guardar explícitamente el código fuente de la clase. El
código fuente es guardado automáticamente donde sea apropiado ( e.j. cuando el editor se
cierra o antes de compilar una clase ). Usted puede guardar explícitamente una clase si
usted lo desea ( hay una función en el menú del editor de clase ), pero esto sólo se
necesita realmente si su sistema es inestable y frecuentemente se daña, y usted se
encuentra preocupado sobre la posible pérdida de su trabajo.
La barra de herramientas de la ventana de proyecto también tiene un botón Compile.
Esta operación compila el proyecto completo. ( De hecho, ella determina cuáles clases
necesitan ser recompiladas y luego recompila aquellas clases en el orden correcto. )
Trate de hacer esto cambiando dos o más clases ( de tal forma que dos o más clases
aparecen rayadas en el diagrama de clases ) y luego haga clic en el botón Compile. Si


Comenzando -edit / compile / execute

se detecta un error en una de las clases compiladas, el editor se abrirá y la localización
del error y el mensaje serán mostrados.

Usted puede notar que el área de objetos está vacía de nuevo. Los objetos son
removidos cada vez que la implementación se cambia.

3.7 Ayuda con errores del compilador
Resumen: Para obtener ayuda sobre un mensaje de error del compilador, haga clic en el
símbolo de interrogación cercano al mensaje de error.

Muy frecuentemente, los estudiantes principiantes tienen dificultad en entender los
mensajes de error del compilador. Nosotros tratamos de proporcionar alguna ayuda.

Abra el editor de nuevo, introduzca un error en el código fuente, y compile. Un mensaje
de error debería mostrarse en el área de información del editor. En la parte derecha del
área de información aparece un botón con el símbolo de interrogación ( ? ) en el cual
usted puede hacer clic para obtener más información acerca de este tipo de error
( Figura 8 ).


Figura 8: Un error del compilador y el botón de Ayuda ( Help )

En este momento, los textos de ayuda no están disponibles para todos los mensajes de
error. Algunos textos de ayuda aún se deben escribir. Pero es difícil hacerlo – muchos
errores ya se han explicado. El resto serán escritos e incluidos en una futura versión de
BlueJ.


4 Haciendo un poco más...

En esta sección cubriremos algunas otras cosas que usted puede hacer en el entorno.
Cosas que no son esenciales, pero utilizadas muy comúnmente.

4.1 Inspección
Resumen: Un objeto puede ser pasado como un parámetro a un llamado de un método
haciendo clic sobre el icono del objeto.

Cuando usted ejecuta métodos de un objeto, usted puede haber notado la operación
Inspect, la cual está disponible sobre los objetos además de los métodos definidos para
los usuarios ( Figura 5 ). Esta operación permite verificar el estado de las variables de
instancia ( “campos” o “fields” ) de objetos. Trate de crear un objeto con algunos valores
definidos por el usuario ( e.j. un objeto Staff que tiene parámetros en el constructor ).
Luego seleccione Inspect del menú de objeto. Una ventana de diálogo aparece
mostrando los campos de objeto, sus tipos y sus valores ( Figura 9 ).


Figura 9: Ventana de diálogo de Inspección

La inspección es útil para verificar rápidamente que una operación mutadora ( una
operación que cambia el estado de un objeto ) fue ejecutada correctamente. Así, la
inspección es una herramienta simple de traceo.

En el ejemplo con la clase Staff, todos los campos son tipos de datos simples
( cualesquiera que no sean objetos o cadenas de caracteres ). El valor de estos tipos
puede ser mostrado directamente. Usted puede ver inmediatamente si el constructor ha
realizados las asignaciones correctas.


Haciendo un poco más…

En casos más complejos, los valores de los campos pueden ser referencias a objetos
definidos por el usuario. Para un ejemplo de tal caso usaremos otro proyecto. Abra el
proyecto people2, el cual se incluye también en la distribución estándar de BlueJ. La
ventana del escritorio de people2 se muestra en la Figura 10. Como usted puede ver,
este segundo ejemplo tiene una clase Address además de las clases vistas previamente.
Uno de los campos en la clase Person es del tipo Address, definido por el usuario.


Figura 10: La Ventana del proyecto people2

Para lo siguiente que queremos probar – inspección con campos de objeto – cree un
objeto Staff y luego llame el método setAddress de este objeto ( usted lo encontrará en el
submenú de los métodos heredados de Person ). Digite una dirección. Internamente, el
código de Staff crea un objeto de clase Address y lo almacena en su campo address.

Ahora, inspeccione el objeto Staff. La ventana de diálogo de la inspección resultante se
muestra en la Figura 11. Los campos dentro del objeto Staff ahora incluyen address.
Como usted puede ver, su valor se muestra como

PROGRAMANDO EN JAVA




PROGRAMACION EN JAVA
Cuando se programa en Java, se coloca todo el código en métodos, de la misma forma que se escriben funciones en lenguajes como C.

Comentarios
En Java hay tres tipos de comentarios:
// comentarios para una sola línea
/* comentarios de una o
más líneas
*/
/** comentario de documentación, de una o más líneas
*/
Los dos primeros tipos de comentarios son los que todo programador conoce y se utilizan del mismo modo. Los comentarios de documentación, colocados inmediatamente antes de una declaración (de variable o función), indican que ese comentario ha de ser colocado en la documentación que se genera automáticamente cuando se utiliza la herramienta de Java, javadoc. Dichos comentarios sirven como descripción del elemento declarado permitiendo generar una documentación de nuestras clases escrita al mismo tiempo que se genera el código.
En este tipo de comentario para documentación, se permite la introducción de algunos tokens o palabras clave, que harán que la información que les sigue aparezca de forma diferente al resto en la documentación.

Identificadores
Los identificadores nombran variables, funciones, clases y objetos; cualquier cosa que el programador necesite identificar o usar.
En Java, un identificador comienza con una letra, un subrayado (_) o un símbolo de dólar ($). Los siguientes caracteres pueden ser letras o dígitos. Se distinguen las mayúsculas de las minúsculas y no hay longitud máxima.
Serían identificadores válidos: identificador
nombre_usuario
Nombre_Usuario
_variable_del_sistema
$transaccion
y su uso sería, por ejemplo: int contador_principal;
char _lista_de_ficheros;
float $cantidad_en_Ptas;
Palabras claveLas siguientes son las palabras clave que están definidas en Java y que no se pueden utilizar como indentificadores: abstract continue for new switch
boolean default goto null synchronized
break do if package this
byte double implements private threadsafe
byvalue else import protected throw
case extends instanceof public transient
catch false int return true
char final interface short try
class finally long static void
const float native super while
Palabras ReservadasAdemás, el lenguaje se reserva unas cuantas palabras más, pero que hasta ahora no tienen un cometido específico. Son: cast future generic inner
operator outer rest var

Literales

Un valor constante en Java se crea utilizando una representación literal de él. Java utiliza cinco tipos de elementos: enteros, reales en coma flotante, booleanos, caracteres y cadenas, que se pueden poner en cualquier lugar del código fuente de Java. Cada uno de estos literales tiene un tipo correspondiente asociado con él.
Enteros: byte 8 bits complemento a dos
short 16 bits complemento a dos
int 32 bits complemento a dos
long 64 bits complemento a dos
Por ejemplo: 21 077 0xDC00
Reales en coma flotante: float 32 bits IEEE 754
double 64 bits IEEE 754
Por ejemplo: 3.14 2e12 3.1E12
Booleanos: true
false
Caracteres: Por ejemplo: a \t \u???? [????] es un número unicode
Cadenas: Por ejemplo: "Esto es una cadena literal"

Arrays
Se pueden declarar en Java arrays de cualquier tipo:
char s[];
int iArray[];
Incluso se pueden construir arrays de arrays: int tabla[][] = new int[4][5];
Los límites de los arrays se comprueban en tiempo de ejecución para evitar desbordamientos y la corrupción de memoria.
En Java un array es realmente un objeto, porque tiene redefinido el operador []. Tiene una función miembro: length. Se puede utilizar este método para conocer la longitud de cualquier array. int a[][] = new int[10][3];
a.length; /* 10 */
a[0].length; /* 3 */
Para crear un array en Java hay dos métodos básicos. Crear un array vacío: int lista[] = new int[50];
o se puede crear ya el array con sus valores iniciales: String nombres[] = {
"Juan","Pepe","Pedro","Maria"
};
Esto que es equivalente a: String nombres[];
nombres = new String[4];
nombres[0] = new String( "Juan" );
nombres[1] = new String( "Pepe" );
nombres[2] = new String( "Pedro" );
nombres[3] = new String( "Maria" );
No se pueden crear arrays estáticos en tiempo de compilación: int lista[50]; // generará un error en tiempo de compilación
Tampoco se puede rellenar un array sin declarar el tamaño con el operador new: int lista[];
for( int i=0; i < name="operadores">
OperadoresLos operadores de Java son muy parecidos en estilo y funcionamiento a los de C. En la siguiente tabla aparecen los operadores que se utilizan en Java, por orden de precedencia:
. [] ()
++ --
! ~ instanceof
* / %
+ -
<< >> >>>
< > <= >= == !=
& ^
&&
? :
= op= (*= /= %= += -= etc.) ,
Los operadores numéricos se comportan como esperamos: int + int = int
Los operadores relacionales devuelven un valor booleano.
Para las cadenas, se pueden utilizar los operadores relacionales para comparaciones además de + y += para la concatenación: String nombre = "nombre" + "Apellido";
El operador = siempre hace copias de objetos, marcando los antiguos para borrarlos, y ya se encargará el garbage collector de devolver al sistema la memoria ocupada por el objeto eliminado.

Separadores
Sólo hay un par de secuencias con otros caracteres que pueden aparecer en el código Java; son los separadores simples, que van a definir la forma y función del código. Los separadores admitidos en Java son:
() - paréntesis. Para contener listas de parámetros en la definición y llamada a métodos. También se utiliza para definir precedencia en expresiones, contener expresiones para control de flujo y rodear las conversiones de tipo.
{} - llaves. Para contener los valores de matrices inicializadas automáticamente. También se utiliza para definir un bloque de código, para clases, métodos y ámbitos locales.
[] - corchetes. Para declarar tipos matriz. También se utiliza cuando se referencian valores de matriz.
; - punto y coma. Separa sentencias.
, - coma. Separa identificadores consecutivos en una declaración de variables. También se utiliza para encadenar sentencias dentro de una sentencia for.
. - punto. Para separar nombres de paquete de subpaquetes y clases. También se utiliza para separar una variable o método de una variable de referencia.
Muchas de las sentencias de control del flujo del programa se han tomado del C:

Sentencias de Salto

if/else if( Boolean ) {
sentencias;
}
else {
sentencias;
}
switch switch( expr1 ) {
case expr2:
sentencias;
break;
case expr3:
sentencias;
break;
default:
sentencias;
break;
}

Sentencias de Bucle

Bucles for for( expr1 inicio; expr2 test; expr3 incremento ) {
sentencias;
}
El siguiente trocito de código Java que dibuja varias líneas en pantalla alternando sus colores entre rojo, azul y verde. Este fragmento sería parte de una función Java (método): int contador;
for( contador=1; contador <= 12; contador++ ) { switch( contador % 3 ) { case 0: setColor( Color.red ); break; case 1: setColor( Color.blue ); break; case 2: setColor( Color.green ); break; } g.drawLine( 10,contador*10,80,contador*10 ); } También se soporta el operador coma (,) en los bucles for for( a=0,b=0; a <>Bucles while while( Boolean ) {
sentencias;
}
Bucles do/while do {
sentencias;
}while( Boolean );

Excepciones

try-catch-throw try {
sentencias;
} catch( Exception ) {
sentencias;
}
Java implementa excepciones para facilitar la construcción de código robusto. Cuando ocurre un error en un programa, el código que encuentra el error lanza una excepción, que se puede capturar y recuperarse de ella. Java proporciona muchas excepciones predefinidas.

Control General del Flujo

break [etiqueta]
continue [etiqueta]
return expr;
etiqueta: sentencia;
En caso de que nos encontremos con bucles anidados, se permite el uso de etiquetas para poder salirse de ellos, por ejemplo: uno: for( )
{
dos: for( )
{
continue; // seguiría en el bucle interno
continue uno; // seguiría en el bucle principal
break uno; // se saldría del bucle principal
}
}
En el código de una función siempre hay que ser consecuentes con la declaración que se haya hecho de ella. Por ejemplo, si se declara una función para que devuelva un entero, es imprescindible que se coloque un return final para salir de esa función, independientemente de que haya otros en medio del código que también provoquen la salida de la función. En caso de no hacerlo se generará un Warning, y el código Java no se puede compilar con Warnings. int func()
{
if( a == 0 )
return 1;
return 0; // es imprescindible porque se retorna un entero
}

CLASES
Las clases son lo más simple de Java. Todo en Java forma parte de una clase, es una clase o describe como funciona una clase. El conocimiento de las clases es fundamental para poder entender los programas Java.
Todas las acciones de los programas Java se colocan dentro del bloque de una clase o un objeto. Todos los métodos se definen dentro del bloque de la clase, Java no soporta funciones o variables globales. Esto puede despistar a los programadores de C++, que pueden definir métodos fuera del bloque de la clase, pero esta posibilidad es más un intento de no separarse mucho y ser compatible con C, que un buen diseño orientado a objetos. Así pues, el esqueleto de cualquier aplicación Java se basa en la definición de una clase.
Todos los datos básicos, como los enteros, se deben declarar en las clases antes de hacer uso de ellos. En C la unidad fundamental son los ficheros con código fuente, en Java son las clases. De hecho son pocas las sentencias que se pueden colocar fuera del bloque de una clase. La palabra clave import (equivalente al #include) puede colocarse al principio de un fichero, fuera del bloque de la clase. Sin embargo, el compilador reemplazará esa sentencia con el contenido del fichero que se indique, que consistirá, como es de suponer, en más clases.

Tipos de Clases

Hasta ahora sólo se ha utilizado la palabra clave public para calificar el nombre de las clases que hemos visto, pero hay tres modificadores más. Los tipos de clases que podemos definir son:
abstract
Una clase abstract tiene al menos un método abstracto. Una clase abstracta no se instancia, sino que se utiliza como clase base para la herencia.
final
Una clase final se declara como la clase que termina una cadena de herencia. No se puede heredar de una clase final. Por ejemplo, la clase Math es una clase final.
public
Las clases public son accesibles desde otras clases, bien sea directamente o por herencia. Son accesibles dentro del mismo paquete en el que se han declarado. Para acceder desde otros paquetes, primero tienen que ser importadas.
synchronizable
Este modificador especifica que todos los métodos definidos en la clase son sincronizados, es decir, que no se puede acceder al mismo tiempo a ellos desde distintos threads; el sistema se encarga de colocar los flags necesarios para evitarlo. Este mecanismo hace que desde threads diferentes se puedan modificar las mismas variables sin que haya problemas de que se sobreescriban.
VARIABLES Y METODOS DE INSTANCIA
Una clase en Java puede contener variables y métodos. Las variables pueden ser tipos primitivos como int, char, etc. Los métodos son funciones.
Por ejemplo, en el siguiente trozo de código podemos observarlo: public MiClase {
int i;
public MiClase() {
i = 10;
}
public void Suma_a_i( int j ) {
i = i + j;
}
}
La clase MiClase contiene una variable (i) y dos métodos, MiClase que es el constructor de la clase y Suma_a_i( int j ).

Ambito de una variable

Los bloques de sentencias compuestas en Java se delimitan con dos llaves. Las variables de Java sólo son válidas desde el punto donde están declaradas hasta el final de la sentencia compuesta que la engloba. Se pueden anidar estas sentencias compuestas, y cada una puede contener su propio conjunto de declaraciones de variables locales. Sin embargo, no se puede declarar una variable con el mismo nombre que una de ámbito exterior.
El siguiente ejemplo intenta declarar dos variables separadas con el mismo nombre. En C y C++ son distintas, porque están declaradas dentro de ámbitos diferentes. En Java, esto es ilegal.Class Ambito {
int i = 1; // ámbito exterior
{ // crea un nuevo ámbito
int i = 2; // error de compilación
}
}

Métodos y Constructores

Los métodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. El constructor es un tipo específico de método que siempre tiene el mismo nombre que la clase.
Cuando se declara una clase en Java, se pueden declarar uno o más constructores opcionales que realizan la inicialización cuando se instancia (se crea una ocurrencia) un objeto de dicha clase.
Utilizando el código de ejemplo anterior, cuando se crea una nueva instancia de MiClase, se crean (instancian) todos los métodos y variables, y se llama al constructor de la clase: MiClase mc;
mc = new MiClase();
La palabra clave new se usa para crear una instancia de la clase. Antes de ser instanciada con new no consume memoria, simplemente es una declaración de tipo. Después de ser instanciado un nuevo objeto mc, el valor de i en el objeto mc será igual a 10. Se puede referenciar la variable (de instancia) i con el nombre del objeto: mc.i++; // incrementa la instancia de i de mc
Al tener mc todas las variables y métodos de MiClase, se puede usar la primera sintaxis para llamar al método Suma_a_i() utilizando el nuevo nombre de clase mc:
mc.Suma_a_i( 10 );
y ahora la variable mc.i vale 21.

Finalizadores

Java no utiliza destructores (al contrario que C++) ya que tiene una forma de recoger automáticamente todos los objetos que se salen del alcance. No obstante proporciona un método que, cuando se especifique en el código de la clase, el reciclador de memoria (garbage collector) llamará: // Cierra el canal cuando este objeto es reciclado
protected void finalize() {
close();
}
ALCANCE DE OBJETOS Y RECICLADO DE MEMORIA
Los objetos tienen un tiempo de vida y consumen recursos durante el mismo. Cuando un objeto no se va a utilizar más, debería liberar el espacio que ocupaba en la memoria de forma que las aplicaciones no la agoten (especialmente las grandes).
En Java, la recolección y liberación de memoria es responsabilidad de un thread llamado automatic garbage collector (recolector automático de basura). Este thread monitoriza el alcance de los objetos y marca los objetos que se han salido de alcance. Veamos un ejemplo: String s; // no se ha asignado todavia
s = new String( "abc" ); // memoria asignada
s = "def"; // se ha asignado nueva memoria
// (nuevo objeto)
Más adelante veremos en detalle la clase String, pero una breve descripción de lo que hace esto es; crear un objeto String y rellenarlo con los caracteres "abc" y crear otro (nuevo) String y colocarle los caracteres "def".
En esencia se crean dos objetos: Objeto String "abc"
Objeto String "def"
Al final de la tercera sentencia, el primer objeto creado de nombre s que contiene "abc" se ha salido de alcance. No hay forma de acceder a él. Ahora se tiene un nuevo objeto llamado s y contiene "def". Es marcado y eliminado en la siguiente iteración del thread reciclador de memoria.