La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Agosto-Diciembre 2007 Instituto Tecnol ó gico de Culiac á n Ing. En Sistemas Computacionales Programaci ó n Orientada a Objetos (con Java) Dra. Maria Lucia.

Presentaciones similares


Presentación del tema: "Agosto-Diciembre 2007 Instituto Tecnol ó gico de Culiac á n Ing. En Sistemas Computacionales Programaci ó n Orientada a Objetos (con Java) Dra. Maria Lucia."— Transcripción de la presentación:

1 Agosto-Diciembre 2007 Instituto Tecnol ó gico de Culiac á n Ing. En Sistemas Computacionales Programaci ó n Orientada a Objetos (con Java) Dra. Maria Lucia Barrón Estrada

2 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Contenido 1. Arreglos unidimensionales y multidimensionales Arreglos unidimensionales y multidimensionales 2.Métodos y mensajes.Métodos y mensajes. 3.Constructor, destructor.Constructor, destructor. 4.Sobrecarga.Sobrecarga. 5.Herencia.Herencia. 6.Polimorfismo y reutilizaciónPolimorfismo y reutilización 7.Excepciones.Excepciones. 8.Flujos y archivos.Flujos y archivos.

3 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 1. Arreglos unidimensionales y multidimensionales 1.1 Arreglo Unidimensionales listas (vectores) Conceptos básicos Operaciones Aplicaciones. 1.2 Arreglo bidimensional. (matrices) Conceptos básicos Operaciones Aplicaciones. 1.3 Arreglo Multidimensional Conceptos básicos Operaciones Aplicaciones.

4 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Conceptos Un arreglo es una estructura que contiene una serie de elementos homogéneos (mismo tipo). Un arreglo puede tener una o mas dimensiones. Los elementos de un arreglo se localizan por medio de índices (un índice por cada dimensión) En Java, los arreglos son referencias (la declaración NO reserva memoria para los elementos) Java provee dos clases que contienen métodos para manipular arreglos (Arrays y Vector)

5 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Arreglos de objetos VS Arreglos de datos primitivos Paul Fernando Maria Pedro Juan Arreglo de datos StringArreglo de datos int

6 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 1.1 Arreglos Unidimensionales listas (vectores). Un arreglo unidimensional es una estructura que puede contener una serie de elementos del mismo tipo en un momento específico del tiempo. Cada elemento se localiza por medio de un índice. En Java, los arreglos son objetos que almacenan un grupo de valores del mismo tipo. Cada elemento se almacena en una posición que va de 0 hasta numero de elementos -1 Un arreglo puede ser creado despues de definirlo con una lista de valores iniciales o usando la palabra new y el numero de elementos

7 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales El tamaño del arreglo se define en su creación y NO puede cambiar durante la ejecución del programa. Los elementos de un arreglo unidimensional se almacenan en posiciónes especificas, las cuales se identifican con un índice desde 0 hasta tamaño-1 int [] arreglo = new int[6]; //no valores iniciales arreglo

8 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales declaración de arreglos unidimensionales. tipo [ ] identificador tipo identificador[ ] creación de arreglos unidimensionales. new tipo[ tamaño ] { elemento 0, elemento 1, …, elemento n } Acceso de elementos identificador[posición]

9 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales numeros null numeros // crea un arreglo con 10 elementos de tipo int numeros = new int[10]; // declara un arreglo de datos tipo int llamado numeros int [] numeros; Ejemplos // declaración y creación int [] numeros = new int[10];

10 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales arregloInt // Forma alternativa int [] arregloInt = new int[6]; arregloInt[0] = 4; arregloInt[1] = 2; arregloInt[2] = 5; arregloInt[3] = 7; arregloInt[4] = 1; arregloInt[5] = 8; inicialización del arreglo int [] arregloInt = {4,2,5,7,1,8}; // creación e inicalizacion

11 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales nombres null nombres... // crea un arreglo con 100 elementos de tipo String nombres = new String[100]; // declara un arreglo de datos tipo String llamado nombres Strign [] nombres; Ejemplos // declaración y creación String [] nombres= new String[100];

12 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales inicialización de arreglos Por default los elementos de un arreglo se inicializan con los valores default de su tipo de dato correspondiente. Formas de inicializar elementos de un arreglo: –Leer valores del teclado –Leer valores de un archivo –Usando valores random –Obtener valores de otros datos (objetos) –Etc

13 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Operaciones con arreglos Inicializar los elementos (todos/algunos) con un valor Localizar un elemento específico Ordenar los elementos del arreglo Intercambiar dos elementos de posición Procesar todos los elementos de un arreglo Procesar solo algunos elementos

14 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales final int NUMEMPLEADOS = 30; int [] horas = new int[NUMEMPLEADOS]; // almacena las horas trabajadas de cada empleado for (int i=0; i

15 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales // Bernardo Enero-Junio 2005 public class DiasdelaSemana { public static void main(String[] args) { int dia,respuesta; System.out.println("Este programa le dira a que dia de la semana pertenece el numero escrito"); String dias[]= {"Domingo, "Lunes, "Martes, "Miercoles,"Jueves,"Viernes, "Sabado"}; respuesta=1; while (respuesta==1){ System.out.println("Escriba por favor un numero de dia de la semana: (del 0 al 6"); dia=Leer.datoInt(); if (dia>=0 && dia<=6){ System.out.println(dias[dia]); } else { System.out.println("Que el numero sea del 0 al 6"); } System.out.println("Desea continuar con la ejecución de este programa? (1=SI"); respuesta=Leer.datoInt(); } System.out.println("Programa finalizado"); } }

16 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales // Rafael Lopez enero-junio 2005 //Calcula los numeros primos segun el método de la criba de Eratostenes public class Primos { // el programa obtiene una lista de los numeros primos desde 0 hasta 99 public static void main (String args[]) { boolean numero[]=new boolean[100]; for (int i=0; i<100; i++) numero[i]=true; for (int i=2; i<100; i++) // procesa a todos los numeros desde 2 hasta 99 if (numero[i]) for (int m=i+i;m<100;m+=i) numero[m]=false; //los elementos del vector que quedan con valor TRUE son primos for(int i=1;i<100;i++) if (numero[i]) System.out.println(" " + i + " "); }

17 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales // Rafael Lopez /* Este programa calcula e imprime el promedio de 12 valores almacenados en un vector. * Obtiene cuantos son mayores que el promedio y cuales son dichas calificaciones. */ public class Promedio{ public static void main(String[]args){ double prom=0,suma=0; short i,lista=0; double calificaciones[]={50, 58, 65, 84, 42, 100, 99, 66, 65, 75, 02, 32}; for (i=0; i

18 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Errores mas comunes Uso de un índice fuera de rango valido Error de uno-menos. (el primer elemento se almacena en la posición 0 ) Confusion del índice de un elemento del arreglo con el elemento mismo Usar = para COPIAR un arreglo Usar == para COMPARAR dos arreglos En arreglos de dos dimensiones, confundir los índices de renglones y columnas Confundir la longitud de un arreglo length con un método length() de la clase String

19 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales La clase Arrays Esta clase contiene métodos para manipular arreglos (ordenamiento y busqueda) ademas de funciones que permiten ver a los arreglos como listas. java.util Class Arrays java.lang.Objectjava.lang.Object java.util.Arrays public class Arrays extends ObjectObject

20 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales métodos de la clase Arrays static int binarySearch(byte[] a, byte key)binarySearch static int binarySearch(char[] a, char key)binarySearch static int binarySearch(T[] a, T key, Comparator c)binarySearchComparator static boolean deepEquals(Object[] a1, Object[] a2)deepEqualsObject static String deepToString(Object[] a)StringdeepToStringObject static boolean equals(boolean[] a, boolean[] a2)equals static void fill(boolean[] a, boolean val)fill static int hashCode(byte[] a)hashCode static void sort(char[] a)sort static void sort(Object[] a, int fromIndex, int toIndex)sortObject static String toString(double[] a)StringtoString

21 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales // Ejemplo usando la clase Arrays // Define un arreglo de enteros y los ordena de menor a mayor import java.util.*; public class Ordena{ public static void main (String[] args){ int [] arraynum = {2,4,6,4,6,3,9,5,1,7,0}; System.out.println ("Arreglo original"+ Arrays.toString(arraynum)); Arrays.sort(arraynum); System.out.println ("Arreglo ordenado"+ Arrays.toString(arraynum)); int [] array2 = new int[11]; Arrays.fill(array2,0); System.out.println ("Arreglo 2 " +Arrays.toString(array2)); }

22 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

23 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Aplicaciones Escribe un programa que intente accesar en un arreglo un elemento que no existe (fuera del rango). Que sucede en la ejecución? Escribe un programa que almacene en un arreglo la denominación de billetes y monedas (1000, 500, 200, 100, 50, 20, 10, 5, 2, 1) lee de teclado una cantidad y procesa numero de billetes y monedas de cada denominación para tal cantidad. Define dos arreglos, alumnos y calificaciones, almacena datos en cada uno de ellos e imprime un listado de todos los alumnos que tienen calificación mayor que el promedio del grupo. Define dos arreglos, empleados y horas. Almacena datos en cada uno de ellos. Obtén dos arreglos mas, uno para impuesto y otro para el sueldo de cada empleado. Cada hora de trabajo normal (40 horas) se paga a $15, cada hora extra (>40) se paga a $20. El impuesto es igual al 6%. Obtén el total de sueldos pagados y un listado de la siguiente forma: Nombre Horas Sueldo_Bruto Impuesto Sueldo_Neto

24 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales La clase Vector java.util Class Vector java.lang.Object java.util.AbstractCollection java.util.AbstractList java.util.Vector Interfaces implementadas: SerializableSerializable, Cloneable, Iterable, Collection, List, RandomAccessCloneableIterableCollectionList RandomAccess Subclasses Directas: Stack public class Vector extends AbstractList AbstractList implements List, RandomAccess, Cloneable, SerializableListRandomAccessCloneableSerializable

25 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales La clase Vector La clase Vector implementa arreglos que pueden crecer en tiempo de ejecución. Los componentes de un objeto tipo Vector pueden ser accesados con un índice. El tamaño de un Vector puede crecer (adicionar elementos) o disminuir (remover elementos) durante la ejecución del programa.

