Volver a la página principal
martes 16 julio 2024
99

Programación Orientada a Objetos (POO) en C#

Clases y Objetos

En C#, una clase es una plantilla para crear objetos. Define las propiedades (datos) y métodos (comportamientos) que los objetos de esa clase tendrán. Un objeto es una instancia de una clase.

Ejemplo de clase:

public class Persona
{
    // Propiedades
    public string Nombre { get; set; }
    public int Edad { get; set; }

    // Método
    public void Saludar()
    {
        Console.WriteLine($"Hola, mi nombre es {Nombre} y tengo {Edad} años.");
    }
}

Creación de un objeto:

Persona persona = new Persona();
persona.Nombre = "Juan";
persona.Edad = 30;
persona.Saludar();  // Salida: Hola, mi nombre es Juan y tengo 30 años.

Encapsulamiento

El encapsulamiento se refiere a la ocultación de los detalles internos de un objeto y la exposición solo de lo necesario. En C#, esto se logra mediante modificadores de acceso como public, private, protected, y internal.

Ejemplo de encapsulamiento:

public class CuentaBancaria
{
    // Propiedad privada
    private double saldo;

    // Método público para depositar dinero
    public void Depositar(double cantidad)
    {
        if (cantidad > 0)
        {
            saldo += cantidad;
        }
    }

    // Método público para obtener el saldo
    public double ObtenerSaldo()
    {
        return saldo;
    }
}

Herencia

La herencia permite crear una nueva clase que reutiliza, extiende y modifica el comportamiento de otra clase. La clase que hereda se llama subclase o clase derivada, y la clase de la cual hereda se llama superclase o clase base.

Ejemplo de herencia:

public class Animal
{
    public void Comer()
    {
        Console.WriteLine("El animal está comiendo.");
    }
}

public class Perro : Animal
{
    public void Ladrar()
    {
        Console.WriteLine("El perro está ladrando.");
    }
}

Uso de la herencia:

Perro miPerro = new Perro();
miPerro.Comer();  // Salida: El animal está comiendo.
miPerro.Ladrar(); // Salida: El perro está ladrando.

Polimorfismo

El polimorfismo permite tratar objetos de diferentes clases de una manera uniforme. En C#, el polimorfismo se logra principalmente mediante la herencia y las interfaces.

Ejemplo de polimorfismo con herencia:

public class Vehiculo
{
    public virtual void Moverse()
    {
        Console.WriteLine("El vehículo se está moviendo.");
    }
}

public class Coche : Vehiculo
{
    public override void Moverse()
    {
        Console.WriteLine("El coche se está moviendo.");
    }
}

public class Bicicleta : Vehiculo
{
    public override void Moverse()
    {
        Console.WriteLine("La bicicleta se está moviendo.");
    }
}

public class Programa
{
    public static void Main()
    {
        Vehiculo miVehiculo = new Coche();
        miVehiculo.Moverse();  // Salida: El coche se está moviendo.

        miVehiculo = new Bicicleta();
        miVehiculo.Moverse();  // Salida: La bicicleta se está moviendo.
    }
}

Abstracción

La abstracción consiste en simplificar la complejidad mediante la ocultación de detalles innecesarios, exponiendo solo la funcionalidad esencial. En C#, las clases abstractas y las interfaces se utilizan para lograr la abstracción.

Ejemplo de clase abstracta:

public abstract class Figura
{
    public abstract double CalcularArea();
}

public class Circulo : Figura
{
    public double Radio { get; set; }

    public Circulo(double radio)
    {
        Radio = radio;
    }

    public override double CalcularArea()
    {
        return Math.PI * Radio * Radio;
    }
}

public class Rectangulo : Figura
{
    public double Ancho { get; set; }
    public double Alto { get; set; }

    public Rectangulo(double ancho, double alto)
    {
        Ancho = ancho;
        Alto = alto;
    }

    public override double CalcularArea()
    {
        return Ancho * Alto;
    }
}

Uso de la abstracción:

public class Programa
{
    public static void Main()
    {
        Figura miCirculo = new Circulo(5);
        Console.WriteLine($"Área del círculo: {miCirculo.CalcularArea()}");

        Figura miRectangulo = new Rectangulo(4, 6);
        Console.WriteLine($"Área del rectángulo: {miRectangulo.CalcularArea()}");
    }
}

Interfaces

Una interfaz define un contrato que las clases deben cumplir. No proporciona implementación, solo define los métodos y propiedades que deben ser implementados.

Ejemplo de interfaz:

public interface IMovible
{
    void Mover();
}

public class Avion : IMovible
{
    public void Mover()
    {
        Console.WriteLine("El avión está volando.");
    }
}

public class Barco : IMovible
{
    public void Mover()
    {
        Console.WriteLine("El barco está navegando.");
    }
}

Uso de interfaces:

public class Programa
{
    public static void Main()
    {
        IMovible miAvion = new Avion();
        miAvion.Mover();  // Salida: El avión está volando.

        IMovible miBarco = new Barco();
        miBarco.Mover();  // Salida: El barco está navegando.
    }
}

Beneficios de la POO en C#

1. Modularidad: Los programas se pueden dividir en objetos individuales, facilitando la gestión y el mantenimiento.

2. Reutilización: Las clases y los objetos se pueden reutilizar en diferentes programas.

3. Flexibilidad: Es fácil añadir nuevas funcionalidades sin modificar el código existente.

4. Facilidad de Mantenimiento: La organización del código en objetos hace que el software sea más fácil de mantener y actualizar.

Conclusión

La Programación Orientada a Objetos es un pilar esencial en el desarrollo de software moderno y C# proporciona un sólido soporte para este paradigma. Comprender y aplicar los conceptos de la POO como clases, objetos, herencia, encapsulamiento, polimorfismo y abstracción es crucial para escribir código eficiente, modular y mantenible en C#. Al dominar estos conceptos, los desarrolladores pueden crear aplicaciones más robustas y escalables.

Etiquetas:
csharp poo
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer