Qué es orientación a objeto ?

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE (SL-110) CAPÍTULO 13 Ing. Ronald Criollo.
Advertisements

Archivos de Texto. Introducción Los archivos son una secuencia de bits que se guarda en el disco duro. La ventaja de utilizar archivos es que los datos.
Archivos Binarios. Introducción En clase ya vimos el uso de archivos de texto en Java, pero el uso de archivos es mucho más poderoso que eso, al utilizar.
Programación Interactiva Manejo de Excepciones
Archivos Implementar un método que lea una secuencia de números enteros de un archivo y compute la cantidad de elementos leídos.
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Manejo de excepciones en Java
1 Streams en Java Agustín J. González ELO Generalidades Un Stream es simplemente una fuente o destino de bytes. Los streams más comunes son los.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
Framework Class Library (FCL) Dr. Diego Lz. de Ipiña Gz. de Artaza
Entrada y Salida Java. Clase File La clase File proporciona mucha informacion relacionada con archivos y con la obtencion de informacion basica sobre.
Programación Orientada a Objetos
El lenguaje de programación Java
USO DE EXCEPCIONES EN JAVA LSC. Natalia Rodríguez Castellón.
Programación Orientada a Objetos Unidad 4 Excepciones Universidad de Chile Departamento de Ciencias de la Computación.
PAQUETES Un paquete es un conjunto de clases, interfaces y subpaquetes relacionados. El paquete define un ámbito de visibilidad: los miembros que no tienen.
Java.
1 Streams y Persistencia en Java Agustín J. González ELO-329.
2. Strings, Archivos y Arreglos
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
LENGUAJE DE PROGRAMACIÓN
1 Métodos. 2 Un método es un conjunto de instrucciones definidas dentro de una clase, que realizan una determinada tarea y a las que podemos invocar mediante.
Excepciones Diseño y manejo de excepciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 5 Versión
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
BUSQUEDAS BINARIAS Y SECUENCIALES Hernández Salazar Alma Pérez González Luis Alberto Villa Méndez Edgar Adrián Villegas Titla Jorge Ramsés Ríos Álvarez.
Flujos de datos Un flujo es un canal por donde fluyen los datos.
Archivos en Java Unidad III – Programación Orientada a Objetos en Java Programación I
Ingeniero en Computación José Alfredo Cobián Campos
Introducción a la Programación Multimedial
Introducción a la programación en JAVA
Programación en C - manejo de Archivos
Clase1: lectura/escritura/asignación
2.  Diagramas de Estado.
Clase 8: Strings Valeria Herskovic –
Programación en C - manejo de Archivos
ECLIPSE.
Introducción a Base de Datos
Métodos en Java.
Guía teórica de manejo de estructuras de datos
Diseño y Programación Orientada a Objetos
Objeto de clase Fracción métodos públicos representación privada constructor Fraccion(…) asigna a procedimiento void m(…) modifica b función tipo/clase.
Persistencia y Serialización en Java con Archivos
Leccion 5: Escogiendo un Tipo de Variable
Fundamentos del lenguaje de programación Condicionales, ciclos, Métodos, enumeraciones Escuela Técnica Superior Kinal Instructor Edwin Tumax.
Teclado y Pantalla (Java estándar)
Unidad 3. Introducción a la programación
ESTRUCTURA DE UN PROGRAMA SIMPLE EN JAVA
Programación Orientada a Objetos
Usando StreamReader y StreamWriter
Usando StreamReader y StreamWriter
FLUJOS (Flujos de Bytes-Caracteres)
Lenguaje Java: características técnicas
Qué es orientación a objeto ?
Clase 7 Strings 28 de Marzo (N.Baloian).
2.  Diagramas de Estado.
Clase1: lectura/escritura/asignación
Programación Orientada a Objetos
String, random y stream en java
Clase 10 (Repaso/Resumen)
Leyendo strings de la línea de comandos
Problemas de Strings boolean palindrome(String x) Ej: palindrome(“reconocer”)=true boolean alfabetico(String x) Ej:
5-abril (J.Alvarez) 5-abril (J.Alvarez)
Clase1: lectura/escritura/asignación
Problemas de Strings boolean palindrome(String x) Ej: palindrome(“reconocer”)=true boolean alfabetico(String x) Ej: alfabetico(“hola”)=true,
Prof. Marcos Heredia.  Primitivos y No Primitivos.
Problema Un programa debe leer 2 números desde un objeto Console. El primero es el monto que un cliente debe pagar por una compra y el segundo la cantidad.
Qué es orientación a objeto ?
Programación Orientada a Objetos
Transcripción de la presentación:

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)

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

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)

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

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

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

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

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

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

Otros métodos para String Para saber mas acerca de esta y cualquier otra clase que provee el lenguaje java se puede consultar http://java.sun.com/j2se/1.4.1/docs/api/ 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

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

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

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

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

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

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

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 6.6 in20a 3.9 2222 Juan Perez cc30a 6.6 in40b 3.5 ma41c 5.5

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”

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

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

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

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)

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

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

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)+"%");

¿ 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

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 }

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

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

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

(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