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