Una función contenedora es una función (otra palabra para subrutina ) en una biblioteca de software o un programa de computadora cuyo objetivo 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 informáticos al abstraer los detalles de la implementación de una subrutina.
Las funciones contenedoras son un medio de delegación y pueden usarse para varios propósitos.
Las funciones contenedoras simplifican la escritura de programas informáticos. Por ejemplo, las MouseAdapter
clases similares de la biblioteca Java AWT lo demuestran. [2]
Son útiles en el desarrollo de aplicaciones que utilizan funciones de biblioteca 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 funciones de terceros en la aplicación nativa.
Las funciones contenedoras se pueden utilizar para adaptar una clase u objeto existente para que tenga una interfaz diferente. Esto es especialmente útil cuando se utiliza código de biblioteca existente.
Las funciones contenedoras se pueden utilizar para escribir rutinas de verificación de errores para funciones del sistema preexistentes sin aumentar en gran medida la longitud de un código repitiendo la misma verificació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 verificación de errores una vez que se escribe el contenedor. Un controlador de prueba es una especie 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, ya 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 hacerla más inteligible o relevante para el usuario. Puede cambiar el nombre de los parámetros, combinarlos, establecer valores predeterminados para los parámetros y similares.
En un lenguaje de programación que no admite 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 prueba de clase pública 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 al sistema . Las funciones fork y execve en glibc son ejemplos de esto. Llaman a las llamadas al sistema fork y execve de nivel inferior , respectivamente.
Esto puede llevar al uso incorrecto de los términos "llamada al sistema" y "llamada al sistema" para referirse a llamadas a bibliotecas de nivel superior en lugar de 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 asignando 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 (que agrupan operaciones utilizadas con frecuencia) es 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]