26 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Operaciones Crear objetos de tipo Vector (Constructores) Agregar objetos a un vector –Al final (addElement) –En una posición especifica (insertElementAt) Accesar elementos del vector –En una posición –El primer elemento –El ultimo elemento Verificar si hay elementos –Esta vacío –Tamaño

27 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales VectorVector() Construye con capacidad inicial de 10 elementos VectorVector( Collection c ) CollectionE Constuye un vector con los elementos de la coleccion VectorVector( int initialCapacity ) Construye un vector con la capacidad inicial indicada Vector Vector (int initialCapacity, int capacityIncrement) Construye un vector con la capacidad inicial e incremento boolean add(E o) addE Agrega el elemento al final del vector void add(int index, E element) addE Inserta el elemento en la posición especificada boolean addAll( Collection c ) addAll CollectionE Agrega todos los elementos de la coleccion al final void addElement(E obj) addElementE Agrega un elemento al vector int capacity()capacity Regresa la capacidad actual del vector void clear() clear Remueve todos los elementos del vector Object clone() clone Regresa un clon del vector boolean contains(Object elem) containsObject Prueba si el objeto es un componente del vector E elementAt(int index) elementAt Regresa el componente en la posición indicada boolean equals(Object o) equalsObject Compara el objeto con el vector (igualdad) void insertElementAt(E obj, int index) insertElementAtE Inserta el componente en la posición indicada E remove(int index) remove Elimina y regresa el elemento en la posición indicada void removeElementAt(int index) removeElementAt Elimina el componente en la posición indicada int size() size Retorna el numero de elementos del vector Object[] toArray() toArray Retorna un areglo conteniendo todos los elementos String toString() toString Retorna la representacion String del vector

28 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo // autor Lucia Barron // Ejemplo usando las clases Vector y Arrays import java.util.*; // Realiza operaciones con un vector public class VectorP{ public static void main (String[] args){ Vector miVector = new Vector(); System.out.println ("Capacidad del Vector "+ miVector.capacity()); miVector.addElement("Lucia"); miVector.add(1,"Diana"); miVector.addElement("John"); miVector.addElement("Ana"); miVector.insertElementAt("Fay",2); //recorre los elementos de 2 en adelante Vector x = (Vector) miVector.clone(); // clona al vector System.out.println ("clon de miVector \n"+ x); if (miVector.equals(x)) System.out.println ("Son iguales"); else System.out.println ("NO son iguales"); Object[] y = x.toArray(); Arrays.sort(y); for (int i =0; i

29 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

30 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 1.2 Arreglos Bidimensionales. Un arreglo bidimensional tambien conocido como matriz o tabla, es una estructura de dos dimensiones con elementos homogeneos que se localizan por medio de dos índices. Java soporta directamente solo arreglos de una dimension, por lo cual los arreglos de mas dimensiones deben crearse como arreglos de arreglos.

31 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 1.2 Arreglos Bidimensionales. declaración de arreglos bidimensionales. // define un arreglo de dos dimensiones llamado matriz double [] [] matriz; // crea un arreglo de 3 filas y 5 columnas double[] [] matriz = new double[3][5]; matriz null matriz matriz[1][2] matriz[2][4]

32 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales inicialización del arreglo int [][] matriz = {{1,2,3,4,5},{4,5,6,7,8},{7,8,9,0,1}}; // creación e inicalizacion del arreglo matriz con 3 filas y 5 columnas de datos tipo int matriz

