9786071506184 Joyanes Programacion en Java 6 t03 Entrada Salida Paquetes

23
Ignacio Zahonero Martínez Luis Joyanes Aguilar Curso Programación en Java Tema 3 Entrada y Salida básica en Java -Paquetes-

description

programacion en java, ejercicios de joyanes con explicacion y aplicacion en codigo

Transcript of 9786071506184 Joyanes Programacion en Java 6 t03 Entrada Salida Paquetes

Programación en JavaCurso
-Paquetes-
ENTRADA DESDE DISPOSITIVO ESTÁNDAR(I)
En Java la entrada y salida se lee y escribe en flujos (streams). La fuente básica de entrada de datos es el teclado y de salida de datos es la pantalla.
La clase System define dos referencias a objetos static para la gestión de la entrada y de la salida por consola:
System.in para entrada por teclado.
System.out para salida por pantalla.
System.in está asociado, normalmente, con el teclado. Es un flujo de tipo InputStream.
Los elementos básicos del flujo de entrada System.in son bytes individuales. Con el método read() (int read() throws IOException) se lee un byte:
char c;
c = (char)System.in.read();
ENTRADA DESDE DISPOSITIVO ESTÁNDAR(II)
No resulta práctico el captar la entrada byte a byte, es preferible hacerlo línea a línea. Para ello se utiliza, primero un flujo de tipo InputStreamReader cuya misión es convertir el blujo básico de bytes (System.in) a flujo de caracteres.
InputStreamReader en = new InputStreamReader(System.in);
este objeto que se crea se utiliza a su vez como argumento para inicializar otro objeto de la clase BufferedReader, que ya permite captar líneas de caracteres del teclado con el método readLine():
String cd;
cd = entrada.readLine();
System.out.println(“Línea de entrada: “ + cd);
*
ENTRADA DESDE DISPOSITIVO ESTÁNDAR(III)
El objeto de la clase BufferedReader se puede crear de una sola tacada, de una sola sentencia, es la forma habitual en que aparece en los programas :
BufferedReader entrada = new BufferedReader(
new InputStreamReader(System.in));
Es necesario tener en cuenta que la especificación de readLine() indica que levanta una excepción de tipo IOException que es necesario procesar o propagar.
try {
entrada.readLine();
ENTRADA DE UN NUMERO ENTERO
El método parseInt () de la clase Integer,se utiliza con mucha frecuencia para entrada de datos enteros desde el teclado. Primero se crea un objeto asociado con el teclado, se lee a continuación una línea con el número entero tecleado y con parseInt() se convierte a dato int.
BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in));
String cd;
int dato;
dato = Integer.parseInt(entrada.readLine());
ENTRADA DE UN NUMERO REAL
Los pasos a seguir para entrada de un dato de tipo double:
1. Crear el objeto para entrada asociado con el dispositivo estándar de entrada, el teclado. Este objeto se utiliza para cualquier entrada.
BufferedReader entrada = new BufferedReader(
new InputStreamReader(System.in));
2. Leer línea y transformar a double con el método Double.parseDouble(cadena)
double d = Double.parseDouble(entrada.readLine())
Alternativamente:
2. Crear un objeto Double con el método de la clase valueOf().
Double d; String cd;
se puede concatenar llamadas: d = Double.valueOf(entrada.readLine());
3. Obtener el dato double del objeto con el método doubleValue().
double x = d.doubleValue();
EJEMPLO DE ENTRADA
Dada la base y altura de un triángulo calcular su área :
import java.io.*;
{
OTRA VERSION DEL EJEMPLO
Dada la base y altura de un triángulo calcular su área :
import java.io.*;
{
SALIDA POR PANTALLA
El objeto out definido en la clase System está asociado con el flujo de salida, que dirige los datos a consola o pantalla.
out es un objeto de la clase PrintStream. Los métodos más utilizados son:
print() transfiere una cadena de caracteres al buffer de la pantalla.
println() transfiere una cadena de caracteres y el carácter de fin de línea al buffer dela pantalla.
Argumento de print() o println() puede ser constantes o variables de los tipos básicos, int, double, char ... y de tipo String (cadena).
se pueden concatenar cadenas con caracteres, enteros ... . Para ello se utiliza el operador + que internamente realiza la conversión, por ejemplo:
double r = 2.0;
System.out.println("Radio = " + r + ',' + "area: " + area);
ENTRADA UTILIZANDO CLASE SCANNER
Java 5 dispone de la clase Scanner (paquete java.util) para analizar un flujo de caracteres y obtener los elementos, de cualquier tipo primitivo, de que consta.
La clase puede analizar cualquier flujo, y en particular el flujo de bytes básico asociado al teclado representado por System.in.
El flujo a analizar por Scanner se asocia a través del constructor.
Scanner dc = new Scanner(System.in);
El scanner dc esta´ asociado a la entrada básica, el teclado.
El scanner divide la entrada en tockens (elementos) separados por un delimitador, por defecto un espacio.
Los métodos más interesantes son:
Tipo nextTipo(); obtiene el siguiente valor de tipo primitivo Tipo.
*
METODOS DE SCANNER
short nextShort(); devuelve el valor entero corto del sgte elemento.
long nextLong(); devuelve el valor entero largo del sgte elemento.
double nextDouble(); devuelve el valor double del sgte elemento.
... para cada tipo de dato primitivo
String next(); devuelve una cadena con el sgte elemento.
String nextLine(); devuelve los caracteres hasta fin de línea y se sitúa en la siguiente.
Los métodos nextTipo levantan la excepción InputMismatchException si no pueden obtener un siguiente elemento del tipo requerido.
A tener en cuenta: en la entrada de un número real, la parte entera se separa de una coma (,) de la parte decimal,p. e. : 3,50
boolean hasNext(); true si quedan elementos en la línea.
boolean hasNextInt(); true si siguiente elemento es un entero.
... para cada tipo de dato primitivo
*
EJEMPLO
{
" en el día de " + new Date());
}
}
*
PAQUETES
AGRUPACIÓN DE CLASES EN JAVA
Los paquetes es la forma que tiene Java de organizar las clases relacionadas. En un paquete se agrupan clases e interfaces.
Los paquetes están compuestos por clases, interfaces, subpaquetes relacionados y pueden contener archivos de recursos .
La utilización de paquetes permite:
Crear agrupaciones de clases e interfaces relacionadas formando bibliotecas de clases.
Crear espacios de nombres que sirven para evitar conflictos de nombres entre los tipos. Los miembros de diferentes paquete pueden utilizar el mismo nombre.
Proporcionan un marco de protección para desarrollar aplicaciones, de forma que los miembros de un paquete pueden utilizar componentes de otras clases del paquete pero que no es accesible desde el exterior. Es el ámbito del paquete la visibilidad por omisión (visibilidad friendly).
*
ESTRUCTURA DE UN PAQUETE
Los paquetes han de asociarse a la estructura rígida de directorios. Dentro de un paquete puede haber subpaquetes; así, el paquete java está compuesto de los subpquetes util, io, awt, ....
mipaquete
clase1
interface1
subpaquete1
subpaquete2
clase21
clase22
clase23
interface24
Ignacio Zahonero Martínez Luis Joyanes Aguilar
CREACIÓN DE UN PAQUETE: sentencia package
Los ficheros de un paquete deben situarse en un subdirectorio que coincida con el nombre completo del paquete. La barra, que representa directorio, se sustituye por el punto (.) en el lenguaje Java.
es.upsam.alumnos.Master.class -> directorio es/upsam/alumnos/Master.class
Para crear un paquete:
Crear la estructura de directorios, desde el directorio base, correspondiente a la jerarquía de paquetes.
Para incorporar una clase al paquete, incluir la sentencia package como primera sentencia (primera línea del archivo fuente) en el archivo que contiene a la clase. Por ejemplo la clase Jabalina en el paquete atletismo:
// archivo fuente Jabalina.java
PAQUETE escritorio
Si las clases Lapiz, Bolígrafo y Folio se van a organizar formando el paquete escritorio, el esquema a seguir es el siguiente:
// archivo fuente Lapiz.java
public class Folio { ... }
*
PAQUETES
Si las clases no se definen como pertenecientes a un package, se utiliza un package por defecto, que es el directorio actual.
Formato
package NombrePaquete;
Los nombres de los paquetes deben evitar conflictos con otros nombres de paquetes .
Para ubicar el paquete en el sistema de archivos local, Java utiliza la variable CLASSPATH a partir de la cual obtiene el directorio base del paquete. CLASSPATH en el sistema operativo contiene uno o más directorios utilizados como raíz en la búsqueda del archivo. Una vez ubicado el directorio raíz toma el nombre del paquete y reemplaza cada punto por la barra de directorio (invertida o no dependiendo del sistema operativo), de forma que el paquete mipaquete.parte1.parte2 se convierte en el directorio mipaquete/parte1/parte2 que cuelga del directorio determinado por CLASSPATH .
*
UTILIZAR PAQUETES: import
Las clases que se encuentran en los paquetes se identifican utilizando el nombre del paquete, el selector punto (.) y a continuación el nombre de la clase. Por ejemplo, la declaración de la clase Arte con atributos de la clase PrintStream (paquete java.io) y Lapiz (paquete escritorio):
public class Arte
private java.io.PrintStream salida;
private escritorio.Lapiz p;
La sentencia import facilita la selección de una clase, permite escribir únicamente su nombre, evitando el nombre del paquete. La declaración anterior se puede abreviar:
import java.io.PrintStream;
import escritorio.*;
import
La sentencia import debe aparecer antes de la declaración de las clases, a continuación de la sentencia package. Tiene dos formatos:
import identificadorpaquete.nombreClase;
import identificadorpaquete.*;
El primer formato especifica una clase concreta.
El segundo formato es para poder acceder a todos los elementos de un paquete sin necesidad de calificar con el nombre del paquete . Se denomina importación a demanda.
Con frecuencia se utiliza el formato .*. Tiene la ventaja de poder simplificar cualquier clase del paquete, se pueden señalar los siguientes problemas:
Se desconoce qué clases concretas del paquete se están utilizando.
Puede haber colisiones entre nombres de clases declaradas en el archivo y nombres de clases del paquete.
Mayor tiempo de compilación debido a que el compilador busca la existencia de cualquier clase en el paquete.
*
import (II)
Al importar un paquete no se importan los subpaquetes. Estos deben ser importados explícitamente. La sentencia: import java.util.*;
importa todas las clases de ese paquete, pero no las de paquetes cuyo nombre esté relacionado jerárquicamente. Así el subpaquete prefs no se importa.
Los subpaquetes deben ser importados explícitamente. Por ejemplo, el subpaquete prefs del paquete java.util util, y el subpaquete event de java.awt:
import java.util.*;
import java.awt.event.*;
El paquete java.lang siempre se importa por defecto.
Java 5 incorpora la importación estática de una clase. Permite acceder a los elementos static de una clase sin necesidad de calificar el elemento con el nombre de la clase. Por ejempo para la clase System y la clase Math:
import static java.lang.System.*;
import static java.lang.Math.*;
PAQUETES ESTÁNDAR
La biblioteca de Java incorpora más de 35 paquetes. Algunos se muestran a continuación:
java.lang
Constituye el núcleo del lenguaje. El compilador importa automáticamente este paquete (es el único que lo hace). Entre otras cosas contiene las clases:
Object. La superclase.
String y StringBuffer y StringBuilder.
System y Runtime, que permiten utilizar los recursos del sistema. System proporciona la interface de programación independiente del sistema para los recursos del sistema y Runtime da acceso al entorno de ejecución específico de un sistema.
Thread, para la programación con hilos.
Class, proporciona una descripción de la clase en tiempo de ejecución.
Math, de rutinas matemáticas.
Exception, Error y Throwable para el manejo de excepciones.
*
PAQUETES ESTÁNDAR
java.io
Proporciona canales de entrada y salida que permiten la escritura y lectura de archivos de datos y otras fuentes de entrada y salida.
java.util
java.net
Implementa clases e interfaces para el trabajo en red como conexiones HTTP, ....
java.applet
java. awt