Contenido de la Serie de artículos
Estos son todos los temas de la serie:
- 1. La Programacion orientada a objetos (POO) y el diseño orientado a objetos (DOO)
- 2. Los requerimientos: funcionales y no funcionales
- 3. Objetos y clases
- 4. Tipos de datos en C#: Por valor y por referencia
- 5. Constructores
- 6. Signaturas e Interfaces
- 7. Clases especiales: estáticas y abstractas
- 8. Modificadores de acceso
- 9. Los 4 Pilares de la POO: Herencia, abstracción, encapsulamiento y polimorfismo
- 10. Los Principios SOLID
En este artículo de la serie vamos a discutir sobre los 4 pilares de la programación orientada a objetos.
Si nos dirigimos a un diccionario, un pilar viene a ser una columna, una parte escencial e importante de toda edificación, de forma similar los 4 pilares que vamos a estudiar hoy, no son más que los 4 conceptos más importantes de todo el paradigma orientado a objetos. Comencemos.
Herencia
Es el mecanismo de la programación orientada orientada a objetos mediante el cual construímos una clase a partir de otra, compartiendo código de una hacia otra clase, a la clase que recibe los miembros de otra clase, es decir que hereda desde otra clase, se le llama clase hija, a la clase que da la herencia a su clase hija se le llama clase padre.
Veamos un ejemplo en código:
Clase padre:
public class DocumentoVenta
{
public int Id { get; set; }
public string Serie { get; set; }
public string Correlativo { get; set; }
public DateTime FechaEmision { get; set; }
public double MontoTotal { get; set; }
}
Tiene dos clases hijas:
public class Boleta : DocumentoVenta
{
public string Nombres { get; set; }
public string Apellidos { get; set; }
}
public class Factura : DocumentoVenta
{
public string RazonSocial { get; set; }
}
Decimos que boleta y factura son hijas que heredan de su padre Documento venta ya que heredan todas las características de él, y le añaden sus propiedades particulares, con esto reducimos código redundante.
Abstracción
Si nuevamente nos vamos al diccionario tenemos que abstraer significa dejar de lado lo poco relevante y enfocarnos en lo más importante o relevante para un fin buscado.
Trasponiendo este concepto hacia la programación orientada a objetos tenemos que este concepto establece que nos enfoquemos sólo en los campos que son relevantes para una clase.
Veamos nuevamente un ejemplo:
public class Cliente
{
public int Id { get; set; }
public string Nombres { get; set; }
public string Apellidos { get; set; }
public DateTime FechaRegistro { get; set; }
public double Credito { get; set; }
}
Un cliente puede tener miles de características, que traducidos a un lenguaje de programación orientada a objetos serían campos y propiedades, pero ¿Por qué sólo consideramos estos seis?
La respuesta es fácil, porque la programación orientada a objetos nos indica mediante la Abstracción que sólo nos enfoquemos en aquello que es relevante para nuestro software, dejando de lado todo lo demás.
Encapsulamiento
Especifica quien puede interactuar con los miembros de una clase.
Este concepto puede ocultar los miembros de una clase hacia el exterior según sea conveniente.
Este concepto está fuertemente relacionado con los modificadores de acceso, los cuales vimos aquí, nota crack que todo está relacionado, y en esta serie de artículos lo aprendes todo 😉.
Para ver un ejemplo podemos utilizar la siguiente clase:
public class Cliente
{
public int Id { get; set; }
public string Nombres { get; set; }
public string Apellidos { get; set; }
public DateTime FechaRegistro { get; set; }
private double Credito { get; set; }
public void AumentarCredito(double monto)
{
this.Credito += monto;
}
}
Como notamos, podemos controlar el encapsulamiento con los modificadores de acceso, siendo que la clase Cliente es accesible desde cualquier parte de la aplicación, al igual que las propiedades Id, Nombres, Apellidos y FechaRegistro ya que todos estos son públicos.
Sin embargo el campo Credito sólo es accesible desde dentro de la clase (al ser privado) y si se quiere aumentar el crédito tenemos a nuestra disposición el método AumentarCredito ya que este sí que es público.
Polimorfismo
Este concepto establece que varios objetos pueden compartir la misma signatura.
Esto nos añade flexibilidad a nuestro software.
Tiene dos categorías, es decir se puede aplicar polimorfismo:
- Por interfaz
- Por herencia
Veamos un ejemplo de polimorfismo por herencia:
Tenemos la clase padre Animal:
public abstract class Animal
{
public abstract void EmitirSonido();
}
Y las clases hijas:
public class Perro : Animal
{
public override void EmitirSonido()
{
Console.WriteLine("Guau guau!");
}
}
public class Gato : Animal
{
public override void EmitirSonido()
{
Console.WriteLine("Miau miau!");
}
}
Ahora probamos en un programa de consola, codificando lo siguiente en la clase Program
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Testing polymorphism...");
Animal perrito = new Perro();
Animal gatito = new Gato();
perrito.EmitirSonido();
gatito.EmitirSonido();
}
}
Y si ejecutamos el programa tenemos:
Como podemos confirmar, cuando queremos ejecutar el método EmitirSonido este se comporta ya sea como perro o como gato, según el tipo del objeto.
Y bien estimado lector, eso es todo de momento, nos vemos en la siguiente y última entrada de esta emocionante serie, hasta la próxima y recuerda compartir esta entrada en toditas tus redes crack! 🔥🔥
Un comentario en «Fundamentos de la POO con C# [9/10]: Los 4 pilares»