Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Sintaxis Completa de Java (POO)

Universidad Nacional de Rio Negro - Sede Andina

Esta referencia cubre los conceptos avanzados de Java centrados en la Programación Orientada a Objetos (POO). Estos temas se exploran en profundidad durante la segunda parte de la cátedra.


1. Clases y Objetos

A diferencia de la programación imperativa pura, en la POO el código se organiza alrededor de los objetos y sus interacciones.

Definición de una Clase

Una clase es la “plantilla” o plano para crear objetos.

public class CuentaBancaria {
    // Atributos (Estado)
    private String numero;
    private double saldo;

    // Constructor (Inicialización)
    public CuentaBancaria(String numero, double saldoInicial) {
        this.numero = numero;
        this.saldo = saldoInicial;
    }

    // Métodos (Comportamiento)
    public void depositar(double monto) {
        if (monto > 0) {
            this.saldo += monto;
        }
    }
}

Para profundizar en la estructura de clases, consultá ../parte_2/03_sintaxis_clases.


2. Los Pilares de la POO

Encapsulamiento

Protección del estado interno mediante modificadores de acceso.

Herencia

Permite crear nuevas clases basadas en clases existentes. Se usa la palabra clave extends.

public class CuentaAhorro extends CuentaBancaria {
    private double tasaInteres;

    public CuentaAhorro(String numero, double saldo, double tasa) {
        super(numero, saldo); // Llama al constructor de la superclase
        this.tasaInteres = tasa;
    }
}

Polimorfismo

Capacidad de un objeto de tomar múltiples formas. Una variable de tipo superclase puede referenciar un objeto de cualquier subclase.

CuentaBancaria cuenta = new CuentaAhorro("123", 1000, 0.05);
cuenta.depositar(500); // Se ejecuta el comportamiento apropiado

Consultá ../parte_2/04_oop_herencia_polimorfismo y ../parte_2/05_herencia_polimorfismo para más detalles.


3. Interfaces y Clases Abstractas

Las interfaces definen contratos (qué debe hacer un objeto), mientras que las clases abstractas sirven como bases parciales que no pueden instanciarse directamente.

public interface Validador {
    boolean esValido();
}

public abstract class Vehiculo {
    public abstract void mover(); // Método sin implementación
}

4. Genéricos y Colecciones

Java proporciona un potente framework para manejar conjuntos de datos de forma dinámica y segura.

El Java Collections Framework (JCF)

List<String> nombres = new ArrayList<>();
nombres.add("Java");
nombres.add("POO");

for (String n : nombres) {
    System.out.println(n);
}

Podés encontrar la guía completa de colecciones en ../parte_2/07_colecciones_genericos.


5. Excepciones Avanzadas

El manejo de errores en Java es robusto y obliga al programador a considerar situaciones de fallo.

try (BufferedReader br = new BufferedReader(new FileReader("archivo.txt"))) {
    // Código que puede fallar
} catch (FileNotFoundException e) {
    System.err.println("Archivo no encontrado");
} catch (IOException e) {
    System.err.println("Error de lectura");
} finally {
    // Se ejecuta siempre (opcional si se usa try-with-resources)
}

6. Programación Funcional y Streams (Temas Excluidos)

Expresiones Lambda

Son funciones anónimas que permiten escribir código más conciso.

// PROHIBIDO en el curso
lista.forEach(n -> System.out.println(n));

API de Streams

Permite procesamiento de datos en estilo declarativo/funcional.

// PROHIBIDO en el curso
int suma = numeros.stream()
    .filter(n -> n > 0)
    .mapToInt(Integer::intValue)
    .sum();

Referencias a Métodos

Sintaxis compacta para llamar a métodos existentes.

// PROHIBIDO en el curso
lista.forEach(System.out::println);

7. Temas Complementarios

Durante el curso también exploraremos:


8. Clases Internas Anónimas

Las clases internas anónimas permiten declarar e instanciar una clase al mismo tiempo, sin darle un nombre. Son útiles para implementaciones de un solo uso de interfaces o clases abstractas.

// Ejemplo usando un Comparador externo
Collections.sort(lista, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }
});