perl | Anulación de métodos en OOP

En cualquier lenguaje de programación orientado a objetos, Overriding es una función que permite que una subclase o clase secundaria proporcione una implementación específica de un método que ya proporciona una de sus superclases o clases principales. Cuando un método en una subclase tiene el mismo nombre, los mismos parámetros o firma y el mismo tipo de retorno (o subtipo) que un método en su superclase, entonces se dice que el método en la subclase anula el método en la superclase. clase.

Anulación de métodos significa que el código se compone de dos o más métodos con el mismo nombre, pero cada uno de ellos tiene una tarea especial y difieren entre sí. Por lo tanto, tomando el significado literal del nombre en sí mismo, significa que un método tiene que anular a otro. Este concepto representa la redefinición de un método de clase base en su clase derivada con exactamente la misma firma de método.

La anulación de métodos es una de las formas en que Perl logra el polimorfismo de tiempo de ejecución . La versión de un método que se ejecuta estará determinada por el objeto que se utiliza para invocarlo. Si se usa un objeto de una clase principal para invocar el método, se ejecutará la versión de la clase principal, pero si se usa un objeto de la subclase para invocar el método, se ejecutará la versión de la clase secundaria. En otras palabras, es el tipo de objeto al que se hace referencia (no el tipo de la variable de referencia) lo que determina qué versión de un método anulado se ejecutará.

La anulación de métodos en Perl se puede explicar mejor con la ayuda del siguiente ejemplo:

Tenemos un vehículo de clase base con los métodos: get_mileage()y get_cost()y el automóvil de clase derivada con los métodos: get_mileage()y get_age(). Ahora, dado que uno de los métodos de ambas clases tiene el mismo nombre, su ejecución se llevará a cabo según el principio del concepto de anulación de métodos. Veamos el ejemplo y veamos cómo se ejecutan.

  • Creación de la clase Base:

    # Declaration and definition of Base class
    use strict;
    use warnings;
      
    # Creating parent class
    package vehicle;
      
    sub new
    {
      
        # shift will take package name 'vehicle' 
        # and assign it to variable 'class'
        my $class = shift;
          
        my $self = {
                    'distance'=> shift,
                    'petrol_consumed'=> shift
                   };
          
        # Bless function to bind object to class
        bless $self, $class;
          
        # returning object from constructor
        return $self;
    }
      
    # Method for calculating the mileage
    sub get_mileage
    {
        my $self = shift;
          
        # Calculating result
        my $result = $self->{'distance'} /
                     $self->{'petrol_consumed'};
                       
        print "The mileage by your vehicle is: $result\n";
        
    }
       
    # Method for calculating the cost
    sub get_cost
    {
        my $self = shift;
          
        # Calculating result
        my $result = $self->{'petrol consumed'} * 70;
          
        print "The cost is: $result\n";
    }
    1;
  •  

  • Creación de Clase Derivada:

    # Declaring and defining derived class
      
    # Creating derived class
    package car;
       
    use strict;
    use warnings;
       
    # Using parent class
    use parent 'vehicle';
       
    # Overriding the method
    sub get_mileage
    {
        my $self = shift;
          
        # Calculating the result
        my $result = $self->{'distance'} /
                     $self->{'petrol_consumed'};
                       
        print "The mileage by your car is: $result";
    }
      
    # Function to get age from user
    sub get_age
    {
        my $self = shift;
          
        # Taking input from user
        my $age = <>;
          
        # Printing the age
        print "Age is: $age\n";
    }
    1;
  •  

  • Uso de objetos para ilustrar el proceso de anulación de métodos:

    # Calling the objects and
    # the methods of each class 
    # using the corresponding objects.
      
    use strict;
    use warnings;
      
    # Using the derived class as parent
    use car;
      
    # Object creation and initialization
    my $ob1 = vehicle -> new(2550, 170);
    my $ob2 = car -> new(2500, 250);
       
    # Calling methods using Overriding
    $ob1->get_mileage();
    $ob2->get_mileage();

Producción:

Como se ve, el método de la clase que se llama usando el objeto anula el otro método del mismo nombre pero en las diferentes clases. La ejecución del método ‘get_mileage’ en el objeto vehículo imprime ‘El kilometraje de su vehículo es: 15’ a través del método declarado en la clase vehículo. Mientras que al ejecutar ‘get_mileage’ en el objeto car obtenemos el resultado ‘The mileage by your car is: 10’ a través del método en la clase car.

¿Por qué anular métodos?

Como se indicó anteriormente, los métodos anulados permiten que Perl admita el polimorfismo en tiempo de ejecución. El polimorfismo es esencial para la programación orientada a objetos por una razón: permite que una clase general especifique métodos que serán comunes a todos sus derivados mientras permite que las subclases definan la implementación específica de algunos o todos esos métodos. Los métodos anulados son otra forma en que Perl implementa el aspecto de polimorfismo de «una interfaz, múltiples métodos» .

El envío de métodos dinámicos (polimorfismo en tiempo de ejecución) es uno de los mecanismos más poderosos que el diseño orientado a objetos aporta para la reutilización y la solidez del código. La capacidad de las bibliotecas de código existentes para llamar a métodos en instancias de nuevas clases sin volver a compilar mientras se mantiene una interfaz limpia y abstracta es una herramienta profundamente poderosa.

Los métodos anulados nos permiten llamar a métodos de cualquiera de las clases derivadas sin siquiera conocer el tipo de objeto de la clase derivada.
Por lo tanto, la anulación de métodos hace que la programación sea muy fácil, ya que no es necesario recordar diferentes nombres mientras se crean diferentes métodos, en lugar de eso, recordar los procesos dentro del Método es mucho más importante.

Publicación traducida automáticamente

Artículo escrito por ShikharMathur1 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 *