La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Ignacio Zahonero Martínez Luis Joyanes Aguilar Curso Programación en Java Tema 3 Entrada y Salida básica en Java -Paquetes-"— Transcripción de la presentación:

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

2 2 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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();

3 3 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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; BufferedReader entrada = new BufferedReader(en); System.out.print(“Introduzca una línea por teclado: “); cd = entrada.readLine(); System.out.println(“Línea de entrada: “ + cd);  El método readLine() devuelve un objeto cadena (tipo String ) con la línea leída.

4 4 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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(); } catch (IOException e) {...;}

5 5 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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; System.out.print("Introduzca un dato entero: "); cd = entrada.readLine(); dato = Integer.parseInt(cd); Se puede simplificar concatenando llamadas : dato = Integer.parseInt(entrada.readLine());

6 6 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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; cd = entrada.readLine(); d = Double.valueOf(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();

7 7 Ignacio Zahonero Martínez Luis Joyanes Aguilar EJEMPLO DE ENTRADA  Dada la base y altura de un triángulo calcular su área : import java.io.*; public class Area { public static void main(String ar[]) throws Exception { double base, altura; String cd; BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Base del Triángulo: "); cd = entrada.readLine(); base = Double.parseDouble(cd); System.out.println("Altura del Triángulo: "); altura = Double. parseDouble(entrada.readLine()); System.out.println("El area = " + base*altura/2); }

8 8 Ignacio Zahonero Martínez Luis Joyanes Aguilar OTRA VERSION DEL EJEMPLO  Dada la base y altura de un triángulo calcular su área : import java.io.*; public class Area { public static void main(String ar[]) throws Exception { double base, altura; Double d; String cd; BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Base del Triángulo: "); cd = entrada.readLine(); d = Double.valueOf(cd); base = d.doubleValue(); System.out.println("Altura del Triángulo: "); d = Double.valueOf(entrada.readLine()); altura = d.doubleValue(); System.out.println("El area = " + base*altura/2); }

9 9 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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; double area = Math.PI*r*r; System.out.println("Radio = " + r + ',' + "area: " + area);

10 10 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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. boolean hasNextTipo(); true si el siguiente elemento es de tipo primitivo Tipo

11 11 Ignacio Zahonero Martínez Luis Joyanes Aguilar METODOS DE SCANNER int nextInt(); devuelve el valor entero del sgte elemento. 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

12 12 Ignacio Zahonero Martínez Luis Joyanes Aguilar EJEMPLO import java.util.Scanner; //import static java.lang.System.*; import java.util.Date; public class EjemploScanner { public static void main(String [] a) { Scanner sc = new Scanner(System.in); System.out.println("Nombre: "); String nm = sc.nextLine(); System.out.println("edad y peso: "); int edad = sc.nextInt(); double peso = sc.nextDouble(); System.out.println(nm + ", tu edad es: " + edad + ", pesas: " + peso + " en el día de " + new Date()); }

13 13 Ignacio Zahonero Martínez Luis Joyanes Aguilar PAQUETES

14 14 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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).  Los paquetes se estructuran de manera jerárquica. Se permite un paquete (subpaquete) dentro de otro paquete.

15 15 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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 clase1interface1 subpaquete1subpaquete2 clase21clase22clase23 interface24

16 16 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: 1. Crear la estructura de directorios, desde el directorio base, correspondiente a la jerarquía de paquetes. 2. 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 package atletismo; public class Jabalina {... }

17 17 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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 package escritorio; public class Lapiz {... } //archivo fuente Boligrafo.java package escritorio; public class Boligrafo {... } //archivo fuente Folio.java package escritorio; public class Folio {... }  En el directorio escritorio se ubicarán los archivos Lapiz.java, Boligrafo.java y Folio.java. Y también los archivos que que resultan de la compilación: Lapiz.class, Boligrafo.class y Folio.class

18 18 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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.  Por ejemplo, si las clases del paquete escritorio cuelgan del directorio c:\java\clases\ escritorio. La variable de entorno deberá especificar: CLASSPATH=.;c:\java\clases

19 19 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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.*; public class Arte { private PrintStream salida; private Lapiz p;

20 20 Ignacio Zahonero Martínez Luis Joyanes Aguilar import  La sentencia import debe aparecer antes de la declaración de las clases, a continuación de la sentencia package. Tiene dos formatos: 1. import identificadorpaquete.nombreClase; 2.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. Nota: Aunque aparezca la sentencia import paquete.*, el compilador genera bytecode s ó lo para las clases utilizadas.

21 21 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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.*; out.println("seno(90) = " + sin(PI/2.)); equivale a System.out.println( Math.sin(Math.PI...

22 22 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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. Tipos de datos envueltos ( Integer, Double,...). 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. Process, representa el proceso del sistema que se crea en tiempo de ejecuación.

23 23 Ignacio Zahonero Martínez Luis Joyanes Aguilar 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 Utilidades genéricas, de manejo de cadenas, fechas, calendarios (Vector, ArrayList, GregorianCalendar, Date, StringTokenizar,... ). java.net Implementa clases e interfaces para el trabajo en red como conexiones HTTP,.... java.applet Contiene la clase Applet para la construcción de applets. java. awt Incluye este paquete elementos GUI (ventanas, botones, etc.), subpaquete event para procesar eventos, java.awt.image para manejar figuras, colores, cortar y pegar, etc.


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

Presentaciones similares


Anuncios Google