33 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Proceso del arreglo Los arreglos de dos dimensiones usan dos índices para accesar sus elementos. El primero se refiere a la fila y el segundo a la columna. Ejemplo: int[][] miArreglo = new int [3][4]; for (int i=0; i

34 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales // Ejemplo usando matrices // Realiza operaciones con una matriz de enteros y saca su promedio public class Matriz{ public static void main (String[] args){ int [] [] matriz = new int[3][4]; for (int i =0; i

35 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Los arreglos de dos dimensiones NO necesariamante tienen el mismo numero de elementos en cada fila. Ejemplo int [ ] [ ] ragged = new int[3] [ ]; ragged[0]= new int[2]; ragged[1]= new int[4]; ragged[2]= new int[3]; ragged for (int i=0; i

36 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Aplicaciones Define una matriz de 5 x 4 elementos, almacena numeros enteros generados en forma random (en el rango de 1 a 25). –Obten el total por columna y el total por fila. –Obten el promedio de cada columna. –Obten el numero de elementos que son pares. –Obten la posición (fila y columna) del elemento mayor –Busca un elemento y si se encuentra, despliega su posición. –Obten cuantas veces se repite un elemento –Coloca los elementos de la matriz en un arreglo de una dimension

37 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Aplicaciones Define dos matrices (lee el numero de filas y columnas de c/u) almacena numeros enteros generados en forma random. –Obten la suma de las dos matrices. –Obten la diferencia de las dos matrices. –Obten el producto de las dos matrices. –Obten la matriz transpuesta de cada una.

38 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Aplicaciones Implementa el juego del GATO. El juego del Gato en dos dimensiones consiste de –Un tablero de 3 x 3 –Dos fichas diferentes –Dos jugadores El juego consiste en que cada jugador tomara un turno alternado con el otro y colocara en cada turno una ficha en una posición del tablero que se encuentre en ese momento desocupada. El juego termina si: –No existen mas posiciónes vacias en el tablero del juego –Un jugador logro colocar una linea de fichas en forma vertical, horizontal o diagonal. (8 formas diferentes de ganar )

39 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 1.3 Arreglo Multidimensional. Un arreglo multidimensional es una estructura de elementos homogeneos que tiene tres o mas (n) dimensiones. El limite en el numero de dimensiones de un arreglo depende del lenguaje de programacion que se usa. Cada dimension se especifica con un par de []. Un arreglo de n dimensiones requiere de n índices para localizar a sus elementos

40 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales declaración de arreglos multidimensionales. // define un arreglo de tres dimensiones llamado ventas int [] [] [] ventas; // crea un arreglo de 3 paginas, 5 filas y 4 columnas Int [] [] [] ventas = new int [3] [5] [4]; ventas null ventas[0][1][2] ventas[2][4][3] Pagina 0 Pagina 1 Pagina 2

41 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Aplicaciones Representar las ventas de una compañia usando cada departamento de cada tienda de cada ciudad. Representar el inventario de productos de cada almacen de cada ciudad de cada estado. Representar el numero de estudiantes de cada carrera de cada facultad de cada universidad de cada ciudad de cada estado.

42 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 2. Métodos y mensajes. 2.1 Atributos const y static. 2.2 Concepto de método. 2.3 Declaración de métodos. 2.4 Llamadas a métodos (mensajes). 2.5 Tipos de métodos Métodos const, static Métodos normales y volátiles. 2.6 Referencia this. 2.7 Forma de pasar argumentos. 2.8 Devolver un valor desde un método. 2.9 Estructura del código.

43 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Clases Una clase contiene el código para la manipulacíon de objetos de esa clase. Constructores para crear objetos, variables para almacenar el estado de la clase y sus objetos y métodos que implementan el comportamiento de la clase y sus objetos. La clase tiene dos partes: –Encabezado –Cuerpo

44 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Encabezado de la clase Modificadores class Identificador Extiende Implementa Modificadores public private protected static final native synchronized abstract threadsafe Extiende extends IdentificadorDeClase Implementa implements ListaDeInterfaces

45 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplos [de Java Tutorial] public class Stack public class Stack implements Cloneable public class BINGO class RingMaster implements States public class Player extends JPanel implements ActionListener, ItemListener, BallListener public class Object public final class Math extends Object public class Vector extends AbstractList implements List, RandomAccess, Cloneable, Serializable

46 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Cuerpo de una Clase El cuerpo de la clase esta delimitado por { } declaraciónes de Miembros –Variables (declaración e inicialización) Variables de instancia Variables de clase –métodos (declaración implementacion) métodos de instancia métodos de clase declaración e implementacion de Constructores Bloque de inicialización

47 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo public class Punto { private int x=0; private int y=0; public static int totalPuntos =0; Punto (int _x, int _y){ x=_x; y=_y; totalPuntos++; } public void setx(int _x){ x= _x; } public String toString (){ return (+x+,+y+); } public class UsaPunto { public static void main(String[] args){ Punto punto1= new Punto(2,1); Punto punto2 = new Punto(5,5); Punto punto3 = punto1; Punto[] puntos = {punto1,punto2}; System.out.println(Arrays.toString(puntos)); System.out.println(Puntos creados + Punto.totalPuntos); } x=2 y=1 void setx(int _x) String toString () punto1punto2 x=5 y=5 void setx(int _x) String toString () punto3 métodos de instancia Miembros de instancia Punto totalPuntos = 0 Miembros de clase

48 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales public class Fruta { String nombre; int gramos; int caloriasPorGramo; Fruta (String n ){ nombre=n; } public void setPeso (int g ){ gramos=g; } public int getPeso ( ){ return gramos; } public void setCalorias(int c){ caloriasPorGramo =c; } public int getCalorias(){ return caloriasPorGramo; } public String toString (){ return nombre+" peso "+gramos+" gramos."; } Cuantos miembros tiene la clase Fruta? Que clase de miembros son? de instancia o de clase? Cuantos métodos existen? Escribe un programa que use la clase Fruta para crear varios objetos.

49 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 2.1 Atributos const y static. Un miembro estático (static) pertenece a la clase, no a las instancias de la clase (objetos) Los miembros anotados como static se crean cuando se carga la clase y permanencen ahi hasta que la clase es descargada. Los miembros estáticos se comparten (solo existe uno) entre todos los objetos de esa clase.

50 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales static (variables de clase) Las variables estaticas mantienen un solo valor que es accesado por todos los objetos de la clase. Las variables de clase se usan cuando solo se requiere una copia del dato el cual es compartido por todos los objetos de esa clase y sus clases derivadas.

51 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales class AnIntegerNamedX { int x; public int x() { return x; } public void setX(int newX) { x = newX; } AnIntegerNamedX myX = new AnIntegerNamedX(); AnIntegerNamedX anotherX = new AnIntegerNamedX(); myX.setX(1); anotherX.setX (2); System.out.println("myX.x = " + myX.x()); System.out.println("anotherX.x = " + anotherX.x()); class AnIntegerNamedX { static int x; public int x() { return x; } public void setX(int newX) { x = newX; }

52 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales static (métodos de clase) Un método declarado estático es un método de clase. Los métodos estáticos solo pueden operar sobre variables de clase y NO pueden accesar las variables de instancia.

53 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales class AnIntegerNamedX { int x; public static int x() { return x; } public static void setX(int newX) { x = newX; } // ERROR de compilacion AnIntegerNamedX.java:4: Can't make a static reference to nonstatic variable x in class AnIntegerNamedX. static int x;

54 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 2.2 Concepto de método. Un método es una parte de código que se encarga de implementar parte del comportamiento de un objeto. Un método tiene dos partes: –Encabezado –Cuerpo Un método se invoca usando un objeto. objeto.método(parámetros) Dentro del cuerpo de un método se pueden declarar variables locales.

55 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 2.3 Declaración de métodos. Modificadores void Identificador (parámetros) ; Modificadores void Identificador (parámetros) Cuerpo Modificadores tipo Identificador (parámetros) ; Modificadores tipo Identificador (parámetros) Cuerpo Modificadores public private protected package static final native synchronized abstract parámetros tipo identificador, …tipo identificador Cuerpo { estatutos }

56 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplos public boolean isEmpty() { if (items.size() == 0) return true; else return false; } abstract class GraphicObject { int x, y; void moveTo(int newX, int newY) { x = newX; y = newY; } abstract void draw(); } double calculaPago(double prestamo, double tasa, double valorFuturo, int periodos) { double I, partial1, denominator, answer; I = rate / 100.0; partial1 = Math.pow((1 + I), (0.0 - numPeriods)); denominator = (1 - partial1) / I; answer = ((-1 * loanAmt) / denominator) - ((futureValue * partial1) / denominator); return answer; }

57 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales public class OStack { private Object[] store= new Object[10]; private int size= 0; public void push (Object elem) { if (size >= store.length) { Object[] tmp = new Object[size*2]; System.arraycopy(store,0,tmp,0,store.length); store= tmp; } store[size++] = elem; } public Object pop() { return store[--size]; } public static void main (String [] args) { OStack x = new OStack(); x.push(new Integer(17)); Integer y = (Integer) x.pop(); }

58 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 2.4 Llamadas a métodos (mensajes). Los objetos pueden realizar operaciones para: –Manipular o inspeccionar sus variables –Ejecutar sus métodos. Los objetos se comunican con otros objetos a traves de mensajes. Un mensaje es una se ñ al que recibe un objeto para ejecutar alguno de sus métodos.

59 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales AnIntegerNamedX myX = new AnIntegerNamedX(); AnIntegerNamedX anotherX = new AnIntegerNamedX(); myX.setX(1); anotherX.setX(2); System.out.println("myX.x = " + myX.x()); System.out.println("anotherX.x = " + anotherX.x()); objeto.método() objeto.método(parámetros) OStack x = new OStack(); x.push(new Integer(17)); public class UsaPunto { public static void main(String[] args){ Punto punto1= new Punto(2,1); Punto punto2 = new Punto(5,5); punto1.setx(1); String s= punto1.toString() + punto2.toString(); }

60 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 2.5 Tipos de métodos. Abstractos - no tienen implementacion Finales – No se pueden redefinir en las clases derivadas estáticos – solo hay un método para todos los objetos. Sobrecargados – varios métodos con el mismo nombre y diferentes parámetros.

61 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Métodos finales Un método final es aquel que no se puede redefinir en sus clases descendientes Los métodos finales se utilizan cuando se desea que no cambie la implementacion en las clases derivadas

62 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 2.6 Referencia this. this es una variable especial que tiene un significado predefinido en el lenguaje Java. Se utiliza para referirse a los miembros específicos del objeto en ejecución (selección dinámica de métodos) Se usa para eliminar la ambigüedad cuando hay dos identificadores iguales Se puede usar para invocar a otros constructores que cumplan con los parámetros usados.

63 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplos public class Fruta { String nombre; int gramos; Fruta () { this(sin nombre,10); } Fruta (String n, int g ){ nombre=n; gramos = g; } public void setPeso (int g ){ gramos=g; } public int getPeso ( ){ return gramos; } class AnIntegerNamedX { int x; public int x() { return x; } public void setX(int x) { this.x = x; } Elimina ambiguedad Llama al constructor

64 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 2.7 Forma de pasar argumentos. parámetros –Formales – definidos en la declaración del método –Actuales – valores usados en la llamada al método public static void setX(int newX) { x = newX; } myX.setX(1); anotherX.setX(2);

65 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Pase de parámetros El pase de parámetros en Java es unicamente por valor. Los métodos pueden enviar como argumento –Datos Primitivos – los datos de tipo primitivo pasan su valor a los parámetros formales (los parámetros actuales no cambian despues de la ejecución del método) –Datos Referencia – los datos de tipo referencia (objetos) envian su direccion a los parámetros formales (los cambios en los parámetros formales afectan a los parámetros actuales)

66 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Pase de datos primitivos int r = -1, g = -1, b = -1; pen.getRGBColor(r, g, b); System.out.println("red = " + r + ", green = " + g + ", blue = " + b); class Pen { int redValue, greenValue, blueValue; void getRGBColor(int red, int green, int blue) { redValue = red; greenValue = green; blueValue = blue; } Las variables red, green y blue Pueden cambiar de valor Los valores de r, g y b se asignan a las variables red, green y blue Los valores de r, g y b no cambian despues de la ejecución

67 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Pase de referencias class RGBColor { public int red, green, blue; } class Pen { int redValue, greenValue, blueValue; void getRGBColor(RGBColor aColor) { aColor.red = redValue; aColor.green = greenValue; aColor.blue = blueValue; } RGBColor penColor = new RGBColor(); pen.getRGBColor(penColor); System.out.println("red = " + penColor.red + ", green = " + penColor.green + ", blue = " + penColor.blue);

68 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 2.8 Devolver un valor desde un método. Los métodos pueden regresar valores –Como resultado del método –En los argumentos (parámetros referencia) public int x() { return x; } public Object pop() { return store[--size]; } public boolean isEmpty() { return (items.size() == 0); } void getRGBColor(RGBColor aColor) { aColor.red = redValue; aColor.green = greenValue; aColor.blue = blueValue; }

69 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 2.9 Estructura del código. paquete clase atributos métodos Variables locales interface métodos clase atributos métodos Variables locales interface métodos

70 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 3. Constructor, destructor. 3.1 Conceptos de constructor y destructor. 3.2 Declaración de constructor y destructor. 3.3 Aplicaciones de constructores y destructores. 3.4 Tipos de constructores y destructores.

71 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 3.1 Conceptos de constructor y destructor. Los constructores son métodos especiales que se invocan para crear (inicializar) nuevos ejemplares de una clase, a este proceso se le conoce como instanciacion. Los constructores usan el mismo nombre de la clase Java soporta la sobrecarga de constructores. Pueden existir varios constructores para una clase, estos se distinguen por los parámetros que contienen.

72 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo // usando la clase Punto para crear objetos public static void main(String[] args){ Punto p1 = new Punto(); System.out.println(p1); Punto p2 = new Punto(2,3); System.out.println(p2); Punto p3 = new Punto(p1); System.out.println(p3); } public class Punto { private int x=0; private int y=0; public static int totalPuntos =0; Punto (){ totalPuntos++; } Punto (int _x, int _y){ x=_x; y=_y; totalPuntos++; } Punto (Punto p){ this.x = p.x; this.y = p.y; totalPuntos++; } public void setx(int _x){ x= _x; } public String toString (){ return (+x+,+y+); }

73 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales La clase Punto tiene los siguientes métodos constructores –Punto () – crea un objeto con los valores definidos en la declaración –Punto(x:int, y:int) - inicializa las coordenadas del punto con los valores x,y –Punto(Punto p) - inicializa las coordenadas del punto con los valores de las coordenadas del punto p

74 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales En el momento de crear un ejemplar, se puede usar cualquiera de los constructores disponibles El entorno descubre cual es el que se desea llamar por medio del número y tipo de los argumentos Punto p1 = new Punto(); //llamada sin parámetros Punto p2 = new Punto(p1); //llamada con un parámetro de tipo Punto Punto p3 = new Punto(2,5); //llamada con dos parámetros enteros

75 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo 2 Cuantos constructores tiene la clase Fruta? Que hace el constructor que no tiene parámetros? Como se pueden crear ejemplares de Fruta? public class Fruta { String nombre; int gramos; Fruta () { this(sin nombre,10); } Fruta (String n, int g ){ nombre=n; gramos = g } public void setPeso (int g ){ gramos=g; } public int getPeso ( ){ return gramos; }

76 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Destructores Disponibles en lenguajes o entornos en los que el responsable de devolver la memoria es el programador Un destructor es un método que se invoca inmediatamente antes de que se libere la memoria donde se almacena un objeto –Los destructores realizan todas las tareas que se desean realizar sobre un objeto antes de destruirlo, pero no realizan esta destrucción –La destrucción se realiza por medio de funciones del sistema como dispose() en Pascal

77 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Recolección de basura La basura son pedazos de memoria que ya no seran utilizados por el programa. La recolección de basura es realizada por el sistema periódicamente Esta es una operación de alto costo (consume tiempo de ejecución) La utilización de funciones de devolución de memoria obliga a trabajar con cuidado para no intentar acceder posteriormente a zonas de memoria que ya no estan disponibles

78 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Recolección de basura Existen entornos o lenguajes de POO en los que el sistema se encarga de devolver la memoria que no está siendo utilizada (Java) Este proceso se denomina recolección de basura (garbage collection), y consiste en –Recorrer todas las referencias del programa marcando todas las zonas de memoria que permanecen accesibles –Recorrer toda la memoria devolviendo al sistema aquellas zonas que no están marcadas

79 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 3.2 Declaración de constructores. Constructor default. Java provee automaticamente un constructor cuando el programador no declara explcitamente al menos uno. Este constructor no contiene parámetros formales y cuando es invocado, las variables de instancia asumen los valores definidos en su declaración o sus valores default. –Campos numericos = 0 Campos boolean = false –Campos char = Unicode 0Campos referencia = null

80 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 3.2 Declaración de constructores. Constructor explictamente declarado. Son constructores definidos por el programador para efectuar el proceso de inicialización de variables de instrancia en la creación de objetos. Los constructores se definen con el mismo nombre de la clase Modificadores NombreClase (parámetros) ClausulasThrows Cuerpo

81 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Una clase puede contener diversos constructores. Cuando un constructor invoca a otro usando this, esta llamada debe ser la primera instruccion del cuerpo del constructor. Los constructres solo pueden invocarse para construir objetos. Los constructores NO son considerados miembros de la clase.

82 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales creación de objetos con constructores 1.Se obtiene espacio de memoria. 2.Se limpia la memoria (valores default) 3.Se puede llamara a otro constructor en la misma clase. 4.Se llama al constructor de la clase padre ya sea implicitamente o explicitamente usando super. 5.Los campos inicializados explicitamente con una asignacion se ejecutan. 6.Se ejecuta el resto de las instrucciones del cuerpo del constructor.

83 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 3.3 Aplicaciones de constructores. Define los atributos y constructores para las clases de cada uno de los siguientes elementos: 1.Alumnos 2.Profesores 3.Tecnologicos 4.Rectangulos 5.Proveedores 6.Mascotas 7.Libros Solo define el encabezado de los métodos, no su implementacion.

84 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 3.4 Tipos de constructores. Privados (private). –Ninguna otra clase puede crear instancias usando este constructor. –Algunos métodos de la clase, pueden usar el constructor para crear instancias de la clase y regresarlas como resultado. Estos métodos se les llama fabricas (factory method)

85 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 3.4 Tipos de constructores. Protegidos (protected). –Solo clases derivadas y clases en el mismo pakete pueden crear instancias usando estos constructores. Paquete (package o no especificado). –Solo las clases dentro del mismo paquete pueden crear instancias usando este constructor.

86 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 3.4 Tipos de constructores. class AnimationThread extends Thread { int framesPerSecond; int numImages; Image[] images; AnimationThread(int fps, int num) { super("AnimationThread"); // llama al constructor de la superclase this.framesPerSecond = fps; // inicializa las var. de instancia this.numImages = num; this.images = new Image[numImages]; for (int i = 0; i <= numImages; i++) {... // Load all the images.... }... }

87 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 4. Sobrecarga. 4.1 Conversión de tipos. 4.2 Sobrecarga de métodos. 4.3 Sobrecarga de operadores. Ejemplos

88 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 4.1 Conversión de tipos. Existen dos formas de convertir tipos de datos a otros tipos. –Implícita. –Explícita. A esta operación de conversión se le conoce como coerción.

89 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Conversion de tipos Se pueden sumar un dato entero (int) y un real (float)? Se pueden concatenar datos String con enteros? Resultado + total

90 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Para realizar las operaciones es necesario hacer una conversion de datos a un solo tipo. –Implícita. La conversión implícita es realizada por el compilador automáticamente para efectuar algunas operaciones. Ej. La concatenación de elementos en un println. –Explícita. La conversión explícita es especificada por el programador para convertir un dato a otro tipo específico. Ej. Usando operaciones de cast.

91 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Conversiones Los datos primitivos pueden convertirse en dos formas: –Ampliando el dato (Widening) Es una operación segura porque no pierde información (una conversión de punto flotante puede perder precisión) –Reduciendo el dato (Narrowing) Es una operación insegura porque va de un tipo a otro que usa menos espacio de memoria para su representación.

92 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Conversiones permitidas en Java (Widening) De A byte short, int, long, float, double short int, long, float, double char int, long, float, double int long, float, double long float, double float double

93 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Conversiones permitidas en Java (Narrowing) De A byte char short byte, char char byte, short int byte, short, char long byte, short, char, int float byte, short, char, int, long double byte, short, char, int, long, float

94 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Cual es el tipo de dato primitivo que no aparece en las conversiones? Los datos de tipo boolean NO se pueden convertir de ninguna forma.

95 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Formas de realizar conversiones En una asignacion. float dinero; int pesos; dinero = pesos; // ok! Se convierte automáticamente pesos = dinero; // ERROR!! Una promoción aritmética perimetro = 5 * 3.14; // conversión antes de la multiplicación Una operacion de cast pesos = (int) dinero; // ok! Se convierte antes de la asignación

96 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 4.2 Sobrecarga de métodos. El polimorfismo es una de las principales características de los Lenguajes de Programación Orientados a Objetos. El polimorfismo se divide en: –Ad hoc Sobrecarga Coerción –Universal Paramétrico Inclusión (subtipos)

97 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 4.2 Sobrecarga de métodos. Sobrecarga significa usar un identificador para referirse a múltiples elementos en el mismo ámbito. Java permite al programador sobrecargar métodos y constructores pero no variables u operadores.

98 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo: el método println println (String s) println (int i) println (double d) println (char c) println (boolean b) println (String s) System.out.println(Numero total de estudiantes ); System.out.println(totalEstudiantes);

99 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales public class DataTypePrintTest { public static void main(String[] args) { Thread objectData = new Thread(); String stringData = "Java Mania"; char[] charArrayData = { 'a', 'b', 'c' }; int integerData = 4; long longData = Long.MIN_VALUE; float floatData = Float.MAX_VALUE; double doubleData = Math.PI; boolean booleanData = true; System.out.println(objectData); System.out.println(stringData); System.out.println(charArrayData); System.out.println(integerData); System.out.println(longData); System.out.println(floatData); System.out.println(doubleData); System.out.println(booleanData); } Salida Thread[Thread-4,5,main] Java Mania abc e true

100 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 4.3 Sobrecarga de operadores. Java provee implícitamente la sobrecarga de operadores pero NO permite que el programador defina explícitamente la sobrecarga de ellos. Algunos otros lenguajes como C++ y Ada OO, permiten la sobrecarga de los operadores.

101 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Operadores sobrecargados OperatorUsoDescripcion + op1 + op2 Suma op1 y op2 ; tambien se usa para concatenar Strings - op1 - op2 Resta op2 de op1 * op1 * op2 Multiplica op1 y op2 / op1 / op2 Divide op1 y op2

102 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Sobrecarga Los métodos sobrecargados tienen firmas distintas. Cuando existen métodos sobrecargados, las llamadas se resuelven en tiempo de compilación. El compilador usa la firma del método para identificar el código que se ejecutará.

103 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo: Usando cast public class Point { private int x = 0; private int y = 0; public static int totalPuntos = 0; // a constructor public Point (){ totalPuntos++; } public Point(int x, int y) { this.x = x; this.y = y; totalPuntos++; } public Point(Point p) { this.x = p.x; this.y = p.y; totalPuntos++; } public void setx(int _x){ x= _x; } public Point medio (Point p){ return new Point((p.x+x)/2, (p.y+y)/2); } public String toString (){ return "("+x+","+y+")"; } } import java.util.Vector; public class UsaPoint { public static void main(String[] args){ Vector puntos = new Vector(); Point origen = new Point(0,0); Point p=null;; for (int i =0; i<5; i++){ p= new Point(i,i+1); puntos.addElement(p); } System.out.println("Punto1\t Punto2\t Punto medio"); for (int i=0; i<5; i++){ p= (Point)puntos.elementAt(i); System.out.println(origen+"\t"+p+"\t"+p.medio(origen)); }

104 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo: Usando parámetro de tipo public class Point { private int x = 0; private int y = 0; public static int totalPuntos = 0; // a constructor public Point (){ totalPuntos++; } public Point(int x, int y) { this.x = x; this.y = y; totalPuntos++; } public Point(Point p) { this.x = p.x; this.y = p.y; totalPuntos++; } public void setx(int _x){ x= _x; } public Point medio (Point p){ return new Point((p.x+x)/2, (p.y+y)/2); } public String toString (){ return "("+x+","+y+")"; } } import java.util.Vector; public class UsaPointParmetrizado { public static void main(String[] args){ Vector puntos = new Vector (); Point origen = new Point(0,0); Point p=null;; for (int i =0; i<5; i++){ p= new Point(i,i+1); puntos.addElement(p); } System.out.println("Punto1\t Punto2\t Punto medio"); for (int i=0; i<5; i++){ p= puntos.elementAt(i); System.out.println(origen+"\t"+p+"\t"+p.medio(origen)); }

105 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejercicios Investigar en la clase Math cuales métodos están sobrecargados. Describe dos situaciones distintas en las que una clase requiere de un método sobrecargado. Agrega a la clase Point dos métodos llamados move –Parámetros (Point) movimiento absoluto –Parámetros (int, int) movimiento relativo

106 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 5. Herencia. 5.1 Introducción a la herencia. 5.2 Herencia simple. 5.3 Herencia múltiple. 5.4 Clase base y clase derivada Definición Declaración. 5.5 Parte protegida Propósito de la parte protegida. 5.6 Redefinición de los miembros de las clases derivadas. 5.7 Clases virtuales y visibilidad. 5.8 Constructores y destructores en clases derivadas. 5.9 Aplicaciones.

107 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Que es herencia? Herencia*. Derecho a heredar. Heredar*. Recibir los bienes, derechos y acciones de una persona. * Diccionario Pequeno Larousse Ilustrado, Ed. Larousse 2003.

108 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 5.1 Introducción a la Herencia. Herencia es el acto de derivar una nueva clase de una ya existente. La herencia es una tecnica fundamental para organizar y crear clases. Incrementa la reutilizacion de código al desarrollar nuevos programas. Se pueden crear referencias polimorficas a partir de una jerarquia de clases definida con herencia.

109 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Herencia Reutilizacion de software Organizacion jerarquica –Superclase (clase padre) –Subclase (clase derivada) ejecución dinamica a traves de mensajes Acceso protegido para especializadores Sobreescritura (especializacion de comportamiento)

110 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Tipos de Herencia Herencia Simple o Multiple Define el numero de clases/interfaces padre –Simple. Una sola clase/interface padre –Multiple. Mas de una clase/interface padre Herencia de implementacion o de Interface –Implementacion. Hereda comportamiento –Interface. Hereda solo la estructura Herencia Mixin Crea nuevas clases mezclando una clase con otra clase especial

111 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 5.2 Herencia simple. Solo existe una clase padre. Object Point ColorPoint D3Point

112 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 5.3 Herencia múltiple. Existen muchas clases padre. Object Point ColorPoint Color La herencia Multiple de Implementacion puede generar el Problema Diamante

113 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo Problema diamante class link { … } class task : public link { virtual debug* get_d (); } class job : public link { virtual debug* get_d (); } class myClass : public task, public job{ …. } debug* d = s-> get_d(); // error! ambiguous method invocation debug* e = s -> job::get_d(); // explicit delegation using class job debug* f = s -> task::get_d();// explicit delegation using class task código en C++

114 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Herencia Mixin Clase 1mixin nueva class // mixin definition mixin Undo { inherited String getText( ); //must be in the class to be mixed inherited void setText(String s); //must be in the class to be mixed String lastText; void setText(String s) { lastText = getText( ); super.setText(s); } void undo( ) { setText(lastText); } } class Textbox extends Component { // a class with getText and setText String text; … String getText( ) { … } void setText(String s) { … } } class TextboxWithUndo = Undo extends Textbox { } // new class

115 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Herencia en Java La herencia ocurre cuando una clase adopta y/o adapta las estructuras y métodos de una clase base (clase padre) e implementa los métodos de una o mas interfaces. Herencia Simple de Implementacion Una clase solo puede tener una clase padre Herencia Multiple de Interfaces Una clase puede tener muchas interfaces padre

116 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Object es la clase mas general. La clase Object definida en el paquete java.lang define e implementa el comportamiento que todas las clases requieren. Las clases se derivan de Object o de otras clases lo que forma una jerarquia de clases. Las clases de los niveles bajos de la jerarquia definen un comportamiento mas especializado. Una subclase se deriva de otra clase. La superclase es la clase que es el ancestro directo de otra clase. Cada clase tiene solo una superclase inmediata.

117 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 5.4 Clase base y clase derivada. Clase base. Es aquella que se usa para definir una nueva clase (usando la parte extends del encabezado de definicion de clase). Clase derivada. Es la clase que agrega y/o especializa elementos a una clase base. La clase derivada hereda a todos los miembros definidos en la clase base y puede usar directamente todos aquellos que tiene acceso public o protected. Los constructores NO son miembros, por lo tanto no se heredan.

118 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo package java.awt; public class Window ….{ … public Window(Frame owner) { … } public class WarningWindow extends java.awt.Window{ … } Clase derivada (subclase de Window) (superclase de WarningWindow) Clase base

119 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo Clases derivadas Clase base

120 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo Alumno Persona ProfesorSecretaria Usando la sintaxis de Java Definir las clases: Persona Alumno Profesor Secretaria

121 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Cuantas diferentes jerarquias se pueden crear? Animal HerbivoroCarnivoro Animal DomesticoSalvajeCorral Animal ReptilAveMamifero

122 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales public class ColorPoint extends Point { private String color = "rojo"; public void setColor (String c){ color = c; } public String getColor(){ return color; } public String toString(){ return super.toString()+","+color; } public static void main(String[] args){ ColorPoint c1 = new ColorPoint(); System.out.println(c1); c1.setx(5); // heredado c1.setColor("blanco"); System.out.println(c1); Point p1 = new ColorPoint(); p1.move(2,3); System.out.println(p1); } public class Point { private int x = 0; private int y = 0; public static int totalPuntos = 0; // a constructor public Point (){ totalPuntos++; } public Point(int x, int y) { … } public Point(Point p) { … } public void setx(int _x){ x= _x; } public Point medio (Point p){ return new Point((p.x+x)/2, (p.y+y)/2); } public String toString (){ return "("+x+","+y+")"; } }

123 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales public class Alumno extends Persona{ // atributos // métodos nuevos // métodos sobreescritos } public class Persona { String nombre; Calendar fechaNacimiento; public Persona(String n){ nombre = n; … } public String toString(){ return nombre; } Agrega a la clase Alumno los elementos necesarios para su funcionamiento

124 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 5.5 Parte protegida. Los miembros o constructores protegidos pueden ser accesados desde fuera del paquete en el cual se declararon solo por el código que es responsable de la implementacion del objeto que realiza el acceso.

125 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo package algunPaquete; public class Padre { protected int a; … } package otroPaquete; public class Hijo extends Padre { public boolean equal(Hijo p){ return a == p.a; // Ok! } public int getIt(Padre p){ return p.a; // ERROR // p debe ser Hijo o subclase de Hijo } … }

126 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo package points; public class Point { protected int x, y; public void move(int dx, int dy) { x += dx; y += dy; } … } package threePoint; import points.Point; public class Point3d extends Point { protected int z; public void delta(Point p) { p.x += this.x; // compile-time error: cannot access p.x p.y += this.y; // compile-time error: cannot access p.y } public void delta3d(Point3d q) { q.x += this.x; q.y += this.y; q.z += this.z; } Cuando la clase Point3D se coloca en el mismo paquete que la clase Point no existen errores de compilacion

127 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 5.6 Redefinición de los miembros de las clases derivadas. La redefinicion de un método se da cuando una subclase contiene un método con la misma firma (mismo nombre y numero, tipo y orden de los parámetros) que la clase base.

128 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales public class MyClass { private int anInt = 4; //Overrides toString in Object class. public String toString() { return "Instance of MyClass. anInt = " + anInt; } public class MyClass { private int anInt = 4; //Overrides toString in Object class. public String toString() { return "Instance of MyClass. anInt = " + anInt; } //Overloads toString method name to provide //additional functionality. public String toString(String prefix) { return prefix + ": " + toString(); }

129 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales public class Animal { public static void hide() { System.out.println("The hide method in Animal."); } public void override() { System.out.println("The override method in Animal."); } public class Cat extends Animal { public static void hide() { System.out.println("The hide method in Cat."); } public void override() { System.out.println("The override method in Cat."); } public static void main(String[] args) { Cat myCat = new Cat(); Animal myAnimal = (Animal)myCat; myAnimal.hide(); myAnimal.override(); } //The output from this program is as follows: The hide method in Animal. The override method in Cat.

130 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 5.7 Clases virtuales y visibilidad. Java no contiene clases virtuales. Visibilidad, se aplica solamente a las variables de instancia y determina si la variable puede utilizarse fuera de la clase en la cual es declarada. Se establece mediante un modificador de acceso. Los modificadores de acceso son: –Public –Private –Protected –Package

131 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Especificadores de acceso public: Cualquier clase en cualquier paquete, tiene acceso a los miembros públicos. private: Un miembro privado es accesible solo en la clase donde fue definido.Usa este tipo de especificador para miembros que solo deben ser utilizados por la clase.

132 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo private: class Alpha { private int iamprivate; public int iampublic; } class Beta { void accessMethod() { Alpha a = new Alpha(); a.iamprivate = 10; // illegal a.iampublic; // legal } }

133 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales protected: Los miembros protected solo pueden ser accesados por la clase, subclases y todas las clases del mismo paquete. Usa los miembros protegidos cuando deseas que los miembros sean usados por subclases, pero no clases no relacionadas. Especificadores de acceso

134 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales package A; public class Foo{ int x; void bar() { Example e=new Example(); x=e.i; x= e.j; x=e.k; x=e.l; } } package A; public class Example{ public int i; int j; //package protected int k; private int l; X Que pasa si cambiamos de paquete a la clase Example?

135 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Especificadores de acceso Si no se define ningún especificador de acceso, package es el que se establece. En este nivel se permite a todas las clases del mismo paquete de la clase actual, acceder a sus miembros.

136 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales package B; import A.*; public class Foo{ int x; void bar() { Example e=new Example(); x=e.i; x= e.j; x=e.k; x=e.l; } } package A; public class Example{ public int i; int j; //package protected int k; private int l;

137 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales package B; import A.Example; public class Foo extends A.Example{ int x; void bar() { Example e=new Example(); x=e.i; x= e.j; x=e.k; x=e.l; } x=this.k; //ok } package A; public class Example{ public int i; int j; //package protected int k; private int l;

138 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Package y Protected Podemos referenciar nuestra propia variable protected (variable k) que se heredo de la clase Example, es por eso que se permite: x=this.k; Pero no se puede referenciar las variables protected del objeto padre de manera directa, solo se puede hacer esto a travez de la herencia.

139 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Especificadorclasssubclasspackageworld private X protected XXX public XXXX package X X Resumen de Modificadores de acceso

140 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 5.8 Constructores y destructores en clases derivadas. Java no tiene destructores explícitos. Los constructores deben tener el mismo nombre de la clase. No es obligatorio definir un constructor para la clase. Si no se hace, el Java runtime system provee uno por default, el cual crea la instancia de la clase.

141 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Características de los Constructores No tienen valores de retorno Una clase puede tener varios constructores sobrecargados, los cuales permiten a los objetos de esa misma clase inicializarse de distinta manera.

142 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 5.8 Constructores y destructores en clases derivadas. Java no tiene destructores explicitos.

143 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 5.9 Aplicaciones. Definir una clase base Definir una subclase –Constructores Llame a super No llame a super –Sobreescritura –Sobrecarga

144 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 6. Polimorfismo y reutilización. 6.1 Concepto del polimorfismo. 6.2 Clases abstractas Definición Redefinición. 6.3 Definición de una interfaz. 6.4 Implementación de la definición de una interfaz. 6.5 Reutilización de la definición de una interfaz. 6.6 Definición y creación de paquetes / librería. 6.7 Reutilización de las clases de un paquete / librería. 6.8 Clases genéricas (Plantillas).

145 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 6.1 Concepto del polimorfismo. Polimorfismo: propiedad de un cuerpo que puede cambiar su morfologia sin cambiar su naturaleza.* El polimorfismo de subtipos es una caracteristica fundamental de los LPOO. Categorias de polimorfismo: –Ad hoc (coercion y sobrecarga) –Universal (subtipos y parametrico) * Diccionario Pequeno Larousse Ilustrado, Ed. Larousse 2003.

146 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo de polimorfismo public class OStack { private int top=0; private int size; private Object[] store= new Object[size]; public OStack (){ this(10); } public OStack (int s){ size = s; } public void push (Object elem) { if (top >= store.length) { //size = store.length; Object[] tmp = new Object[store.length+size]; System.arraycopy(store,0,tmp,0,store.length); store= tmp; } store[top++] = elem; } public Object pop() { return store[--size]; } public String toString(){ String s = new String(" Resultado "); for (int i=0; i

147 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Redefiniendo métodos (sobrescritura) Es la habilidad de una subclase de redefinir el método de una superclase cuyo comportamiento es muy parecido, pero diferente, en la subclase.

148 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo de redefinición de método public class Stack { private Vector items; // code for Stack's methods and constructor not shown // overrides Object's toString method public String toString() { int n = items.size(); StringBuffer result = new StringBuffer(); result.append("["); for (int i = 0; i < n; i++) { result.append(items.elementAt(i).toString()); if (i < n-1) result.append(","); } result.append("]"); return result.toString(); } }

149 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Propiedades a considerar al momento de la redefinición El tipo de retorno, nombre del método, número, tipo y orden de los parámetros para el método redefinido debe ser igual que para el método original. El método redefinido puede tener una claúsula throws igual que el original. El método redefinido puede tener mayor acceso que el método redefiniendo, pero no menos. Ej.- Un método protected en la superclase puede hacerse public, pero no private.

150 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Llamando al método redefinido de la superclase super.overriddenMethodName();

151 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales ¿Qué métodos no se puede redefinir? Un método definido como final en la superclase, no se puede redefinir. Tampoco se puede redefinir los métodos static (métodos de clase).

152 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Descendientes de la clase Object Como la clase Object es superclase de todas las clases. Ésta define el estado y comportamiento básico que todo objeto debería tener: –Habilidad para compararse. –Habilidad para convertirse en String. –Habilidad para regresar la clase del objeto. Entre otras … Todas estas habilidades se implementan redefiniendo algunos métodos de la clase Object.

153 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Métodos que se pueden o no redefinir Se pueden redefinir: –clone –equals (usado para comparar objetos) –finalize (se invoca cuando el objeto se destruye, no se recomienda redefinir). –toString (representación como String del objeto).

154 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales El método equals Se utiliza para comparar dos objetos. La clase debe sobreescribir este método para comparar los atributos de los objetos Para realizar una comparacion se invoca al método: –unObjetos.equals(otroObjeto);

155 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo equals public class Point { private int x = 0; private int y = 0; public static int totalPuntos = 0; // a constructor public Point (){ totalPuntos++; } public Point(int x, int y) {… } public Point(Point p) {… } public void setx(int _x){ x= _x; } public boolean equals(Object o){ Point p = (Point) o; return ((x==p.x) && (y==p.y)); } public Point medio (Point p){ return new Point((p.x+x)/2, (p.y+y)/2); } public String toString (){ return "("+x+","+y+")"; }

156 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo equals public class ColorPoint extends Point { private String color = "rojo"; public void setColor (String c){ color = c; } public String getColor(){ return color; } public String toString(){ return super.toString()+","+color; } // redefinicion del método equals } // Resultado de Point p0 = new Point(); ColorPoint cp = new ColorPoint(); p0.equals(p0); p0.equals(cp); cp.equals(p0); cp.equals(cp);

157 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 6.2 Clases abstractas. Una clase abstracta es una definicion parcial (incompleta) de un grupo de elementos. Una clase abstracta contiene métodos abstractos (no estan implementados). Las clases abstractas se usan para definir jerarquias de clases (herencia) que contienen comportamiento y estructura. La definicion de clases abstractas forza la redefinicion (sobreescritura) de métodos.

158 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Clases abstractas La palabra reservada abstract aparece en el encabezado de la definicion de la clase cuando esta contiene cero o mas métodos abstractos. Una clase abstracta se usa cuando: –Habra varias subclases –Se desea manejar a todas las diferentes subclases como instancias de la superclase –La superclase por si misma no tiene sentido como un objeto.

159 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo // con algunos identificadores cambiados public abstract class Component { … public abstract void DrawMeOnScreen(); … } public class Button extends Component { … public void DrawMeOnScreen(){ // implementacion } public class ScrollBar extends Component { … public void DrawMeOnScreen(){ // implementacion } Es posible crear instancias de las clases Button o ScrollBar pero NO de Component.

160 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Jerarquía de clases Empleado Asalariado Empleado por Comisión Empleado por Horas Empleado Base Más Comisión Observaciones: Existe un método ingresos que se aplica genéricamente a todos los empleados. El cálculo de los ingresos de cada empleado depende de su clase.

161 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales public abstract class Employee { private String firstName; private String lastName; private String socialSecurityNumber; // constructores … // métodos comunes a todos los trabajadores … // método abstracto sobreescrito por las subclases public abstract double ingresos(); // no hay implementacion aqui } public class SalariedEmployee extends Employee { private double weeklySalary; // calcula ingresos; sobreescribe el método abstracto ingresos en Employee public double ingresos() { return getWeeklySalary(); }

162 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 6.3 Definición de una interface.* Una interface es un dispositivo o sistema que dos entidades usan para interactuar entre ellas. interface Palabra clave del lenguaje Java(TM) usada para definir una coleccion de métodos y valores constantes. Esta puede ser implementada posteriormente por clases que usando la palabra clave implements. * De Java Tutorial

163 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Una interface es una coleccion de constantes y métodos sin implementacion. Una interface se usa para definir la estructura de un grupo de elementos. Los identificadores de interfaces pueden usarse como tipos para referenciar variables.

164 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Definición de una interface. Una interface se define en dos partes: –Encabezado –Bloque ModificadorAcceso interface Identificador Superinterfaces { //constantes //métodos } extends ListaDeInterfaces

165 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Interfaces Una interface establece una garantia de los servicios que un objeto proporciona. Las interfaces permiten efectuar llamadas polimorficas donde el método que se invoca se selecciona del objeto actual que se encuentra en ejecución. Las interfaces permiten que multiples clases compartan datos definidos en una localidad.

166 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Interfaces Una interface se usa para definir un protocolo de comportamiento que puede ser implementado por culaquier clase de la jerarquia cuando: –Se requiere un identificador comun para un parámetro de un método. –Deseas compilar tu código sin tener una implementacion del objeto particular. –Se requiere especificar la firma exacta de los métodos que deben proveerse por todas las clases que implementen la interface. –Capturar similaridades entre clases no relacionadas

167 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Interfaces y Clases Abstractas Las interfaces y las clases abstractas se usan como mecanismos para definir jerarquias (de clases) mas finas. Una clase puede heredar la estructura de muchas interfaces. Java cuenta con un conjunto de clases abstractas e interfaces dentro de sus APIs

168 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Interfaces y Clases Abstractas No contiene métodos implementados No forma parte de la jerarquia de clases Puede extender muchas interfaces Los métodos definidos en una interface son implicitamente abstractos Puede contener métodos implementados Es parte de la jerarquia de clases Puede extender solo una superclase Los métodos abstractos deben ser explicitamente definidos

169 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 6.4 Implementación de la definición de una interface. public interface StockWatcher { void valueChanged(TickerSymbol tickerSymbol, BigDecimal newValue); } public class StockApplet extends Applet implements StockWatcher { public void valueChanged(TickerSymbol tickerSymbol, BigDecimal newValue) { switch (tickerSymbol) { case SUNW:... break; case ORCL:... break; case CSCO:... break; default: // handle unknown stocks... break; }

170 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Interfaces como tipos public class StockMonitor { public void watchStock(StockWatcher watcher, TickerSymbol tickerSymbol, BigDecimal delta) {... } El identificador de la interface define el tipo del parámetro. Cualquier objeto de una clase que implemente StockWatcher puede ser usado como parámetro actual

171 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 6.5 Reutilización de la definición de una interface Las interfaces no pueden crecer (modificar la interface para agregarle mas métodos). Esto provocaria errores (inconsistencias) en las clases que actualmente implementan la interface. Una interface puede extender a otra interface para agregarle nuevos métodos.

172 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales // NO actualizar la interface en esta forma!! public interface StockWatcher { void valueChanged(TickerSymbol tickerSymbol, BigDecimal newValue); void currentValue(TickerSymbol tickerSymbol, BigDecimal newValue); } public interface StockTracker extends StockWatcher { void currentValue(TickerSymbol tickerSymbol, BigDecimal newValue); }

173 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Tarea de Interfaces Investigar la interface Comparable del paquete java.lang Investigar las interfaces Collection e Iterator del paquete java.util Incluir un ejemplo del uso de dichas interfaces (30% del examen)

174 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 6.6 Definición y creación de paquetes / librería. Un paquete (package) es una coleccion de archivos.class relacionados, los cuales se encuentran en un subdirectorio. Un paquete es una biblioteca (library) de clases y a su vez es un subdirectorio. Paquete = Directorio (nombre del paquete debe ser igual al nombre del directorio) Clase = Archivo (nombre de la clase debe ser igual al nombre del archivo)

175 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Definición y creación de paquetes / librería Los paquetes se utilizan para agrupar diversas clases dandoles un nombre de grupo que pueda identificarlas. Los paquetes permiten asignar a las clases nombres que incluyen la ruta donde estas se localizan. (Nombres completos) package java.util.zip; public class ZipFile {…} Nombre completo de la clase java.util.zip.ZipFile

176 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Definición y creación de paquetes / librería paquete clase atributos métodos Variables locales clase atributos métodos Variables locales interface métodos Subpaquete interface métodos clase atributos métodos Variables locales TAREA: Investigar como se selecciona el nombre de un paquete.

177 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Los paquetes permiten definir un espacio de nombres (namespace) Los paquetes NO tienen interfaces propias Los paquetes NO permiten obtener diferentes vistas de sus elementos

178 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo empleadoscondominosfinanzas Empleado EmpleadoHora EmpleadoBase Nomina ABCC sac Recibos Reportes Condomino ABCC Servicios EdoFinanciero Gastos Compras etc

179 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Definición y creación de paquetes / librería Una unidad de compilacion (clase o interface) puede iniciar con un estatuto que defina a que paquete pertenece: package poo.proyecto1; La ausencia de esta declaración, coloca la clase en un paquete anonimo en el mismo directorio donde se almacena el archivo.

180 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Empleado Base Empleado Hora Empleado Comision package sac.empleados; public abstract class Empleado{…} package sac.empleados; public class EmpleadoBase{…} package sac.empleados; public class EmpleadoComision{…} package sac.empleados; public class EmpleadoHora{…} El archivo.class que se genera en la compilacion se almacenara en el directorio definido por la declaración del paquete.

181 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 6.7 Reutilización de las clases de un paquete / librería. Solo los miembros publicos de un paquete estan accesibles fuera del paquete. Para usar un miembro se puede: –Usar su nombre completo ej. sac.empleados.EmpleadoBase –Importarlo del paquete individualmente import sac.empleados.EmpleadoBase –Importar a todos los miembros del paquete import sac.empleados.*

182 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplos //uso del nombre completo de la clase (sin import) sac.empleados.EmpleadoBase empleadob = new sac.empleados.EmpleadoBase (); //uso de la clase importandola individualmente import sac.empleados.EmpleadoBase; EmpleadoBase empleadob = new EmpleadoBase (); //uso de la clase importandola colectivamente import sac.empleados.*; EmpleadoBase empleadob = new EmpleadoBase ();

183 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 6.8 Clases genéricas. (Plantillas en C++). El código generico es una abstraccion sobre tipos de datos. Esto significa que el mismo proceso se puede utilizar independientemente del tipo de dato. Ejemplos: –Ordenar un arreglo –Intercambiar variables –Procesar una lista de datos –Colecciones (Pilas, Colas, Arboles, etc.)

184 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Java 1.5 incluye genericos Las clases, interfaces, constructores, y métodos pueden ser genericos si se utilizan parámetros de tipos. El código generico provee mayor legibilidad de los programas y mas seguridad en la ejecución. Se compila solo una vez y para siempre. Se realiza una traduccion homogenea.

185 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo interface List { void add(A x); Iterator iterator(); } interface Iterator { A next(); boolean hasNext(); }

186 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales elt next class LinkedList implements List { protected class Node { A elt; Node next; Node(A e) { elt= e; next=null;} } protected Node h,t; public LinkedList() {h = new Node(null); t = h;} public void add(A elt){ t.next = new Node(elt); t = t.next;} public Iterator iterator(){ return new Iterator (){ protected Node p = h.next; public boolean hasNext() {return p != null;} public A next(){A e = p.elt; p=p.next; return e;} } Node

187 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Usando la clase con parámetro de tipo List xs = new LinkedList (); xs.add(0); // boxing automatico Integer x = xs.iterator().next(); // no cast Usando la clase SIN parámetro de tipo List xs = new LinkedList(); xs.add(new Integer(0)); // requiere wrapping Integer x = (Integer) xs.iterator().next(); // requiere cast (puede fallar en ejecución)

188 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales //Usando parámetros de tipo List ys = new LinkedList (); ys.add(zero); List > yss = new LinkedList >(); yss.add(ys); String y=yss.iterator().next().iterator().next(); Integer z = ys.iterator().next(); // error en tiempo de compilacion //Sin usar parámetros de tipo List ys = new LinkedList(); ys.add(zero); List yss = new LinkedList(); yss.add(ys); String y = (String)((List)yss.iterator().next()).iterator().next(); Integer z = (Integer) ys.iterator().next(); // error en tiempo de ejecución

189 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Se pueden definir restriciones recursivamente OrderedList > Solo se pueden usar referencias como parámetros de tipo El tiempo de ejecución es similar a la implementacion usando Object y cast

190 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 7. Excepciones. 7.1 Definición Que son las excepciones Clases de excepciones Propagación. 7.2 Gestión de excepciones Manejo de excepciones Lanzamiento de excepciones. 7.3 Excepciones definidas por el usuarios Clase base de las excepciones Creación de un clase derivada del tipo excepción Manejo de una excepción definida por el usuario.

191 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 7.1 Definición. Regla de oro que siempre debe recordarse: En los programas de software ocurren errores Que pasa despues de que ocurre un error? Como se maneja el error? Quien lo maneja? Se puede recuperar de un error un programa? Debe enviar un mensaje de error y terminar?

192 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Que son las excepciones. Una excepcion es un evento que rompe el flujo normal de instrucciones durante la ejecución de un programa. Java posee un mecanismo para el manejo de excepciones que le permite ver que excepcion se ha presentado y como puede recuperarse de ella.

193 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales método en ejecución 1 2 ERROR!!! Exception object 3 RTS procesa el error Busca un manejador De excepciones Encontro? si no Termina la ejecución del programa Pasa la excepcion al manejador

194 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Object Throwable ErrorException VirtualMachineError AWTError Etc. RunTimeException IllegalAccessException ClassNotFoundException ArithmeticException NullPointerException IndexOutOfBoundsE Etc Clases de excepciones.

195 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Clases de Excepciones Checked Exceptions. Son aquellas que deben ser capturadas por un método o deben ser listadas en la clausula throws de cualquier método que pueda lanzar la excepcion o propagarla. Unchecked Exceptions. Son aquellas que no deben ser capturadas y no requieren estar en la clausula throws. Se derivan de RunTimeException.

196 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Propagación.

197 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Propagación. m3 método donde ocurre un error m2 método sin manejador de excepcion m1 método con manejador de excepcion main Llama m3 Llama m2 Llama m1 Busca un manejador apropiado para el error, siguiendo la secuencia de llamadas de métodos en orden inverso Stack de llamadas

198 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Definicion de excepciones try { // código que puede producir un error } catch (TipoDeExcepcion identificador) { // código que se ejecuta en caso de error } // pueden definirse muchos catch finally { // código que siempre se ejecuta }

199 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo // Ejemplo de // Capturando una excepción en un método class Testcap { static int slice0[] = { 0,1,2,3,4 }; static void uno() { try { slice0[-1] = 4; //linea #8 } catch( NullPointerException e ) { System.out.println( "Captura una excepcion diferente" ); } public static void main( String a[] ) { try { uno(); //linea # 16 } catch( Exception e ) { System.out.println( "Captura de la excepcion en main()" ); e.printStackTrace(); } Captura de la excepcion en main() java.lang.ArrayIndexOutOfBoundsException: -1 at Testcap.uno(Testcap.java:8) at Testcap.main(Testcap.java:16)

200 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo import cs1.Keyboard; public class ProductCodes { public static void main( String[] args ) { String code; char zone; int district, valid=0, banned=0; System.out.print("código de producto (XXX para salir)"); code = Keyboard.readString(); while (!code.equals("XXX")) { try { zone = code.charAt(9); district = Integer.parseInt(code.substring(3,7)); valid++; if (zone == 'R' && district > 2000) banned++; } catch (StringIndexOutOfBoundsException e){ System.out.println ("Longitud invalida"+code); } catch (NumberFormatException e){ System.out.println ("El distrito noes nuemrico"+code); } System.out.print("código de producto (XXX para salir)"); code = Keyboard.readString(); } System.out.println( "Total de códigos validos "+valid ); System.out.println( "Total de códigos banned "+banned ); }

201 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo public void paint( Graphics g ) { try { g.drawString( Saludos[i],25,25 ); } catch( ArrayIndexOutOfBoundsException e ) { g.drawString( "Saludos desbordado",25,25 ); } catch( Exception e ) { // Cualquier otra excepción System.out.println( e.toString() ); } finally { System.out.println( "Esto se imprime siempre!" ); } i++; }

202 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 7.2 Gestion de excepciones. Las excepciones pueden generarse implicitamente cuando se produce un error y es detectado por el RTS o explicitamente cuando el programa detecta un error. Los nombres de las excepciones identifican al error que se representa.

203 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 7.2 Gestión de excepciones. Clausula try – contiene el bloque de instrucciones que pueden producir un error. Debe ser seguida por una clausula catch o finally. Clausula catch – contiene el código que se ejecuta cuando ocurre una excepcion del tipo especificado. Clausula finally – es el bloque de código que se ejecuta siempre, haya sucedido o no una excepcion.

204 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Clausula throws – se define en el encabezado del método que lanzara esa excepcion. public static void main(String[] a) throws IOException { … } Clausula throw – lanza una excepcion explicitamente. try { if( temp > 40 ) throw ( new demasiadoCalor() ); … }

205 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales class Limites extends Exception {} class demasiadoCalor extends Limites {} class demasiadoFrio extends Limites {} class demasiadoRapido extends Limites {} class demasiadoCansado extends Limites {} try { if( temp > 40 ) throw( new demasiadoCalor() ); if( dormir < 8 ) throw( new demasiado Cansado() ); } catch( Limites lim ) { if( lim instanceof demasiadoCalor ){ System.out.println( "Capturada excesivo calor!" ); return; } if( lim instanceof demasiadoCansado ) { System.out.println( "Capturada excesivo cansancio!" ); return; } finally System.out.println( "En la clausula finally" );

206 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales ArithmeticException. Se generan por una operacion de division por cero. NullPointerException. Se genera cuando se intenta acceder a un variable que no existe (null). ClassCastException. Se genera cuando se convierte (cast) un objeto a otra clase que no es válida. ArrayIndexOutOfBoundsException. Se genera cuando se intenta acceder a un elemento que no existe. NoClassDefFoundException. Se genera cuando se requiere de una clase y el sistema no puede localizarla. Excepciones predefinidas

207 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales y = (Prueba)x; Persona persona; … String p = persona.getNombre(); int i = j / i; a[i] = x;

208 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 7.3 Excepciones definidas por el usuarios. Las excepciones en Java son clases derivadas de la clase base de las excepciones Exception la cual a su vez se deriva de la clase Throwable. La clase Exception contiene tres métodos heredados de la clase Throwable, que se utilizan para obtener informacion de la excepcion estos son: –toString() Convierte el objeto a String. –getMessage() Regresa un String con informacion de la excepcion. –printStackTrace() Despliega la jerarquia de llamadas de métodos que provoco la excepcion.

209 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Para crear una excepcion, se deriva una clase de la clase Exception. Ejemplo. Define una clase para manejar una excepcion que valide un rango de valores. Creación de un clase derivada del tipo excepción. public class RangoNumericoException extends Exception { public RangoNumericoException (String mensaje){ super(mensaje); }

210 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Manejo de una excepción definida por el usuario. Las excepciones definidas por el usuario se capturan (catch) y se lanzan (throw) en la misma forma que las excepciones predefinidas. Una excepcion puede ser lanzada en un método y capturada en un método diferente (el que llamo a ejecución). El compilador se asegura que existan manejadores de excepciones para todas las excepciones definidas en la clausula throws.

211 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales try { int respuesta = CalcRespuesta(); resp = String.valueOf(respuesta); } catch (RangoNumericoException e) { resp =e.getMessage(); } …. public int CalcRespuesta() throws RangoNumericoException { …. try { int1 = Integer.parseInt(str1); int2 = Integer.parseInt(str2); if ((int1 20) || (int2 20)) { RangoNumericoException e = RangoNumericoException (numero fuera de rango); throw e; } respuesta1 = int1 + int2; } catch (NumberFormatException e) { resp =e.toString(); } return respuesta1; } El método CalcRespuesta no atrapa la excepcion definida en su encabezado por lo tanto cualquier método que llame a CalcRespuesta debe atrapar a esa excepcion.

212 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ventajas de las Excepciones El código regular, se separa del código que maneja los errores. (parte try, parte catch) // pseudocódigo readFile { open the file; determine its size; allocate that much memory; read the file into memory; close the file; }

213 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales errorCodeType readFile { initialize errorCode = 0; open the file; if (theFileIsOpen) { determine the length of the file; if (gotTheFileLength) { allocate that much memory; if (gotEnoughMemory) { read the file into memory; if (readFailed) { errorCode = -1; } } else { errorCode = -2; } } else { errorCode = -3; } close the file; if (theFileDidntClose && errorCode == 0) { errorCode = -4; } else { errorCode = errorCode and -4; } } else { errorCode = -5; } return errorCode; } readFile { try { open the file; determine its size; allocate that much memory; read the file into memory; close the file; } catch (FileOpenFailed) { doSomething; } catch (SizeDeterminationFailed) { doSomething; } catch (MemoryAllocationFailed) { doSomething; } catch (ReadFailed) { doSomething; } catch (FileCloseFailed) { doSomething; }

214 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ventajas de las Excepciones Los errores se pueden propagar usando el Stack (Pila) de llamadas. method1 { call method2; } method2 { call method3; } method3 { call readFile; } Solo method1 esta interesado en procesar un error.

215 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales // SIN excepciones method1 { errorCodeType error; error = call method2; if (error) doErrorProcessing; else proceed; } errorCodeType method2 { errorCodeType error; error = call method3; if (error) return error; else proceed; } errorCodeType method3 { errorCodeType error; error = call readFile; if (error) return error; else proceed; } // CON excepciones method1 { try { call method2; } catch (exception e) { doErrorProcessing; } method2 throws exception { call method3; } method3 throws exception { call readFile; }

216 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ventajas de las Excepciones Los errores pueden ser agrupados y pueden diferenciarse de otros. catch (FileNotFoundException e){ … } Manejador para un error específico catch (IOException e){ … } Manejador para todos los errores relacionados con IO

217 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales El código es mas legible. Facilita la depuracion de programas. NO generan overhead por lo tanto el tiempo de ejecución no se ve afectado. Ventajas de las Excepciones

218 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales 8. Flujos y archivos. 8.1 Definición de Archivos de texto y archivos binarios. 8.2 Operaciones básicas en archivos texto

219 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Flujos de IO Un flujo (stream) es una secuencia ordenada de bytes que puede ser usada como fuente de una entrada o como destino de una salida. Los archivos, la memoria o los sockets pueden proveer/recibir informacion abriendo un fujo de datos.

220 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

221 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Los algoritmos para leer o escribir informacion siempre ejecutan una serie de pasos. Leer Abrir un stream while (hay mas informacion) leer information Cerrar el stream Escribir Abrir un stream while (hay mas informacion) escribir information Cerrar el stream

222 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Paquete java.io Streams datos Streams procesamiento Stream de Caracteres Streams de Bytes Streams de entrada Streams de salida

223 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Streams de datos. Representa un stream particular (fuente o destino), ejemplo un archivo. Streams de procesamiento. Ejecuta cierta manipulacíon de los datos (filtrado). Stream de Caracteres. Manipula caracteres de 16 bits (unicode). Stream de Bytes. Manipula datos binarios de 8 bits.

224 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Paquete java.io

225 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Stream de Caracteres Stream de datos Stream de procesamiento Clases abstractas

226 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Stream de Bytes Stream de datos Stream de procesamiento

227 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Lectura y Escritura de Archivos Un archivo se puede utilizar en un programa definiendo un stream para el. Los archivos de entrada proveen informacion. Los archivos de salida reciben informacion.

228 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales import java.io.*; // usa stream de caracteres public class CopiaArchivo{ public static void main (String [] args) throws IOException{ // define los archivos fisicos File archivoEntrada = new File("entrada.txt"); File archivoSalida = new File("salida.txt"); // Define los flujos de datos usando los archivos fisicos FileReader in = new FileReader(archivoEntrada); FileWriter out = new FileWriter(archivoSalida); int c; while ((c=in.read()) != -1) out.write(c); // cierra los archivos in.close(); out.close(); }

229 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales import java.io.*; // usa stream de bytes public class CopiaBytes { public static void main(String[] args) throws IOException { // define los archivos fisicos File inputFile = new File("entrada.txt"); File outputFile = new File("salida2.txt"); // abre los flujos de entrada y salida usando los archivos fisicos FileInputStream in = new FileInputStream(inputFile); FileOutputStream out = new FileOutputStream(outputFile); int c; // lee los datos del archivo de entrada y los escribe en el archivo de salida while ((c = in.read()) != -1) out.write(c); // cierra los archivos in.close(); out.close(); }

230 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejercicio Modifica el programa anterior para incluir un manejador de excepciones que detecte cuando el archivo de entrada no se encuentra.

231 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Lectura de Archivos de texto. Los archivos de texto definen a cada uno de los elementos que contienen como una linea completa. La clase BufferedReader contiene un método llamado readLine() que permite leer una linea de caracteres en una sola operacion, regresando como resultado un String.

232 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Lectura de archivos de texto FileReader representa un archivo de entrada que contiene datos caracter. La clase FileReader se deriva de la clase InputStreamReader y hereda el método read para leer datos. BufferedReader no representa una fuente de datos, se usa para filtrar datos de un stream.

233 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Ejemplo Supongamos que tenemos un archivo llamado inventario.txt el cual contiene los siguientes datos en cada linea: descripcion, cantidad y precio. Zapatos Pantalon Vestido Collar

234 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales import java.io.*; import java.util.StringTokenizer; public class Inventario { public static void main(String[] args) { Articulo [] inventario = new Articulo[100]; StringTokenizer tokenizer ; String linea, desc, entrada = "inventario.txt"; int cant, contador =0; float prec; try{ FileReader file = new FileReader(entrada); BufferedReader archivoEntrada = new BufferedReader(file); linea = archivoEntrada.readLine(); while (linea != null){ tokenizer = new StringTokenizer(linea); desc = tokenizer.nextToken(); try { cant = Integer.parseInt(tokenizer.nextToken()); prec = Float.parseFloat(tokenizer.nextToken()); inventario[contador++] = new Articulo(desc,cant,prec); } catch(NumberFormatException formatoNumero){ System.out.println("Linea erronea, sera ignorada: \r "+linea); } linea = archivoEntrada.readLine(); } archivoEntrada.close(); for (int i=0; i

235 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales public class LeeArchivo { public static void main (String [] args){ int maxi, maxj, dato; StringTokenizer tokenizer; String line, name, file = "datosMatriz.txt"; int i,j,gen,count = 0; try { FileReader fr = new FileReader(file); BufferedReader infile = new BufferedReader(fr); line = infile.readLine(); tokenizer = new StringTokenizer(line); try { maxi= Integer.parseInt(tokenizer.nextToken()); maxj= Integer.parseInt(tokenizer.nextToken()); System.out.println("Renglones = "+maxi+" Columnas = "+maxj); line = infile.readLine(); tokenizer = new StringTokenizer(line); gen = Integer.parseInt(tokenizer.nextToken()); System.out.println("Generaciones = "+gen); line = infile.readLine(); while (line != null) { tokenizer = new StringTokenizer(line); i= Integer.parseInt(tokenizer.nextToken()); j= Integer.parseInt(tokenizer.nextToken()); System.out.println("i = "+i+" j = "+j); line = infile.readLine(); } catch (NumberFormatException exception) { System.out.println("ERROR en la linea " + line); } infile.close(); } catch (FileNotFoundException exception) { System.out.println("Archivo no encontrado"); } catch (IOException exception) { System.out.println(exception); }

236 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

237 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales Escritura de archivos de texto La clase FileWriter representa un archivo de texto de salida. La clase PrintWriter contiene los métodos print y println. La clase BufferedWriter puede usarse para proveer algunas capacidades extras.

238 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales import java.io.*; import cs1.Keyboard; public class CreaArchivoArticulos { public static void main (String [] args) { String archivo = "articulos.txt"; try { FileWriter fw = new FileWriter(archivo); PrintWriter file = new PrintWriter(fw); String d; int c; float p; for (int i=0; i<5; i++){ System.out.println("descripcion "); d=Keyboard.readString(); System.out.println("cantidad "); c= Keyboard.readInt(); System.out.println("Precio "); p = Keyboard.readFloat(); file.println(d+" "+c+" "+p); } file.close(); System.out.println("El archivo "+archivo+" ha sido creado"); } catch (IOException e){ System.out.println(e); } } Articulos.txt Zapatos Pantalon Vestido Collar

239 Agosto-Diciembre 2007 Instituto Tecnol ó gico de Culiac á n Ing. En Sistemas Computacionales Fin del curso! Buena suerte en el examen final!


Descargar ppt "Agosto-Diciembre 2007 Instituto Tecnol ó gico de Culiac á n Ing. En Sistemas Computacionales Programaci ó n Orientada a Objetos (con Java) Dra. Maria Lucia."

Presentaciones similares


Anuncios Google