Programaci ó n Orientada a Objetos (con Java)

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

description

Programaci ó n Orientada a Objetos (con Java). Dra. Maria Lucia Barr ó n Estrada. Contenido. Arreglos unidimensionales y multidimensionales M é todos y mensajes. Constructor, destructor. Sobrecarga. Herencia. Polimorfismo y reutilizaci ó n Excepciones. Flujos y archivos. - PowerPoint PPT Presentation

Transcript of Programaci ó n Orientada a Objetos (con Java)

  • Programacin Orientada a Objetos(con Java)Dra. Maria Lucia Barrn Estrada

  • ContenidoArreglos unidimensionales y multidimensionalesMtodos y mensajes. Constructor, destructor. Sobrecarga. Herencia. Polimorfismo y reutilizacin Excepciones. Flujos y archivos.

  • 1. Arreglos unidimensionales y multidimensionales1.1 Arreglo Unidimensionales listas (vectores). 1.1.1 Conceptos bsicos. 1.1.2 Operaciones. 1.1.3 Aplicaciones.1.2 Arreglo bidimensional. (matrices) 1.2.1 Conceptos bsicos. 1.2.2 Operaciones. 1.2.3 Aplicaciones.1.3 Arreglo Multidimensional. 1.3.1 Conceptos bsicos. 1.3.2 Operaciones. 1.3.3 Aplicaciones.

  • ConceptosUn arreglo es una estructura que contiene una serie de elementos homogneos (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 dimensin)En Java, los arreglos son referencias (la declaracin NO reserva memoria para los elementos)Java provee dos clases que contienen mtodos para manipular arreglos (Arrays y Vector)

  • Arreglos de objetos VS Arreglos de datos primitivosArreglo de datos StringArreglo de datos int

  • 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 especfico 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 posicin que va de 0 hasta numero de elementos -1Un arreglo puede ser creado despues de definirlo con una lista de valores iniciales o usando la palabra new y el numero de elementos

  • El tamao del arreglo se define en su creacin y NO puede cambiar durante la ejecucin del programa.Los elementos de un arreglo unidimensional se almacenan en posicines especificas, las cuales se identifican con un ndice desde 0 hasta tamao-1 int [] arreglo = new int[6]; //no valores iniciales

  • declaracin de arreglos unidimensionales.tipo [ ] identificador tipo identificador[ ]creacin de arreglos unidimensionales.new tipo[tamao]{ elemento0, elemento1, , elementon}Acceso de elementosidentificador[posicin]

  • Ejemplos// crea un arreglo con 10 elementos de tipo intnumeros = new int[10];

    // declara un arreglo de datos tipo int llamado numerosint [] numeros;

    // declaracin y creacinint [] numeros = new int[10];

  • // Forma alternativaint [] arregloInt = new int[6]; arregloInt[0] = 4;arregloInt[1] = 2;arregloInt[2] = 5;arregloInt[3] = 7;arregloInt[4] = 1;arregloInt[5] = 8; inicializacin del arregloint [] arregloInt = {4,2,5,7,1,8}; // creacin e inicalizacion

  • Ejemplos0 1 2 . . . 99nombres . . .// crea un arreglo con 100 elementos de tipo Stringnombres = new String[100];

    // declara un arreglo de datos tipo String llamado nombresStrign [] nombres;

    // declaracin y creacinString [] nombres= new String[100];

  • inicializacin de arreglosPor 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 tecladoLeer valores de un archivoUsando valores random Obtener valores de otros datos (objetos)Etc

  • Operaciones con arreglosInicializar los elementos (todos/algunos) con un valorLocalizar un elemento especficoOrdenar los elementos del arregloIntercambiar dos elementos de posicinProcesar todos los elementos de un arregloProcesar solo algunos elementos

  • Ejemplosfinal int NUMEMPLEADOS = 30;int [] horas = new int[NUMEMPLEADOS];

    // almacena las horas trabajadas de cada empleadofor (int i=0; i

  • // Bernardo Enero-Junio 2005public 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
  • // Rafael Lopez enero-junio 2005//Calcula los numeros primos segun el mtodo 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

  • // 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
  • Errores mas comunesUso de un ndice fuera de rango validoError de uno-menos. (el primer elemento se almacena en la posicin 0 )Confusion del ndice de un elemento del arreglo con el elemento mismoUsar = para COPIAR un arregloUsar == para COMPARAR dos arreglosEn arreglos de dos dimensiones, confundir los ndices de renglones y columnasConfundir la longitud de un arreglo length con un mtodo length() de la clase String

  • La clase ArraysEsta clase contiene mtodos para manipular arreglos (ordenamiento y busqueda) ademas de funciones que permiten ver a los arreglos como listas.

    java.util Class Arraysjava.lang.Object java.util.Arrayspublic class Arrays extends Object

  • mtodos de la clase Arraysstaticint binarySearch(byte[]a, bytekey)staticint binarySearch(char[]a, charkey)static int binarySearch(T[]a, Tkey, Comparator
  • // 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)); }}

  • AplicacionesEscribe un programa que intente accesar en un arreglo un elemento que no existe (fuera del rango). Que sucede en la ejecucin?Escribe un programa que almacene en un arreglo la denominacin 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 denominacin 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 calificacin mayor que el promedio del grupo.Define dos arreglos, empleados y horas. Almacena datos en cada uno de ellos. Obtn 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%. Obtn el total de sueldos pagados y un listado de la siguiente forma: Nombre Horas Sueldo_Bruto Impuesto Sueldo_Neto

  • La clase Vectorjava.util Class Vectorjava.lang.Object java.util.AbstractCollection java.util.AbstractList java.util.Vector Interfaces implementadas: Serializable, Cloneable, Iterable, Collection, List, RandomAccess Subclasses Directas: Stack public class Vector extends AbstractList implements List, RandomAccess, Cloneable, Serializable

  • La clase VectorLa clase Vector implementa arreglos que pueden crecer en tiempo de ejecucin.Los componentes de un objeto tipo Vector pueden ser accesados con un ndice.El tamao de un Vector puede crecer (adicionar elementos) o disminuir (remover elementos) durante la ejecucin del programa.

  • OperacionesCrear objetos de tipo Vector (Constructores)Agregar objetos a un vectorAl final (addElement)En una posicin especifica (insertElementAt)Accesar elementos del vectorEn una posicinEl primer elementoEl ultimo elementoVerificar si hay elementosEsta vacoTamao

  • Vector() Construye con capacidad inicial de 10 elementosVector(Collection

  • Ejemplo// autor Lucia Barron// Ejemplo usando las clases Vector y Arraysimport 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
  • 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.

  • 1.2 Arreglos Bidimensionales.declaracin de arreglos bidimensionales.// define un arreglo de dos dimensiones llamado matrizdouble [] [] matriz;

    // crea un arreglo de 3 filas y 5 columnas double[] [] matriz = new double[3][5];

  • inicializacin del arregloint [][] matriz = {{1,2,3,4,5},{4,5,6,7,8},{7,8,9,0,1}}; // creacin e inicalizacion del arreglo matriz con 3 filas y 5 columnas de datos tipo int

  • Proceso del arregloLos 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

  • // 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
  • 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];

    for (int i=0; i

  • AplicacionesDefine 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 posicin (fila y columna) del elemento mayorBusca un elemento y si se encuentra, despliega su posicin.Obten cuantas veces se repite un elementoColoca los elementos de la matriz en un arreglo de una dimension

  • AplicacionesDefine 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.

  • AplicacionesImplementa el juego del GATO.El juego del Gato en dos dimensiones consiste deUn tablero de 3 x 3Dos fichas diferentesDos jugadoresEl juego consiste en que cada jugador tomara un turno alternado con el otro y colocara en cada turno una ficha en una posicin del tablero que se encuentre en ese momento desocupada. El juego termina si: No existen mas posicines 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 )

  • 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

  • declaracin 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[0][1][2]0 1 2 3 0

    1

    2

    3

    4 0 1 2 3 0

    1

    2

    3

    4 0 1 2 3 0

    1

    2

    3

    4 ventas[2][4][3]Pagina 0 Pagina 1 Pagina 2

  • AplicacionesRepresentar las ventas de una compaia 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.

  • 2. Mtodos y mensajes. 2.1 Atributos const y static.2.2 Concepto de mtodo.2.3 Declaracin de mtodos.2.4 Llamadas a mtodos (mensajes).2.5 Tipos de mtodos. 2.5.1 Mtodos const, static. 2.5.2 Mtodos normales y voltiles.2.6 Referencia this.2.7 Forma de pasar argumentos.2.8 Devolver un valor desde un mtodo.2.9 Estructura del cdigo.

  • ClasesUna clase contiene el cdigo para la manipulacon de objetos de esa clase. Constructores para crear objetos, variables para almacenar el estado de la clase y sus objetos y mtodos que implementan el comportamiento de la clase y sus objetos.La clase tiene dos partes:EncabezadoCuerpo

  • Encabezado de la claseModificadores class Identificador Extiende ImplementaModificadorespublicprivateprotectedstaticfinalnativesynchronizedabstractthreadsafeExtiendeextends IdentificadorDeClaseImplementaimplements ListaDeInterfaces

  • Ejemplos [de Java Tutorial]public class Stackpublic class Stack implements Cloneable public class BINGOclass RingMaster implements States public class Player extends JPanel implements ActionListener, ItemListener, BallListenerpublic class Object public final class Math extends Object public class Vector extends AbstractList implements List, RandomAccess, Cloneable, Serializable

  • Cuerpo de una ClaseEl cuerpo de la clase esta delimitado por { }declaracines de MiembrosVariables (declaracin e inicializacin)Variables de instanciaVariables de clasemtodos (declaracin implementacion)mtodos de instanciamtodos de clasedeclaracin e implementacion de ConstructoresBloque de inicializacin

  • Ejemplopublic 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); }}

  • 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 mtodos existen?Escribe un programa que use la clase Fruta para crear varios objetos.

  • 2.1 Atributos const y static.Un miembro esttico (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 estticos se comparten (solo existe uno) entre todos los objetos de esa clase.

  • 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.

  • class AnIntegerNamedX { int x; public int x() { return x; } public void setX(int newX) { x = newX; } } AnIntegerNamedX myX = new AnIntegerNamedX(); AnIntegerNamedX anotherX = new AnIntegerNamedX(); myX.setX(1); anotherX.setX (2); System.out.println("myX.x = " + myX.x()); System.out.println("anotherX.x = " + anotherX.x()); class AnIntegerNamedX { static int x; public int x() { return x; } public void setX(int newX) { x = newX; } }

  • static (mtodos de clase)Un mtodo declarado esttico es un mtodo de clase.Los mtodos estticos solo pueden operar sobre variables de clase y NO pueden accesar las variables de instancia.

  • class AnIntegerNamedX { int x; public static int x() { return x; } public static void setX(int newX) { x = newX; } } // ERROR de compilacionAnIntegerNamedX.java:4: Can't make a static reference to nonstatic variable x in class AnIntegerNamedX. static int x;

  • 2.2 Concepto de mtodo.Un mtodo es una parte de cdigo que se encarga de implementar parte del comportamiento de un objeto.Un mtodo tiene dos partes:EncabezadoCuerpo Un mtodo se invoca usando un objeto. objeto.mtodo(parmetros)Dentro del cuerpo de un mtodo se pueden declarar variables locales.

  • 2.3 Declaracin de mtodos.Modificadores void Identificador (parmetros) ;Modificadores void Identificador (parmetros) CuerpoModificadores tipo Identificador (parmetros) ;Modificadores tipo Identificador (parmetros) CuerpoModificadorespublicprivateprotectedpackagestaticfinalnativesynchronizedabstractparmetrostipo identificador , tipo identificadorCuerpo{ estatutos }

  • Ejemplos public boolean isEmpty() { if (items.size() == 0) return true; else return false; } abstract class GraphicObject { int x, y; void moveTo(int newX, int newY) { x = newX; y = newY; } abstract void draw(); } double calculaPago(double prestamo, double tasa, double valorFuturo, int periodos) { double I, partial1, denominator, answer; I = rate / 100.0; partial1 = Math.pow((1 + I), (0.0 - numPeriods)); denominator = (1 - partial1) / I; answer = ((-1 * loanAmt) / denominator) - ((futureValue * partial1) / denominator); return answer; }

  • 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(); }}

  • 2.4 Llamadas a mtodos (mensajes).Los objetos pueden realizar operaciones para:Manipular o inspeccionar sus variablesEjecutar sus mtodos.Los objetos se comunican con otros objetos a traves de mensajes.Un mensaje es una seal que recibe un objeto para ejecutar alguno de sus mtodos.

  • AnIntegerNamedX myX = new AnIntegerNamedX(); AnIntegerNamedX anotherX = new AnIntegerNamedX(); myX.setX(1); anotherX.setX(2); System.out.println("myX.x = " + myX.x()); System.out.println("anotherX.x = " + anotherX.x()); objeto.mtodo()objeto.mtodo(parmetros)

    OStack x = new OStack(); x.push(new Integer(17));

    public class UsaPunto { public static void main(String[] args){ Punto punto1= new Punto(2,1); Punto punto2 = new Punto(5,5); punto1.setx(1); String s= punto1.toString() + punto2.toString(); }}

  • 2.5 Tipos de mtodos.Abstractos - no tienen implementacionFinales No se pueden redefinir en las clases derivadasestticos solo hay un mtodo para todos los objetos.Sobrecargados varios mtodos con el mismo nombre y diferentes parmetros.

  • Mtodos finalesUn mtodo final es aquel que no se puede redefinir en sus clases descendientesLos mtodos finales se utilizan cuando se desea que no cambie la implementacion en las clases derivadas

  • 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 especficos del objeto en ejecucin (seleccin dinmica de mtodos)Se usa para eliminar la ambigedad cuando hay dos identificadores igualesSe puede usar para invocar a otros constructores que cumplan con los parmetros usados.

  • Ejemplospublic 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; } }

  • 2.7 Forma de pasar argumentos.parmetrosFormales definidos en la declaracin del mtodo

    Actuales valores usados en la llamada al mtodo

    public static void setX(int newX) { x = newX; }myX.setX(1); anotherX.setX(2);

  • Pase de parmetrosEl pase de parmetros en Java es unicamente por valor.Los mtodos pueden enviar como argumentoDatos Primitivos los datos de tipo primitivo pasan su valor a los parmetros formales (los parmetros actuales no cambian despues de la ejecucin del mtodo)Datos Referencia los datos de tipo referencia (objetos) envian su direccion a los parmetros formales (los cambios en los parmetros formales afectan a los parmetros actuales)

  • Pase de datos primitivosint r = -1, g = -1, b = -1; pen.getRGBColor(r, g, b); System.out.println("red = " + r + ", green = " + g + ", blue = " + b); class Pen { int redValue, greenValue, blueValue; void getRGBColor(int red, int green, int blue) { redValue = red; greenValue = green; blueValue = blue; } } Las variables red, green y blue Pueden cambiar de valorLos valores de r, g y b no cambian despues de la ejecucin

  • Pase de referenciasclass 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);

  • 2.8 Devolver un valor desde un mtodo.Los mtodos pueden regresar valores Como resultado del mtodoEn los argumentos (parmetros 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; }

  • 2.9 Estructura del cdigo.

  • 3. Constructor, destructor.3.1 Conceptos de constructor y destructor.3.2 Declaracin de constructor y destructor.3.3 Aplicaciones de constructores y destructores.3.4 Tipos de constructores y destructores.

  • 3.1 Conceptos de constructor y destructor.Los constructores son mtodos 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 parmetros que contienen.

  • Ejemplo// usando la clase Punto para crear objetos public static void main(String[] args){ Punto p1 = new Punto(); System.out.println(p1); Punto p2 = new Punto(2,3); System.out.println(p2); Punto p3 = new Punto(p1); System.out.println(p3); }public class Punto { private int x=0; private int y=0; public static int totalPuntos =0; Punto (){ totalPuntos++; } Punto (int _x, int _y){ x=_x; y=_y; totalPuntos++; } Punto (Punto p){ this.x = p.x; this.y = p.y; totalPuntos++; } public void setx(int _x){ x= _x; } public String toString (){ return (+x+,+y+); }}

  • La clase Punto tiene los siguientes mtodos constructoresPunto () crea un objeto con los valores definidos en la declaracinPunto(x:int, y:int) - inicializa las coordenadas del punto con los valores x,yPunto(Punto p) - inicializa las coordenadas del punto con los valores de las coordenadas del punto p

  • 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 nmero y tipo de los argumentosPunto p1 = new Punto(); //llamada sin parmetrosPunto p2 = new Punto(p1); //llamada con un parmetro de tipo PuntoPunto p3 = new Punto(2,5); //llamada con dos parmetros enteros

  • Ejemplo 2Cuantos constructores tiene la clase Fruta?

    Que hace el constructor que no tiene parmetros?

    Como se pueden crear ejemplares de Fruta?public class Fruta { String nombre; int gramos; Fruta () { this(sin nombre,10); } Fruta (String n, int g ){ nombre=n; gramos = g }

    public void setPeso (int g ){ gramos=g; } public int getPeso ( ){ return gramos; }}

  • DestructoresDisponibles en lenguajes o entornos en los que el responsable de devolver la memoria es el programador

    Un destructor es un mtodo que se invoca inmediatamente antes de que se libere la memoria donde se almacena un objetoLos destructores realizan todas las tareas que se desean realizar sobre un objeto antes de destruirlo, pero no realizan esta destruccinLa destruccin se realiza por medio de funciones del sistema como dispose() en Pascal

  • Recoleccin de basuraLa basura son pedazos de memoria que ya no seran utilizados por el programa.La recoleccin de basura es realizada por el sistema peridicamenteEsta es una operacin de alto costo (consume tiempo de ejecucin)La utilizacin de funciones de devolucin de memoria obliga a trabajar con cuidado para no intentar acceder posteriormente a zonas de memoria que ya no estan disponibles

  • Recoleccin de basuraExisten 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 recoleccin de basura (garbage collection), y consiste enRecorrer todas las referencias del programa marcando todas las zonas de memoria que permanecen accesiblesRecorrer toda la memoria devolviendo al sistema aquellas zonas que no estn marcadas

  • 3.2 Declaracin de constructores.Constructor default. Java provee automaticamente un constructor cuando el programador no declara explcitamente al menos uno. Este constructor no contiene parmetros formales y cuando es invocado, las variables de instancia asumen los valores definidos en su declaracin o sus valores default.Campos numericos = 0 Campos boolean = falseCampos char = Unicode 0Campos referencia = null

  • 3.2 Declaracin de constructores.Constructor explictamente declarado. Son constructores definidos por el programador para efectuar el proceso de inicializacin de variables de instrancia en la creacin de objetos.Los constructores se definen con el mismo nombre de la claseModificadores NombreClase (parmetros) ClausulasThrows Cuerpo

  • 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.

  • creacin de objetos con constructoresSe 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.

  • 3.3 Aplicaciones de constructores.Define los atributos y constructores para las clases de cada uno de los siguientes elementos:AlumnosProfesoresTecnologicosRectangulosProveedoresMascotasLibrosSolo define el encabezado de los mtodos, no su implementacion.

  • 3.4 Tipos de constructores.Privados (private). Ninguna otra clase puede crear instancias usando este constructor.Algunos mtodos de la clase, pueden usar el constructor para crear instancias de la clase y regresarlas como resultado. Estos mtodos se les llama fabricas (factory method)

  • 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.

  • 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
  • 4. Sobrecarga. 4.1 Conversin de tipos.4.2 Sobrecarga de mtodos.4.3 Sobrecarga de operadores.Ejemplos

  • 4.1 Conversin de tipos.Existen dos formas de convertir tipos de datos a otros tipos. Implcita. Explcita. A esta operacin de conversin se le conoce como coercin.

  • Conversion de tiposSe pueden sumar un dato entero (int) y un real (float)? 5 + 3.14

    Se pueden concatenar datos String con enteros?Resultado + total

  • Para realizar las operaciones es necesario hacer una conversion de datos a un solo tipo.Implcita. La conversin implcita es realizada por el compilador automticamente para efectuar algunas operaciones. Ej. La concatenacin de elementos en un println.

    Explcita. La conversin explcita es especificada por el programador para convertir un dato a otro tipo especfico. Ej. Usando operaciones de cast.

  • ConversionesLos datos primitivos pueden convertirse en dos formas:Ampliando el dato (Widening) Es una operacin segura porque no pierde informacin (una conversin de punto flotante puede perder precisin)Reduciendo el dato (Narrowing) Es una operacin insegura porque va de un tipo a otro que usa menos espacio de memoria para su representacin.

  • Conversiones permitidas en Java (Widening)De Abyte short, int, long, float, doubleshort int, long, float, doublechar int, long, float, doubleint long, float, doublelong float, doublefloat double

  • Conversiones permitidas en Java (Narrowing)De Abyte charshort byte, charchar byte, shortint byte, short, charlong byte, short, char, intfloat byte, short, char, int, long double byte, short, char, int, long, float

  • 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.

  • Formas de realizar conversionesEn una asignacion. float dinero; int pesos; dinero = pesos; // ok! Se convierte automticamente pesos = dinero; // ERROR!!Una promocin aritmticaperimetro = 5 * 3.14; // conversin antes de la multiplicacinUna operacion de cast pesos = (int) dinero; // ok! Se convierte antes de la asignacin

  • 4.2 Sobrecarga de mtodos.El polimorfismo es una de las principales caractersticas de los Lenguajes de Programacin Orientados a Objetos.El polimorfismo se divide en:Ad hocSobrecargaCoercin UniversalParamtricoInclusin (subtipos)

  • 4.2 Sobrecarga de mtodos.Sobrecarga significa usar un identificador para referirse a mltiples elementos en el mismo mbito.Java permite al programador sobrecargar mtodos y constructores pero no variables u operadores.

  • Ejemplo: el mtodo printlnprintln (String s)println (int i)println (double d)println (char c)println (boolean b)println (String s)

    System.out.println(Numero total de estudiantes );System.out.println(totalEstudiantes);

  • 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); }} SalidaThread[Thread-4,5,main] Java Mania abc 4 -9223372036854775808 3.40282e+38 3.14159 true

  • 4.3 Sobrecarga de operadores.Java provee implcitamente la sobrecarga de operadores pero NO permite que el programador defina explcitamente la sobrecarga de ellos.

    Algunos otros lenguajes como C++ y Ada OO, permiten la sobrecarga de los operadores.

  • Operadores sobrecargados

  • SobrecargaLos mtodos sobrecargados tienen firmas distintas.Cuando existen mtodos sobrecargados, las llamadas se resuelven en tiempo de compilacin.El compilador usa la firma del mtodo para identificar el cdigo que se ejecutar.

  • Ejemplo: Usando castpublic class Point { private int x = 0; private int y = 0; public static int totalPuntos = 0; // a constructor public Point (){ totalPuntos++; } public Point(int x, int y) {this.x = x;this.y = y;totalPuntos++; } public Point(Point p) {this.x = p.x;this.y = p.y;totalPuntos++; } public void setx(int _x){ x= _x; } public Point medio (Point p){ return new Point((p.x+x)/2, (p.y+y)/2); } public String toString (){ return "("+x+","+y+")"; } }

    import java.util.Vector;public class UsaPoint { public static void main(String[] args){ Vector puntos = new Vector(); Point origen = new Point(0,0); Point p=null;; for (int i =0; i

  • Ejemplo: Usando parmetro de tipopublic class Point { private int x = 0; private int y = 0; public static int totalPuntos = 0; // a constructor public Point (){ totalPuntos++; } public Point(int x, int y) {this.x = x;this.y = y;totalPuntos++; } public Point(Point p) {this.x = p.x;this.y = p.y;totalPuntos++; } public void setx(int _x){ x= _x; } public Point medio (Point p){ return new Point((p.x+x)/2, (p.y+y)/2); } public String toString (){ return "("+x+","+y+")"; } }

    import java.util.Vector;public class UsaPointParmetrizado { public static void main(String[] args){ Vector puntos = new Vector(); Point origen = new Point(0,0); Point p=null;; for (int i =0; i

  • EjerciciosInvestigar en la clase Math cuales mtodos estn sobrecargados.Describe dos situaciones distintas en las que una clase requiere de un mtodo sobrecargado.Agrega a la clase Point dos mtodos llamados move Parmetros (Point) movimiento absolutoParmetros (int, int) movimiento relativo

  • 5. Herencia. 5.1 Introduccin a la herencia.5.2 Herencia simple.5.3 Herencia mltiple.5.4 Clase base y clase derivada. 5.4.1 Definicin. 5.4.2 Declaracin.5.5 Parte protegida. 5.5.1 Propsito de la parte protegida.5.6 Redefinicin de los miembros de las clases derivadas.5.7 Clases virtuales y visibilidad.5.8 Constructores y destructores en clases derivadas.5.9 Aplicaciones.

  • Que es herencia?Herencia*. Derecho a heredar. Heredar*. Recibir los bienes, derechos y acciones de una persona.

    * Diccionario Pequeno Larousse Ilustrado, Ed. Larousse 2003.

  • 5.1 Introduccin 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 cdigo al desarrollar nuevos programas.Se pueden crear referencias polimorficas a partir de una jerarquia de clases definida con herencia.

  • HerenciaReutilizacion de softwareOrganizacion jerarquicaSuperclase (clase padre)Subclase (clase derivada) ejecucin dinamica a traves de mensajesAcceso protegido para especializadoresSobreescritura (especializacion de comportamiento)

  • Tipos de HerenciaHerencia Simple o Multiple Define el numero de clases/interfaces padreSimple. Una sola clase/interface padreMultiple. Mas de una clase/interface padre

    Herencia de implementacion o de InterfaceImplementacion. Hereda comportamiento Interface. Hereda solo la estructura

    Herencia Mixin Crea nuevas clases mezclando una clase con otra clase especial

  • 5.2 Herencia simple.Solo existe una clase padre.

  • 5.3 Herencia mltiple.Existen muchas clases padre.La herencia Multiple de Implementacion puede generar el Problema Diamante

  • Ejemplo Problema diamantecdigo en C++

  • Herencia MixinClase 1mixinnueva class

  • Herencia en JavaLa herencia ocurre cuando una clase adopta y/o adapta las estructuras y mtodos de una clase base (clase padre) e implementa los mtodos de una o mas interfaces.

    Herencia Simple de ImplementacionUna clase solo puede tener una clase padre

    Herencia Multiple de InterfacesUna clase puede tener muchas interfaces padre

  • 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.

  • 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.

  • Ejemplo package java.awt;

    public class Window .{ public Window(Frame owner) { } } public class WarningWindow extends java.awt.Window{ }Clase derivada(subclase de Window)(superclase de WarningWindow) Clase base

  • EjemploClases derivadasClase base

  • EjemploUsando la sintaxis de JavaDefinir las clases:PersonaAlumnoProfesorSecretaria

  • Cuantas diferentes jerarquias se pueden crear?AnimalHerbivoroCarnivoroAnimalDomesticoSalvajeCorralAnimalReptilAveMamifero

  • 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); // heredadoc1.setColor("blanco");System.out.println(c1);Point p1 = new ColorPoint();p1.move(2,3);System.out.println(p1); }} public class Point { private int x = 0; private int y = 0; public static int totalPuntos = 0; // a constructor public Point (){ totalPuntos++; } public Point(int x, int y) { } public Point(Point p) { } public void setx(int _x){ x= _x; } public Point medio (Point p){ return new Point((p.x+x)/2, (p.y+y)/2); } public String toString (){ return "("+x+","+y+")"; } }

  • public class Alumno extends Persona{ // atributos

    // mtodos nuevos

    // mtodos sobreescritos }public class Persona { String nombre; Calendar fechaNacimiento; public Persona(String n){ nombre = n; } public String toString(){ return nombre; } }Agrega a la clase Alumno los elementos necesarios para su funcionamiento

  • 5.5 Parte protegida.Los miembros o constructores protegidos pueden ser accesados desde fuera del paquete en el cual se declararon solo por el cdigo que es responsable de la implementacion del objeto que realiza el acceso.

  • Ejemplopackage algunPaquete; public class Padre { protected int a; } http://java.sun.com/docs/books/jls/second_edition/html/names.doc.htmlpackage 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 } }

  • Ejemplopackage points; public class Point { protected int x, y; public void move(int dx, int dy) { x += dx; y += dy; } } package threePoint; import points.Point; public class Point3d extends Point { protected int z; public void delta(Point p) { p.x += this.x; // compile-time error: cannot access p.x p.y += this.y; // compile-time error: cannot access p.y } public void delta3d(Point3d q) { q.x += this.x; q.y += this.y; q.z += this.z; }} http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#62587Cuando la clase Point3D se coloca en el mismo paquete que la clase Point no existen errores de compilacion

  • 5.6 Redefinicin de los miembros de las clases derivadas.La redefinicion de un mtodo se da cuando una subclase contiene un mtodo con la misma firma (mismo nombre y numero, tipo y orden de los parmetros) que la clase base.

  • public class MyClass { private int anInt = 4; //Overrides toString in Object class. public String toString() { return "Instance of MyClass. anInt = " + anInt; }} public class MyClass { private int anInt = 4; //Overrides toString in Object class. public String toString() { return "Instance of MyClass. anInt = " + anInt; } //Overloads toString method name to provide //additional functionality. public String toString(String prefix) { return prefix + ": " + toString(); } }

  • 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.

  • 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: PublicPrivateProtectedPackage

  • Especificadores de acceso

    public: Cualquier clase en cualquier paquete, tiene acceso a los miembros pblicos.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.

  • 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 } }

  • 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.

  • package A;public class Foo{int x; void bar(){Example e=new Example();x=e.i;x= e.j;x=e.k;x=e.l; }}package A;public class Example{ public int i;int j; //package protected int k; private int l;XQue pasa si cambiamos de paquete a la clase Example?

  • Especificadores de acceso

    Si no se define ningn 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.

  • 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;

  • 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;

  • Package y ProtectedPodemos 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.

  • Resumen de Modificadores de acceso

  • 5.8 Constructores y destructores en clases derivadas.Java no tiene destructores explcitos.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.

  • Caractersticas de los ConstructoresNo tienen valores de retornoUna clase puede tener varios constructores sobrecargados, los cuales permiten a los objetos de esa misma clase inicializarse de distinta manera.

  • 5.8 Constructores y destructores en clases derivadas.Java no tiene destructores explicitos.

  • 5.9 Aplicaciones.Definir una clase baseDefinir una subclaseConstructoresLlame a superNo llame a superSobreescrituraSobrecarga

  • 6. Polimorfismo y reutilizacin.6.1 Concepto del polimorfismo.6.2 Clases abstractas. 6.2.1 Definicin. 6.2.2 Redefinicin.6.3 Definicin de una interfaz.6.4 Implementacin de la definicin de una interfaz.6.5 Reutilizacin de la definicin de una interfaz.6.6 Definicin y creacin de paquetes / librera.6.7 Reutilizacin de las clases de un paquete / librera.6.8 Clases genricas (Plantillas).

  • 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.

  • Ejemplo de polimorfismopublic 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
  • Redefiniendo mtodos (sobrescritura)Es la habilidad de una subclase de redefinir el mtodo de una superclase cuyo comportamiento es muy parecido, pero diferente, en la subclase.

  • Ejemplo de redefinicin de mtodopublic 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(); } }

  • Propiedades a considerar al momento de la redefinicinEl tipo de retorno, nombre del mtodo, nmero, tipo y orden de los parmetros para el mtodo redefinido debe ser igual que para el mtodo original.El mtodo redefinido puede tener una clasula throws igual que el original.El mtodo redefinido puede tener mayor acceso que el mtodo redefiniendo, pero no menos. Ej.- Un mtodo protected en la superclase puede hacerse public, pero no private.

  • Llamando al mtodo redefinido de la superclasesuper.overriddenMethodName();

  • Qu mtodos no se puede redefinir?Un mtodo definido como final en la superclase, no se puede redefinir.Tampoco se puede redefinir los mtodos static (mtodos de clase).

  • Descendientes de la clase ObjectComo la clase Object es superclase de todas las clases. sta define el estado y comportamiento bsico que todo objeto debera 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 mtodos de la clase Object.

  • Mtodos que se pueden o no redefinirSe pueden redefinir:cloneequals (usado para comparar objetos)finalize (se invoca cuando el objeto se destruye, no se recomienda redefinir).toString (representacin como String del objeto).

  • El mtodo equalsSe utiliza para comparar dos objetos.La clase debe sobreescribir este mtodo para comparar los atributos de los objetos Para realizar una comparacion se invoca al mtodo:unObjetos.equals(otroObjeto);

  • Ejemplo equalspublic 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+")"; }}

  • Ejemplo equals public class ColorPoint extends Point { private String color = "rojo"; public void setColor (String c){color = c; } public String getColor(){ return color; } public String toString(){return super.toString()+","+color; } // redefinicion del mtodo equals

    } // Resultado de Point p0 = new Point();ColorPoint cp = new ColorPoint();

    p0.equals(p0); p0.equals(cp); cp.equals(p0); cp.equals(cp);

  • 6.2 Clases abstractas.Una clase abstracta es una definicion parcial (incompleta) de un grupo de elementos.Una clase abstracta contiene mtodos 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 mtodos.

  • Clases abstractasLa palabra reservada abstract aparece en el encabezado de la definicion de la clase cuando esta contiene cero o mas mtodos abstractos.Una clase abstracta se usa cuando:Habra varias subclasesSe desea manejar a todas las diferentes subclases como instancias de la superclaseLa superclase por si misma no tiene sentido como un objeto.

  • Ejemplo// con algunos identificadores cambiados public abstract class Component { public abstract void DrawMeOnScreen(); }

    public class Button extends Component { public void DrawMeOnScreen(){ // implementacion } } public class ScrollBar extends Component { public void DrawMeOnScreen(){ // implementacion } } Es posible crear instancias de las clases Button o ScrollBar pero NO de Component.

  • Jerarqua de clases Observaciones: Existe un mtodo ingresos que se aplica genricamente a todos los empleados. El clculo de los ingresos de cada empleado depende de su clase.

  • public abstract class Employee{ private String firstName; private String lastName; private String socialSecurityNumber; // constructores // mtodos comunes a todos los trabajadores // mtodo 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 mtodo abstracto ingresos en Employee public double ingresos() { return getWeeklySalary(); }}

  • 6.3 Definicin 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 mtodos y valores constantes. Esta puede ser implementada posteriormente por clases que usando la palabra clave implements.* De Java Tutorial http://java.sun.com/docs/books/tutorial/java/concepts/interface.html

  • Una interface es una coleccion de constantes y mtodos 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.

  • Definicin de una interface.Una interface se define en dos partes:Encabezado

    Bloque ModificadorAcceso interface Identificador Superinterfaces{ //constantes //mtodos}extends ListaDeInterfaces

  • InterfacesUna interface establece una garantia de los servicios que un objeto proporciona.Las interfaces permiten efectuar llamadas polimorficas donde el mtodo que se invoca se selecciona del objeto actual que se encuentra en ejecucin.Las interfaces permiten que multiples clases compartan datos definidos en una localidad.

  • InterfacesUna 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 parmetro de un mtodo.Deseas compilar tu cdigo sin tener una implementacion del objeto particular.Se requiere especificar la firma exacta de los mtodos que deben proveerse por todas las clases que implementen la interface.Capturar similaridades entre clases no relacionadas

  • Interfaces y Clases AbstractasLas 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

  • Interfaces y Clases AbstractasNo contiene mtodos implementadosNo forma parte de la jerarquia de clasesPuede extender muchas interfacesLos mtodos definidos en una interface son implicitamente abstractos

    Puede contener mtodos implementadosEs parte de la jerarquia de clasesPuede extender solo una superclaseLos mtodos abstractos deben ser explicitamente definidos

  • 6.4 Implementacin de la definicin 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; } } }

  • Interfaces como tipospublic class StockMonitor { public void watchStock(StockWatcher watcher, TickerSymbol tickerSymbol, BigDecimal delta) { ... } } El identificador de la interface define el tipo del parmetro.Cualquier objeto de una clase que implemente StockWatcher puede ser usado como parmetro actual

  • 6.5 Reutilizacin de la definicin de una interfaceLas interfaces no pueden crecer (modificar la interface para agregarle mas mtodos). Esto provocaria errores (inconsistencias) en las clases que actualmente implementan la interface.Una interface puede extender a otra interface para agregarle nuevos mtodos.

  • // 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);}

  • Tarea de InterfacesInvestigar la interface Comparable del paquete java.langInvestigar las interfaces Collection e Iterator del paquete java.util

    Incluir un ejemplo del uso de dichas interfaces (30% del examen)

  • 6.6 Definicin y creacin de paquetes / librera.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)

  • Definicin y creacin de paquetes / libreraLos 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

  • Definicin y creacin de paquetes / librerapaqueteSubpaquete

    TAREA: Investigar como se selecciona el nombre de un paquete.

  • Los paquetes permiten definir un espacio de nombres (namespace)Los paquetes NO tienen interfaces propiasLos paquetes NO permiten obtener diferentes vistas de sus elementos

  • Ejemplo

  • Definicin y creacin de paquetes / libreraUna unidad de compilacion (clase o interface) puede iniciar con un estatuto que defina a que paquete pertenece:package poo.proyecto1;

    La ausencia de esta declaracin, coloca la clase en un paquete anonimo en el mismo directorio donde se almacena el archivo.

  • package sac.empleados; public abstract class Empleado{} package sac.empleados; public class EmpleadoBase{} package sac.empleados; public class EmpleadoComision{} package sac.empleados; public class EmpleadoHora{}El archivo .class que se genera en la compilacion se almacenara en el directorio definido por la declaracin del paquete.

  • 6.7 Reutilizacin de las clases de un paquete / librera.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.EmpleadoBaseImportarlo del paquete individualmente import sac.empleados.EmpleadoBaseImportar a todos los miembros del paquete import sac.empleados.*

  • 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 ();

  • 6.8 Clases genricas.(Plantillas en C++).El cdigo 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 arregloIntercambiar variablesProcesar una lista de datosColecciones (Pilas, Colas, Arboles, etc.)

  • Java 1.5 incluye genericosLas clases, interfaces, constructores, y mtodos pueden ser genericos si se utilizan parmetros de tipos.El cdigo generico provee mayor legibilidad de los programas y mas seguridad en la ejecucin.Se compila solo una vez y para siempre.Se realiza una traduccion homogenea.

  • Ejemplo interface List {void add(A x);Iterator iterator(); } interface Iterator {A next();boolean hasNext(); }

  • elt nextclass LinkedList implements List{protected class Node {A elt; Node next;Node(A e) { elt= e; next=null;}}protected Node h,t;public LinkedList() {h = new Node(null); t = h;}public void add(A elt){ t.next = new Node(elt); t = t.next;} public Iterator iterator(){return new Iterator(){protected Node p = h.next;public boolean hasNext() {return p != null;}public A next(){A e = p.elt; p=p.next; return e;}}}}Node

  • Usando la clase con parmetro de tipo List xs = new LinkedList();xs.add(0); // boxing automaticoInteger x = xs.iterator().next(); // no cast

    Usando la clase SIN parmetro de tipoList xs = new LinkedList();xs.add(new Integer(0)); // requiere wrapping Integer x = (Integer) xs.iterator().next(); // requiere cast (puede fallar en ejecucin)

  • //Usando parmetros de tipo List ys = new LinkedList(); ys.add(zero); List yss = new LinkedList(); yss.add(ys); String y=yss.iterator().next().iterator().next(); Integer z = ys.iterator().next(); // error en tiempo de compilacion

    //Sin usar parmetros de tipo List ys = new LinkedList(); ys.add(zero); List yss = new LinkedList(); yss.add(ys); String y = (String)((List)yss.iterator().next()).iterator().next(); Integer z = (Integer) ys.iterator().next(); // error en tiempo de ejecucin

  • Se pueden definir restriciones recursivamenteOrderedListSolo se pueden usar referencias como parmetros de tipo El tiempo de ejecucin es similar a la implementacion usando Object y cast

  • 7. Excepciones.

    7.1 Definicin. 7.1.1 Que son las excepciones. 7.1.2 Clases de excepciones. 7.1.3 Propagacin.7.2 Gestin 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 Creacin de un clase derivada del tipo excepcin. 7.3.3 Manejo de una excepcin definida por el usuario.

  • 7.1 Definicin.Regla de oro que siempre debe recordarse:En los programas de software ocurren erroresQue 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?

  • 7.1.1 Que son las excepciones.Una excepcion es un evento que rompe el flujo normal de instrucciones durante la ejecucin 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.

  • mtodo en ejecucin12ERROR!!!Exception object3RTS procesa el errorBusca un manejador De excepcionesEncontro?456sinoTermina la ejecucin del programaPasa la excepcion al manejador

  • 7.1.2 Clases de excepciones.ErrorExceptionVirtualMachineErrorAWTErrorEtc.RunTimeExceptionIllegalAccessExceptionClassNotFoundExceptionArithmeticExceptionNullPointerExceptionIndexOutOfBoundsEEtc.Etc.

  • Clases de ExcepcionesChecked Exceptions. Son aquellas que deben ser capturadas por un mtodo o deben ser listadas en la clausula throws de cualquier mtodo 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.

  • 7.1.3 Propagacin.

  • 7.1.3 Propagacin.m3mtodo donde ocurre un errorm2mtodo sin manejador de excepcionm1mtodo con manejador de excepcionmain

    Llama m3

    Llama m2

    Llama m1Busca un manejador apropiado para el error, siguiendo la secuencia de llamadas de mtodos en orden inversoStack de llamadas

  • Definicion de excepciones try { // cdigo que puede producir un error } catch (TipoDeExcepcion identificador) { // cdigo que se ejecuta en caso de error } // pueden definirse muchos catch finally { // cdigo que siempre se ejecuta }

  • Ejemplo// Ejemplo de http://www.cica.es/formacion/JavaTut/Cap6/excep.html // Capturando una excepcin en un mtodoclass Testcap { static int slice0[] = { 0,1,2,3,4 }; static void uno() { try { slice0[-1] = 4; //linea #8 } catch( NullPointerException e ) { System.out.println( "Captura una excepcion diferente" ); } }

    public static void main( String a[] ) { try { uno(); //linea # 16 } catch( Exception e ) { System.out.println( "Captura de la excepcion en main()" ); e.printStackTrace(); } }}

    Captura de la excepcion en main()java.lang.ArrayIndexOutOfBoundsException: -1 at Testcap.uno(Testcap.java:8) at Testcap.main(Testcap.java:16)

  • Ejemploimport cs1.Keyboard;public class ProductCodes { public static void main( String[] args ) { String code; char zone; int district, valid=0, banned=0;System.out.print("cdigo de producto (XXX para salir)"); code = Keyboard.readString(); while (!code.equals("XXX")) { try { zone = code.charAt(9); district = Integer.parseInt(code.substring(3,7)); valid++; if (zone == 'R' && district > 2000) banned++; } catch (StringIndexOutOfBoundsException e){ System.out.println ("Longitud invalida"+code); } catch (NumberFormatException e){ System.out.println ("El distrito noes nuemrico"+code); } System.out.print("cdigo de producto (XXX para salir)"); code = Keyboard.readString(); } System.out.println( "Total de cdigos validos "+valid ); System.out.println( "Total de cdigos banned "+banned ); }}

  • Ejemplopublic 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 excepcin System.out.println( e.toString() ); } finally { System.out.println( "Esto se imprime siempre!" ); } i++;}

  • 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.

  • 7.2 Gestin 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 cdigo que se ejecuta cuando ocurre una excepcion del tipo especificado.Clausula finally es el bloque de cdigo que se ejecuta siempre, haya sucedido o no una excepcion.

  • Clausula throws se define en el encabezado del mtodo 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() ); }

  • class Limites extends Exception {}class demasiadoCalor extends Limites {}class demasiadoFrio extends Limites {}class demasiadoRapido extends Limites {}class demasiadoCansado extends Limites {}

    try { if( temp > 40 ) throw( new demasiadoCalor() ); if( dormir < 8 ) throw( new demasiado Cansado() ); } catch( Limites lim ) { if( lim instanceof demasiadoCalor ){ System.out.println( "Capturada excesivo calor!" ); return; } if( lim instanceof demasiadoCansado ) { System.out.println( "Capturada excesivo cansancio!" ); return; } } finally System.out.println( "En la clausula finally" );

  • Excepciones predefinidasArithmeticException. 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 vlida. 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.

  • y = (Prueba)x;Persona persona;String p = persona.getNombre();

    int i = j / i; a[i] = x;

  • 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 mtodos 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 mtodos que provoco la excepcion.

  • Creacin de un clase derivada del tipo excepcin.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); } }

  • Manejo de una excepcin 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 mtodo y capturada en un mtodo diferente (el que llamo a ejecucin).

    El compilador se asegura que existan manejadores de excepciones para todas las excepciones definidas en la clausula throws.

  • try { int respuesta = CalcRespuesta(); resp = String.valueOf(respuesta); } catch (RangoNumericoException e) { resp =e.getMessage(); } .public int CalcRespuesta() throws RangoNumericoException { . try { int1 = Integer.parseInt(str1); int2 = Integer.parseInt(str2); if ((int1 < 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; }El mtodo CalcRespuesta no atrapa la excepcion definida en su encabezado por lo tanto cualquier mtodo que llame a CalcRespuesta debe atrapar a esa excepcion.

  • Ventajas de las ExcepcionesEl cdigo regular, se separa del cdigo que maneja los errores. (parte try, parte catch)// pseudocdigoreadFile { open the file; determine its size; 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; } } else { errorCode = -3; } close the file; if (theFileDidntClose && errorCode == 0) { errorCode = -4; } else { errorCode = errorCode and -4; } } else { errorCode = -5; } return errorCode;}readFile { try { open the file; determine its size; allocate that much memory; read the file into memory; close the file; } catch (FileOpenFailed) { doSomething; } catch (SizeDeterminationFailed) { doSomething; } catch (MemoryAllocationFailed) { doSomething; } catch (ReadFailed) { doSomething; } catch (FileCloseFailed) { doSomething; }}

  • Ventajas de las ExcepcionesLos errores se pueden propagar usando el Stack (Pila) de llamadas.method1 { call method2;}method2 { call method3;}method3 { call readFile;} Solo method1 esta interesado en procesar un error.

  • // SIN excepcionesmethod1 { errorCodeType error; error = call method2; if (error) doErrorProcessing; else proceed;}

    errorCodeType method2 { errorCodeType error; error = call method3; if (error) return error; else proceed;}

    errorCodeType method3 { errorCodeType error; error = call readFile; if (error) return error; else proceed;} // CON excepcionesmethod1 { try { call method2; } catch (exception e) { doErrorProcessing; } }

    method2 throws exception { call method3;}

    method3 throws exception { call readFile;}

  • Ventajas de las ExcepcionesLos errores pueden ser agrupados y pueden diferenciarse de otros. catch (FileNotFoundException e){ }Manejador para un error especfico catch (IOException e){ }Manejador para todos los errores relacionados con IO

  • Ventajas de las ExcepcionesEl cdigo es mas legible.Facilita la depuracion de programas.NO generan overhead por lo tanto el tiempo de ejecucin no se ve afectado.

  • 8. Flujos y archivos.8.1 Definicin de Archivos de texto y archivos binarios.8.2 Operaciones bsicas en archivos texto

  • Flujos de IOUn 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.

  • Los algoritmos para leer o escribir informacion siempre ejecutan una serie de pasos.LeerAbrir un streamwhile (hay mas informacion) leer informationCerrar el streamEscribirAbrir un streamwhile (hay mas informacion) escribir informationCerrar el stream

  • Paquete java.io

  • Streams de datos. Representa un stream particular (fuente o destino), ejemplo un archivo.Streams de procesamiento. Ejecuta cierta manipulacon de los datos (filtrado).Stream de Caracteres. Manipula caracteres de 16 bits (unicode).Stream de Bytes. Manipula datos binarios de 8 bits.

  • Paquete java.io

  • Stream de CaracteresStream de datosStream de procesamiento

  • Stream de BytesStream de datosStream de procesamiento

  • Lectura y Escritura de ArchivosUn archivo se puede utilizar en un programa definiendo un stream para el.Los archivos de entrada proveen informacion.Los archivos de salida reciben informacion.

  • import java.io.*;// usa stream de caracterespublic 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(); }}

  • import java.io.*;// usa stream de bytespublic 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(); }}

  • EjercicioModifica el programa anterior para incluir un manejador de excepciones que detecte cuando el archivo de entrada no se encuentra.

  • 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 mtodo llamado readLine() que permite leer una linea de caracteres en una sola operacion, regresando como resultado un String.

  • Lectura de archivos de textoFileReader representa un archivo de entrada que contiene datos caracter.La clase FileReader se deriva de la clase InputStreamReader y hereda el mtodo read para leer datos.BufferedReader no representa una fuente de datos, se usa para filtrar datos de un stream.

  • EjemploSupongamos que tenemos un archivo llamado inventario.txt el cual contiene los siguientes datos en cada linea: descripcion, cantidad y precio.Zapatos 2 150.00Pantalon 3 224.99Vestido 1 367.50Collar 5 79.99

  • import java.io.*; import java.util.StringTokenizer;public class Inventario { public static void main(String[] args) { Articulo [] inventario = new Articulo[100]; StringTokenizer tokenizer ; String linea, desc, entrada = "inventario.txt"; int cant, contador =0; float prec; try{ FileReader file = new FileReader(entrada); BufferedReader archivoEntrada = new BufferedReader(file); linea = archivoEntrada.readLine(); while (linea != null){ tokenizer = new StringTokenizer(linea); desc = tokenizer.nextToken(); try { cant = Integer.parseInt(tokenizer.nextToken()); prec = Float.parseFloat(tokenizer.nextToken()); inventario[contador++] = new Articulo(desc,cant,prec); } catch(NumberFormatException formatoNumero){ System.out.println("Linea erronea, sera ignorada: \r "+linea); } linea = archivoEntrada.readLine(); } archivoEntrada.close(); for (int i=0; i
  • public class LeeArchivo { public static void main (String [] args){ int maxi, maxj, dato; StringTokenizer tokenizer; String line, name, file = "datosMatriz.txt"; int i,j,gen,count = 0; try { FileReader fr = new FileReader(file); BufferedReader infile = new BufferedReader(fr); line = infile.readLine(); tokenizer = new StringTokenizer(line); try { maxi= Integer.parseInt(tokenizer.nextToken()); maxj= Integer.parseInt(tokenizer.nextToken()); System.out.println("Renglones = "+maxi+" Columnas = "+maxj); line = infile.readLine(); tokenizer = new StringTokenizer(line); gen = Integer.parseInt(tokenizer.nextToken()); System.out.println("Generaciones = "+gen); line = infile.readLine(); while (line != null) { tokenizer = new StringTokenizer(line); i= Integer.parseInt(tokenizer.nextToken()); j= Integer.parseInt(tokenizer.nextToken()); System.out.println("i = "+i+" j = "+j); line = infile.readLine(); } }catch (NumberFormatException exception) { System.out.println("ERROR en la linea " + line); } infile.close(); } catch (FileNotFoundException exception) { System.out.println("Archivo no encontrado"); } catch (IOException exception) { System.out.println(exception); } }}

  • Escritura de archivos de textoLa clase FileWriter representa un archivo de texto de salida.La clase PrintWriter contiene los mtodos print y println.La clase BufferedWriter puede usarse para proveer algunas capacidades extras.

  • 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
  • Fin del curso!Buena suerte en el examen final!