Comprender la encapsulación, la herencia, el polimorfismo y la abstracción en OOP

Como sugiere el nombre, la Programación Orientada a Objetos o OOP se refiere a lenguajes que usan objetos en la programación. La programación orientada a objetos tiene como objetivo implementar entidades del mundo real como herencia, ocultación, polimorfismo, etc. en la programación. El objetivo principal de OOP es unir los datos y las funciones que operan en ellos para que ninguna otra parte del código pueda acceder a estos datos excepto esa función. En este artículo, comprenderemos todos los conceptos de OOP junto con un ejemplo.

Supongamos que tenemos una clase de aves y estamos creando una lista de aves. Comprendamos los conceptos de programación orientada a objetos utilizados en la creación de esta ave.

Herencia : para cualquier ave, hay un conjunto de propiedades predefinidas que son comunes para todas las aves y hay un conjunto de propiedades que son específicas para un ave en particular. Por lo tanto, intuitivamente, podemos decir que todas las aves heredan características comunes como alas, patas, ojos, etc. Por lo tanto, en la forma orientada a objetos de representar las aves, primero declaramos una clase de aves con un conjunto de propiedades que son común a todas las aves. Al hacer esto, podemos evitar declarar estas propiedades comunes en cada ave que creamos. En cambio, podemos simplemente heredar la clase de pájaro en todos los pájaros que creamos. El siguiente es un ejemplo de cómo se implementa el concepto de herencia.

// Java program to demonstrate
// the bird class
  
// Implementing the bird class
public class Bird {
  
    // Few properties which
    // define the bird
    String color;
    int legs;
  
    // Few operations which the
    // bird performs
    public void eat()
    {
        System.out.println(
            "This bird has eaten");
    }
  
    public void fly()
    {
        System.outp.println(
            "This bird is flying");
    }
}

Después de implementar la clase de pájaro, si deseamos crear una paloma, simplemente heredamos la clase de pájaro anterior.

// Java program to demonstrate the
// Inheritance
  
// Creating the Pigeon class which
// extends the bird class
public class Pigeon extends Bird {
  
    // Overriding the fly method
    // which makes this pigeon fly
    public void fly()
    {
        System.out.println(
            "Pigeon flys!!!!");
    }
}

Encapsulación : ahora, hemos definido las propiedades de la clase de pájaro y los atributos que tienen los pájaros como el color, las alas y las patas se pueden inicializar creando un objeto de la clase de pájaro. Sin embargo, si simplemente podemos cambiar las propiedades de la clase de pájaro solo por la referencia del objeto, entonces los atributos pierden la información con la que se inicializó inicialmente.

Por ejemplo, digamos que inicialmente creamos una paloma con un color gris creando un constructor, cualquier usuario con la instancia del objeto de la paloma puede cambiar este color a rojo o negro simplemente refiriendo el atributo con la palabra clave «este». Por lo tanto, para evitar esto, encerramos las propiedades en los métodos. Estos métodos se denominan getters y setters de los atributos. La idea es simplemente encerrar la inicialización y la recuperación de los atributos en un método en lugar de hacer referencia directa al atributo directamente. Esto también da una ventaja porque los setters nos dan un control completo para establecer el valor del atributo y nos ayudan a restringir los cambios innecesarios. Por ejemplo, si se crea (nace) una paloma con un color gris, no cambia hasta que la paloma muere. Asi que, un usuario que está usando simplemente no debería poder cambiar el color según su deseo. La siguiente es la implementación de los getters y setters para la clase Bird anterior.

// Java program to demonstrate
// the bird class
  
// Implementing the bird class
public class Bird {
  
    // Few properties which
    // define the bird
    String color;
    int legs;
  
    // Implementing the getters and
    // setters for the color and legs.
  
    public void setColor(String color)
    {
        this.color = color;
    }
  
    public String getColor()
    {
        return this.color;
    }
  
    public void setLegs(String legs)
    {
        this.legs = legs;
    }
  
    public String getLegs()
    {
        return this.legs;
    }
  
    // Few operations which the
    // bird performs
    public void eat()
    {
        System.out.println(
            "This bird has eaten");
    }
  
    public void fly()
    {
        System.outp.println(
            "This bird is flying");
    }
}

Polimorfismo : La palabra polimorfismo está formada por dos palabras poli y morfo, donde poli significa muchos y morfos significa formas. En programación, el polimorfismo es una característica que permite usar una interfaz para una clase general de acciones. En el concepto anterior de pájaro y paloma, una paloma es inherentemente un pájaro. Y también, si las aves se clasifican en múltiples categorías, como aves voladoras, aves no voladoras, etc., la paloma también encaja en la categoría de aves voladoras. Y también, si la clase animal se clasifica en animales que comen plantas y animales que comen carne, la paloma vuelve a entrar en la categoría de animales que comen plantas. Por lo tanto, la idea de polimorfismo es la capacidad de un mismo objeto para tomar múltiples formas. Hay dos tipos de polimorfismo:

  1. Polimorfismo de tiempo de compilación: También se conoce como polimorfismo estático. Este tipo de polimorfismo se logra mediante sobrecarga de funciones o sobrecarga de operadores. Ocurre cuando definimos múltiples métodos con diferentes firmas y el compilador sabe qué método debe ejecutarse en función de las firmas del método.
  2. Polimorfismo de tiempo de ejecución : también se conoce como envío de método dinámico. Es un proceso en el que una llamada de función al método anulado se resuelve en tiempo de ejecución. Este tipo de polimorfismo se logra mediante la anulación de métodos. Cuando el mismo método con los mismos parámetros se anula con diferentes contextos, el compilador no tiene idea de que el método está anulado. Simplemente comprueba si el método existe y, durante el tiempo de ejecución, ejecuta las funciones que se han anulado.

En java, también podemos subir y bajar los objetos. La idea central detrás de este concepto también es el polimorfismo. La idea es que el objeto del ave pueda tener el valor de la paloma porque hereda las características del ave. Por lo tanto, un objeto principal también se puede inicializar con las propiedades secundarias si ambos objetos se extienden entre sí de la siguiente manera:

Pájaro b = nueva Paloma();

Abstracción : Abstracción en general significa ocultar. En el escenario anterior del pájaro y la paloma, digamos que hay un usuario que quiere ver volar a la paloma. El usuario simplemente está interesado en ver volar a la paloma, pero no en cómo vuela realmente el pájaro. Por lo tanto, en el escenario anterior donde el usuario desea hacerlo volar, simplemente llamará al método fly usando pigeon.fly() donde la paloma es el objeto del pájaro paloma. Por lo tanto, la abstracción significa el arte de representar las características esenciales sin preocuparse por los detalles de fondo. En Java, la abstracción se implementa mediante el uso de interfaz y clases abstractas .. Podemos lograr una abstracción completa con el uso de la interfaz, mientras que una abstracción parcial o completa se puede lograr con el uso de clases abstractas. La razón por la cual la abstracción se considera como uno de los conceptos importantes es:

  1. Reduce la complejidad de ver las cosas.
  2. Evita la duplicación de código y aumenta la reutilización.
  3. Ayuda a aumentar la seguridad de una aplicación o programa, ya que solo se proporcionan detalles importantes al usuario.

Publicación traducida automáticamente

Artículo escrito por vanshikagoyal43 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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