Una función contenedora es una función (otra palabra para subrutina ) en una biblioteca de software o un programa de computadora cuyo propósito principal es llamar a una segunda subrutina [1] o una llamada al sistema con poco o ningún cálculo adicional. Las funciones contenedoras simplifican la escritura de programas de computadora al abstraer los detalles de la implementación de una subrutina.
Las funciones contenedoras son un medio de delegación y pueden utilizarse para diversos propósitos.
Las funciones contenedoras simplifican la escritura de programas informáticos. Por ejemplo, las MouseAdapter
clases y similares de la biblioteca Java AWT lo demuestran. [2]
Son útiles en el desarrollo de aplicaciones que utilizan funciones de bibliotecas de terceros. Se puede escribir un contenedor para cada una de las funciones de terceros y utilizarlo en la aplicación nativa. En caso de que las funciones de terceros cambien o se actualicen, solo es necesario modificar los contenedores de la aplicación nativa, en lugar de cambiar todas las instancias de las funciones de terceros en la aplicación nativa.
Las funciones contenedoras se pueden utilizar para adaptar una clase o un objeto existente para que tenga una interfaz diferente. Esto resulta especialmente útil cuando se utiliza código de biblioteca existente.
Las funciones contenedoras se pueden utilizar para escribir rutinas de comprobación de errores para funciones del sistema preexistentes sin aumentar la longitud de un código en una gran cantidad repitiendo la misma comprobación de errores para cada llamada a la función. [3] Todas las llamadas a la función original se pueden reemplazar con llamadas al contenedor, lo que permite al programador olvidarse de la comprobación de errores una vez que se escribe el contenedor. Un controlador de prueba es un tipo de función contenedora que ejercita un módulo de código, normalmente llamándolo repetidamente, con diferentes configuraciones o parámetros, para seguir rigurosamente cada camino posible. No es código entregable, pero tampoco es código desechable, que normalmente se conserva para su uso en pruebas de regresión . Un adaptador de interfaz es un tipo de función contenedora que simplifica, adapta o amplifica la interfaz de un módulo de código, con la intención de hacerlo más inteligible o relevante para el usuario. Puede cambiar el nombre de los parámetros, combinar parámetros, establecer valores predeterminados para los parámetros y similares.
En un lenguaje de programación que no admita la herencia múltiple de clases base, se pueden utilizar funciones contenedoras para simularla. A continuación, se muestra un ejemplo de parte de una clase Java que "hereda" de LinkedList y HashSet. Consulte Método para obtener más detalles de implementación.
La clase pública Test implementa LinkedList , HashSet { @Override //contiene miembros de datos y métodos de datos //retorno covariante}
Muchas funciones de biblioteca , como las de la biblioteca estándar de C , actúan como interfaces para la abstracción de llamadas del sistema . Las funciones fork y execve de glibc son ejemplos de esto. Llaman a las llamadas del sistema de nivel inferior fork y execve , respectivamente.
Esto puede llevar a usar incorrectamente los términos "llamada al sistema" y "syscall" para referirse a llamadas de biblioteca de nivel superior en lugar de las llamadas al sistema con nombres similares, que envuelven. [4] [5]
Una función auxiliar es una función que agrupa partes de un cálculo asignándoles nombres descriptivos y permitiendo la reutilización de los cálculos. [6] Aunque no todos los contenedores son funciones auxiliares, todas las funciones auxiliares son contenedores, y un uso notable de las funciones auxiliares (agrupar operaciones utilizadas con frecuencia) es en la traducción binaria dinámica , en la que las funciones auxiliares de una arquitectura particular se utilizan en la traducción de instrucciones de un conjunto de instrucciones a otro. [7]