CSharp: Programación Orientada a Objetos
Descubre los fundamentos de la programación orientada a objetos en C# y domina conceptos clave como clases, herencia y polimorfismo.
Aprende CSharp GRATIS y certifícateProgramación Orientada a Objetos en C#
La programación orientada a objetos (POO) representa un paradigma fundamental en el desarrollo de software moderno, especialmente relevante en C#. Este enfoque permite modelar problemas del mundo real mediante la creación de entidades que encapsulan tanto datos como comportamientos, proporcionando una base sólida para construir aplicaciones robustas y mantenibles.
Fundamentos conceptuales
En C#, todo gira en torno a los objetos. Un objeto es una instancia de una clase que combina propiedades (datos) y métodos (comportamientos) en una sola unidad cohesiva. Esta aproximación facilita la organización del código y mejora significativamente la reutilización de componentes.
Las clases actúan como plantillas o moldes que definen la estructura y comportamiento que tendrán los objetos creados a partir de ellas. Cuando declaramos una clase en C#, estamos estableciendo un nuevo tipo de dato personalizado que puede incluir campos, propiedades, métodos y eventos.
public class Vehiculo
{
public string Marca { get; set; }
public string Modelo { get; set; }
public int Año { get; set; }
public void Acelerar()
{
Console.WriteLine($"El {Marca} {Modelo} está acelerando");
}
}
Pilares fundamentales
La programación orientada a objetos en C# se sustenta sobre cuatro pilares fundamentales que proporcionan estructura y flexibilidad al código.
Encapsulación
La encapsulación permite ocultar los detalles internos de implementación y exponer únicamente las interfaces necesarias. En C#, esto se logra mediante modificadores de acceso que controlan la visibilidad de los miembros de una clase.
public class CuentaBancaria
{
private decimal saldo; // Campo privado
public decimal Saldo
{
get { return saldo; }
private set { saldo = value; }
}
public void Depositar(decimal cantidad)
{
if (cantidad > 0)
saldo += cantidad;
}
}
Herencia
La herencia establece relaciones jerárquicas entre clases, permitiendo que una clase derive características de otra. La clase base proporciona funcionalidad común, mientras que las clases derivadas pueden especializar o extender este comportamiento.
public class Animal
{
public string Nombre { get; set; }
public virtual void HacerSonido()
{
Console.WriteLine("El animal hace un sonido");
}
}
public class Perro : Animal
{
public override void HacerSonido()
{
Console.WriteLine($"{Nombre} ladra: ¡Guau!");
}
}
Polimorfismo
El polimorfismo permite que objetos de diferentes tipos respondan de manera específica a la misma interfaz. En C#, esto se implementa principalmente através de métodos virtuales, sobrescritura y interfaces.
Animal[] animales = { new Perro(), new Gato(), new Pajaro() };
foreach (Animal animal in animales)
{
animal.HacerSonido(); // Cada animal hace su sonido específico
}
Abstracción
La abstracción se centra en definir contratos y comportamientos esenciales sin especificar los detalles de implementación. Las clases abstractas y las interfaces son las herramientas principales para lograr este objetivo.
public abstract class Forma
{
public abstract double CalcularArea();
public void MostrarInformacion()
{
Console.WriteLine($"Área: {CalcularArea()}");
}
}
Construcción de objetos
Los constructores son métodos especiales que se ejecutan automáticamente cuando se crea una instancia de una clase. Permiten inicializar el estado del objeto de manera controlada y garantizar que se cumplan las condiciones necesarias desde el momento de la creación.
public class Producto
{
public string Nombre { get; set; }
public decimal Precio { get; set; }
public Producto(string nombre, decimal precio)
{
Nombre = nombre;
Precio = precio > 0 ? precio : throw new ArgumentException("El precio debe ser positivo");
}
}
Propiedades y campos
Las propiedades en C# proporcionan un mecanismo elegante para acceder y modificar los datos de un objeto manteniendo el control sobre cómo se realizan estas operaciones. Ofrecen mayor flexibilidad que los campos públicos directos.
public class Temperatura
{
private double celsius;
public double Celsius
{
get { return celsius; }
set
{
if (value >= -273.15)
celsius = value;
else
throw new ArgumentException("Temperatura por debajo del cero absoluto");
}
}
public double Fahrenheit => celsius * 9/5 + 32;
}
Interfaces y contratos
Las interfaces definen contratos que las clases deben cumplir, especificando qué métodos y propiedades deben implementar sin dictar cómo hacerlo. Esto facilita el desacoplamiento y mejora la testabilidad del código.
public interface ICalculadora
{
double Sumar(double a, double b);
double Restar(double a, double b);
}
public class CalculadoraCientifica : ICalculadora
{
public double Sumar(double a, double b) => a + b;
public double Restar(double a, double b) => a - b;
public double Potencia(double baseNum, double exponente) => Math.Pow(baseNum, exponente);
}
La programación orientada a objetos en C# proporciona las herramientas necesarias para crear arquitecturas sólidas y escalables. La comprensión profunda de estos conceptos fundamentales permite desarrollar aplicaciones que no solo funcionan correctamente, sino que también son fáciles de mantener, extender y modificar a lo largo del tiempo.
Lecciones de este módulo de CSharp
Lecciones de programación del módulo Programación Orientada a Objetos del curso de CSharp.
Ejercicios de programación en este módulo de CSharp
Evalúa tus conocimientos en Programación Orientada a Objetos con ejercicios de programación Programación Orientada a Objetos de tipo Test, Puzzle, Código y Proyecto con VSCode.