Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Qué es orientación a objeto ?
Es solo una manera de organizar el código. No es que ahora se puedan hacer cosas que antes no se podían !!! Los datos que usa un programa se organizan en objetos Los objeos son una colección de variables asociadas a métodos Métodos que modifican las variables o “estado” de un objeto Métodos que retornan valores que reflejan el “estado” del objeto (valor de sus variables)
2
Una clase que ya conocemos: Console
Constructores: Console c = new Console(); Console c = new Console(30,15); Console c = new Console(“Hola Gente”); Métodos que retornan un valor: int a = c.readInt(); double d = c.readDouble(); String s = c.readLine(); Métodos que modifican el estado del objeto (no retornan un valor): C.println(“hola”) C.setSize(400, 500) C.setLocation(100, 100) Cons.java
3
Otra clase conocida: el String
Una clase está principalemnte definida por los métodos que se le pueden aplicar a un objeto e esta clase Hay un método especial llamdo constructor, el que crea un nuevo objeto de esta clase Ejemplo: String myName; //el objeto aun no existe myName = new String(“Nelson Baloian”); String myName = “Nelson Baloian”; Esta es una llamada al contructor. Para aplicar un método a un objeto: object_variable.method(parameters)
4
Obteniendo los caracteres del String
Largo (en caracteres) de un String : int i = myName.length(); - i tendrá el valor 14 para el String “Nelson Baloian” Obteniendo el i-esimo carácter: char c = myName.charAt(0); - c contendrá el caracter ‘N’ char c = myName.charAt(3); - c tendtrá el carácter ‘s’ Las posiciones parten desde el 0 y llegan hasta length() - 1
5
Ejemplos: Ejemplo 1 : imprimir un string invertido
String linea = c.readLine(); for(int i = linea.length()-1; i >=0 ; i--) print(linea.charAt(i)); Ejemplo 2 : obtener el valor entero que representa un string int valorEntero(String x) { int valor = 0; for(int i = 0 i < linea.length(); i++) valor = valor*10 + (x.charAt(i)- ‘0’); return valor; } Los caracteres se pueden usar en expresiones numéricas, para lo cual entonces se usa el valor numérico que resulta de su repreentación binaria. Propuesto: double valorReal(String x) ValorChar
6
Obteniendo Subsecuencias
2 métodos distintos: String substring(int) String substring(int, int) String sub = myName.substring(7); - sub contendrá el string “Baloian” String sub = myName.substring(3, 6); - sub contendrá el string “son” N o e l s n B a l o i a n 4 1 2 3 5 6 7 8 9 10 11 12 13 7 3,6
7
Búsqueda de Subsequencias
int indexOf(String) : entrega la primera aparición del string que viene como parámetro en el string al cual se le aplica el método, o un -1 si no estaba String s = new String(“Hello, Nelson, Hello”); int i = s.indexOf(“ello”); - i tomará el valor 1 int i = s.indexOf(String, int) : busca la primera aparicion del string pasado como parámetro a partir de la posición dada int i = s.lastIndexOf(String) : busca la última aparición del string int i = s.lastIndexOf(String, int) : busca la última aparición del string a partir de la posición dada como parámetro hacia atrás
8
Ejemplos Lee 2 strings de una Console y dice cuantas Programm13
veces aparece el segundo en el primero Programm13 Lo mismo pero utilizando utilizando la otra forma de indexOf(String, int) Programm13b Recibe un string X, un patrón Y y un reemplazo Z. Imprime el string X reemplazando las apariciones de Y por Z ReplaceLine Presenta 2 formas de compara si dos strings son iguales Comparaciones
9
Comparación de Strings
boolean equals(String): entrega true si el parámetro es igual al string al cual se le aplica el método boolean esIgual = s1.equals(s2); la variable esIgual valdra true isi el texto contenido en s1 es igual al contenido por el string s2 int compareTo(String): conpara los strings y entrega un int haciendo una “restando” el string pasado como parámetro al string que se le aplica el método int i = s1.compareTo(s2); - i tomará los siguientes valores dependiendo de s1 y s2 0 si s1==s2, >0 si s1>s2, <0 si s1<s2 El valor del string se define de acuerdo a su aparición en un diccionario, primero significa menor
10
Otros métodos para String
Para saber mas acerca de esta y cualquier otra clase que provee el lenguaje java se puede consultar Interesante es la clase StringBuffer, ya que tiene métodos que modifican el objeto. En el caso de la clase String sólo teníamos métodos para crear nuevos Strings a partir del objeto original StringBuffer sb = new StringBuffer(“hola”); sb.append(“ como estas amigo”); sb : “hola como estas amigo” sb.delete(5,14); sb : “hola amigo” sb.replace(5,6,”ene”); sb : “hola enemigo” sb.insert(5,”querido”); sb : “hola querido enemigo” String s = sb.toString(); devuelve un objeto String con el contenido del StringBuffer también tiene algunos de los métodos de String: indexOf, substring, lastIndefOf
13
Los Archivos de Texto Se organizan en líneas de texto (Strings)
Cada línea consiste una cadena de caracteres que termina con una marca de fin de línea Después de la marca de fin de línea de la última línea viene una marca de fin de archivo Por convención tienen la extensión .txt Se generan con un editor de texto (sin formato) o por un programa Xcxcxcxcxcxc dfdfdfdfd xxxxxxxxxxxxxx ssssssssss ssssssss
14
Escribiendo archivos de texto
Apertura de un archivo para escritura: PrintWriter x = new PrintWriter ( new FileWriter(filename)) Se pueden escribir líneas con los siguientes métodos: x.print(string) x.println(string) Si existía un archivo con ese nombre se borra y es reemplazado por el que genere el programa Es importante hacer que al final se ejecute la instrucción x.close() para asegurarse de que los datos que aún están en el buffer sean traspasados. Hay que reportar que se usan métodos que pueden causar excepciones con throws IOException
15
Escribiendo archivos de texto
Leer de Console una cantidad indeterminada de líneas terminada con el string “fin” y grabarlas en un archivo de nombre “archivo.txt” import java.io.*; class CrearArchivo{ static public void main(String[]args) throws IOException { Scanner C=new Scanner(System.in); PrintWriter a=new PrintWriter(new FileWriter(“archivo.txt”)); while(true){ System.out.print(“linea (o fin) ? “); String linea = C.nextLine(); if( linea.equals(“fin”) ) break; a.println(linea); } a.close();
16
Leyendo archivos de texto en JAVA
Abrir un archivo existente : BufferedReader x = new BufferedReader( new FileReader(filename)) Las líneas pueden ser leídas de la siguiente manera: String line = x.readLine() Archivos se tratan secuencialmente Si no quedan líneas por leer en el archivo, el método readLine() retornará el valor null. Hay que “importar” las clases BufferedReader y FileReader poniendo al comienzo del programa la instrucción import java.io.*; Hay que “reportar” las llamadas a métodos que pueden causar excepciones con throws IOException
17
Leyendo archivos de texto
Mostrar en un objeto Console el contenido de cada línea del archivo “archivo.txt” import java.io.*; class LeerArchivo{ static public void main(String[]args) throws IOException{ BufferedReader a = new BufferedReader( new FileReader(“archivo.txt”)); while(true){ String linea = a.nextLine(); if( linea == null ) break; System.out.println(linea); } a.close(); Copyfile Replace
18
Ejercicio En un supermercado se tiene un archivo Productos.txt que contiene por cada línea el nombre, código y precio de un producto. Los datos vienen separados por uno o más blancos Por otro lado se tiene el archivo Compras.txt que tiene líneas con el código de un producto y la cantidad comprada Por cada compra de un producto que se hizo en cada caja se generó una línea para el archivo Compras.txt Se necesita un programa que genere un tercer archivo que por cada producto imprima nombre, código, cantidad total vendida y monto total vendido para ese producto Compras.txt Totales.txt Precios.java Productos.txt Usaremos un StringTokenizer
19
Tarea 3 Escribir un programa que lea un archivo de texto con la siguiente información: por cada línea viene un número de matrícula, un nombre y apellido de un alumno.Luego viene una cantidad variable pares codigo/nota que representan los ramos que tomó el alumno y la nota que obtuvo en él. Se le pide que escriba un programa que lea esta información y genere 2 archivos: uno (Aprobados.txt) con el número de matrícula, nombre, apellido y promedio de los alumnos con promedio igual o superior a 4.0 y otro (Reprobados.txt) con lo mismo para alumnos con promedio menor que 4.0 Todos los datos en una línea vienen separados por uno o más espacios ej: 1111 Perdo Perez cc10a 5.6 ma20b 4.5 ma10a in20a 3.9 2222 Juan Perez cc30a 6.6 in40b 3.5 ma41c 5.5
20
La clase StringTokenizer
El Constructor de esta clase recibe un string (y posiblemente También un separador). El string es separado en varios sub-strings, de acuerdo al separador (espacio si no se recibe nada). Estos pueden ser recuperados secuencialmente por el método nextToken(). También existe el método hasMoreTokens() que retorna true si todavía quedan más substrings por retornar. String s1 = “we are a happy family” StringTokenizer st = new StringTokenizer(s1); st we are a happy family String s = st.getToken(); st are a happy family s = “we”
21
Archivos de bytes public FileInputStream(String name)
public int read() public int read(byte[] b) public int read(byte[] b, int off, int len) public FileOutputStream(String name) public FileOutputStream(String name, boolean append) public void write(int b) public void write(byte[] b) public void write(byte[] b, int off, int len) CopyFileBytes
22
Archivos de acceso aleatorio
public RandomAccessFile(String name, String mode) mode “r”= read, “rw”= read/write El archivo se organiza como un arreglo de bytes el método seek(long i) posiciona el file pointer delante del i-esimo byte. Desde ahí se puede escribir o leer con distintos métodos, de acuerdo a lo que se necesite, por ej: readInt() writeInt(int i) readChar() writeChar(char c) readString() writeString(String s) etc....
23
Archivos de objetos Lectura
FileInputStream istream = new FileInputStream("t.tmp"); ObjectInputStream p = new ObjectInputStream(istream); int i = p.readInt(); String today = (String)p.readObject(); Date date = (Date)p.readObject(); istream.close();
24
Archivos de objetos: escritura
FileOutputStream ostream = new FileOutputStream("t.tmp"); ObjectOutputStream p = new ObjectOutputStream(ostream) p.writeInt(12345); p.writeObject("Today"); p.writeObject(new Date()); p.flush(); ostream.close(); EL OBJETO DEBE SER SERIALIZABLE !!!!! (ver clase MyDate)
25
Leyendo strings de la línea de comandos
import java.util.*; public class UsoScanner1 { public static void main(String args[ ]) throws IOException { Scanner inKbd = new Scanner(System.in); String inputLine; System.out.print(“Ingresa tu nombre : ”); inputLine = inKbd.nextLine(); System.out.println(“Mucho gusto,”+ inputLine); } La clase Scanner esta en el paquete java.util, por lo que hay que importarla El scanner recorre le que viene en la entrada en busca de un elemento del tipo que le pidieron en nextXXX UsoScanner1
26
Leyendo números desde la línea de comandos
import java.util.*; public class UsoScanner { public static void main(String ars[]) { Scanner sc = new Scanner(System.in); System.out.print("hola, como te llamas "); String nombre = sc.nextLine(); System.out.println(nombre+ ", ingresa un numero"); int i = sc.nextInt(); System.out.println("Lo siento, el mio es "+(i+1)+", yo gano esta vez "); } UsoScanner2 Tambien existe el nextInt, nextDouble, nextFloat, etc Si lo leido no corresponde al formato de lo pedido se produce un error Para evitarlo existen las instrucciones hasNextInt, hasNextDouble, hasNextFloat que retornan true o false
27
Reprogramar el % de numeros sin usar Console (con Scanner)
El programa debe leer una lista de números del 1 al 10 que termina con un 0.Una vez ingresada la lista el programa debe imprimir el % de 1s,2s,...10s que se ingresaron, import java.util.*; public class Program6 { public static void main(String args[ ]) { Scanner inKbd = new Scanner(System.in); int count[] = new int[10], counter = 0; for (int i=0; i < 10; i++) count[i] = 0; while (true) { System.out.print("Enter a value: "); int number = inKbd.nextInt(); if (number == 0) break; counter ++; count[number - 1] ++; } for (int i=0; i < 10; i++) System.out.println("The % of "+(i+1)+ " is "+(100*count[i]/counter)+"%");
28
¿ Ha pensado lo fácil que es hacer caer el Programa anterior ?
Intente ingresar las entradas 12 4r o un cero de partida Ponerse en cada caso y tratar de chequear todo haría el programa mucho más grande y obscuro de entender Java da la posibilidad de reaccionar a los errores con posterioridad a que ellos sucedan y así reaccionar sin que se caiga el programa Bloque try-catch
29
Forma general de programar Exceptions
try { Ponga aquí las instrucciones que pueden causar la excepción } catch (ExceptionOfType1 e) { escriba aca la reacción apropiada } finaly { acá van instrucciones que se ejecutan siempre }
30
El bloque try-catch básico (cuando no nos importa qué pasó)
while (true) { try { System.out.print("Enter a value: "); int number = inKbd.nextInt(); if (number == 0) break; counter = counter + 1; count[number - 1] = count[number - 1] + 1; System.out.println("OK"); } catch (Exception e) { System.out.println(e); System.out.println("NOT OK, entry ignored"); } Program6E1
31
El bloque try-catch refinado (nos interesa saber qué causó el error)
while (true) { try { System.out.print("Enter a value: "); int number = inKbd.nextInt(); if (number == 0) break; counter = counter + 1; count[number - 1] = count[number - 1] + 1; System.out.println("OK"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Not a valid Number");} catch (NumberFormatException e) { System.out.println("This is Not a Number at all"); } Program6E2
32
Java obliga a “reportar”Exceptions
Existen las llamadas Runtime Exception y las Checked Exceptions En caso de las Runtime Exceptions el programador puede optar hacerse cargo de ellas o no En el caso de las Checked Exceptions deben SIEMPRE ser reportadas ya sea en un bloque try-catch o delegando la responsabilidad al método llamador, Esto se hace declarando que el método lanza una Exception (ejemplo throws IOException) En este último caso el método llamador será el encargado de reportar la Exception
33
(veamos algunas de ellas)
Las Exceptions están jerarquizadas (veamos algunas de ellas) Exception IOException InterruptedException RuntimeException EOFException ArthmeticException FileNotFoundException InterruptedEOFException NullPointerException IndexOutOfBoundsException Las rojas son Checked Exceptions: DEBEN ser reportadas
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.