Programación Orientada a Objetos (POO)
Manejo de Archivos
Archivo: Un elemento (objeto) en una computadora que almacena información manipulable por
un programa. El formato del archivo es importante.
Archivos en Java: Se manejan mediante streams.
Stream: Conexión entre un programa y una fuente/destino de datos.
Tipos de Streams:
Flujo de bytes:
InputStream (Lectura)
OutputStream (Escritura)
Incluidas en java.io
Flujo de caracteres:
Reader (Lectura)
Writer (Escritura)
Clase File:
Permite manejar archivos o carpetas.
Una instancia de File no crea el archivo, solo es una referencia.
Declaración: File identificador = new File(nombreYextension);
Métodos:
exists(): Verifica si el archivo existe.
createNewFile(): Crea un nuevo archivo.
mkdir(): Crea un nuevo directorio.
delete(): Elimina el archivo.
renameTo(): Renombra el archivo.
list(): Lista los archivos en un directorio.
Clase FileWriter:
Permite crear y escribir un flujo de caracteres en un archivo.
Declaración: FileWriter identificador = new FileWriter(nombreYextension);
Métodos:
write(String s): Escribe la cadena s en el archivo.
close(): Cierra el flujo.
Clases FileReader / BufferedReader:
Permiten leer un flujo de caracteres desde un archivo.
Declaración FileReader: FileReader identificador = new FileReader(nombreYextension);
Declaración BufferedReader: BufferedReader identificador = new BufferedReader(FileReader
id);
Métodos BufferedReader:
readLine(): Lee una línea de texto del archivo.
close(): Cierra el flujo.
Clase FileOutputStream:
Permite crear y escribir un flujo de bytes en un archivo.
Declaración: FileOutputStream identificador = new FileOutputStream(nombreYextension);
Métodos:
write(byte[] b): Escribe el arreglo de bytes b en el archivo.
write(byte[] b, int offset, int len): Escribe len bytes del arreglo b desde la posición offset.
write(int b): Escribe un byte b en el archivo.
close(): Cierra el flujo.
Clase FileInputStream:
Permite leer un flujo de bytes desde un archivo.
Declaración: FileInputStream identificador = new FileInputStream(nombreYextension);
Métodos:
read(byte[] b): Lee bytes del archivo y los guarda en el arreglo b.
read(byte[] b, int offset, int len): Lee hasta len bytes del archivo y los guarda en el arreglo b
a partir de la posición offset.
read(int b): Lee un byte del archivo.
close(): Cierra el flujo.
Clase ObjectOutputStream:
Permite crear y escribir un flujo de bytes en un archivo (objetos y tipos primitivos).
Declaración: ObjectOutputStream identificador = new
ObjectOutputStream(nombreYextension);
Métodos:
writeInt(int b): Escribe un entero b.
writeBoolean(boolean b): Escribe un booleano b.
writeObject(Object obj): Escribe el objeto obj.
Clase ObjectInputStream:
Permite leer un flujo de bytes desde un archivo (objetos y tipos primitivos).
Declaración: ObjectInputStream identificador = new ObjectInputStream(nombreYextension);
Métodos:
readInt(): Lee un entero.
readBoolean(): Lee un booleano.
readObject(): Lee un objeto.
Excepciones y Errores
Excepción: Indicación de un problema que ocurre durante la ejecución de un programa.
Manejo de Excepciones: Permite al programa continuar su ejecución como si no hubiera
encontrado un problema.
Ejemplos de Excepciones/Errores:
Índices fuera de rango.
Desbordamiento aritmético.
División entre cero.
Parámetros inválidos de método.
Interrupción de subprocesos.
Asignación fallida de memoria.
Invocación de métodos de otras clases.
El manejo de excepciones NO está diseñado para:
Operaciones de E/S de disco.
Recepción de mensajes de red.
Clics del ratón.
Pulsaciones de teclas.
Operaciones que ocurren en paralelo e independiente del control del programa.
Captura de Excepciones: Cláusulas try, catch y finally.
try {
// Instrucciones que pueden provocar excepciones
} catch (/*objeto de tipo excepción*/) {
// Manejador de la excepción
// Código a ejecutar cuando se lance la excepción
} finally {
// Código que siempre se ejecuta después del código en try
}
try: Bloque de código que puede lanzar una excepción.
catch: Bloque de código que maneja una excepción específica.
finally: Bloque de código que siempre se ejecuta, independientemente de si se lanza una
excepción o no.
Tipos de Excepciones:
Verificadas (Checked Exceptions): Deben manejarse.
IOException: Errores de E/S.
FileNotFoundException: Archivo no encontrado.
SQLException: Error al trabajar con BD.
ParseException: Error al analizar fechas o formatos.
No Verificadas (Unchecked Exceptions): Recomendable manejarse.
NullPointerException: Acceso a objetos nulos.
ArithmeticException: Errores en operaciones matemáticas.
ArrayIndexOutOfBoundsException: Índice de arreglo fuera de rango.
NumberFormatException: Conversión inválida de cadena.
Tipos de Errores: Problemas graves (no se sugiere con try-catch). No deben manejarse.
OutOfMemoryError: Falta de memoria.
StackOverflowError: Desbordamiento de pila (recursión infinita).
Jerarquía de Clases:
Throwable
Error
OutOfMemoryError
StackOverflowError
Exception
IOException
FileNotFoundException
EOFException
MalformedURLException
AWTException
RuntimeException
NullPointerException
IndexOutOfBoundsException
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
ArithmeticException
NegativeArraySizeException
NumberFormatException
Propagación de Excepciones:
Las excepciones se propagan hacia arriba en la pila de llamadas hasta que se encuentra un
bloque catch que pueda manejarlas.
Si un método no maneja una excepción, debe declararla usando la cláusula throws.
Cláusula throws:Modif Retorno NombreMétodo (Argumentos) throws <Tipos Excepciones>
{ ... }
Generación de Clases de Manejo de Excepciones:
Se pueden crear clases de excepciones personalizadas que hereden de la clase Exception.
Declaración de la clase:
public class NombreClaseExcepcion extends Exception {
public NombreClaseExcepcion(String mensaje) {
super(mensaje);
}
}
Lanzar la excepción:
Modif retorno nombreMetodo (Argumentos) throws NombreClaseExcepcion {
// código
throw new NombreClaseExcepcion("Mensaje de error");
// código
}
Interfaz Gráfica en Java
Despliegue de información en pantalla en una región conocida como ventana.
Mecanismo amigable para interactuar con un programa.
Regularmente usa programación basada en eventos.
Evento: Mecanismo mediante el cual un objeto notifica sobre la ocurrencia de un suceso.
Swing/AWT:
Swing: Componentes escritos en Java para diseñar GUI.
Se ejecutan uniformemente en cualquier plataforma (que soporte JVM).
Swing - Jerarquía de Clases:
Object
Component
Container
JComponent
JLabel
JTextField
JButton
JCheckBox
JComboBox
JList
JPanel
JFrame
Swing - Principales Componentes:
JLabel: Área donde pueden mostrarse íconos o texto no editable.
JTextField: Área en la que el usuario introduce datos desde el teclado.
JButton: Área que cuando el ratón hace click sobre ella, desencadena un evento.
JCheckBox: Componente que puede ser marcado o desmarcado.
JComboBox: Lista desplegable de elementos.
JList: Área que contiene una lista de elementos (pueden seleccionarse varios elementos).
JPanel: Contenedor en el cual pueden colocarse y organizarse componentes.
JFrame: Una ventana que contiene otros componentes.
Contenedor: Componente para ubicar otros componentes (ej: JPanel, JFrame).
Patrones de Diseño
Patrón: Forma de realizar alguna tarea o actividad en particular. Forma “General” de solucionar
un problema.
Aplicado en POO: Formas de organizar el código de un programa.
Patrón Arquitectónico MVC (Modelo-Vista-Controlador):
Modelo: Encargado de gestionar los datos y las reglas de la aplicación.
Vista: Encargada de mostrar los datos y recoger las interacciones con el usuario.
Controlador: Intermediario entre la vista y el modelo. Encargado de extraer, interpretar,
modificar y proporcionar datos al usuario.