La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación Orientada a Objetos (con Java)

Presentaciones similares


Presentación del tema: "Programación Orientada a Objetos (con Java)"— Transcripción de la presentación:

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

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

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

4 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) Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

6 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

7 int [] arreglo = new int[6]; //no valores iniciales
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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

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

10 inicialización del arreglo
int [] arregloInt = {4,2,5,7,1,8}; // creación e inicalizacion 4 2 5 7 1 8 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; Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

12 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

13 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

14 Ejemplos Procesa datos de 30 empleados final int NUMEMPLEADOS = 30;
int [] horas = new int[NUMEMPLEADOS]; // almacena las horas trabajadas de cada empleado for (int i=0; i<NUMEMPLEADOS; i++) { System.out.println(“Empleado”+ (i+1)+” : “); horas[i]= Keyboard.readInt(); } // obtiene el promedio de horas trabajadas for (int i=0; i<NUMEMPLEADOS; i++) sum = sum + horas[i]; double promedio = sum / NUMEMPLEADOS; Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

15 // 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");    } } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

16 // 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++) System.out.println(" " + i + " "); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

17 // 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<calificaciones.length; i++)          suma=calificaciones[i]+suma;                 prom=suma/12;        System.out.println("El promedio de las calificaciones es  "+prom);        System.out.println("Las calificaciones mayores que el promedio son:");        for (i=0; i<calificaciones.length; i++)          if(calificaciones[i]>prom){             lista++;              System.out.println("         "+calificaciones[i]);           }      System.out.println("El total de calificaciones mayor que el promedio es de "+lista);     } } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

18 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

19 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.Object java.util.Arrays public class Arrays extends Object Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

21 // 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)); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

23 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

25 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

26 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

28 Ejemplo Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán
// 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<y.length; i++) System.out.println (miVector.elementAt(i)+ " esta en posición “ +Arrays.binarySearch(y,miVector.get(i))); miVector.clear(); // borra todos los elementos de miVector System.out.println ("Mi Vector" + miVector); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

30 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

31 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 1 2 matriz[1][2] matriz[2][4] Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

32 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 1 2 3 4 5 6 7 8 9 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

33 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<miArreglo.length; i++) for (int j=0; j<miArreglo[i].length; j++) miArreglo[i] [j] = Keyboard.readInt(); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

34 // 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<matriz.length; i++) for (int j =0; j<matriz[i].length; j++) matriz[i][j] = i+j; float sum =0f; for (int i =0; i<matriz.length; i++){ for (int j =0; j<matriz[i].length; j++){ sum +=matriz[i][j]; System.out.print (matriz[i][j]+ "\t"); } System.out.println(); System.out.println("el promedio de los elementos es "+ (sum/12)); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

35 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 1 2 4 5 6 7 8 9 for (int i=0; i<ragged.length; i++) System.out.println(“Fila ”+ i + “ Columnas ”+ragged[i].length); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

36 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

37 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

38 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 ) Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

39 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

40 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] Pagina Pagina Pagina 2 1 2 3 4 1 2 3 4 1 2 3 4 ventas[2][4][3] Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

41 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

42 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. 2.5.1 Métodos const, static. 2.5.2 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

43 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

44 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

45 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<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

46 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

47 Ejemplo Punto punto1 punto2 punto3 totalPuntos = 0
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 () punto1 punto2 x=5 y=5 punto3 métodos de instancia Miembros de instancia Punto totalPuntos = 0 Miembros de clase Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

48 Cuantos miembros tiene la clase Fruta?
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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

49 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

50 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

51 class AnIntegerNamedX { int x; public int x() { return x; }
public void setX(int newX) { x = newX; class AnIntegerNamedX { static 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()); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

52 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

54 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

55 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 } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

56 Ejemplos abstract class GraphicObject { int x, y;
void moveTo(int newX, int newY) { x = newX; y = newY; } abstract void draw(); public boolean isEmpty() { if (items.size() == 0) return true; else return false; } 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; } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

57 private Object[] store= new Object[10]; private int size= 0;
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(); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

58 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

59 objeto.método(parámetros)
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(); } objeto.método() objeto.método(parámetros) OStack x = new OStack(); x.push(new Integer(17)); 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()); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

