En esta entrada se van a tratar cuatro pilares de la programación orientada a objetos, estos son los mas comunes en la literatura que son: Abstracción, Encapsulamiento, Herencia y Polimorfismo.

Abstracción

La abstracción nos permite identificar las características y comportamientos con los que se construirá una clase. Es decir que atraves de este pilar es posible reconocer los atributos y métodos de un objeto.

Por ejemplo, un televisor.

Resultado de imagen para televisor imagen

Basándonos en la imagen vamos a abstraer este televisor y el resultado son los siguientes atributos y métodos:

Atributos:

  • Color
  • Tamaño
  • Marca
  • Decodificador

Métodos (como se comporta):

  • Encender
  • Apagar
  • Cambiar canal

El resultado de abstraer es la clase que nos servirá de plantilla para nuestros objetos y codificarlo en C# seria así:

En Java:

 

Encapsulamiento

Permite el ocultamiento de la complejidad del código para que no pueda ser visto o modificado por el usuario de manera imprevista e incontrolada.

Por ejemplo, los atributos de una clase, estos son privados y solo se pueden acceder a ellos por medio de los métodos get  o set  de cada uno.

En este pilar tenemos a los modificadores de acceso como public , private  y protected .

En este ejemplo cambie los modificadores de acceso a privados es decir que solo miembros de la misma clase pueden hacer uso de los mismos.

En java tenemos a los métodos get  y set ,estos son públicos por defecto.

Herencia

Este es uno de los pilares más fuertes ya que permite reutilizar código, heredando los métodos y atributos de una clase superior (Llamada clase padre) a una clase derivada (Llamada clase hija), esto significa que se cualquier clase derivada puede hacer uso de los métodos y atributos de su clase superior.

Seguimos con el ejemplo del televisor, al cual ahora mediante la palabra reservada abstract  que convierte a clase en abstracta y nos permite crear clases que deriven de la misma. El ejemplo de esto en C# seria algo así:

Cabe mencionar que para especificar una herencia, utilizamos :  seguido de el nombre de la clase superior

En Java la cosa no cambia mucho, aquí se utiliza la palabra reservada extends para especificar que esta clase hereda de otra superior (abstracta)

Polimorfismo

Esta característica permite definir un método con un nombre y definir su comportamiento y parámetros según sea necesario.

Por ejemplo el área de una figura. Estamos consientes de que para calcular el área de un circulo no es la misma que el de un cuadrado, pero en vez de utilizar métodos diferentes podemos simplemente declarar un método llamado área y cambiar sus parámetros y comportamientos.

Este ejemplo codificado seria algo así en C#:

Como vemos utilizamos el mismo método que se hereda de la clase padre figura, y sus clases derivadas la implementan de diferentes formas.

En Java es algo como esto:

Utilizamos @override  para implementar la clase abstracta y en este caso asignarle un comportamiento diferente.

Espero que con esto te hayan quedado un poco más claros estos pilares y en dado caso de que no, puedes visitar las referencias para comprender mejor.