Conceptos Esenciales de POO, Patrones SOLID y Estructuras Avanzadas en Java

Fundamentos de la Programación Orientada a Objetos (POO)

Sobrecarga de Métodos (Overloading)

Permite definir métodos con el mismo nombre dentro de una misma clase, siempre que difieran en el número, tipo o el orden de los parámetros. Se resuelve en tiempo de compilación (estática).

Formas Comunes de Sobrecarga

  • Mismo nombre, distinto número de argumentos.
  • Mismo nombre, distintos tipos de argumentos.

Reglas de Promoción de Tipos (Casteo)

  • byteshortintlongfloatdouble
  • charintlongfloatdouble

Sobreescritura de Métodos (Overriding)

Ocurre cuando una subclase redefine un método de su superclase con igual firma (nombre y parámetros). Se resuelve en tiempo de ejecución (dinámica). Permite modificar o extender comportamientos heredados sin alterar la superclase.

Modificador de Acceso protected

Permite acceso a miembros desde:

  • Clases del mismo paquete.
  • Subclases, incluso en paquetes distintos.

Es un punto medio entre public y private. Favorece la herencia controlada y la encapsulación parcial.

Principios y Patrones de Diseño

Patrones GRASP (General Responsibility Assignment Software Patterns)

Conjunto de principios para asignar responsabilidades en la Programación Orientada a Objetos (POO). Buscan lograr bajo acoplamiento y alta cohesión.

Principales Patrones GRASP

  • Experto: La clase que posee la información necesaria debe asumir la responsabilidad. Mantiene el encapsulamiento.
  • Creador: La clase que usa o contiene a otra debe ser responsable de crear sus instancias.
  • Controlador: Actúa como intermediario entre la interfaz de usuario y la lógica de negocio.
  • Alta Cohesión: Las clases deben tener funciones relacionadas coherentemente.
  • Bajo Acoplamiento: Las clases deben depender lo menos posible unas de otras.

Principios SOLID

Cinco principios fundamentales para lograr un diseño de software limpio, flexible y mantenible:

  • S – Responsabilidad Única (Single Responsibility Principle): Cada clase debe tener una sola tarea clara y una única razón para cambiar.
  • O – Abierto/Cerrado (Open/Closed Principle): Abierto a extensión, cerrado a modificación.
  • L – Sustitución de Liskov (Liskov Substitution Principle): Las subclases deben poder reemplazar a sus superclases sin alterar el comportamiento esperado del programa.
  • I – Segregación de Interfaces (Interface Segregation Principle): Ninguna clase debe ser forzada a implementar métodos que no utiliza.
  • D – Inversión de Dependencias (Dependency Inversion Principle): Las clases deben depender de abstracciones (interfaces), no de implementaciones concretas.

Revisión Práctica de SOLID

Ejemplos aplicados de cada principio:

  • Separación de responsabilidades (ej. clases UserLogin y EmailSender).
  • Herencia y extensión (ej. AutoAutoCarreras).
  • Sustitución correcta (ej. IAuto reemplazado por AutoElectrico sin romper la lógica).

Desarrollo de Interfaces Gráficas (GUI) con Swing

Arquitectura de una Aplicación GUI

  • Separación clara entre interfaz, lógica y datos.

Componentes GUI de Swing

  • Contenedores: JFrame, JPanel.
  • Componentes Interactivos: JButton, JTextField, JLabel, JTable.
  • Eventos: Manejados mediante interfaces como ActionListener.

Descripción Detallada de Componentes

  • JFrame: Ventana base. Utiliza métodos como setSize, setLocation, etc.
  • JButton: Genera eventos de acción (ActionEvent).
  • JLabel: Muestra texto o imagen (no editable).
  • JTextField: Campo de texto editable.
  • JTable: Muestra datos en forma tabular, manejado por TableModel.
  • JPanel: Organiza componentes utilizando layout managers.

Introducción a Swing

Swing es una biblioteca para crear interfaces gráficas de usuario (GUI) en Java.

  • Incluye componentes ligeros como JFrame (ventana principal), JButton, JLabel, JTextField, JTable y JPanel.
  • Utiliza layout managers para organizar los componentes dentro de los contenedores.
  • Es independiente del sistema operativo (no utiliza componentes nativos).

Estructuras Avanzadas de Java

Clases Internas (Inner Classes)

Clases declaradas dentro de otra clase, permitiendo un mayor encapsulamiento y organización.

Tipos de Clases Internas

  • Normales: Declaradas dentro de una clase (requieren instancia de la clase externa).
  • Estáticas: No necesitan una instancia de la clase externa para ser utilizadas.
  • Locales: Declaradas dentro de un método.
  • Anónimas: Clases sin nombre, usadas comúnmente para implementar interfaces o extender clases rápidamente.

Java Collections Framework (JCF)

Evolución de los arreglos, ofreciendo estructuras de datos con tamaño dinámico. Se encuentran en el paquete java.util.

Principales Interfaces y Estructuras

  • Collection: Define operaciones básicas (add, remove, size, clear, iterator).
  • List: Elementos ordenados y repetibles.
    • ArrayList: Rápido en lectura y acceso por índice.
    • LinkedList: Eficiente en inserciones y eliminaciones.
    • Vector: Versión sincronizada (legado).
  • Set: No permite elementos duplicados.
    • HashSet: Sin orden garantizado.
    • TreeSet: Ordenado (utiliza un árbol).
    • SortedSet: Interfaz que garantiza el orden de los elementos.
  • Map: Almacena pares clave–valor.
    • HashMap: Rápido, sin orden garantizado.
    • TreeMap: Ordenado por clave.

Iteradores

El Iterator permite recorrer los elementos de una colección sin exponer su estructura interna. Asegura recorrer todos los elementos una vez, incluso si el orden no es fijo.

Manejo de Excepciones en Java

Concepto de Excepción

  • Evento que interrumpe el flujo normal del programa.
  • Permite manejar errores de manera controlada, evitando que el programa colapse.

Bloques try, catch, finally

  • try: Contiene el código que es susceptible de fallar.
  • catch: Captura y maneja la excepción lanzada.
  • finally: Se ejecuta siempre, independientemente de si ocurrió una excepción (ideal para liberar recursos).

Uso de throw y throws

  • throw: Se utiliza para lanzar manualmente una instancia de excepción.
  • throws: Se utiliza en la firma de un método para declarar que dicho método puede lanzar una o más excepciones.

Jerarquía de Excepciones

Throwable es la clase raíz de toda la jerarquía de excepciones.

  • Exception: Errores que pueden y deben manejarse.
    • Checked Exceptions: Deben ser capturadas o declaradas (ej. IOException, SQLException).
    • Unchecked Exceptions (RuntimeException): Errores lógicos o de programación (ej. ArithmeticException, NullPointerException).
  • Error: Fallas graves del sistema que generalmente no se pueden recuperar (ej. OutOfMemoryError, StackOverflowError).

Excepciones Propias y Métodos de Throwable

  • Excepciones Propias: Se crean extendiendo Exception o RuntimeException. Permiten representar errores específicos de la lógica de negocio.
  • Métodos Útiles de Throwable: getMessage(), toString(), printStackTrace().

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.