En la programación de computadora, un servicio repetido es el código ejecutable que se pasa pues una discusión al otro código. Permite que una capa de nivel inferior del software llame una subrutina (o la función) definida en una capa de alto nivel.
Generalmente, el comienzo del código de alto nivel llamando una función dentro del código de nivel inferior que le pasa un indicador o la manija a otra función. Mientras que la función de nivel inferior ejecuta, puede llamar pasar-en la función cualquier número de épocas de realizar una cierta subtarea. En otro panorama, la función de nivel inferior coloca pasar-en la función como tratante del que deba ser llamado asincrónico por el de nivel inferior en un rato posterior en la reacción algo.
Un servicio repetido se puede utilizar como alternativa más simple al polimorfismo y al programado genérico, en que el comportamiento exacto de una función puede ser determinado dinámicamente pasando indicadores o las manijas de función diversa (con todo compatible) a la función de nivel inferior. Esto puede ser una técnica muy de gran alcance para la reutilización del código.
for) se debe duplicar en cada punto en el código donde se atraviesa la lista. Además, si la lista es puesta al día por un proceso asincrónico (por ejemplo, si se agrega o se quita un artículo), el iterator pudo saltar sobre artículos o llegar a ser corrupto durante el traversal. Una alternativa pudo ser crear una nueva función de la biblioteca que realiza la operación deseada con la sincronización apropiada. Este acercamiento todavía requiere cada nueva función de biblioteca contener el código para atravesar la lista. Esta solución no es aceptable para las bibliotecas genéricas previstas para los varios usos; el revelador de la biblioteca no puede anticipar cada necesidad del uso, y el revelador de uso no debe necesitar saber los detalles de la puesta en práctica de la biblioteca.
Los servicios repetidos solucionan estos defectos. Un procedimiento se escribe para atravesar la lista, y las aplicaciones de este procedimiento uso-proporcionaron código para funcionar encendido cada artículo. Hay una distinción clara entre la biblioteca y el uso sin sacrificar flexibilidad.
Un servicio repetido se puede también mirar como forma de runtime que ata, según lo discutido en el libro influyente de los patrones del diseño (véase el resumen del capítulo 1).
lang=" del
Después, el acercamiento del servicio repetido:
lang=" del
Observar que el traverseWith recibe un parámetro adicional que el servicio repetido pueda utilizar para sus propios propósitos. Un servicio repetido utiliza normalmente un parámetro tal como un indicador a los datos de uso fuera de su propio alcance (en este caso, la variable que recibe el índice). Esta característica es necesaria solamente en una lengua estáticamente scoped como C o C++ (en idiomas de C++ y de OO otras soluciones son sin embargo posibles, consideran abajo). Las idiomas dinámicamente scoped (lenguajes el de programación funcional incluyendo) pueden proporcionar el acceso a los datos de uso automáticamente vía los encierros . En balbucean, por ejemplo, el mismo programa parecería esto:
lang=" del
La función de servicio repetido ahora se define actualmente uso, y refiere al " index" por nombre. Las preocupaciones de la sincronización se han omitido de estos ejemplos, pero pueden ser tratadas fácilmente en la función del traverseWith. Más importantemente, pueden ser tratadas, o ser no hechas caso, cambiando solamente esa función.
y el C++ permiten los indicadores de la función como discusiones a otras funciones.
Varios lenguajes de programación (sin embargo especialmente lenguajes el de programación funcional tal como esquema o ml ) permiten los encierros, una generalización de los indicadores de la función, como discusiones a otras funciones.
Varios lenguajes de programación, especialmente idiomas interpretadas permiten que uno pase el nombre del de una función A como parámetro a una función B y que tenga llamada A de B por medio Eval .
En los lenguajes el de programación orientado al objeto una llamada puede aceptar un objeto que ejecute un cierto interfaz abstracto, sin especificar detalladamente cómo el objeto debe hacer tan. El programador que ejecuta ese objeto puede utilizar los métodos del interfaz exclusivamente para el código específico a la aplicación. Tales objetos son con eficacia un paquete de servicios repetidos, más los datos que necesitan manipular. Son útiles en la ejecución de los varios patrones del diseño como el visitante, el observador, y la estrategia .
C++ permite que los objetos proporcionen su propia puesta en práctica de la operación de la llamada de función. La biblioteca estándar de la plantilla acepta estos objetos (llamados los functors ), así como indicadores de la función, como parámetros a los varios algoritmos polimórficos
Algunos sistemas tienen lenguajes de programación incorporados para apoyar la extensión y la adaptación. Estas idiomas proporcionan servicios repetidos sin la necesidad de herramientas separadas del desarrollo de programas.
Una función de servicio repetido pura del es uno que es el puramente funcional (vuelve siempre el mismo valor dado las mismas entradas) y libera de efectos secundarios observables. Algunas aplicaciones de servicios repetidos, tales como el ejemplo de clasificación, requieren funciones de servicio repetido puras funcionar correctamente.
Un caso especial de un servicio repetido se llama un servicio repetido del predicado del, o apenas predicado para el cortocircuito. Ésta es una función de servicio repetido pura que acepta un solo valor de la entrada y vuelve un valor boleano . Estos tipos de servicios repetidos son útiles para filtrar colecciones de valores por una cierta condición.
En la programación Event-driven, hay a menudo uso, en diversas formas, del patrón del observador, que esencialmente permite el uso de los servicios repetidos del multicast, y de donde están los servicios repetidos registrados temprano, ser invocado en la discreción del callee (es decir cuando ocurre un acontecimiento dado). Algunos lenguajes de programación también tienen ayuda directa para esta construcción (por ejemplo el de .NET delega señales del o de s del cuarto de galón 'y ranura ).
.
| Random links: | Movimiento del diseño de Viridian | Abdullah (Afganistán) | Alfred Stelzner | Pokémon: El cuento eléctrico de Pikachu | & de la persona que interrumpe; Koch P7 |