Archivos de la categoría ‘08. Programación en Java (y II)’

Materiales para la Unidad 08

Publicado: Domingo, 20 \20\UTC junio \20\UTC 2010 en 08. Programación en Java (y II)
Presentación

Transcripción de la parte teórica de la unidad 08

Teoría

En el tema 8 debéis leer únicamente el apartado 5.5. Al finalizar este apartado, conoceréis las características básicas (todas las que nosotros necesitaremos) del lenguaje Java. Y “sólo” quedará el estudio de los conceptos de programación orientada a objetos, que dejaremos para los siguientes temas.

Este apartado muestra las diferencias entre C++ y Java. Aunque en el módulo de Fundamentos de Programación habéis estudiado C, seguramente entenderéis la mayoría de cosas sobre las que os hablan, ya que C++ es una evolución del lenguaje C. En cualquier caso, si tenéis alguna duda, planteadla. Para eso estamos.

El punto 5.5.1 es una explicación de cómo maneja Java la entrada/salida. Básicamente, cómo imprimir por pantalla y cómo leer del teclado. Veréis que mostrar un mensaje es bastante sencillo, pero no así la lectura desde teclado. Poned mucha atención a esto, ya que es primordial que lo entendáis.

En el punto 5.5.2 se habla del preprocesador, que deja de existir en Java. En resumen: los define desaparecen y su equivalente en Java son variables final (constantes); los include también desaparecen y para la reutilización de código se utiliza import.

El punto 5.5.3 os explica cómo declarar variables y constantes.

Los tipos de datos se estudian en el punto 5.5.4. De este apartado, es fundamental que entendáis la parte final, donde se os explica cómo se trabaja con cadenas de caracteres en Java.

El punto 5.5.5 os tiene reservada una de las grandes alegrías que nos brinda Java: la eliminación de los “inquietantes” punteros de C y C++. Y además, Java también se encarga por nosotros de gestionar el espacio dinámico que pueda crearse en la ejecución de un programa y que ya no se utiliza.

El último punto de este tema (5.5.6) nos explica la utilización de funciones y el paso de parámetros.

Una cosa más: puede que durante la lectura de este apartado encontréis algunos conceptos de programación orientada a objetos (POO) que desconocéis. Es normal porque todavía no hemos estudiado la POO. Si en algún momento os parece difícil seguir la lectura del apartado, haced las preguntas que creáis oportunas y/o consultad el apartado 4.2 de esos mismos apuntes, donde se explica el paso de C a C++. Es decir, en primer lugar estudiáis el paso de C a C++ y en un segundo lugar el paso de C++ a Java. La decisión es vuestra.

Laboratorio

El laboratorio se visualiza mejor en alta definición (HD) y a pantalla completa.

También tienes la posibilidad de ver el video con subtítulos. Para ello, haz clic sobre el botón “Turn on Captions” (CC).

Octava Práctica de Evaluación (PEV08)Práctica de evaluación

La Octava Práctica de Evaluación del módulo es una práctica dividida en tres partes.

  1. La primera es una continuación de la última parte de la anterior PEV. La única diferencia es que, en lugar de crear vosotros el programa, ya tenéis el código creado.

  2. En la segunda parte tenéis un código que deberéis corregir. Con esta parte pretendo que conozcáis un poco más el trabajo con Eclipse (veréis que es muy cómodo y extremadamente potente). La corrección de errores es, desgraciadamente, uno de los apartados que más tiempo consume en el trabajo diario de un desarrollador.

  3. La tercera parte consiste en crear un programa en Java “con un poco más de chicha” que el “Hola mundo”. No obstante, os he dejado dentro del propio código indicaciones paso a paso de lo que debéis hacer en cada momento. Para mi, lo más importante de esta parte es que lleguéis a controlar cómo trabajar con la API (Application Programming Interface) de Java.

Recordad que para acceder a la evaluación cuatrimestral, la entrega de todas las PEVs es obligatoria (y cada una de ellas debe tener una nota superior a 2).

Sinopsis de la película "La historia secreta de los piratas informáticos"
Documental