60 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

61 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

62 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

63 Ejemplos class AnIntegerNamedX { int x; public int x() { return x; }
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; Llama al constructor Elimina ambiguedad Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

64 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); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

65 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) Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

67 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); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

68 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; } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

70 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

71 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

72 Ejemplo // usando la clase Punto para crear objetos
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; Punto (Punto p){ this.x = p.x; this.y = p.y; public void setx(int _x){ x= _x; public String toString (){ return “(”+x+”,”+y+”)”; 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); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

73 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

74 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

75 Ejemplo 2 Cuantos constructores tiene la clase 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; Cuantos constructores tiene la clase Fruta? Que hace el constructor que no tiene parámetros? Como se pueden crear ejemplares de Fruta? Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

76 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

77 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

78 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

79 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 0 Campos referencia = null Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

80 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

81 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

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

84 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) Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

85 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

86 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 } . . . Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

88 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

90 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

91 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

92 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

93 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

94 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

95 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

96 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) Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

97 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

99 Salida Thread[Thread-4,5,main] Java Mania abc 4 -9223372036854775808
true 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); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

100 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

101 Operadores sobrecargados
Operator Uso Descripcion + 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

102 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á. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

103 Ejemplo: Usando cast import java.util.Vector; public class UsaPoint {
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; public Point(Point p) { this.x = p.x; this.y = p.y; 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)); Ejemplo: Usando cast Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

104 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; public Point(Point p) { this.x = p.x; this.y = p.y; 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<Point> puntos = new Vector<Point>(); 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)); Ejemplo: Usando parámetro de tipo Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

105 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

106 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. 5.4.1 Definición. 5.4.2 Declaración. 5.5 Parte protegida. 5.5.1 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

108 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

109 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) Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

110 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

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

113 Ejemplo Problema diamante
class link { … } class task : public link { virtual debug* get_d (); } class job : public link { 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++ Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

114 Herencia Mixin Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán
// 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 mixin Clase 1 nueva class Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

115 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

116 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

117 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

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

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

121 Cuantas diferentes jerarquias se pueden crear?
Animal Animal Herbivoro Carnivoro Domestico Salvaje Corral Animal Reptil Ave Mamifero Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

122 public class ColorPoint extends Point { private String color = "rojo";
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+")"; 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"); Point p1 = new ColorPoint(); p1.move(2,3); System.out.println(p1); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

123 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 public class Alumno extends Persona{ // atributos // métodos nuevos // métodos sobreescritos } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

124 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

125 Ejemplo 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 package algunPaquete; public class Padre { protected int a; } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

126 Ejemplo 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; package points; public class Point { protected int x, y; public void move(int dx, int dy) { x += dx; y += dy; } Cuando la clase Point3D se coloca en el mismo paquete que la clase Point no existen errores de compilacion Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

127 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

128 //Overrides toString in Object class. public String toString() {
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(); public class MyClass { private int anInt = 4; //Overrides toString in Object class. public String toString() { return "Instance of MyClass. anInt = " + anInt; } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

129 //The output from this program is as follows:
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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

130 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

131 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

132 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 } } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

133 Especificadores de acceso
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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

134 X package A; public class Foo{ int x; void bar() { package A;
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? Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

135 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

136 Example e=new Example(); x=e.i; x= e.j; x=e.k; x=e.l; } } package A;
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; Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

137 public class Foo extends A.Example{ int x; void bar() {
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; Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

138 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

139 Resumen de Modificadores de acceso
Especificador class subclass package world private X protected public Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

140 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

141 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

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

144 6. Polimorfismo y reutilización.
6.1 Concepto del polimorfismo. 6.2 Clases abstractas. 6.2.1 Definición. 6.2.2 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). Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

145 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

146 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<store.length; i++) s = s + store[i]; return s; public static void main (String [] args) { OStack x = new OStack(); Object o = new OStack(15); ((OStack)o).push(new Integer(3)); x.push(new Integer(17)); x.push(new Integer(20)); System.out.println(o); System.out.println(x); // sobrecarga de constructores // casting // subtipo/inclusion Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

147 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

148 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(); } } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

149 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

151 ¿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). Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

152 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

153 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). Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

