Métodos de instancia vs métodos estáticos
Aprende a crear correctamente métodos en C#🔥

Estimados devs! En esta oportunidad van a aprender los 2 tipos de métodos que existen en la programación orientada a objetos, conocer cuando usar una u otra es la clave para ser un mejor desarrollador. Comencemos 🐿️

Existen dos tipos de métodos en la programación orientada a objetos:

  • Métodos de instancia: Son los métodos más comunes
  • Métodos estáticos: También llamados métodos de clase

Métodos de instancia

Son aquellos métodos que para ser invocados se debe instanciar la clase que lo contiene.

Este tipo de métodos son los más comunes, de hecho es el tipo de método por defecto en el paradigma orientado a objetos.

Se utilizan para funcionalidades estrechamente relacionadas con las propiedades de un objeto de la clase, esto aprovecha la característica de los lenguajes del paradigma orientado a objetos llamado encapsulamiento.

Debido a que estos métodos pertenecen no a la clase directamente sino a una instancia de ella, entonces hacen uso de sus propiedades.

Métodos estáticos

Este tipo de métodos son aquellos que no necesitan una instancia de su clase.

Los métodos se definen como estáticos con la palabra reservada:

static

Este tipo de métodos pueden ser invocados directamente sólo con poner el nombre de la clase seguida de un punto. Algo así:

Helper.ConvertToUSD(double montoSoles);

Como notarás, la clase es Helper y el método se llama ConvertToUSD y no fue necesario instanciar nada, se llamó al método directamente y se le pasó la información que necesitaba mediante un parámetro llamado montoSoles, pero podría también utilizar una variable o propiedad de su clase, siempre que se declaren como estáticas también, al igual que el método.

Estos métodos se utilizan cuando no interesa acceder a la información de un objeto de la clase, sino que simplemente son cálculos discretos, que tienen toda la información sin encapsular en ningún objeto.

Por ejemplo estos métodos se usan cuando hay que hacer un cálculo directo hacia un parámetro, una conversión como conversión de monedas, temperaturas, métodos auxiliares o de ayuda, también conocidos como helpers, entre otros son candidatos perfectos para ser estáticos.

Hora de poner en práctica lo aprendido. Foto de ThisisEngineering RAEng en Unsplash

Ejemplo práctico

Primero creo la entidad: Cliente

    public class Cliente
    {
        public int Id { get; set; }
        public string Nombre { get; set; }
    }

Ahora creo una clase para gestionar los clientes: ClienteGestion

    public class ClienteGestion
    {
        //Propiedades
        public Cliente Cliente { get; set; }
        public int AniosAntiguedad { get; set; }
        public double MontoComprasAcumuladas { get; set; }
        public double MontoDeudaActual { get; set; }

        public static double TotalIngresos;

        //Métodos de instancia
        public string obtenerStatus()
        {
            //Lógica del negocio
            var response = "";

            if (AniosAntiguedad > 1)
            {
                if (MontoDeudaActual == 0)
                {
                    response = MontoComprasAcumuladas > 1000 ? "Cliente premium" : "Cliente preferencial";
                }
                else
                {
                    response = MontoDeudaActual / MontoComprasAcumuladas < 0.25 ? "Cliente comun" : "Cliente riesgoso";
                }
            }
            else
            {
                response = "Cliente sin historial suficiente";
            }

            return response;
        }

        //Métodos estáticos
        public static void CalculateTax()
        {            
            Console.WriteLine($"Tus impuestos son: {TotalIngresos * 0.2}");
        }

        public static void CalculateTax(double totalIngresos)
        {
            Console.WriteLine($"Tus impuestos son: {totalIngresos * 0.2}");
        }
    }

Como mi ejemplo es una aplicación de consola, entonces en la clase Program hacemos esto:

using InstanceStaticMethods.Business;
using InstanceStaticMethods.Entities;

Console.WriteLine("Métodos de instancia vs métodos estáticos");

/****** Método de instancia ******/
Cliente cliente = new Cliente();
cliente.Id = 1;
cliente.Nombre = "Juan Valdez";

ClienteGestion objetoGestion = new ClienteGestion();
objetoGestion.Cliente = cliente;
objetoGestion.AniosAntiguedad = 2;
objetoGestion.MontoComprasAcumuladas = 1000;
objetoGestion.MontoDeudaActual = 0;

Console.WriteLine(objetoGestion.obtenerStatus());

/****** Métodos estáticos ******/
ClienteGestion.TotalIngresos = 3000;
ClienteGestion.CalculateTax();

ClienteGestion.CalculateTax(2500);

Ejecutamos la aplicación y tenemos:

El código está disponible en mi repo de Github 🥳

Si este entrada te ha encantado, compártela con todo tu equipo de ingeniería 🙌

Créditos de foto de portada: Foto de ThisisEngineering RAEng en Unsplash

Deja una respuesta

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