Sobrecarga de procedimientos y funciones

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 16 de febrero de 2017; las comprobaciones requieren 5 ediciones .

Sobrecarga de procedimientos y funciones  : la capacidad de usar subrutinas del mismo nombre: procedimientos o funciones en lenguajes de programación.

Motivo de

En la mayoría de los primeros lenguajes de programación, para simplificar el proceso de traducción, existía la restricción de que no podía estar disponible más de un procedimiento con el mismo nombre en un programa al mismo tiempo. Según esta restricción, todas las subrutinas visibles en un punto dado del programa deben tener nombres diferentes.

Los nombres y designaciones de procedimientos y funciones que forman parte del lenguaje de programación no pueden ser utilizados por el programador para nombrar sus propias subrutinas.

Implementación

Para poder utilizar varias variantes de una subrutina con el mismo nombre, pero con diferente número de argumentos u otro tipo de argumentos (es decir, con diferente firma , ya que la lista de argumentos es parte de la firma), subrutina se introduce la sobrecarga. Tal sobrecarga es posible dentro del paradigma procedimental , sin el uso de programación orientada a objetos.

Durante la traducción, los procedimientos y funciones del mismo nombre se controlan para que difieran en la firma, ya que en este caso el traductor puede determinar de manera única la llamada a la subrutina deseada.

Para eliminar el error de un programador que accidentalmente le dio un nombre a una subrutina que ya está en uso, se introduce un requisito adicional para escribir una palabra clave. Esto se hace, por ejemplo, en el lenguaje Delphi (la palabra clave de sobrecarga).

Reglas de sobrecarga de funciones

Las funciones sobrecargadas tienen el mismo nombre pero diferentes números o tipos de argumentos. Este es un tipo de polimorfismo estático , en el que la cuestión de qué función llamar se decide por la lista de sus argumentos. Este enfoque se usa en lenguajes tipificados estáticamente , que verifican los tipos de argumentos al llamar a una función. Una función sobrecargada es en realidad varias funciones diferentes, y la elección de la apropiada ocurre en tiempo de compilación. La sobrecarga de funciones no debe confundirse con formas de polimorfismo en las que el método correcto se elige en tiempo de ejecución, como a través de funciones virtuales, en lugar de estáticamente.

Ejemplo: funciones sobrecargadas en C++

principal () { cout << volumen ( 10 ); cout << volumen ( 2.5 , 8 ); cout << volumen ( 100 , 75 , 15 ); } // volumen de un cubo int volumen ( int s ) { retorno ( s * s * s ); } // volumen de un cilindro double volume ( double r , int h ) { retorno ( 3.14 * r * r * h ); } // volumen de un paralelepípedo volumen largo ( long l , int b , int h ) { retorno ( l * b * h ); }

En el ejemplo anterior, el volumen de los diversos componentes se calcula mediante llamadas a diferentes funciones de "volumen" con argumentos que difieren en el tipo de datos o la cantidad.

Ejemplo: sobrecargas de funciones en el lenguaje Nim.

sobrecarga de proceso ( x : int ) = echo "cadena int" sobrecarga de proceso ( x : float ) = echo "cadena flotante" sobrecarga ( 1 ) # imprimirá "cadena int" sobrecarga ( 1.1 ) # imprimirá "string float"

Sobrecarga de constructores

Los constructores utilizados para crear instancias de objetos también pueden sobrecargarse en algunos lenguajes de programación orientados a objetos. Debido a que en muchos idiomas el nombre del constructor está predefinido por el nombre de la clase, parecería que solo puede haber un constructor. Siempre que se requieren varios constructores, se implementan como funciones sobrecargadas. El constructor predeterminado no toma parámetros, la instancia del objeto toma miembros nulos. [ 1 ] Por ejemplo, el constructor predeterminado para un objeto de factura en un restaurante escrito en C++ podría establecer la propina en 15 %:

factura () { propina = 15.0 ; totales = 0,0 ; }

La desventaja es que se necesitan dos pasos para cambiar el valor del objeto Factura creado. A continuación se muestra la creación y modificación de valores dentro del programa principal:

café de la cuenta ; café _ propina = 10,00 ; café _ totales = 4,00 ;

A través de la sobrecarga del constructor, sería posible pasar una sugerencia y la calidad general de los parámetros durante la creación. El ejemplo muestra un constructor sobrecargado con dos parámetros:

Factura ( doble setTip , doble setTotal ) { propina = establecer propina ; total = conjuntoTotal ; }

Ahora, la función que crea el nuevo objeto Bill puede pasar dos valores al constructor y establecer los miembros de datos en un solo paso. A continuación se muestra cómo crear y establecer valores:

Bill café ( 10.00 , 4.00 );

Esto puede ser útil para hacer que los programas sean más eficientes y reducir el tamaño del código.

Advertencias

La sobrecarga de un procedimiento o función varias veces puede dificultar que los desarrolladores sepan qué sobrecarga se está utilizando en qué momento.

Intensidad de recursos

La posibilidad de sobrecargar los nombres de procedimientos y funciones en el programa está determinada por las capacidades de análisis del compilador y los requisitos del estándar del lenguaje para escribirlos. El análisis sintáctico consiste en hacer coincidir la llamada de una función sobrecargada con una función específica (con una firma específica) y no afecta el consumo de recursos del programa y su tiempo de ejecución.

El tamaño del código del programa compilado cuando se usa una sobrecarga de función en lugar de una función con un número arbitrario de argumentos aumenta (en lugar de un procedimiento con un número variable de argumentos, se compilan varios para un número específico), pero en cambio, el rendimiento del programa aumenta cuando se llama a un procedimiento que se describe como sobrecargado (no se realiza ningún análisis de tipo y otras operaciones computacionales durante la ejecución del programa). Así, por ejemplo, en la biblioteca STL de C++, las funciones de uso frecuente con un número variable de argumentos se reemplazan por sobrecargas.

Véase también