154 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); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

155 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+")"; Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

156 Ejemplo equals // Resultado de Point p0 = new Point();
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); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

157 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

158 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

159 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 { Es posible crear instancias de las clases Button o ScrollBar pero NO de Component. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

160 Jerarquía de clases Observaciones:
Empleado Asalariado Empleado por Comisión 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

161 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(); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

162 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

163 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

165 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

166 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

167 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

168 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

169 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; } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

170 Interfaces como tipos 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 public class StockMonitor { public void watchStock(StockWatcher watcher, TickerSymbol tickerSymbol, BigDecimal delta) { ... } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

171 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

172 public interface StockTracker extends StockWatcher {
// 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); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

173 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) Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

174 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) Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

175 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

177 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

179 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

181 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.* Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

182 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 (); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

183 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.) Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

184 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

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

187 Usando la clase con parámetro de tipo
List<Integer> xs = new LinkedList<Integer>(); 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) Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

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

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

191 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? Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

192 7.1.1 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

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

195 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

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

198 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

199 Ejemplo Captura de la excepcion en main()
// 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[] ) { 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) Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

200 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.println( "Total de códigos validos "+valid ); System.out.println( "Total de códigos banned "+banned ); Ejemplo Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

201 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++; Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

202 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

203 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

204 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() ); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

205 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!" ); finally System.out.println( "En la clausula finally" ); Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

206 Excepciones predefinidas
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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

208 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

209 Creación de un clase derivada del tipo excepción.
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. public class RangoNumericoException extends Exception { public RangoNumericoException (String mensaje){ super(mensaje); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

210 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

211 try { int respuesta = CalcRespuesta();
resp = String.valueOf(respuesta); } catch (RangoNumericoException e) { resp =e.getMessage(); …. 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. public int CalcRespuesta() throws RangoNumericoException { …. try { int1 = Integer.parseInt(str1); int2 = Integer.parseInt(str2); if ((int1 < 10) || (int1 > 20) || (int2 < 10) || (int2 > 20)) { RangoNumericoException e = RangoNumericoException (“numero fuera de rango”); throw e; } respuesta1 = int1 + int2; catch (NumberFormatException e) { resp =e.toString(); return respuesta1; Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

212 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; } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

213 allocate that much memory; read the file into memory; close the file;
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; errorCode = -3; close the file; if (theFileDidntClose && errorCode == 0) { errorCode = -4; errorCode = errorCode and -4; 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) { } catch (MemoryAllocationFailed) { } catch (ReadFailed) { } catch (FileCloseFailed) { } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

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

216 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

217 Ventajas de las Excepciones
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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

219 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

221 Los algoritmos para leer o escribir informacion siempre ejecutan una serie de pasos.
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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

223 Stream de Caracteres. Manipula caracteres de 16 bits (unicode).
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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

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

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

227 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

228 // usa stream de caracteres
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(); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

229 // usa stream de bytes import java.io.*; 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(); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

231 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

232 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

233 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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

234 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); } } archivoEntrada.close(); for (int i=0; i<contador; i++) System.out.println(inventario[i]); catch (FileNotFoundException excepcion){ System.out.println("el archivo "+entrada+" no fue encontrado"); } catch (IOException excepcion){ System.out.println(excepcion); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

235 public class LeeArchivo { public static void main (String [] args){
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); 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); maxi= Integer.parseInt(tokenizer.nextToken()); maxj= Integer.parseInt(tokenizer.nextToken()); System.out.println("Renglones = "+maxi+" Columnas = "+maxj); gen = Integer.parseInt(tokenizer.nextToken()); System.out.println("Generaciones = "+gen); while (line != null) { i= Integer.parseInt(tokenizer.nextToken()); j= Integer.parseInt(tokenizer.nextToken()); System.out.println("i = "+i+" j = "+j); } Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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

237 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. Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

238 Articulos.txt Zapatos 2 150.00 Pantalon 3 224.99 Vestido 1 367.50
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 Agosto-Diciembre 2007 Instituto Tecnológico de Culiacán Ing. En Sistemas Computacionales

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


Descargar ppt "Programación Orientada a Objetos (con Java)"

Presentaciones similares


Anuncios Google