TEMA 2 CONTENIDOS PDF
Document Details
Uploaded by RapturousTroll
Tags
Summary
This document is about Java programming. It provides an overview of Java, including its features, structure, and applications. Specifically, it covers the Java programming language. The document appears to be in the form of lecture notes or a course outline.
Full Transcript
TÉCNICO SUPERIOR EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA MÓDULO PROGRAMACIÓN TEMA 2 LENGUAJE PROGRMACIÓN JAVA SIN ARRAYS 1. El lenguaje de ÍNDICE programación Java 2. Estructura de un programa 1. El lenguaje de programación Java....
TÉCNICO SUPERIOR EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA MÓDULO PROGRAMACIÓN TEMA 2 LENGUAJE PROGRMACIÓN JAVA SIN ARRAYS 1. El lenguaje de ÍNDICE programación Java 2. Estructura de un programa 1. El lenguaje de programación Java. Java es un lenguaje sencillo de aprender, con una sintaxis parecida a la de C++, pero en la que se han eliminado elementos complicados y que pueden originar errores. Java es orientado a objetos, con lo que elimina muchas preocupaciones al programador y permite la utilización de gran cantidad de bibliotecas ya definidas, evitando reescribir código que ya existe. Es un lenguaje de programación creado para satisfacer nuevas necesidades que los lenguajes existentes hasta el momento no eran capaces de solventar. Una de las principales virtudes de Java es su independencia del hardware, ya que el código que se genera es válido para cualquier plataforma. Este código será ejecutado sobre una máquina virtual denominada Maquina Virtual Java ( JVM – Java Virtual Machine), que interpretará el código convirtiéndolo a código específico de la plataforma que lo soporta. De este modo el programa se escribe una única vez y puede hacerse funcionar en cualquier lugar. Lema del lenguaje: “Write once, run everywhere”. Programación 3 1. El lenguaje de programación Java. Antes de que apareciera Java, el lenguaje C era uno de los más extendidos por su versatilidad. Pero cuando los programas escritos en C aumentaban de volumen, su manejo comenzaba a complicarse. Mediante las técnicas de programación estructurada y programación modular se conseguían reducir estas complicaciones, pero no era suficiente. Las características principales de lenguaje Java se resumen a continuación: El código generado por el compilador Java es independiente de la arquitectura. Está totalmente orientado a objetos. Su sintaxis es similar a C y C++. Es distribuido, preparado para aplicaciones TCP/IP Dispone de un amplio conjunto de bibliotecas. Es robusto, realizando comprobaciones del código en tiempo de compilación y de ejecución. La seguridad está garantizada, ya que las aplicaciones Java no acceden a zonas delicadas de memoria o del sistema. Programación 4 1. El lenguaje de programación Java. ELEMENTOS DE LA PLATAFORMA DE DESARROLLO JAVA 2 Código fuente Java ,- - - - ~---T ' _ _ __ Herramientas (compllador y otras) ~---. ---~ 1 Bytecodes ---- - 1 1 1 !':_ _ _ _,. ___ 1 --------------~-------------- Sistema de ejecución (runtime) Máquina Virtual Java Sistema operativo (Linux, Windows, Solaris, Macos,...) Hardware Programación 5 1. El lenguaje de programación Java. Actualmente hay tres ediciones de la plataforma Java 2: J2SE: Entorno de Sun relacionado con la creación de aplicaciones y applets en lenguaje Java. J2EE: Pensada para la creación de aplicaciones Java empresariales y del lado del servidor. Es la versión más grande de Java. Esta edición contiene toda la Standard Edition y mucho más. J2ME: Pensada para la creación de aplicaciones Java para dispositivos móviles. Programación 6 1. El lenguaje de programación Java. JAVA STANDARD EDITION (JAVA SE) Si tú quieres comenzar a desarrollar aplicaciones con Java es obligatorio que instales y comiences con esta edición, pues será esta, la que te provee de una base solida del lenguaje, tocando temas como Java Virtual Machine, Java Runtime Environment, Java Development Kit, y API de Java. Expliquemos cada uno de ellos. JAVA VIRTUAL MACHINE Java es un lenguaje compilado. Cuando nosotros compilamos nuestras aplicaciones el resultado no es un ejecutable con código binario, no, el resultado es un ByteCode. Bytecode es un conjunto altamente optimizado de instrucciones diseñadas para ser ejecutadas por el sistema de tiempo de ejecución Java, también conocido como Java Virtual Machine o JVM. La JVM será la encargada de tomar las instrucciones ByteCode y traducirlas a código maquina, unos y ceros, algo que la computadora ya puede comprender y ejecutar. La JVM es sumamente importante en Java, ya que esta es la que se encargada que la aplicación se escriba una sola vez y se ejecute la n cantidad de veces en diferentes dispositivos (WORA, o "write once, run anywhere"). Cada sistema operativo en particular (Windows, Linux, Mac OS, etc.) necesita su propia implementación de la JVM, de lo contrario no sería posible ejecutar aplicaciones Java. Programación 7 1. El lenguaje de programación Java. JAVA RUNTIME ENVIRONMENT (JRE) Java Runtime Environment (JRE) es un conjunto de herramientas que proporcionan un entorno en donde las aplicaciones Java pueden ser ejecutadas. Cuando un usuario desea ejecutar un programa Java, este debe elegir el entorno que se adecue a sus necesidades (arquitectura y sistema operativo de la computadora). Java es sumamente cuidadoso con las versiones. Si nosotros desarrollamos nuestras aplicaciones con x versión, muy probablemente no sean compatibles con una versión y. JAVA DEVELOPMENT KIT (JDK) El Java Development Kit (JDK) es una extensión de JRE. Junto con los archivos y herramientas proporcionados por JRE, el JDK incluye compiladores y herramientas (como JavaDoc y Java Debugger) para crear programas Java. Por esta razón, cuando uno quiere desarrollar una aplicación Java, necesitan instalar un JDK. API DE JAVA Java SE provee a una amplia biblioteca de clases las cuales están pensadas para agilizar nuestro proceso de desarrollo, son clases las cuales ya vienen con el lenguaje. A esta biblioteca de clases se le denomina la API de JAVA. Y esta puede ser consultada de forma gratuita en la documentación oficial de Java. Programación 8 1. El lenguaje de programación Java. En Java, los datos y el código (funciones o métodos) se combinan en entidades llamadas objetos. El objeto tendrá un comportamiento (su código interno) y un estado (los datos). Los objetos permiten la reutilización del código y pueden considerarse, en sí mismos, como piezas reutilizables en múltiples proyectos distintos. Esta característica permite reducir el tiempo de desarrollo de software. Al emplear los conceptos de la Programación Orientada a Objetos (POO), Java incorpora las tres características propias de este paradigma: encapsulación, herencia y polimorfismo. Los patrones o tipos de objetos se denominan clases y los objetos que utilizan estos patrones o pertenecen a dichos tipos, se identifican con el nombre de instancias. Estos conceptos se verán más adelante en sucesivas unidades. Programación 9 1. El lenguaje de programación Java. Existen dos características que distinguen a Java de otros lenguajes, como son la independencia de la plataforma y la posibilidad de trabajar en red o, mejor, la posibilidad de crear aplicaciones que trabajan en red. Estas características las vamos a explicar a continuación: Independencia: Los programas escritos en Java pueden ser ejecutados en cualquier tipo de hardware. El código fuente es compilado, generándose el código conocido como Java Bytecode (instrucciones máquina simplificadas que son específicas de la plataforma Java), el bytecode será interpretado y ejecutado en la Máquina Virtual Java (MVJ o JVM – Java Virtual Machine) que es un programa escrito en código nativo de la plataforma destino entendible por el hardware. Con esto se evita tener que realizar un programa diferente para cada CPU o plataforma. Por tanto, la parte que realmente es dependiente del sistema es la Máquina Virtual Java, así como las librerías o bibliotecas básicas que permiten acceder directamente al hardware de la máquina. Trabajo en red: Esta capacidad del lenguaje ofrece múltiples posibilidades para la comunicación vía TCP/IP. Para poder hacerlo existen librerías que permiten el acceso y la interacción con protocolos como http, ftp, etc., facilitando al programador las tareas del tratamiento de la información a través de redes. Programación 10 1. El lenguaje de programación Java. Junto a las características diferenciadoras del lenguaje Java relacionadas con la independencia y el trabajo en red, han de destacarse dos virtudes que hacen a este lenguaje uno de los más extendidos entre la comunidad de programadores: su seguridad y su simplicidad. Seguridad: En primer lugar, los posibles accesos a zonas de memoria “sensibles” que en otros lenguajes como C y C++ podían suponer peligros importantes, se han eliminado en Java. En segundo lugar, el código Java es comprobado y verificado para evitar que determinadas secciones del código produzcan efectos no deseados. Los test que se aplican garantizan que las operaciones, operandos, conversiones, uso de clases y demás acciones son seguras. Y en tercer lugar, Java no permite la apertura de ficheros en la máquina local, tampoco permite ejecutar ninguna aplicación nativa de una plataforma e impide que se utilicen otros ordenadores como puente, es decir, nadie puede utilizar nuestra máquina para hacer peticiones o realizar operaciones con otra. En definitiva, podemos afirmar que Java es un lenguaje seguro. Programación 11 1. El lenguaje de programación Java. Simplicidad: Aunque Java es tan potente como C o C++, es bastante más sencillo. Posee una curva de aprendizaje muy rápida y, para alguien que comienza a programar en este lenguaje, le resulta relativamente fácil comenzar a escribir aplicaciones interesantes. Si has programado alguna vez en C o C++ encontrarás que Java te pone las cosas más fáciles, ya que se han eliminado: la aritmética de punteros, los registros, la definición de tipos, la gestión de memoria, etc. Con esta simplificación se reduce bastante la posibilidad de cometer errores comunes en los programas. Un programador experimentado en C o C++ puede cambiar a este lenguaje rápidamente y obtener resultados en muy poco espacio de tiempo. Muy relacionado con la simplicidad que aporta Java está la incorporación de un elemento muy útil como es el Recolector de Basura (Garbage collector). Permite al programador liberarse de la gestión de la memoria y hace que ciertos bloques de memoria puedan reaprovecharse, disminuyendo el número de huecos libres (fragmentación de memoria). Cuando realicemos programas, crearemos objetos, haremos que éstos interaccionen, etc. Todas estas operaciones requieren de uso de memoria del sistema, pero la gestión de ésta será realizada de manera transparente al programador. Todo lo contrario que ocurría en otros lenguajes. Podremos crear tantos objetos como solicitemos, pero nunca tendremos que destruirlos. El entorno de Java borrará los objetos cuando determine que no se van a utilizar más. Este proceso es conocido como recolección de basura. Programación 12 1. El lenguaje de programación Java. Un programa escrito en Java no es directamente ejecutable, es necesario que el código fuente sea interpretado por la Maquina Virtual Java. ¿Cuáles son los pasos que se siguen desde que se genera el código fuente hasta que se ejecuta? A continuación se detallan cada uno de ellos. Programación 13 1. El lenguaje de programación Java. Una vez escrito el código fuente (archivos con extensión.Java), éste es precompilado generándose los códigos de bytes, Bytecodes o Java Bytecodes (archivos con extensión.class) que serán interpretados directamente por la Maquina Virtual Java y traducidos a código nativo de la plataforma sobre la que se esté ejecutando el programa. Bytecode: Son un conjunto de instrucciones en lenguaje máquina que no son específicas a ningún procesador o sistema de cómputo. Un intérprete de código de bytes ( bytecodes ) para una plataforma específica será quien los ejecute. A estos intérpretes también se les conoce como Máquinas Virtuales Java o intérpretes Java de tiempo de ejecución. Programación 14 1. El lenguaje de programación Java. En el proceso de precompilación, existe un verificador de códigos de bytes que se asegurará de que se cumplen las siguientes condiciones: El código satisface las especificaciones de la Máquina Virtual Java. No existe amenaza contra la integridad del sistema. No se producen desbordamientos de memoria. Los parámetros y sus tipos son adecuados. No existen conversiones de datos no permitidas. Para que un bytecode pueda ser ejecutado en cualquier plataforma, es imprescindible que dicha plataforma cuente con el intérprete adecuado, es decir, la máquina virtual específica para esa plataforma. En general, la Máquina Virtual Java es un programa de reducido tamaño y gratuito para todos los sistemas operativos. Programación 15 1. El lenguaje de programación Java. La versatilidad del lenguaje de programación Java permite al programador crear distintos tipos de aplicaciones. A continuación, describiremos las características más relevantes de cada uno de ellos: Aplicaciones de consola Aplicaciones gráficas Applets Servlets Midlets Programación 16 6. Tipos de aplicaciones Java Aplicaciones de consola Son programas independientes al igual que los creados con los lenguajes tradicionales. Se componen como mínimo de un archivo.class que debe contar necesariamente con el método main. No necesitan un navegador web y se ejecutan cuando invocamos el comando Java para iniciar la Máquina Virtual de Java (JVM). De no encontrarse el método main la aplicación no podrá ejecutarse. Las aplicaciones de consola leen y escriben hacia y desde la entrada y salida estándar, sin ninguna interfaz gráfica de usuario Programación 17 1. El lenguaje de programación Java. Aplicaciones gráficas Aquellas que utilizan las clases con capacidades gráficas, como Swing que es la biblioteca para la interfaz gráfica de usuario avanzada de la plataforma Java SE. Incluyen las instrucciones import, que indican al compilador de Java que las clases del paquete Javax.swing se incluyan en la compilación. Programación 18 1. El lenguaje de programación Java. Applets Son programas incrustados en otras aplicaciones, normalmente una página web que se muestra en un navegador. Cuando el navegador carga una web que contiene un applet, éste se descarga en el navegador web y comienza a ejecutarse. Esto nos permite crear programas que cualquier usuario puede ejecutar con tan solo cargar la página web en su navegador. Se pueden descargar de Internet y se observan en un navegador. Los applets se descargan junto con una página HTML desde un servidor web y se ejecutan en la máquina cliente. No tienen acceso a partes sensibles (por ejemplo: no pueden escribir archivos), a menos que uno mismo le dé los permisos necesarios en el sistema. No tienen un método principal. Son multiplataforma y pueden ejecutarse en cualquier navegador que soporte Java. Programación 19 1. El lenguaje de programación Java. Servlets Son componentes de la parte del servidor de Java EE, encargados de generar respuestas a las peticiones recibidas de los clientes. Los servlets, al contrario de los applets, son programas que están pensados para trabajar en el lado del servidor y desarrollar aplicaciones Web que interactúen con los clientes. Programación 20 1. El lenguaje de programación Java. Midlets Son aplicaciones creadas en Java para su ejecución en sistemas de propósito simple o dispositivos móviles. Los juegos Java creados para teléfonos móviles son midlets. Son programas creados para dispositivos embebidos (se dedican a una sola actividad), más específicamente para la máquina virtual Java MicroEdition (Java ME). Generalmente son juegos y aplicaciones que se ejecutan en teléfonos móviles. Programación 21 1. El lenguaje de programación Java. Existen en el mercado multitud de entornos de desarrollo para el lenguaje Java, los hay de libre distribución, de pago, para principiantes, para profesionales, que consumen más recursos, que son más ligeros, más amigables, más complejos que otros, etc. Entre los que son gratuitos o de libre distribución tenemos: NetBeans Eclipse BlueJ jGRASP Jcreator LE Entre los que son propietarios o de pago tenemos: IntelliJ IDEA Jbuilder Jcreator JDeveloper Programación 22 2. Estructura de un programa En el gráfico al que puedes acceder a continuación, se presenta la estructura general de un programa realizado en un lenguaje orientado a objetos como es Java. Programación 23 2. Estructura de un programa Vamos a analizar cada uno de los elementos que aparecen en dicho gráfico: public class Clase_Principal: Todos los programas han de incluir una clase como esta. Es una clase general en la que se incluyen todos los demás elementos del programa. Entre otras cosas, contiene el método o función main() que representa al programa principal, desde el que se llevará a cabo la ejecución del programa. Esta clase puede contener a su vez otras clases del usuario, pero sólo una puede ser public. El nombre del fichero.Java que contiene el código fuente de nuestro programa, coincidirá con el nombre de la clase que estamos describiendo en estas líneas. Ten en cuenta que Java distingue entre mayúsculas y minúsculas. Si le das a la clase principal el nombre PrimerPrograma, el archivo.Java tendrá como identificador PrimerPrograma.Java, que es totalmente diferente a primerprograma.Java. Además, para Java los elementos PrimerPrograma y primerprograma serían considerados dos clases diferentes dentro del código fuente.ad Programación 24 2. Estructura de un programa public static void main (String[] args): Es el método que representa al programa principal, en él se podrán incluir las instrucciones que estimemos oportunas para la ejecución del programa. Desde él se podrá hacer uso del resto de clases creadas. Todos los programas Java tienen un método main. Comentarios: los comentarios se suelen incluir en el código fuente para realizar aclaraciones, anotaciones o cualquier otra indicación que el programador estime oportuna. Estos comentarios pueden introducirse de dos formas, con // y con. Con la primera forma estaríamos estableciendo una única línea completa de comentario y, con la segunda, con. Bloques de código: son conjuntos de instrucciones que se marcan mediante la apertura y cierre de llaves { }. El código así marcado es considerado interno al bloque. Punto y coma: aunque en el ejemplo no hemos incluido ninguna línea de código que termine con punto y coma, hay que hacer hincapié en que cada línea de código ha de terminar con punto y coma (;). En caso de no hacerlo, tendremos errores sintácticos. Programación 25 Variables e Identificadores Un programa maneja datos para hacer cálculos, presentarlos en informes por pantalla o impresora, solicitarlos al usuario, guardarlos en disco, etc. Para poder manejar esos datos, el programa los guarda en variables. Una variable es una zona en la memoria del computador con un valor que puede ser almacenado para ser usado más tarde en el programa. Las variables vienen determinadas por: Un nombre, que permite al programa acceder al valor que contiene en memoria. Debe ser un identificador válido. Un tipo de dato, que especifica qué clase de información guarda la variable en esa zona de memoria Un rango de valores que puede admitir dicha variable. Al nombre que le damos a la variable se le llama identificador. Los identificadores permiten nombrar los elementos que se están manejando en un programa y como ya hemos visto, hay ciertos aspectos que debemos tener en cuenta al utilizarlos. Programación 26 Convenios y reglas para nombrar variables A la hora de nombrar un identificador existen una serie de normas de estilo de uso generalizado que, no siendo obligatorias, se usan en la mayor parte del código Java. Estas reglas para la nomenclatura de variables son las siguientes: Java distingue las mayúsculas de las minúsculas. Por ejemplo, Alumno y alumno son variables diferentes. No se suelen utilizar identificadores que comiencen con «$» o «_», además el símbolo del dólar, por convenio, no se utiliza nunca. No se puede utilizar el valor booleano (true o false) ni el valor nulo (null). Los identificadores deben ser lo más descriptivos posibles. Es mejor usar palabras completas en vez de abreviaturas crípticas. Así nuestro código será más fácil de leer y comprender. En muchos casos también hará que nuestro código se autodocumente. Por ejemplo, si tenemos que darle el nombre a una variable que almacena los datos de un cliente sería recomendable que la misma se llamara algo así como FicheroClientes o ManejadorCliente, y no algo poco descriptivo como Cl33. Programación 27 Convenios y reglas para nombrar variables Además de estas restricciones, en la siguiente tabla puedes ver otras convenciones, que no siendo obligatorias, sí son recomendables a la hora de crear identificadores en Java. Convenciones sobre identificadores en Java Identificador Convención Ejemplo Comienza por letra minúscula, y si tienen más de una Nombre de variable palabra se colocan juntas y el resto comenzando por numAlumnos, suma mayúsculas. En letras mayúsculas, separando las palabras con el Nombre de constante guión bajo, por convenio el guión bajo no se utiliza en TAM_MAX, PI ningún otro sitio. Nombre de una clase Comienza por letra mayúscula. String, MiTipo Comienza con letra minúscula y sigue las mismas Nombre de método modificaValor, obtieneValor reglas que las variables Programación 28 Tipos de variables En un programa nos podemos encontrar distintos tipos de variables. Las diferencias entre una variable y otra dependerán de varios factores, por ejemplo, el tipo de datos que representan, si su valor cambia o no a lo largo de todo el programa, o cuál es el papel que llevan a cabo en el programa. De esta forma, el lenguaje de programación Java define los siguientes tipos de variables: 1. Variables de tipos primitivos y variables referencia, según el tipo de información que contengan. En función de a qué grupo pertenezca la variable, tipos primitivos o tipos referenciados, podrá tomar unos valores u otros, y se podrán definir sobre ella unas operaciones u otras. Programación 29 Tipos de variables 2. Variables y constantes, dependiendo de si su valor cambia o no durante la ejecución del programa. La definición de cada tipo sería: a) Variables. Sirven para almacenar los datos durante la ejecución del programa, pueden estar formadas por cualquier tipo de dato primitivo o referencia. Su valor puede cambiar varias veces a lo largo de todo el programa. b) Constantes o variables finales. Son aquellas variables cuyo valor no cambia a lo largo de todo el programa. 3. Variables miembro y variables locales, en función del lugar donde aparezcan en el programa. La definición concreta sería: a) Variables miembro. Son las variables que se crean dentro de una clase, fuera de cualquier método. Pueden ser de tipos primitivos o referencias, variables o constantes. b) Variables locales. Son las variables que se crean y usan dentro de un método o, en general, dentro de cualquier bloque de código. La variable deja de existir cuando la ejecución del bloque de código o el método finaliza. Al igual que las variables miembro, las variables locales también pueden ser de tipos primitivos o referencias. Programación 30 Tipos de variables El siguiente ejemplo muestra el código para la creación de varios tipos de variables. Como ya veremos en apartados posteriores, las variables necesitan declararse, a veces dando un valor y otras con un valor por defecto. Este programa crea una clase que contiene las siguientes variables: 1. Variable constante llamada PI: esta variable por haberla declarado como constante no podrá cambiar su valor a lo largo de todo el programa. 2. Variable miembro llamada x: Esta variable pertenece a la clase ejemplovariables. La variable x puede almacenar valores del tipo primitivo int. El valor de esta variable podrá ser modificado en el programa, normalmente por medio de algún otro método que se cree en la clase. 3. Variable local llamada valorantiguo: Esta variable es local porque está creada dentro del método obtenerX(). Sólo se podrá acceder a ella dentro del método donde está creada, ya que fuera de él no existe. En apartados posteriores veremos como darle más funcionalidad a nuestros programas, mostrar algún resultado por pantalla, hacer operaciones, etc. Por el momento, si ejecutas el ejemplo anterior simplemente mostrará el mensaje “GENERACIÓN CORRECTA”, indicando que todo ha ido bien y el programa ha finalizado. Programación 31 Tipos de variables - / 1r 1r "" Aplicación ejemplo de tipos de variables "" @author FMA ""/ public class ejemp1ova:riab1es { :final double PI =3. 14159265 36; // PI es una constante int x; // x es una variable miembro // de clase ejemplovariables int obtenerX ( int x ) { / / x es un parámetro int valorantiguo = this. x; // valorant.iguo es una variabe local return valo r a n t iguo; // el método main comienza J.a ejecución de la aplicación public static void ma:ín (S tring[] args) { // aquí iría el código de nuestra aplicación } // :fin del método main } // :fin de la clase ejemplovariables Programación 32 Palabras reservadas Las palabras reservadas, a veces también llamadas palabras clave o keywords , son secuencias de caracteres formadas con letras ASCII cuyo uso se reserva al lenguaje y, por tanto, no pueden utilizarse para crear identificadores. Las palabras reservadas en Java son: Programación 33 Caracteres de escape Existen unos caracteres especiales que se representan utilizando secuencias de escape: Normalmente, los objetos en Java deben ser creados con la orden new. Sin embargo, los literales String no lo necesitan ya que son objetos que se crean implícitamente por Java. Los literales de cadenas de caracteres se indican entre comillas dobles. En el ejemplo anterior “El primer programa” es un literal de tipo cadena de caracteres. Al construir una cadena de caracteres se puede incluir cualquier carácter Unicode excepto un carácter de retorno de carro, por ejemplo en la siguiente instrucción utilizamos la secuencia de escape \’’ para escribir dobles comillas dentro del mensaje: Programación 34 Comentarios Los comentarios son muy importantes a la hora de describir qué hace un determinado programa. A lo largo de la unidad los hemos utilizado para documentar los ejemplos y mejorar la comprensión del código. Para lograr ese objetivo, es normal que cada programa comience con unas líneas de comentario que indiquen, al menos, una breve descripción del programa, el autor del mismo y la última fecha en que se ha modificado. Todos los lenguajes de programación disponen de alguna forma de introducir comentarios en el código. En el caso de Java, nos podemos encontrar los siguientes tipos de comentarios: Comentarios de una sola línea. Utilizaremos el delimitador // para introducir comentarios de sólo una línea. Comentarios de múltiples líneas. Para introducir este tipo de comentarios, utilizaremos una barra inclinada y un asterisco () al final del mismo. Comentarios Javadoc. Utilizaremos los delimitadores. Al igual que con los comentarios tradicionales, el texto entre estos delimitadores será ignorado por el compilador. Este tipo de comentarios se emplean para generar documentación automática del programa. A través del programa javadoc, incluido en JavaSE , se recogen todos estos comentarios y se llevan a un documento en formato.html. Programación 35 Salida por pantalla La salida por pantalla en Java se hace con el objeto System.out. Este objeto es una instancia de la clase PrintStream del paquete java.lang. Si miramos la API de PrintStream obtendremos la variedad de métodos para mostrar datos por pantalla, algunos de estos son: void print(String s): Escribe una cadena de texto. void println(String x): Escribe una cadena de texto y termina la línea. En la orden print y println, cuando queramos escribir un mensaje y el valor de una variable debemos utilizar el operador de concatenación de cadenas (+), por ejemplo: Escribe el mensaje de "Bienvenido, Carlos", si el valor de la variable nombre es Carlos. Programación 36 Tipos de Datos En los lenguajes fuertemente tipados, a todo dato (constante, variable o expresión) le corresponde un tipo que es conocido antes de que se ejecute el programa. El tipo limita el valor de la variable o expresión, las operaciones que se pueden hacer sobre esos valores, y el significado de esas operaciones. Esto es así porque un tipo de dato no es más que una especificación de los valores que son válidos para esa variable , y de las operaciones que se pueden realizar con ellos. Debido a que el tipo de dato de una variable se conoce durante la revisión que hace el compilador para detectar errores, o sea en tiempo de compilación, esta labor es mucho más fácil, ya que no hay que esperar a que se ejecute el programa para saber qué valores va a contener esa variable. Programación 37 Tipos de Datos Ahora no es el momento de entrar en detalle sobre la conversión de tipos, pero sí debemos conocer con exactitud de qué tipos de datos dispone el lenguaje Java. Ya hemos visto que las variables, según la información que contienen, se pueden dividir en variables de tipos primitivos y variables referencia. Pero ¿qué es un tipo de dato primitivo? ¿Y un tipo referencia? Esto es lo que vamos a ver a continuación. Los tipos de datos en Java se dividen principalmente en dos categorías: Tipos de datos sencillos o primitivos. Representan valores simples que vienen predefinidos en el lenguaje; contienen valores únicos, como por ejemplo un carácter o un número. Tipos de datos referencia. Se definen con un nombre o referencia (puntero) que contiene la dirección en memoria de un valor o grupo de valores. Dentro de este tipo tenemos por ejemplo los vectores o arrays, que son una serie de elementos del mismo tipo, o las clases, que son los modelos o plantillas a partir de los cuales se crean los objetos. En el siguiente apartado vamos a ver con detalle los diferentes tipos de datos que se engloban dentro de estas dos categorías. Programación 38 Tipos de Datos: Datos Primitivos Los tipos primitivos son aquéllos datos sencillos que constituyen los tipos de información más habituales: números, caracteres y valores lógicos o booleanos. Al contrario que en otros lenguajes de programación orientados a objetos, en Java no son objetos. Una de las mayores ventajas de tratar con tipos primitivos en lugar de con objetos, es que el compilador de Java puede optimizar mejor su uso. Otra importante característica, es que cada uno de los tipos primitivos tiene idéntico tamaño y comportamiento en todas las versiones de Java y para cualquier tipo de ordenador. Esto quiere decir que no debemos preocuparnos de cómo se representarán los datos en distintas plataformas, y asegura la portabilidad de los programas, a diferencia de lo que ocurre con otros lenguajes. Por ejemplo, el tipo int siempre se representará con 32 bits, con signo, y en el formato de representación complemento a 2, en cualquier plataforma que soporte Java. Programación 39 Tipos de Datos Primitivos Los tipos primitivos son aquéllos datos sencillos que constituyen los tipos de información más habituales: números, caracteres y valores lógicos o booleanos. Al contrario que en otros lenguajes de programación orientados a objetos, en Java no son objetos. Una de las mayores ventajas de tratar con tipos primitivos en lugar de con objetos, es que el compilador de Java puede optimizar mejor su uso. Otra importante característica, es que cada uno de los tipos primitivos tiene idéntico tamaño y comportamiento en todas las versiones de Java y para cualquier tipo de ordenador. Esto quiere decir que no debemos preocuparnos de cómo se representarán los datos en distintas plataformas, y asegura la portabilidad de los programas, a diferencia de lo que ocurre con otros lenguajes. Programación 40 Tipos de Datos Primitivos Programación 41 Declaración e inicialización Llegados a este punto cabe preguntarnos ¿cómo se crean las variables en un programa? ¿Qué debo hacer antes de usar una variable en mi programa? Pues bien, como podrás imaginar, debemos crear las variables antes de poder utilizarlas en nuestros programas, indicando qué nombre va a tener y qué tipo de información va a almacenar, en definitiva, debemos declarar la variable. Las variables se pueden declarar en cualquier bloque de código, dentro de llaves. Y lo hacemos indicando su identificador y el tipo de dato, separadas por comas si vamos a declarar varias a la vez, por ejemplo: De esta forma, estamos declarando numAlumnos como una variable de tipo int, y otras dos variables radio e importe de tipo double. Aunque no es obligatorio, hemos aprovechado la declaración de las variables para inicializarlas a los valores 15, 3.14 y 102.95 respectivamente. Programación 42 Declaración e inicialización Si la variable va a permanecer inalterable a lo largo del programa, la declararemos como constante, utilizando la palabra reservada final de la siguiente forma: Programación 43 Declaración e inicialización En ocasiones puede que al declarar una variable no le demos valor, ¿qué crees que ocurre en estos casos? Pues que el compilador le asigna un valor por defecto, aunque depende del tipo de variable que se trate: Las variables miembro sí se inicializan automáticamente, si no les damos un valor. Cuando son de tipo numérico, se inicializan por defecto a 0, si don de tipo carácter, se inicializan al carácter null (\0), si son de tipo boolean se les asigna el valor por defecto false, y si son tipo referenciado se inicializan a null. Las variables locales no se inicializan automáticamente. Debemos asignarles nosotros un valor antes de ser usadas, ya que si el compilador detecta que la variable se usa antes de que se le asigne un valor, produce un error. Por ejemplo en este caso: Programación 44 Declaración e inicialización Y también en este otro, ya que se intenta usar una variable local que podría no haberse inicializado: En el ejemplo anterior la instrucción if hace que si se cumple la condición que hay entre paréntesis (cualquiera que indiquemos), entonces el programa asignará el valor 5 a la variable p; sino se cumple la condición, p quedará sin inicializar. Pero si p no se ha inicializado, no tendría valor para asignárselo a q. Por ello, el compilador detecta ese posible problema y produce un error del tipo “La variable podría no haber sido inicializada”, independientemente de si se cumple o no la condición del if. Programación 45 Tipos de Datos Referenciados A partir de los ocho tipos datos primitivos, se pueden construir otros tipos de datos. Estos tipos de datos se llaman tipos referenciados o referencias, porque se utilizan para almacenar la dirección de los datos en la memoria del ordenador. En la primera instrucción declaramos una lista de números del mismo tipo, en este caso, enteros. En la segunda instrucción estamos declarando la variable u objeto cuentaCliente como una referencia de tipo Cuenta. Como comentábamos al principio del apartado de Tipos de datos, cualquier aplicación de hoy en día necesita no perder de vista una cierta cantidad de datos. Cuando el conjunto de datos utilizado tiene características similares se suelen agrupar en estructuras para facilitar el acceso a los mismos, son los llamados datos estructurados. Son datos estructurados los arrays, listas, árboles, etc. Pueden estar en la memoria del programa en ejecución, guardados en el disco como ficheros, o almacenados en una base de datos. Programación 46 Tipos de Datos Referenciados Además de los ocho tipos de datos primitivos que ya hemos descrito, Java proporciona un tratamiento especial a los textos o cadenas de caracteres mediante el tipo de dato String. Java crea automáticamente un nuevo objeto de tipo String cuando se encuentra una cadena de caracteres encerrada entre comillas dobles. En realidad se trata de objetos, y por tanto son tipos referenciados, pero se pueden utilizar de forma sencilla como si fueran variables de tipos primitivos: Programación 47 Ejemplo Programación 48 Tipos Enumerados Los tipos de datos enumerados son una forma de declarar una variable con un conjunto restringido de valores. Por ejemplo, los días de la semana, las estaciones del año, los meses, etc. Es como si definiéramos nuestro propio tipo de datos. La forma de declararlos es con la palabra reservada enum, seguida del nombre de la variable y la lista de valores que puede tomar entre llaves. A los valores que se colocan dentro de las llaves se les considera como constantes, van separados por comas y deben ser valores únicos. La lista de valores se coloca entre llaves, porque un tipo de datos enum no es otra cosa que una especie de clase en Java, y todas las clases llevan su contenido entre llaves. Al considerar Java este tipo de datos como si de una clase se tratara, no sólo podemos definir los valores de un tipo enumerado, sino que también podemos definir operaciones a realizar con él y otro tipo de elementos, lo que hace que este tipo de dato sea más versátil y potente que en otros lenguajes de programación. Programación 49 Tipos Enumerados En el siguiente ejemplo puedes comprobar el uso que se hace de los tipos de datos enumerados. Tenemos una variable Dias que almacena los días de la semana. Para acceder a cada elemento del tipo enumerado se utiliza el nombre de la variable seguido de un punto y el valor en la lista. Más tarde veremos que podemos añadir métodos y campos o variables en la declaración del tipo enumerado, ya que como hemos comentado un tipo enumerado en Java tiene el mismo tratamiento que las clases. Programación 50 Tipos Enumerados En este ejemplo hemos utilizado el método System.out.print. Como podrás comprobar si lo ejecutas, la instrucción número 18 escribe el texto que tiene entre comillas pero no salta a la siguiente línea, por lo que el la instrucción número 19 escribe justo a continuación. Sin embargo, también podemos escribir varias líneas usando una única sentencia. Así lo hacemos en la instrucción número 20, la cual imprime como resultado tres líneas de texto. Para ello hemos utilizado un carácter especial, llamado carácter escape (\). Este carácter sirve para darle ciertas órdenes al compilador, en lugar de que salga impreso en pantalla. Después del carácter de escape viene otro carácter que indica la orden a realizar, juntos reciben el nombre de secuencia de escape. La secuencia de escape \n recibe el nombre de carácter de nueva línea. Cada vez que el compilador se encuentra en un texto ese carácter, el resultado es que mueve el cursor al principio de la línea siguiente. En el próximo apartado vamos a ver algunas de las secuencias de escape más utilizadas. Programación 51 Operadores y expresiones Los operadores llevan a cabo operaciones sobre un conjunto de datos u operandos, representados por literales y/o identificadores. Los operadores pueden ser unarios, binarios o terciarios, según el número de operandos que utilicen sean uno, dos o tres, respectivamente. Los operadores actúan sobre los tipos de datos primitivos y devuelven también un tipo de dato primitivo. Los operadores se combinan con los literales y/o identificadores para formar expresiones. Una expresión es una combinación de operadores y operandos que se evalúa produciendo un único resultado de un tipo determinado. El resultado de una expresión puede ser usado como parte de otra expresión o en una sentencia o instrucción. Las expresiones, combinadas con algunas palabras reservadas o por sí mismas, forman las llamadas sentencias o instrucciones. Por ejemplo, pensemos en la siguiente expresión Java: Con esta expresión estamos utilizando un operador aritmético para sumarle una cantidad a la variable i, pero es necesario indicar al programa qué hacer con el resultado de dicha expresión: Que lo almacene en una variable llamada suma, por ejemplo. En este caso ya tendríamos una acción completa, es decir, una sentencia o instrucción. Programación 52 Operadores aritméticos Los operadores aritméticos son aquellos operados que combinados con los operandos forman expresiones matemáticas o aritméticas. El resultado de este tipo de expresiones depende de los operandos que utilicen: Programación 53 Operadores aritméticos El resultado de este tipo de expresiones depende de los operandos que utilicen: Otro tipo de operadores aritméticos son los operadores unarios incrementales y decrementales. Producen un resultado del mismo tipo que el operando, y podemos utilizarlos con notación prefija, si el operador aparece antes que el operando, o notación postfija, si el operador aparece después del operando. En la tabla puedes un ejemplo de de utilización de cada operador incremental. Programación 54 Operadores aritméticos Programación 55 Operadores de asignación El principal operador de esta categoría es el operador asignación “=”, que permite al programa darle un valor a una variable, y ya hemos utilizado varias ocasiones en esta unidad. Además de este operador, Java proporciona otros operadores de asignación combinados con los operadores aritméticos, que permiten abreviar o reducir ciertas expresiones. Por ejemplo, el operador “+=” suma el valor de la expresión a la derecha del operador con el valor de la variable que hay a la izquierda del operador, y almacena el resultado en dicha variable. En la siguiente tabla se muestran todos los operadores de asignación compuestos que podemos utilizar en Java Programación 56 Operadores de asignación Programación 57 Operadores de relación Los operadores relacionales se utilizan para comparar datos de tipo primitivo (numérico, carácter y booleano). El resultado se utilizará en otras expresiones o sentencias, que ejecutarán una acción u otra en función de si se cumple o no la relación. Estas expresiones en Java dan siempre como resultado un valor booleano true o false. En la tabla siguiente aparecen los operadores relacionales en Java. Programación 58 Operadores de relación Programación 59 Operador condicional El operador condicional “? :” sirve para evaluar una condición y devolver un resultado en función de si es verdadera o falsa dicha condición. Es el único operador ternario de Java, y como tal, necesita tres operandos para formar una expresión. Programación 60 Operadores lógicos Los operadores lógicos realizan operaciones sobre valores booleanos, o resultados de expresiones relacionales, dando como resultado un valor booleano. Los operadores lógicos los podemos ver en la tabla que se muestra a continuación. Existen ciertos casos en los que el segundo operando de una expresión lógica no se evalúa para ahorrar tiempo de ejecución, porque con el primero ya es suficiente para saber cuál va a ser el resultado de la expresión. Programación 61 Operadores lógicos Programación 62 Precedencia de operadores El orden de precedencia de los operadores determina la secuencia en que deben realizarse las operaciones cuando en una expresión intervienen operadores de distinto tipo. Las reglas de precedencia de operadores que utiliza Java coinciden con las reglas de las expresiones del álgebra convencional. Por ejemplo: La multiplicación, división y resto de una operación se evalúan primero. Si dentro de la misma expresión tengo varias operaciones de este tipo, empezaré evaluándolas de izquierda a derecha. La suma y la resta se aplican después que las anteriores. De la misma forma, si dentro de la misma expresión tengo varias sumas y restas empezaré evaluándolas de izquierda a derecha. Programación 63 Conversión de tipo Imagina que queremos dividir un número entre otro ¿tendrá decimales el resultado de esa división? Podemos pensar que siempre que el denominador no sea divisible entre el divisor, tendremos un resultado con decimales, pero no es así. Si el denominador y el divisor son variables de tipo entero, el resultado será entero y no tendrá decimales. Para que el resultado tenga decimales necesitaremos hacer una conversión de tipo. Las conversiones de tipo se realizan para hacer que el resultado de una expresión sea del tipo que nosotros deseamos, en el ejemplo anterior para hacer que el resultado de la división sea de tipo real y, por ende, tenga decimales. Existen dos tipos de conversiones: Conversiones automáticas. Cuando a una variable de un tipo se le asigna un valor de otro tipo numérico con menos bits para su representación, se realiza una conversión automática. En ese caso, el valor se dice que es promocionado al tipo más grande (el de la variable), para poder hacer la asignación. También se realizan conversiones automáticas en las operaciones aritméticas, cuando estamos utilizando valores de distinto tipo, el valor más pequeño se promociona al valor más grande, ya que el tipo mayor siempre podrá representar cualquier valor del tipo menor (por ejemplo, de int a long o de float a double). Conversiones explícitas. Cuando hacemos una conversión de un tipo con más bits a un tipo con menos bits. En estos casos debemos indicar que queremos hacer la conversión de manera expresa, ya que se puede producir una pérdida de datos y hemos de ser conscientes de ello. Este tipo de conversiones se realiza con el operador cast. El operador cast es un operador unario que se forma colocando delante del valor a convertir el tipo de dato entre paréntesis. Tiene la misma precedencia que el resto de operadores unarios y se asocia de izquierda a derecha. Programación 64 Conversión de tipo Debemos tener en cuenta que un valor numérico nunca puede ser asignado a una variable de un tipo menor en rango, si no es con una conversión explícita. Por ejemplo: En el ejemplo anterior vemos un caso típico de error de tipos, ya que estamos intentando asignarle a b el valor de a, siendo b de un tipo más pequeño. Lo correcto es promocionar a al tipo de datos byte, y entonces asignarle su valor a la variable b. Programación 65 Estructuras de control Es conveniente recordar lo siguiente: ¿Cómo se escribe un programa sencillo? Si queremos que un programa sencillo realice instrucciones o sentencias para obtener un determinado resultado, es necesario colocar éstas una detrás de la otra, exactamente en el orden en que deben ejecutarse. ¿Podrían colocarse todas las sentencias una detrás de otra, separadas por puntos y comas en una misma línea? Claro que sí, pero no es muy recomendable. Cada sentencia debe estar escrita en una línea, de esta manera tu código será mucho más legible y la localización de errores en tus programas será más sencilla y rápida. De hecho, cuando se utilizan herramientas de programación, los errores suelen asociarse a un número o números de línea. ¿Puede una misma sentencia ocupar varias líneas en el programa? Sí. Existen sentencias que, por su tamaño, pueden generar varias líneas. Pero siempre finalizarán con un punto y coma. ¿En Java todas las sentencias se terminan con punto y coma? Efectivamente. Si detrás de una sentencia ha de venir otra, pondremos un punto y coma. Escribiendo la siguiente sentencia en una nueva línea. Pero en algunas ocasiones, sobre todo cuando utilizamos estructuras de control de flujo, detrás de la cabecera de una estructura de este tipo no debe colocarse punto y coma. No te preocupes, lo entenderás cuando analicemos cada una de ellas. ¿Qué es la sentencia nula en Java? La sentencia nula es una línea que no contiene ninguna instrucción y en la que sólo existe un punto y coma. Como su nombre indica, esta sentencia no hace nada. ¿Qué es un bloque de sentencias? Es un conjunto de sentencias que se encierra entre llaves y que se ejecutaría como si fuera una única orden. Sirve para agrupar sentencias y para clarificar el código. Los bloques de sentencias son utilizados en Java en la práctica totalidad de estructuras de control de flujo, clases, métodos, etc. La siguiente tabla muestra dos formas de construir un bloque de sentencias. ¿En un bloque de sentencias, éstas deben estar colocadas con un orden exacto? En ciertos casos sí, aunque si al final de su ejecución se obtiene el mismo resultado, podrían ocupar diferentes posiciones en nuestro programa. Programación 66 Estructuras de control Programación 67 Estructuras de selección El funcionamiento es sencillo, la sentencia de decisión será evaluada y ésta devolverá un valor (verdadero o falso), en función del valor devuelto se ejecutará una secuencia de instrucciones u otra. Las estructuras de selección se dividen en: 1. Estructuras de selección simples o estructura if. 2. Estructuras de selección compuestas o estructura if-else. 3. Estructuras de selección basadas en el operador condicional. 4. Estructuras de selección múltiples o estructura switch. Programación 68 Estructura if / if-else La estructura if es una estructura de selección o estructura condicional, en la que se evalúa una expresión lógica o sentencia de decisión y en función del resultado, se ejecuta una sentencia o un bloque de éstas. La estructura if puede presentarse de las siguientes formas: Funcionamiento: Si la evaluación de la expresión-lógica ofrece un resultado verdadero, se ejecuta la sentencia1 o bien el bloque de sentencias asociado. Si el resultado de dicha evaluación es falso, no se ejecutará ninguna instrucción asociada a la estructura condicional. Programación 69 Estructura switch ¿Qué podemos hacer cuando nuestro programa debe elegir entre más de dos alternativas?, una posible solución podría ser emplear estructuras if anidadas, aunque no siempre esta solución es la más eficiente. Cuando estamos ante estas situaciones podemos utilizar la estructura de selección múltiple switch. En la siguiente tabla se muestra tanto la sintaxis, como el funcionamiento de esta estructura. Programación 70 Estructura switch Funcionamiento: Las diferentes alternativas de esta estructura estarán precedidas de la cláusula case que se ejecutará cuando el valor asociado al case coincida con el valor obtenido al evaluar la expresión del switch. En las cláusulas case, no pueden indicarse expresiones condicionales, rangos de valores o listas de valores. (otros lenguajes de programación sí lo permiten). Habrá que asociar una cláusula case a cada uno de los valores que deban ser tenidos en cuenta. La cláusula default será utilizada para indicar un caso por defecto, las sentencias asociadas a la cláusula default se ejecutarán si ninguno de los valores indicados en las cláusulas case coincide con el resultado de la evaluación de la expresión de la estructura switch. La cláusula default puede no existir, y por tanto, si ningún case ha sido activado finalizaría el switch. Cada cláusula case puede llevar asociadas una o varias sentencias, sin necesidad de delimitar dichos bloques por medio de llaves. En el momento en el que el resultado de la evaluación de la expresión coincide con alguno de los valores asociados a las cláusulas case, se ejecutarán todas las instrucciones asociadas hasta la aparición de una sentencia break de ruptura. (la sentencia break se analizará en epígrafes posteriores) Programación 71 Estructuras de repetición Nuestros programas ya son capaces de operar con datos de tipo entero y real, pero aún hemos de aprender un conjunto de estructuras que nos permita repetir una secuencia de instrucciones determinada. La función de estas estructuras es repetir la ejecución de una serie de instrucciones teniendo en cuenta una condición. A este tipo de estructuras se las denomina estructuras de repetición, estructuras repetitivas, bucles o estructuras iterativas. En Java existen cuatro clases de bucles: Bucle for (repite para) Bucle for/in (repite para cada) Bucle While (repite mientras) Bucle Do While (repite hasta) Programación 72 Estructuras de repetición Los bucles for y for/in se consideran bucles controlados por contador. Por el contrario, los bucles while y do...while se consideran bucles controlados por sucesos. La utilización de unos bucles u otros para solucionar un problema dependerá en gran medida de las siguientes preguntas: ¿Sabemos a priori cuántas veces necesitamos repetir un conjunto de instrucciones? ¿Sabemos si hemos de repetir un conjunto de instrucciones si una condición satisface un conjunto de valores? ¿Sabemos hasta cuándo debemos estar repitiendo un conjunto de instrucciones? ¿Sabemos si hemos de estar repitiendo un conjunto de instrucciones mientras se cumpla una condición? Programación 73 Estructuras de repetición for Hemos indicado anteriormente que el bucle for es un bucle controlado por contador. Este tipo de bucle tiene las siguientes características: Se ejecuta un número determinado de veces. Utiliza una variable contadora que controla las iteraciones del bucle. En general, existen tres operaciones que se llevan a cabo en este tipo de bucles: Se inicializa la variable contadora. Se evalúa el valor de la variable contador, por medio de una comparación de su valor con el número de iteraciones especificado. Se modifica o actualiza el valor del contador a través de incrementos o decrementos de éste, en cada una de las iteraciones. Programación 74 Estructuras de repetición for Donde inicialización es una expresión en la que se inicializa una variable de control, que será la encargada de controlar el final del bucle. Donde condición es una expresión que evaluará la variable de control. Mientras la condición sea verdadera, el cuerpo del bucle estará repitiéndose. Cuando la condición no se cumpla, terminará la ejecución del bucle. Donde iteración indica la manera en la que la variable de control va cambiando en cada iteración del bucle. Podrá ser mediante incremento o decremento, y no solo de uno en uno. Programación 75 Estructuras de repetición while La característica fundamental de este tipo de estructura repetitiva estriba en ser útil en aquellos casos en los que las instrucciones que forman el cuerpo del bucle podría ser necesario ejecutarlas o no. Es decir, en el bucle while siempre se evaluará la condición que lo controla, y si dicha condición es cierta, el cuerpo del bucle se ejecutará una vez, y se seguirá ejecutando mientras la condición sea cierta. Es imprescindible que en el interior del bucle while se realice alguna acción que modifique la condición que controla la ejecución del mismo, en caso contrario estaríamos ante un bucle infinito. Programación 76 Estructuras de repetición while Funcionamiento: Mientras la condición sea cierta, el bucle se repetirá, ejecutando la/s instrucción/es de su interior. En el momento en el que la condición no se cumpla, el control del flujo del programa pasará a la siguiente instrucción que exista justo detrás del bucle while. La condición se evaluará siempre al principio, y podrá darse el caso de que las instrucciones contenidas en él no lleguen a ejecutarse nunca si no se satisface la condición de partida. Programación 77 Estructuras de repetición do-while La característica fundamental de este tipo de estructura repetitiva estriba en ser útil en aquellos casos en los que las instrucciones que forman el cuerpo del bucle necesitan ser ejecutadas, al menos, una vez y repetir su ejecución hasta que la condición sea verdadera. Por tanto, en esta estructura repetitiva siempre se ejecuta el cuerpo del bucle una primera vez. Es imprescindible que en el interior del bucle se realice alguna acción que modifique la condición que controla la ejecución del mismo, en caso contrario estaríamos ante un bucle infinito. Programación 78 Estructuras de salto En la gran mayoría de libros de programación y publicaciones de Internet, siempre se nos recomienda que prescindamos de sentencias de salto incondicional, es más, se desaconseja su uso por provocar una mala estructuración del código y un incremento en la dificultad para el mantenimiento de los mismos. Pero Java incorpora ciertas sentencias o estructuras de salto que es necesario conocer y que pueden sernos útiles en algunas partes de nuestros programas. Estas estructuras de salto corresponden a las sentencias break, continue, las etiquetas de salto y la sentencia return. Pasamos ahora a analizar su sintaxis y funcionamiento. Programación 79 Sentencias break y continue Se trata de dos instrucciones que permiten modificar el comportamiento de otras estructuras o sentencias de control, simplemente por el hecho de estar incluidas en algún punto de su secuencia de instrucciones. La sentencia break incidirá sobre las estructuras de control switch, while, for y do- while del siguiente modo: Si aparece una sentencia break dentro de la secuencia de instrucciones de cualquiera de las estructuras mencionadas anteriormente, dicha estructura terminará inmediatamente. Si aparece una sentencia break dentro de un bucle anidado sólo finalizará la sentencia de iteración más interna, el resto se ejecuta de forma normal. Es decir, que break sirve para romper el flujo de control de un bucle, aunque no se haya cumplido la condición del bucle. Si colocamos un break dentro del código de un bucle, cuando se alcance el break, automáticamente se saldrá del bucle pasando a ejecutarse la siguiente instrucción inmediatamente después de él. Programación 80 Sentencias break y continue La sentencia continue incidirá sobre las sentencias o estructuras de control while, for y do-while del siguiente modo: Si aparece una sentencia continue dentro de la secuencia de instrucciones de cualquiera de las sentencias anteriormente indicadas, dicha sentencia dará por terminada la iteración actual y se ejecuta una nueva iteración, evaluando de nuevo la expresión condicional del bucle. Si aparece en el interior de un bucle anidado solo afectará a la sentencia de iteración más interna, el resto se ejecutaría de forma normal. Es decir, la sentencia continue forzará a que se ejecute la siguiente iteración del bucle, sin tener en cuenta las instrucciones que pudiera haber después del continue, y hasta el final del código del bucle. Programación 81 1. El lenguaje de programación Java 2. Estructura de un programa 3. Programación en Java 4. Arrays (tablas)