Mira el documental “La historia secreta de los piratas informáticos”. A continuación, comenta tus impresiones sobre lo que en él se dice en el foro del Aula Virtual.

Enlace al documental en Megavideo: http://www.megavideo.com/?v=K88I8J4J

Orientaciones didácticas

Las orientaciones didácticas de una unidad son un resumen (no más de un folio) con unas pequeñas pautas  que permiten al alumno hacerse una idea general de qué va a aprender en esa unidad – respecto a los contenidos teóricos – y cómo debe desarrollar la parte práctica.

En estas orientaciones también se incluye un registro organizado con los comentarios realizados por el alumnado durante el desarrollo de la unidad, que seguramente ayudarán a facilitar la comprensión de los conceptos teórico-prácticos.

Aquí tenéis las orientaciones didácticas de la unidad 8:

Anuncios

Fundamentos del lenguaje Java

Publicado: Sábado, 13 \13\UTC junio \13\UTC 2009 en 08. Programación en Java (y II)

Esta tercera entrada está dedicada a la sintaxis básica del lenguaje Java. Empecemos.

Comentarios

Java permite tres tipos de comentarios, utilizando los símbolos:

  • // (doble barra). Permite comentar una sola línea. Ejemplo:

// este es un comentario de una línea

  • /* y */. Se usan para comentarios de más de una línea. Ejemplo:

/* Este comentario ocupa
un par de líneas */

  • /** y */. Utilizados para la documentación de javadoc. Este sistema permite documentar a partir del código fuente.

Este tema no entra en los objetivos del módulo, pero puedes encontrar más información en esta página.

Sentencias

Las sentencias nos permiten realizar acciones en Java, de manera análoga a lo que ocurre en C. Ejemplos de sentencias en Java son:

int entero = 1;
System.out.println(“Hola ” + nombre + “, ¿cómo estás? “);
import java.lang;
suma = entero + 5;

Fijaos que, de nuevo como ocurre en C, todas las sentencias deben finalizar con el símbolo punto y coma (;).

También es posible convertir un conjunto de sentencias como si se tratase de una sola, encerrándolas entre llaves ({ y }). Es útil, por ejemplo, para el uso de sentencias condicionales o bucles.

Variables y constantes

Las declaración de variables no varía respecto a C. Se debe introducir el tipo y a continuación el nombre de la variable, como por ejemplo:

String nif;

Para la declaración de constantes, el nombre de la constante debe ir precedida por la palabra reservada final. Puede declararse sin valor inicial, pero desde el momento que se le asigne un valor, la constante no podrá ser modificada. Ejemplo:

final int iva;

precio = 1000;

iva = precio*0.16; // A partir de este momento, iva no puede cambiar su valor

Tipos de datos

Las variables deben ser de un tipo de dato en concreto. Un tipo de dato indica qué valores puede contener esa variable. En Java, los tipos de datos pueden clasificarse en dos grupos:

  • Tipo de dato primitivo.
  • Tipo de dato referencia.

Los tipos de datos primitivos son ocho y pueden almacenar los valores que especificamos en la siguiente tabla:

Tipo de dato Tamaño Rango
byte 8 bits desde -128 hasta 127
short 16 bits Desde -32.768 hasta 32.767
int 32 bits -2.147.483.648 hasta 2147.483.647
long 64 bits 9.223.372.036.854.775.808 hasta 9.223.372.036.854.775.807
float 32 bits IEEE 754 de precisión simple
double 64 bits IEEE 754 de doble precisión
boolean 1 bit true o false
char 16 bits un único carácter Unicode

Podéis encontrar mayor información sobre los tipos de datos básicos de Java en esta página: http://www.codexion.com/tutorialesjava/java/nutsandbolts/datatypes.html

Además de los ocho tipos de datos primitivos, existen los tipos de datos referencia, que son tres: vectores, clases e interfaces. Los dos primeros se estudiarán ampliamente más adelante. El tercero no entra en los objetivos de este módulo.

Convenciones de codificación

Las convenciones de codificación son importantes para los programadores por varias razones:

El 80% del coste del tiempo de vida de una pieza de software se va en mantenimiento.

Casi nunca ningún software es mantenido durante toda su vida por su autor original.

Las convenciones de nombrado mejoran la lectura del software, permitiendo a los ingenieros entender el nuevo código más rápidamente y mejor.

Si lanzamos nuestro código fuente como un producto, necesitamos asegurarnos de que está tan bien empaquetado y limpio como cualquier otro producto que creemos.

Para que las convenciones funcionen, todos aquellos que escriban software debe adherirse a ella. Todos.

Un documento oficial de Sun traducido al castellano por JavaHispano, lo tenéis disponible desde el apartado Materiales Complementarios.

Y hasta aquí la primera parte que trata de la sintaxis de Java. En la siguiente entrada, ampliaremos algunos conceptos sobre la sintaxis.


Creative Commons License
Fundamentos del lenguaje Java by Cristian Jorge Garcia Marcos is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España License.

Interacción con el usuario en Java

Publicado: Sábado, 13 \13\UTC junio \13\UTC 2009 en 08. Programación en Java (y II)

Es hora de avanzar en otras novedades importantes que se incorporan en Java.

Paquetes

Un paquete es el equivalente a una libreria de C. En lugar de utilizar la orden de C:

# include

en Java utilizaremos la orden:

import paquete;

Los paquetes facilitan extraordinariamente la labor del programador, ya que existen miles de líneas de código que otros programadores ya han hecho por nosotros. El conjunto de todos los paquetes oficiales en Java es lo que se denomina la Interfaz de Programación de Aplicaciones (API, del inglés Application Programming Interface) de Java. En cada versión de la API se incluye un mayor número de paquetes y también existe documentación exhaustiva para que cualquier programador pueda consultar cómo hacer uso de ella.

La versión actual de Java es la 6 y podéis acceder a la documentación de la API en castellano desde esta página.

El uso de la API es muy sencillo y se compone de una ventana dividida en tres marcos: en la parte superior izquierda tenéis todos los paquetes existentes ordenados alfabéticamente. Si hacéis clic sobre uno de ellos, aparecerá en la parte inferior izquierda – entre otras cosas – las clases (que es lo que nos interesa en este momento) existentes en ese paquete. Si volvéis a hacer clic sobre una de las clases, el marco central mostrará todos los métodos que existen para esa clase, con su explicación correspondiente.

ATENCIÓNLa dirección de la API en castellano es una traducción on-line de la API en inglés, por lo que los métodos también se traducen. Una vez hayáis encontrado el método que necesitéis, utilizad la API en inglés para conocer el nombre real del método.

Métodos

Un método es el equivalente a una función en C.

Como ya hemos comentado, todo en Java son objetos; por ello, cualquier trozo de código estará dentro de un objeto.

De la misma manera que en C creábamos una función para definir un bloque de instrucciones con una cierta relación, ahora en Java, ese mismo bloque lo incorporaremos a un método. Y ese método pertenecerá a un objeto.

Veamos una comparación para aclarar estos conceptos. Imaginad que tenemos declarada una estructura en C llamada estudiante (que guardará los datos de un estudiante) de la siguiente manera:

struct estudiante_t {
char dni[9];
char nombre[50];
char apellidos[30];
time_t nacimiento;
};

//un registro de estudiante:
struct estudiante_t estudiante;
strcpy(estudiante.dni,”27651109″);
strcpy(estudiante.nombre,”María Dolores”);

Si ahora necesitamos una función para conocer la edad de un estudiante, declaramos fuera de la función main() algo parecido a esto:

int calcularEdad (estudiante_t parEstudiante);

Y llamaríamos a nuestra función de la siguiente manera:

calcularEdad(unRegistroDeEstudiante);

¿De acuerdo? Bueno, pues ahora hemos de cambiar la filosofía de trabajo. Sin entrar demasiado en detalles y confundiros con más teoría, nuestro método (función) en Java estaría situado dentro de la estructura (que será una clase) estudiante y será algo parecido a esto:

public int calcularEdad(void);

