PROG 02 Apuntes
PROG 02 Apuntes
PROG 02 Apuntes
1. Introduccin
Cada vez que usamos un ordenador, estamos ejecutando varias aplicaciones que nos permiten realizar ciertas tareas. Por ejemplo, en nuestro da a da, usamos el correo electrnico para enviar y recibir correos, o el navegador para consultar pginas en Internet; ambas actividades son ejemplos de programas que se ejecutan en un ordenador. Los programas de ordenador deben resolver un problema, para lo cual debemos utilizar de forma inteligente y lgica todos los elementos que nos ofrece el lenguaje. Por eso es importante elegir un lenguaje de programacin con el que nos sintamos cmodos porque lo dominemos suficientemente y, por supuesto, porque sepamos que no va a ofrecer limitaciones a la hora de desarrollar aplicaciones para diferentes plataformas. El lenguaje que vamos a utilizar en este mdulo es Java, multiplataforma, robusto y fiable. Un lenguaje que reduce la complejidad y se considera dentro de los lenguajes modernos orientados a objetos. Esta unidad nos vamos a adentrar en su sintaxis, vamos a conocer los tipos de datos con los que trabaja, las operaciones que tienen definidas cada uno de ellos, utilizando ejemplos sencillos que nos muestren la utilidad de todo lo aprendido. Para ello, vamos a tratar sobre cmo se almacenan y recuperan los datos de variables y cadenas en Java, y cmo se gestionan estos datos desde el punto de vista de la utilizacin de operadores. Trabajar con datos es fundamental en cualquier programa. Aunque ya hayas programado en este lenguaje, chale un vistazo al contenido de esta unidad, porque podrs repasar muchos conceptos.
PARA SABER MS
Ahora que vamos a empezar con la sintaxis de Java, quizs te interese tener a mano la documentacin que ofrece la pgina web de Oracle sobre Java SE. La plataforma Java SE est formada principalmente por dos productos: el JDK, que contiene los compiladores y depuradores necesarios para programar, y el JRE, que proporciona las libreras o bibliotecas y la JVM, entre otra serie de componentes. Puedes consultar informacin de la versin 6 de Java SE, en el siguiente enlace donde puedes encontrar toda la documentacin sobre esta tecnologa: Texto enlace: Documentacin de Oracle sobre Java SE. URL: http://download.oracle.com/javase/6/docs/index.html Ttulo: Enlace a la web de Oracle donde podrs ver informacin sobre la plataforma Java SE. Dentro de la documentacin de Oracle sobre Java SE se encuentra el libro The Java Language Specification. Este libro est escrito por los inventores del lenguaje, y constituye una referencia tcnica casi obligada sobre el mismo. Como mucha de la documentacin oficial de Java, se encuentra en ingls. El enlace directo es el siguiente: Texto enlace: The Java Language Specification. URL: http://java.sun.com/docs/books/jls/index.html Ttulo: Enlace a la web de Oracle donde podrs ver informacin sobre la especificacin del lenguaje Java.
RECOMENDACIN
Acostmbrate a leer y consultar la documentacin sobre la versin de Java que ests utilizando en tus programas. Eso te ayudar a saber todas las posibilidades que tiene el lenguaje, y si en un momento dado ests utilizando bien una determinada caracterstica.
Un programa maneja datos para hacer clculos, 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 ms 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 vlido. un tipo de dato, que especifica qu clase de informacin 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 estn manejando en un programa. Vamos a ver con ms detalle ciertos aspectos sobre los identificadores que debemos tener en cuenta.
PARA SABER MS
Bruce Eckel es el autor de los libros sobre Java y C++, dirigidos a programadores que desean aprender sobre estos lenguajes y sobre la programacin orientada a objetos. Este escritor ha tenido la buena costumbre de editar sus libros para que puedan descargarse gratis. As, podemos acceder de forma totalmente gratuita a la tercera edicin de su libro Thinking in Java en el siguiente enlace (en ingls): Texto enlace: Libro Thinking in Java URL: http://www.mindviewinc.com/Books/downloads.html Ttulo: Enlace a la pgina web de Bruce Eckel para descarga del libro Thinking in Java A partir de ahora es conveniente que utilices algn manual de apoyo para iniciarte a la programacin en Java. Te proponemos el de la serie de Libros Aprenda Informtica como si estuviera en primero, de la Escuela
Superior de Ingenieros Industriales de San Sebastin (Universidad de Navarra):
Texto enlace: Manual de apoyo sobre Java URL: http://mat21.etsii.upm.es/ayudainf/aprendainf/Java/Java2.pdf Ttulo: Enlace a un manual de apoyo sobre Java en espaol
2.1 Identificadores
Un identificador en Java es una secuencia ilimitada sin espacios de letras y dgitos Unicode, de forma que el primer smbolo de la secuencia debe ser una letra, un smbolo de subrayado (_) o el smbolo dlar ($). Por ejemplo, son vlidos los siguientes identificadores:
x5
NUM_MAX
numCuenta
En la definicin anterior decimos que un identificador es una secuencia ilimitada de caracteres Unicode. Pero qu es Unicode? Unicode es un cdigo de caracteres o sistema de codificacin, un alfabeto que recoge los caracteres de prcticamente todos los idiomas importantes del mundo. Las lneas de cdigo en los programas se escriben usando ese conjunto de caracteres Unicode. Esto quiere decir que en Java se pueden utilizar varios alfabetos como el Griego, rabe o Japons. De esta forma, los programas estn ms adaptados a los lenguajes e idiomas locales, por lo que son ms significativos y fciles de entender tanto para los programadores que escriben el cdigo, como para los que posteriormente lo tienen que interpretar, para introducir alguna nueva funcionalidad o modificacin en la aplicacin. El estndar Unicode originalmente utilizaba 16 bits, pudiendo representar hasta 65.536 caracteres distintos, que es el resultado de elevar dos a la potencia diecisis. Actualmente Unicode puede utilizar ms o menos bits, dependiendo del formato que se utilice: UTF-8, UTF-16 UTF32. A cada carcter le corresponde unvocamente un nmero entero perteneciente al intervalo de 0 a 2 elevado a n, siendo n el nmero de bits utilizados para representar los caracteres. Por ejemplo, la letra es el entero 164. Adems, el cdigo Unicode es compatible con el cdigo ASCII, ya que para los caracteres del cdigo ASCII, Unicode asigna como cdigo los mismos 8 bits, a los que les aade a la izquierda otros 8 bits todos a cero. La conversin de un carcter ASCII a Unicode es inmediata.
RECOMENDACIN
Una buena prctica de programacin es seleccionar nombres adecuados para las variables, eso ayuda a que el programa se autodocumente, y evita un nmero excesivo de comentarios para aclarar el cdigo.
PARA SABER MS
Enlace para acceder a la documentacin sobre las distintas versiones de Unicode en la pgina web oficial del estndar: Texto enlace: Documentacin sobre Unicode. URL: http://www.unicode.org/versions/ Ttulo: Enlace a la web del estndar Unicode donde podrs ver informacin sobre este sistema de codificacin
Identificador
Ttulo Tabla: Convenciones sobre identificadores en Java Resumen Tabla: Cuadro o tabla de cinco filas por tres columnas, de ttulo Convenciones sobre identificadores en Java, de modo que para cada tipo de identificador se indica la forma de nombrarlo y un ejemplo de uso. Debe ser leda en columnas de izquierda a derecha y de arriba abajo. Fin Resumen Tabla
AUTOEVALUACIN:
Texto de la pregunta: Un identificador es una secuencia de uno o ms smbolos Unicode que cumple las siguientes condiciones. Seala la afirmacin correcta. a) Todos los identificadores han de comenzar con una letra, el carcter subrayado (_) o el carcter dlar ($). . b) No puede incluir el carcter espacio en blanco c) Puede tener cualquier longitud, no hay tamao mximo. d) Todas las anteriores son correctas
Ttulo Tabla: Palabras clave en Java Resumen Tabla: Cuadro o tabla de diez filas por cinco columnas, de ttulo Palabras clave en Java, de modo que muestra un listado con todas las palabras clave del lenguaje Java. Debe ser leda en columnas de izquierda a derecha y de arriba abajo. Fin Resumen Tabla Hay palabras reservadas que no se utilizan en la actualidad, como es el caso de const y goto, que apenas se utilizan en la actual implementacin del lenguaje Java. Por otro lado, puede haber otro tipo de palabras o texto en el lenguaje que aunque no sean palabras reservadas tampoco se pueden utilizar para crear identificadores. Es el caso de true y false que, aunque puedan parecer palabras reservadas, porque no se pueden utilizar para ningn otro uso en un programa, tcnicamente son literales booleanos. Igualmente, null es considerado un literal, no una palabra reservada.
DESTACADO
Cuando tras haber consultado la documentacin de Java an no tengas seguridad de cmo funciona alguna de sus caractersticas, prubala en tu ordenador, y analiza cada mensaje de error que te d el compilador para corregirlo. Busca en foros de Internet errores similares para ayudarte de la experiencia de otros usuarios y usuarias. Normalmente, los editores y entornos integrados de desarrollo utilizan colores para diferenciar las palabras reservadas del resto del cdigo, los comentarios, las constantes y literales, etc. De esta forma se facilita la lectura del programa y la deteccin de errores de sintaxis. Dependiendo de la configuracin del entorno se utilizarn unos colores u otros, es posible que los que utilice tu versin de Netbeans se parezcan a stos: Las palabras reservadas en azul Los comentarios aparecen en gris Las variables dentro de una clase aparecen en verde Los errores en rojo Y el resto del cdigo aparece en negro Puede que te interese cambiar los colores que utiliza Netbeans para la sintaxis de tus programas, por ejemplo si quieres que los comentarios aparezcan en verde en lugar de en gris, o indicar que tienes la autora de los mismos, en lugar de que te aparezca el nombre de usuario del sistema operativo. En la siguiente presentacin puedes ver cmo se cambian los colores y las propiedades de usuario en un proyecto Netbeans: . Texto del enlace: Cambiar colores y propiedades de los proyectos en Netbeans. URL: PROG02_CONT_R08_CambioPropiedades.swf Ttulo: Acceder a presentacin para cambiar colores y propiedades en Netbeans. Resumen Presentacin: Se explica cmo cambiar los colores que el entorno de desarrollo Netbeans utiliza para distinguir los distintos elementos que hay en el cdigo de un programa. Tambin se indican los pasos para modificar la plantilla User.propierties introduciendo la lnea user=nombre_autor, de forma que aparezca el autor en las clases que se creen, en lugar del nombre del usuario que haya iniciado sesin en el sistema operativo. Fin Resumen Presentacin.
Variables. Sirven para almacenar los datos durante la ejecucin 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. Constantes o variables finales. Son aquellas variables cuyo valor no cambia a lo largo de todo el programa. c) Variables miembro y variables locales, en funcin del lugar donde aparezcan en el programa. La definicin concreta sera: Variables miembro. Son las variables que se crean dentro de una clase, fuera de cualquier mtodo. Pueden ser de tipos primitivos o referencias, variables o constantes. En un lenguaje puramente orientado a objetos como es Java, todo se basa en la utilizacin de objetos, los cuales se crean usando clases. En la siguiente unidad veremos los distintos tipos de variables miembro que se pueden usar. Variables locales. Son las variables que se crean y usan dentro de un mtodo o, en general, dentro de cualquier bloque de cdigo. La variable deja de existir cuando la ejecucin del bloque de cdigo o el mtodo finaliza. Al igual que las variables miembro, las variables locales tambin pueden ser de tipos primitivos o referencias.
AUTOEVALUACIN: Relaciona los tipos de variables con la caracterstica correspondiente, escribiendo el nmero asociado a la caracterstica en el hueco correspondiente. Las variables... Locales Miembro Relacin. [2] [3] 1. 2. Tienen la caracterstica de que Una vez inicializadas su valor nunca cambia Van dentro de un mtodo
Constantes [1] 3. Van dentro de una clase Retroalimentacin. Las variables locales, las constantes y las variables miembro tienen esas caractersticas que las definen dentro de una aplicacin Java. Ttulo: Ejercicio de relacionar. Resumen: Tabla para relacionar las variables de la primera columna con las caractersticas que las define, que
Texto del enlace: Ejemplo de tipos de variables URL: PROG02_CONT_R10_1_EjemploVariables.zip Ttulo: Acceder al fichero de ejemplo [zip 13 KB] En la siguiente presentacin puedes ver una demostracin de cmo hemos creado este primer programa: . Texto del enlace: Creacin de nuestro primer programa URL: PROG02_CONT_R11_CreacionPrimerPrograma.swf Ttulo: Acceder a presentacin de creacin del primer programa. Resumen Presentacin: Se explica cmo crear un proyecto en el entorno de desarrollo integrado y acceder a la estructura del mismo para comprobar que se ha creado. Una vez creado el proyecto e introducido el cdigo del programa, se procede a la ejecucin de la clase EjemploVariables, obteniendo como resultado un mensaje de Generacin correcta, que indica que el programa se ha ejecutado correctamente. Fin Resumen Presentacin.
En los lenguajes fuertemente tipados, a todo dato (constante, variable o expresin) le corresponde un tipo que es conocido antes de que se ejecute el programa. El tipo limita el valor de la variable o expresin, 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 ms que una especificacin de los valores que son vlidos 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 revisin que hace el compilador para detectar errores, o sea en tiempo de compilacin, esta labor es mucho ms fcil, ya que no hay que esperar a que se ejecute el programa para saber qu valores va a contener esa variable. Esto se consigue con un control muy exhaustivo de los tipos de datos que se utilizan, lo cual tiene sus ventajas e inconvenientes, por ejemplo cuando se intenta asignar un valor de un tipo, a una variable de otro tipo. Sin embargo, en Java, puede haber conversin entre ciertos tipos de datos, como veremos posteriormente. Ahora no es el momento de entrar en detalle sobre la conversin de tipos, pero s debemos conocer con exactitud de qu tipos de datos dispone el lenguaje Java. Ya hemos visto que las variables, segn la informacin 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 continuacin. Los tipos de datos en Java se dividen principalmente en dos categoras: Tipos de datos sencillos o primitivos. Representan valores simples que vienen predefinidos en el lenguaje; contienen valores nicos, como por ejemplo un carcter o un nmero. Tipos de datos referencia. Se definen con un nombre o referencia (puntero) que contiene la direccin 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 categoras.
AUTOEVALUACIN:
Texto de la pregunta: El tipado fuerte de datos supone que: a) A todo dato le corresponde un tipo que es conocido antes de que se ejecute el programa. b) El lenguaje hace un control muy exhaustivo de los tipos de datos. c) El compilador puede optimizar mejor el tratamiento de los tipos de datos. d) Todas las anteriores son correctas
SABAS QU?.
Java especifica el tamao y formato de todos los tipos de datos primitivos con independencia de la plataforma o sistema operativo donde se ejecute el programa, de forma que el programador no tiene que preocuparse sobre las dependencias del sistema, y no es necesario escribir versiones distintas del programa para cada plataforma.
DEBES CONOCER
En el siguiente enlace se muestran los tipos de datos primitivos en Java con el rango de valores que pueden tomar, el tamao que ocupan en memoria y sus valores por defecto. Texto del enlace: Tipos de Datos Primitivos en Java URL: http://blog.oscarscode.com/es/java-es/tipos-de-datos-primitivos-en-java/ Ttulo: Enlace a los Tipos de Datos Primitivos en Java
Hay una peculiaridad en los tipos de datos primitivos, y es que el tipo de dato char es considerado por el compilador como un tipo numrico, ya que los valores que guarda son el cdigo Unicode correspondiente al carcter que representa, no el carcter en s, por lo que puede operarse con caracteres como si se tratara de nmeros enteros. Por otra parte, a la hora de elegir el tipo de dato que vamos a utilizar qu criterio seguiremos para elegir un tipo de dato u otro? Pues deberemos tener en cuenta cmo es la informacin que hay que guardar, si es de tipo texto, numrico, y, adems, qu rango de valores puede alcanzar. En este sentido, hay veces que aunque queramos representar un nmero sin decimales, tendremos que utilizar datos de tipo real. Por ejemplo, el tipo de dato int no podra representar la poblacin mundial del planeta, ya que el valor mximo que alcanza es de 2.147.483.647, siendo ste el nmero mximo de combinaciones posibles con 32 bits, teniendo en cuenta que la representacin de los nmeros enteros en Java utiliza complemento a 2. Si queremos representar el valor correspondiente a la poblacin mundial del planeta, cerca de 7 mil millones de habitantes, tendramos que utilizar al menos un tipo de dato long, o si no tenemos problemas de espacio un tipo float. Sin embargo, los tipos reales tienen otro problema: la precisin. Vamos a ver ms sobre ellos en el siguiente apartado.
PARA SABER MS
Si quieres obtener informacin sobre cmo se lleva a cabo la representacin interna de nmeros enteros y sobre la aritmtica binaria, puedes consultar el siguiente enlace: Texto enlace: Aritmtica binaria. URL: http://platea.pntic.mec.es/~lgonzale/tic/binarios/aritmetica.html Ttulo: Enlace a una pgina de consulta sobre aritmtica binaria.
Entre cada dos nmeros reales cualesquiera, siempre tendremos infinitos nmeros reales, por lo que la mayora de ellos los representaremos de forma aproximada. Por ejemplo, en la aritmtica convencional, cuando dividimos 10 entre 3, el resultado es 3.3333333, con la secuencia de 3 repitindose infinitamente. En el ordenador slo podemos almacenar un nmero finito de bits, por lo que el almacenamiento de un nmero real ser siempre una aproximacin. Los nmeros reales se representan en coma flotante, que consiste en trasladar la coma decimal a la primera cifra significativa del valor, con objeto de poder representar el mximo de nmeros posible. Un nmero se expresa como: Valor=mantisa 2
exponente
En concreto, slo se almacena la mantisa y el exponente al que va elevada la base. Los bits empleados por la mantisa representan la precisin del nmero real, es decir, el nmero de cifras decimales significativas que puede tener el nmero real, mientras que los bits del exponente expresan la diferencia entre el mayor y el menor nmero representable, lo que viene a ser el intervalo de representacin. En Java las variables de tipo float se emplean para representar los nmeros en coma flotante de simple precisin de 32 bits, de los cuales 24 son para la mantisa y 8 para el exponente. La mantisa es un valor entre -1.0 y 1.0 y el exponente representa la potencia de 2 necesaria para obtener el valor que se quiere representar. Por su parte, las variables tipo double representan los nmeros en coma flotante de doble precisin de 64 bits, de los cuales 53 son para la mantisa y 11 para el exponente.
DESTACADO.
La mayora de los programadores en Java emplean el tipo double cuando trabajan con datos de tipo real, es una forma de asegurarse de que los errores cometidos por las sucesivas aproximaciones sean menores. De hecho, Java considera los valores en coma flotante como de tipo double por defecto. Con el objetivo de conseguir la mxima portabilidad de los programas, Java utiliza el estndar internacional IEEE 754 para la representacin interna de los nmeros en coma flotante, que es una forma de asegurarse de que el resultado de los clculos sea el mismo para diferentes plataformas.
PARA SABER MS
La siguiente pgina es la web oficial sobre el estndar internacional IEEE 754-2008 para representacin de nmeros en coma flotante (en ingls): Texto enlace: Notacin IEEE 754. URL: http://grouper.ieee.org/groups/754/ Ttulo: Enlace a la pgina sobre el estndar IEEE 754. AUTOEVALUACIN: Relaciona los tipos primitivos con los bits y rango de valores correspondientes, escribiendo el nmero asociado en el hueco correspondiente. Tipo short byte Relaci n. Caracterstica 1. Coma flotante de 64 bits, usando la representacin IEE754-2008 2. Entero de 32 bits, rango de valores de -2.147.483.648 ( 2
31
) a 2.147.483.647
15
) a +32.767 (
215 1 )
4. Coma flotante de 32 bits, usando la representacin IEEE 745-2008 5. Entero de 8 bits, rango de valores de -128 ( 2 ) a +127 (
7
27 1 )
6. Entero de 64 bits, rango de valores de -9.223.372.036.854.775.808 (-263) a 9.223.372.036.854.775.807 (+263-1) Ttulo: Ejercicio de relacionar. Resumen: Tabla para relacionar los tipos de datos primitivos de la primera columna con las caractersticas que
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 declaracin de las variables para inicializarlas a los valores 15, 3.14 y 102.95 respectivamente. 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:
final double PI = 3.1415926536;
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 automticamente, si no les damos un valor. Cuando son de tipo numrico, se inicializan por defecto a 0, si don de tipo carcter, se inicializan al carcter 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 automticamente. 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:
int p; int q = p; // error
Y tambin en este otro, ya que se intenta usar una variable local que podra no haberse inicializado:
int p; if (. . . ) p = 5 ; int q = p; // error
En el ejemplo anterior la instruccin if hace que si se cumple la condicin que hay entre parntesis (cualquiera que indiquemos), entonces el programa asignar el valor 5 a la variable p; sino se cumple la condicin, p quedar sin inicializar. Pero si p no se ha inicializado, no tendra valor para asignrselo a q. Por ello, el compilador detecta ese posible problema y produce un error del tipo La variable podra no haber sido inicializada, independientemente de si se cumple o no la condicin del if.
AUTOEVALUACIN:
Texto de la pregunta: De las siguientes, seala cul es la afirmacin correcta: a) La declaracin de una variable consiste bsicamente en indicar el tipo que va a tener seguido del nombre y su valor. b) Java no tiene restriccin de tipos. c) Todos los tipos tienen las mismas operaciones a realizar con ellos: suma, resta, multiplicacin, etc. d) Todas las anteriores son incorrectas
En la primera instruccin declaramos una lista de nmeros del mismo tipo, en este caso, enteros. En la segunda instruccin estamos declarando la variable u objeto cuentaCliente como una referencia de tipo Cuenta. Como comentbamos al principio del apartado de Tipos de datos, cualquier aplicacin de hoy en da necesita no perder de vista una cierta cantidad de datos. Cuando el conjunto de datos utilizado tiene caractersticas 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 ejecucin, guardados en el disco como ficheros, o almacenados en una base de datos. Adems 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 automticamente 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:
String mensaje; mensaje= "El primer programa";
Hemos visto qu son las variables, cmo se declaran y los tipos de datos que pueden adoptar. Anteriormente hemos visto un ejemplo de creacin de variables, en esta ocasin vamos a crear ms variables, pero de distintos tipos primitivos y los vamos a mostrar por pantalla. Los tipos referenciados los veremos en la siguiente unidad. Para mostrar por pantalla un mensaje utilizamos System.out, conocido como la salida estndar del programa. Este mtodo lo que hace es escribir un conjunto de caracteres a travs de la lnea de comandos. En Netbeans esta lnea de comandos aparece en la parte inferior de la pantalla. Podemos utilizar System.out.print o System.out.println. En el segundo caso lo que hace el mtodo es que justo despus de escribir el mensaje, sita el cursor al principio de la lnea siguiente. El texto en color gris que aparece entre caracteres // son comentarios que permiten documentar el cdigo, pero no son tenidos en cuenta por el compilador y, por tanto, no afectan a la ejecucin del programa.
Texto del enlace: Ejemplo de Tipos de Datos en Java URL: PROG02_CONT_R18_1_EjemploTipos.zip Ttulo: Descargar cdigo de tipos de datos en java [zip 13 KB]
En el siguiente ejemplo puedes comprobar el uso que se hace de los tipos de datos enumerados. Tenemos una variable Dias que almacena los das 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. Ms tarde veremos que podemos aadir mtodos y campos o variables en la declaracin del tipo enumerado, ya que como hemos comentado un tipo enumerado en Java tiene el mismo tratamiento que las clases.
Texto del enlace: Tipos de Datos Enumerados en Java URL: PROG02_CONT_R20_1_EjemploEnumerados.zip Ttulo: Acceso al cdigo del ejemplo [pdf 14 KB] En este ejemplo hemos utilizado el mtodo System.out.print. Como podrs comprobar si lo ejecutas, la instruccin nmero 18 escribe el texto que tiene entre comillas pero no salta a la siguiente lnea, por lo que el la instruccin nmero 19 escribe justo a continuacin. Sin embargo, tambin podemos escribir varias lneas usando una nica sentencia. As lo hacemos en la instruccin nmero 20, la cual imprime como resultado tres lneas de texto. Para ello hemos utilizado un carcter especial, llamado carcter escape (\). Este carcter sirve para darle ciertas rdenes al compilador, en lugar de que salga impreso en pantalla. Despus del carcter de escape viene otro carcter que indica la orden a realizar, juntos reciben el nombre de secuencia de escape. La secuencia de escape \n recibe el nombre de carcter de nueva lnea. Cada vez que el compilador se encuentra en un texto ese carcter, el resultado es que mueve el cursor al principio de la lnea siguiente. En el prximo apartado vamos a ver algunas de las secuencias de escape ms utilizadas.
DESTACADO.
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 implcitamente 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 carcter Unicode excepto un carcter de retorno de carro, por ejemplo en la siguiente instruccin utilizamos la secuencia de escape \ para escribir dobles comillas dentro del mensaje:
String texto = "Juan dijo: \"Hoy hace un da fantstico\"";
En el ejemplo anterior de tipos enumerados ya estbamos utilizando secuencias de escape, para introducir un salto de lnea en una cadena de caracteres, utilizando el carcter especial \n.
5. Operadores y expresiones.
CASO Mara y Juan tienen definidas las variables y tipos de datos a utilizar en la aplicacin. Es el momento de ponerse a realizar los clculos que permitan manipular esos datos, sumar, restar, multiplicar, dividir y mucho ms. En definitiva se trata de llevar los conocimientos matemticos al terreno de la programacin, ver cmo se pueden hacer operaciones aritmticas, lgicas o de comparacin en el lenguaje Java. Tambin necesitarn algn operador que permita evaluar una condicin y decidir las acciones a realizar en cada caso. Es importante conocer bien cmo el lenguaje evala esas expresiones, en definitiva, cul es la precedencia que tiene cada operador.
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, segn el nmero de operandos que utilicen sean uno, dos o tres, respectivamente. Los operadores actan sobre los tipos de datos primitivos y devuelven tambin un tipo de dato primitivo. Los operadores se combinan con los literales y/o identificadores para formar expresiones. Una expresin es una combinacin de operadores y operandos que se evala produciendo un nico resultado de un tipo determinado. El resultado de una expresin puede ser usado como parte de otra expresin o en una sentencia o instruccin. Las expresiones, combinadas con algunas palabras reservadas o por s mismas, forman las llamadas sentencias o instrucciones. Por ejemplo, pensemos en la siguiente expresin Java: i + 1 Con esta expresin estamos utilizando un operador aritmtico para sumarle una cantidad a la variable i, pero es necesario indicar al programa qu hacer con el resultado de dicha expresin: suma = i + 1; Que lo almacene en una variable llamada suma, por ejemplo. En este caso ya tendramos una accin completa, es decir, una sentencia o instruccin. Ms ejemplos de sentencias o instrucciones los tenemos en las declaraciones de variables, vistas en apartados anteriores, o en las estructuras bsicas del lenguaje como sentencias condicionales o bucles, que veremos en unidades posteriores. Como curiosidad comentar que las expresiones de asignacin, al poder ser usadas como parte de otras asignaciones u operaciones, son consideradas tanto expresiones en s mismas como sentencias.
Operador Operacin Java Expresin Java Resultado Operador unario de cambio de signo -10 -10 Adicin 1.2 + 9.3 10.5 + Sustraccin 312.5 12.3 300.2 Multiplicacin 1.7 * 1.2 1.02 * Divisin (entera o real) 0.5 / 0.2 2.5 / Resto de la divisin entera 25 % 3 1 % Ttulo Tabla: Operadores aritmticos bsicos Resumen Tabla: Cuadro o tabla de siete filas por cuatro columnas, de ttulo Operadores aritmticos bsicos, de modo que para cada tipo de operador se indica la operacin a que corresponde, un ejemplo de uso y el resultado del ejemplo. Debe ser leda en columnas de izquierda a derecha y de arriba abajo. Fin Resumen Tabla El resultado de este tipo de expresiones depende de los operandos que utilicen: Tipo de los operandos Resultado Un operando de tipo long y ninguno real (float o double) long int Ningn operando de tipo long ni real (float o double) double Al menos un operando de tipo double float Al menos un operando de tipo float y ninguno double Ttulo Tabla: Resultados de las operaciones aritmticas en Java Resumen Tabla: Cuadro o tabla de cinco filas por dos columnas, de ttulo Resultado de las operaciones aritmticas en Java, de modo que para cada tipo de operando se indica el resultado que dar la expresin aritmtica. Debe ser leda en columnas de izquierda a derecha y de arriba abajo. Fin Resumen Tabla Otro tipo de operadores aritmticos son los operadores unarios incrementales y decrementales. Producen un resultado del mismo tipo que el operando, y podemos utilizarlos con notacin prefija, si el operador aparece antes que el operando, o notacin postfija, si el operador aparece despus del operando. En la tabla puedes un ejemplo de de utilizacin de cada operador incremental. Expresin Java Prefija: Postfija: x=3; x=3; y=++x; y=x++; // x vale 4 e y vale 4 // x vale 4 e y vale 3 5-- // el resultado es 4 --(decremental) Ttulo Tabla: Operadores incrementales en Java Resumen Tabla: Cuadro o tabla de tres filas por dos columnas, de ttulo Operadores incrementales en Java, de modo que para cada tipo de operador incremental se indica su smbolo, un ejemplo de uso y el resultado. Debe ser leda en columnas de izquierda a derecha y de arriba abajo. Fin Resumen Tabla Tipo operador ++ (incremental)
En el ejemplo vemos un programa bsico que utiliza operadores aritmticos. Observa que usamos System.out.printf para mostrar por pantalla un texto formateado. El texto entre dobles comillas son los argumentos del mtodo printf y si usamos ms de uno, se separan con comas. Primero indicamos cmo queremos que salga el texto, y despus el texto que queremos mostrar. Fjate que con el primer %s nos estamos refiriendo a una variable de tipo String, o sea, a la primera cadena de texto, con el siguiente %s a la segunda cadena y con el ltimo %s a la tercena. Con %f nos referimos a un argumento de tipo float, etc.
Texto del enlace: Operadores aritmticos URL: PROG02_CONT_R25_1_Operadoresaritmeticos.zip Ttulo: Acceder al cdigo del ejemplo [zip 14 KB]
Texto del enlace: Operadores combinados URL: PROG02_CONT_R27_1_Ejemplocombinados.zip Ttulo: Acceder al cdigo del ejemplo [zip 14 KB]
PARA SABER MS
En esta pgina tienes informacin interesante sobre cmo se pueden utilizar los caracteres especiales incluidos en la orden printf (en ingls): Texto enlace: Orden printf. URL: http://www.java2s.com/Tutorial/Java/0120__Development/UsingJavasprintfMethod.htm Ttulo: Enlace a la pgina sobre el uso de la orden printf en Java.
El operador condicional ?: sirve para evaluar una condicin y devolver un resultado en funcin de si es verdadera o falsa dicha condicin. Es el nico operador ternario de Java, y como tal, necesita tres operandos para formar una expresin. El primer operando se sita a la izquierda del smbolo de interrogacin, y siempre ser una expresin booleana, tambin llamada condicin. El siguiente operando se sita a la derecha del smbolo de interrogacin y antes de los dos puntos, y es el valor que devolver el operador condicional si la condicin es verdadera. El ltimo operando, que aparece despus de los dos puntos, es la expresin cuyo resultado se devolver si la condicin evaluada es falsa. Operador Expresin en Java ?: condicin ? exp1 : exp2 Ttulo Tabla: Operador condicional en Java Resumen Tabla: Cuadro o tabla de dos filas por dos columnas, de ttulo Operadores de condicional en Java, que indica cmo es una expresin en Java utilizando el operador condicional ?:. Debe ser leda en columnas de izquierda a derecha y de arriba abajo. Fin Resumen Tabla Por ejemplo, en la expresin:
(x>y)?x:y;
Se evala la condicin de si x es mayor que y, en caso afirmativo se devuelve el valor de la variable x, y en caso contrario se devuelve el valor de y. El operador condicional se puede sustituir por la sentencia ifthenelse que veremos en la siguiente unidad de Estructuras de control.
AUTOEVALUACIN:
Texto de la pregunta: Seala cules son los operadores relacionales en Java. e) = =, ! =, >, <, > =, < =. f) =, !=, >, <, >=, <=. g) ==, =!, >, <, =>, =<. h) ==, !=, >, <, >=, <=..
Operador Ejemplo en Java Significado !op Devuelve true si el operando es false y viceversa. ! op1 & op2 Devuelve true si op1 y op2 son true & op1 | op2 Devuelve true si op1 u op2 son true | op1 ^ op2 Devuelve true si slo uno de los operandos es true ^ op1 && op2 Igual que &, pero si op1 es false ya no se evala op2 && op1 || op2 Igual que |, pero si op1 es true ya no se evala op2 || Ttulo Tabla: Operadores lgicos en Java Resumen Tabla: Cuadro o tabla de siete filas por tres columnas, de ttulo Operadores lgicos en Java, de modo que para cada operador lgico se indica cmo se escribe en Java y su significado. Debe ser leda en columnas de izquierda a derecha y de arriba abajo. Fin Resumen Tabla En el siguiente cdigo puedes ver un ejemplo de utilizacin de operadores lgicos:
Texto del enlace: Operadores lgicos URL: PROG02_CONT_R32_1_EjmploLogicos.zip Ttulo: Acceder al cdigo del ejemplo [zip 13 KB]
Operador Ejemplo en Java Significado ~op Realiza el complemento binario de op (invierte el valor de cada bit) ~ op1 & op2 Realiza la operacin AND binaria sobre op1 y op2 & op1 | op2 Realiza la operacin OR binaria sobre op1 y op2 | op1 ^ op2 Realiza la operacin OR-exclusivo (XOR) binaria sobre op1 y op2 ^ op1 << op2 Desplaza op2 veces hacia la izquierda los bits de op1 << op1 >> op2 Desplaza op2 veces hacia la derecha los bits de op1 >> op1 >>> op2 Desplaza op2 (en positivo) veces hacia la derecha los bits de op1 >>> Ttulo Tabla: Operadores a nivel de bits en Java Resumen Tabla: Cuadro o tabla de siete filas por tres columnas, de ttulo Operadores lgicos en Java, de modo que para cada operador lgico se indica cmo se escribe en Java y su significado. Debe ser leda en columnas de izquierda a derecha y de arriba abajo. Fin Resumen Tabla
PARA SABER MS
Los operadores de bits raramente los vas a utilizar en tus aplicaciones de gestin. No obstante, si sientes curiosidad sobre su funcionamiento, puedes ver el siguiente enlace dedicado a este tipo de operadores: Texto enlace: Operadores de bits. URL: http://www.zator.com/Cpp/E4_9_3.htm Ttulo: Enlace a la pgina sobre operadores de bits.
Cambio a maysculas/minsculas. Los mtodos toUpperCase() y toLowerCase() devuelven una nueva variable que transforma en maysculas o minsculas, respectivamente, la variable inicial. Valueof. Utilizaremos este mtodo para convertir un tipo de dato primitivo (int, long, float, etc.) a una variable de tipo String. A continuacin varios ejemplos de las distintas operaciones que podemos realizar concadenas de caracteres o String en Java:
Texto del enlace: Operaciones con cadenas URL: PROG02_CONT_R35_1_Ejemplocadenas.zip Ttulo: Acceder al cdigo del ejemplo [pdf 14 KB]
Realmente la operacin que se realiza es (10 / 2 ) * 5, porque ambos operadores, divisin y multiplicacin, tienen igual precedencia y por tanto se evala primero el que antes nos encontramos por la izquierda, que es la divisin. El resultado de la expresin es 25. Si fueran asociativos por la derecha, puedes comprobar que el resultado sera diferente, primero multiplicaramos 2 * 5 y luego dividiramos entre 10, por lo que el resultado sera 1. En esta otra expresin:
x = y = z = 1
Realmente la operacin que se realiza es x = (y = (z = 1)). Primero asignamos el valor de 1 a la variable z, luego a la variable y, para terminar asignando el resultado de esta ltima asignacin a x. Si el operador asignacin fuera asociativo por la izquierda esta operacin no se podra realizar, ya que intentaramos asignar a x el valor de y, pero y an no habra sido inicializada. En la tabla se detalla el orden de precedencia y la asociatividad de los operadores que hemos comentado en este apartado. Los operadores se muestran de mayor a menor precedencia. Operador Tipo Asociatividad ++ -Unario, notacin postfija Derecha ++ -- + - (cast) ! ~ Unario, notacin prefija Derecha * / % Aritmticos Izquierda + Aritmticos Izquierda << >> >>> Bits Izquierda < <= > >= Relacionales Izquierda == != Relacionales Izquierda & Lgico, Bits Izquierda ^ Lgico, Bits Izquierda | Lgico, Bits Izquierda && Lgico Izquierda || Lgico Izquierda ?: Operador condicional Derecha = += -= *= /= %= Asignacin Derecha Ttulo Tabla: Orden de precedencia de operadores en Java Resumen Tabla: Cuadro o tabla de quince filas por tres columnas, de ttulo Orden de precedencia de operadores en Java, de modo que para operador se indica su tipo y la asociatividad. Los operadores se encuentran en orden de mayor a menor precedencia. Debe ser leda en columnas de izquierda a derecha y de arriba abajo. Fin Resumen Tabla
REFLEXIONA.
Crees que es una buena prctica de programacin utilizar parntesis en expresiones aritmticas complejas, an cuando no sean necesarios? Retroalimentacin: Probablemente acertaste. El uso de parntesis, incluso cuando no son necesarios, puede hacer ms fcil de leer las expresiones aritmticas complejas.
6. Conversin de tipo.
CASO Mara ha avanzado mucho en sus conocimientos sobre Java y ha contado con mucha ayuda por parte de Juan. Ahora mismo tiene un problema con el cdigo, y le comenta Estoy atrancada en el cdigo. Tengo una variable de tipo byte y quiero asignarle un valor de tipo int, pero el compilador me da un error de posible prdida de precisin t sabes qu significa eso?. Claro le contesta Juan, es un problema de conversin de tipos, para asignarle el valor a la variable de tipo byte debes hacer un casting. Ah! dice Mara, y cmo se hace eso?
Imagina que queremos dividir un nmero entre otro tendr decimales el resultado de esa divisin? 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 conversin de tipo. Las conversiones de tipo se realizan para hacer que el resultado de una expresin sea del tipo que nosotros deseamos, en el ejemplo anterior para hacer que el resultado de la divisin sea de tipo real y, por ende, tenga decimales. Existen dos tipos de conversiones: Conversiones automticas. Cuando a una variable de un tipo se le asigna un valor de otro tipo numrico con menos bits para su representacin, se realiza una conversin automtica. En ese caso, el valor se dice que es promocionado al tipo ms grande (el de la variable), para poder hacer la asignacin. Tambin se realizan conversiones automticas en las operaciones aritmticas, cuando estamos utilizando valores de distinto tipo, el valor ms pequeo se promociona al valor ms 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 explcitas. Cuando hacemos una conversin de un tipo con ms bits a un tipo con menos bits. En estos casos debemos indicar que queremos hacer la conversin de manera expresa, ya que se puede producir una prdida 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 parntesis. Tiene la misma precedencia que el resto de operadores unarios y se asocia de izquierda a derecha. Debemos tener en cuenta que un valor numrico nunca puede ser asignado a una variable de un tipo menor en rango, si no es con una conversin explcita. Por ejemplo:
int a; byte b; a = 12; b = 12; b = a; byte b = (byte) a;
// // // // // //
no se realiza conversin alguna se permite porque 12 est dentro del rango permitido de valores para b error, no permitido (incluso aunque 12 podra almacenarse en un byte) Correcto, forzamos conversin explcita
En el ejemplo anterior vemos un caso tpico de error de tipos, ya que estamos intentando asignarle a b el valor de a, siendo b de un tipo ms pequeo. Lo correcto es promocionar a al tipo de datos byte, y entonces asignarle su valor a la variable b.
DEBES CONOCER
En el siguiente enlace viene informacin importante sobre cmo se producen las conversiones de tipos en Java, tanto automticas como explcitas: Texto enlace: Conversin de Tipos de Datos en Java. PROG02_CONT_R38_ConversionTipos.doc Ttulo: Enlace para acceder a informacin sobre la conversin de tipos en Java.
7. Comentarios.
CASO Juan ha podido comprobar los avances que ha hecho Mara con la programacin. Ya domina todos los aspectos bsicos sobre sintaxis, estructura de un programa, variables y tipos de datos. Ada le acaba de comunicar que van a sumarse al proyecto dos personas ms, Ana y Carlos que estn haciendo las prcticas del ciclo de Desarrollo de Aplicaciones Multiplataforma en la empresa. Al principio de cada programa indicaremos una breve descripcin y el autor. En operaciones complicadas podramos aadir un comentario les ayudar a entender mejor qu es lo que hace indica Juan. De acuerdo comenta Mara, y podemos ir metiendo los comentarios de la herramienta esa que me comentaste, Javadoc, para que se cree una documentacin an ms completa. Aj! asiente Juan, pues manos a la obra!
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 comprensin del cdigo. Para lograr ese objetivo, es normal que cada programa comience con unas lneas de comentario que indiquen, al menos, una breve descripcin del programa, el autor del mismo y la ltima fecha en que se ha modificado. Todos los lenguajes de programacin disponen de alguna forma de introducir comentarios en el cdigo. En el caso de Java, nos podemos encontrar los siguientes tipos de comentarios: Comentarios de una sola lnea. Utilizaremos el delimitador // para introducir comentarios de slo una lnea.
// comentario de una sola lnea
Comentarios de mltiples lneas. Para introducir este tipo de comentarios, utilizaremos una barra inclinada y un asterisco (/*), al principio del prrafo y un asterisco seguido de una barra inclinada (*/) al final del mismo.
/* Esto es un comentario de varias lneas */
Comentarios Javadoc. Utilizaremos los delimitadores /** y */. 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 documentacin automtica del programa. A travs del programa javadoc, incluido en JavaSE, se recogen todos estos comentarios y se llevan a un documento en formato .html.
/** Comentario de documentacin. Javadoc extrae los comentarios del cdigo y genera un archivo html a partir de este tipo de comentarios */
RECOMENDACIN
Una buena prctica de programacin es aadir en la ltima llave que delimita cada bloque de cdigo, un comentario indicando a qu clase o mtodo pertenece esa llave.
PARA SABER MS
Si quieres ir familiarizndote con la informacin que hay en la web de Oracle, en el siguiente enlace puedes encontrar ms informacin sobre la herramienta Javadoc incluida en el Kit de Desarrollo de Java SE (en ingls): Texto enlace: Pgina oficial de Oracle sobre la herramienta Javadoc. URL: http://download.oracle.com/javase/6/docs/technotes/guides/javadoc/index.html Ttulo: Pgina de la herramienta Javadoc.