Perfilado de sección

  •  Idea Central

    La sobrecarga ocurre cuando una clase tiene dos o más métodos con el mismo nombre, pero  con diferentes firmas. (Definición de Firma: Es la combinación del nombre del método + la lista de sus parámetros (cantidad, tipo y orden). El tipo de retorno no forma parte de la firm)a.

    ¿Por qué es útil para un Ingeniero?

    Evita crear nombres genéricos y confusos como sumarEnteros(), sumarDoubles(), sumarTresNumeros(). Simplemente usamos sumar() y dejamos que el compilador elija el correcto.


    2. Reglas de Oro 

    Para que el compilador de Java no se confunda, debe cumplirse al menos una de estas condiciones:

    1. Diferente número de parámetros.
    2. Diferentes tipos de datos en los parámetros.
    3. Diferente orden de los tipos de parámetros.

    3. Ejemplo Práctico: Clase LiquidacionNomina

    Imagina un sistema que calcula el pago de un empleado. El pago puede variar según los bonos o deducciones.

    java

    public class CalculadoraNomina {

     

        // 1. Pago básico: Solo salario mensual

        public double calcularPago(double salarioBase) {

            return salarioBase;

        }

     

        // 2. Sobrecarga: Salario + un bono fijo

        public double calcularPago(double salarioBase, double bono) {

            return salarioBase + bono;

        }

     

        // 3. Sobrecarga: Salario + bono + porcentaje de deducción (ej. salud/pensión)

        public double calcularPago(double salarioBase, double bono, int porcentajeDeduccion) {

            double deduccion = salarioBase * (porcentajeDeduccion / 100.0);

            return (salarioBase + bono) - deduccion;

        }

    }


     

    5. Ejercicio de Reto para el Estudiante

    Reto: El Buscador de Precios
    Crea una clase llamada Catalogo que tenga un método sobrecargado buscarPrecio():

    1. Si se recibe un String (nombre del producto), devuelve el precio de una lista interna.
    2. Si se recibe un int (código de barras), busca por código.
    3. Si se recibe un String (nombre) y un boolean (esMayorista), devuelve el precio con un 20% de descuento.

    __________________________________________________________________________________________________________

    __________________________________________________________________________________________________________

    Métodos de Instancia (Instance Methods)

    • Asociación: Ligados a una instancia (objeto) particular de la clase.
    • Uso: Modifican o acceden al estado específico del objeto (this en Java/C#, self en Python).
    • Invocación: Requieren crear primero el objeto: Objeto obj = new Objeto(); obj.metodo();.
    • Ejemplo: factura1.calcularIVA(). 

     

    Métodos Estáticos (Static Methods / Class Methods)

    • Asociación: Ligados a la clase, no a instancias. Se crea una sola copia.
    • Uso: Operaciones que no dependen del estado de un objeto, ideales para funciones de utilidad o métodos "fábrica".
    • Invocación: Se llaman directamente desde la clase: NombreClase.metodo();.
    • Restricciones: No pueden acceder a variables o métodos de instancia directamente.
    • Ejemplo: Math.sqrt(16) o Utilidades.convertirMoneda(). 

     

     

    Diferencias Clave

    Característica 

    Métodos de Instancia

    Métodos Estáticos (de Clase)

    Requiere Instancia

    Sí (new)

    No

    Acceso al Estado

    Sí (a this/self)

    No (solo datos estáticos)

    Uso principal

    Comportamientos específicos del objeto

    Funciones de utilidad/auxiliares

    Ejemplo (Java)

    void setNombre() {}

    static void print() {}

    Los Getters y Setters en Java

    son métodos públicos utilizados para acceder (get) y modificar (set) el valor de atributos privados de una clase, facilitando el encapsulamiento y la protección de datos. Un getter devuelve el valor, mientras que un setter actualiza el valor del atributo.

    public class Persona {

        // Atributos privados (encapsulamiento)

        private String nombre;

        private int edad;

     

        // Constructor

        public Persona(String nombre, int edad) {

            this.nombre = nombre;

            this.edad = edad;

        }

     

        // Getter para nombre

        public String getNombre() {

            return nombre;

        }

     

        // Setter para nombre

        public void setNombre(String nombre) {

            this.nombre = nombre;

        }

     

        // Getter para edad

        public int getEdad() {

            return edad;

        }

     

        // Setter para edad con validación

        public void setEdad(int edad) {

            if (edad > 0) {

                this.edad = edad;

            } else {

                System.out.println("La edad no puede ser negativa.");

            }

        }

    }

     

    // Uso de la clase

    public class Main {

        public static void main(String[] args) {

            Persona p = new Persona("Ana", 25);

           

            // Uso de getters

            System.out.println(p.getNombre()); // Imprime: Ana

           

            // Uso de setters

            p.setNombre("Pedro");

            p.setEdad(30);

           

            System.out.println(p.getNombre() + " tiene " + p.getEdad() + " años."); // Pedro tiene 30 años.

        }

    }

    Beneficios y Características:

    • Encapsulamiento: Protege las variables de instancia.
    • Validación: Los setters pueden validar datos antes de asignarlos (ej. evitar edades negativas).
    • Generación Automática: Los IDEs como Eclipse o NetBeans generan estos métodos automáticamente (clic derecho -> "Generate Getters and Setters").
    • Convención: Usan la estructura getNombreAtributo() y setNombreAtributo().