Y la llamada al método sería así:

unRegistroDeEstudiante.calcularEdad();

Es decir, mientras que en C la llamada a una función “es independiente” y toda la información se pasa a través de parámetros a la función, en Java los métodos son “dependientes” de una estructura y por tanto la llamada a un método debe ir precedida siempre del nombre de esa estructura.

Envoltorios

Además de los tipos de datos básicos que vimos en la anterior entrada, Java sigue con su vocación de utilizar objetos y nos ofrece un envoltorio de los tipos de datos básicos para convertirlos en objetos. Existen nueve envoltorios: Integer, Long, Float, Double, Short, Byte, Character, Boolean y Void.

Fijaos que todos ellos tienen nombres prácticamente idénticos a los tipos básicos, pero con la diferencia de que la primera letra es mayúscula (recordad que Java es sensible a mayúsculas).

Los envoltorios son muy útiles para realizar conversiones entre tipos de manera sencilla, ya que la API nos ofrece métodos para hacer casi todo lo que deseemos. Por ejemplo, la conversión de un número entero introducido por teclado por un usuario, que por tanto es una cadena de caracteres, es una tarea muy sencilla en Java:

int numeroConvertido = Integer.parseInt(numeroString);

Fijaos que hemos utilizado el método parseInt() de un objeto Integer. Este método recibe como parámetro un String y devuelve el número entero correspondiente de hacer la conversión de ese String.

IMPORTANTEEn este ejemplo podéis apreciar que, como no teníamos ningún objeto Integer, hemos podido utilizar el mismo nombre de la clase para hacer uso de su método. Son facilidades que nos da Java.

Entrada/salida

Ya hemos visto en anteriores entradas que la salida en Java es muy fácil de utilizar. En cambio, no ocurre lo mismo con la entrada, donde Java muestra una de sus incomodidades más palpable. Veamos cómo se trabaja.

  • Salida estándar. Se utiliza System.out que se encuentra en el paquete java.lang.
  • Entrada estándar. Se utiliza System.in que se encuentra en el paquete java.lang.
  • Salida de errores. Se utiliza System.err que se encuentra en el paquete java.lang.

Ejemplos:

Imprimir por pantalla. Utilizaremos los métodos print() o println() (este último incluye el retorno de carro al final de la salida). Uso:

System.out.print(“Se imprime este mensaje sin el retorno de carro”);

System.out.println(“Se imprime este mensaje con un retorno de carro”);

Gráficamente:

Imprimir por pantalla

Leer del teclado. A bajo nivel se utiliza el método read(), que lee un único carácter. Uso:

char c = (char) System.in.read();

Esta manera de leer del teclado es muy poco práctica y sería tedioso programar la lectura de una cadena de caracteres. En su lugar, es habitual hacer uso del paquete java.io que nos ofrece ayuda para acceder de manera más cómoda a la lectura del teclado. Veámoslo:

String nombre;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

System.out.print(“Escribe tu nombre: “);
nombre = br.readLine();
System.out.println(“Hola ” + nombre + “, ¿cómo estás?);

¿Qué hemos hecho? Es más complicado explicarlo que entenderlo. Dentro del paquete java.io se encuentra el método readLine() de una clase llamada BufferedReader. Este método lee una cadena de caracteres y devuelve un objeto  String.

Lo que ocurre es que necesitamos convertir la lectura del System.in (que lee bytes) en un objeto Reader (que es lo que necesita BufferedReader). Así que utilizamos una clase intermedia, que se llama InputStreamReader, que nos permite hacer esta conversión.

Gráficamente:

IMPORTANTEFijaos que para crear las variables de estas clases, hemos utilizado el operador new, que no ha aparecido hasta ahora. Esto se debe a que estamos creando objetos (variables de una clase). Pero no adelantemos acontecimientos.

Con esto finalizamos la introducción al lenguaje Java.

En la próxima entrada nos adentraremos en la teoría de la programación orientada a objetos.


Creative Commons License
Interacción con el usuario en Java by Cristian Jorge Garcia Marcos is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España License.