Una función contenedora es una subrutina (otra palabra para una función ) 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 de envoltura se utilizan para facilitar la escritura de programas informáticos al abstraer los detalles de la implementación subyacente de una subrutina.
Propósito
Las funciones de envoltura son un medio de delegación y se pueden utilizar para varios propósitos.
Conveniencia de programación
Las funciones de envoltura se pueden utilizar para facilitar la escritura de programas de computadora. Un ejemplo de esto son las MouseAdapter
clases y similares en la biblioteca Java AWT . [2] Las funciones de contenedor 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 los contenedores en la aplicación nativa deben modificarse en lugar de cambiar todas las instancias de funciones de terceros en la aplicación nativa.
Adaptación de interfaces de clase / objeto
Las funciones de envoltura se pueden usar para adaptar una clase u objeto existente para tener una interfaz diferente. Esto es especialmente útil cuando se usa código de biblioteca existente.
Prueba de código
Las funciones de envoltura se pueden usar para escribir rutinas de verificación de errores para funciones preexistentes del sistema sin aumentar la longitud de un código en una gran cantidad 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, con el fin de seguir rigurosamente cada ruta posible. No es un código entregable, pero tampoco es un código desechable, que normalmente se conserva para su uso en pruebas de regresión . Un adaptador de interfaz es una especie de función de envoltura que simplifica, adapta o amplifica la interfaz a 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, combinar parámetros, establecer valores predeterminados para los parámetros, etc.
Herencia múltiple
En un lenguaje de programación que no admite la herencia múltiple de clases base, se pueden usar funciones contenedoras para simularlo. 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 sobre la implementación.
Prueba de clase pública implementa LinkedList , HashSet { @Override // contiene miembros de datos y métodos de datos // retorno covariante}
Funciones de biblioteca y llamadas al sistema
Muchas funciones de la biblioteca , como las de la biblioteca estándar de C , actúan como interfaces para la abstracción de las llamadas al sistema . Las funciones fork y execve en glibc son ejemplos de esto. Llaman a la bifurcación de nivel inferior y a las llamadas al sistema execve , respectivamente.
Esto puede llevar al uso incorrecto de los términos "llamada al sistema" y "syscall" para referirse a llamadas a bibliotecas de nivel superior en lugar de las llamadas al sistema con nombres similares, que envuelven. [4] [5]
Ver también
Referencias
- ^ Reselman, Bob; Peasley, Richard; Pruchniak, Wayne (1998). Usando Visual Basic 6 . What. pag. 446. ISBN 9780789716330.
- ^ Los tutoriales de Java
- ^ Stevens, Richard; Fenner, Bill; Rudoff; Andrew M. (2003). Programación de red UNIX . Addison-Wesley. págs. 5–6, 29. ISBN 9780131411555.
- ^ "syscalls (2) - página de manual de Linux" . man7.org . Consultado el 25 de abril de 2020 .
- ^ "Llamadas al sistema (la biblioteca GNU C)" . www.gnu.org . Consultado el 25 de abril de 2020 .