ES2327797T3 - Soporte de programacion orientado a graficos de productores con soporte de escenario. - Google Patents

Soporte de programacion orientado a graficos de productores con soporte de escenario. Download PDF

Info

Publication number
ES2327797T3
ES2327797T3 ES07856313T ES07856313T ES2327797T3 ES 2327797 T3 ES2327797 T3 ES 2327797T3 ES 07856313 T ES07856313 T ES 07856313T ES 07856313 T ES07856313 T ES 07856313T ES 2327797 T3 ES2327797 T3 ES 2327797T3
Authority
ES
Spain
Prior art keywords
producer
producers
dependencies
scenario
dependency
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES07856313T
Other languages
English (en)
Inventor
Fady Chamieh
Elias Edde
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Murex SAS
Original Assignee
Murex SAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Murex SAS filed Critical Murex SAS
Application granted granted Critical
Publication of ES2327797T3 publication Critical patent/ES2327797T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4494Execution paradigms, e.g. implementations of programming paradigms data driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)

Abstract

Un método implementado por ordenador para ejecutar un programa de aplicación escrito en un código orientado a objetos, comprendiendo el método: representar un productor con una salida que es actualmente de interés, en el que el código orientado a objetos incluye métodos y declaraciones de dependencias del productor, en el que la declaración de dependencias del productor para un método determinado identifica un conjunto de cero o más productores, en el que un productor es una construcción representable por una rutina de ejecución que incluye al menos una instancia y un método asociado con esa instancia; en respuesta a dicha representación, añadir el productor de interés como parte del primer gráfico de productores; intentar generar automáticamente un resto del primer gráfico de productores mediante enlazado, y la representación si es necesaria, de otros productores en base a las declaraciones de dependencias del productor y los métodos de los productores ya en el primer gráfico de productores; y simular el programa de aplicación con un cambio en el programa de aplicación mientras que se impiden estados existentes y salidas existentes de los productores en el primer gráfico de productores.

Description

Soporte de programación orientada a gráficos de productores con soporte de escenario.
Antecedentes Campo
Las realizaciones de la invención se refieren al campo de los ordenadores; y más específicamente, al campo de la programación y la ejecución de código con una rutina de ejecución.
\vskip1.000000\baselineskip
Antecedentes Programación Orientada a Objetos
La programación orientada a objetos es un paradigma de la programación de ordenadores. La idea que está detrás de la programación orientada a objetos es que un programa de ordenador puede verse de forma que comprende una colección de unidades individuales (llamadas objetos o instancias) que actúan entre sí, en oposición a la visión tradicional en la cual un programa puede verse como una colección de funciones, o simplemente como una lista de instrucciones para el ordenador. Un objeto es un mecanismo de lenguaje para vincular datos con métodos que operan sobre esos datos. Cada uno de los objetos es capaz de llamarse a través de métodos, procesar datos, y proporcionar resultados a otros objetos. Cada uno de los objetos puede verse como una máquina independiente o actor con un papel o responsabilidad distintos.
Un lenguaje orientado a objetos reflexivo es un lenguaje de programación que tiene un conjunto particular de características (por ejemplo, clases, objetos/instancias, herencia, reflexión, etc.), mientras que un lenguaje basado en objetos reflexivo se usa a veces para etiquetar un lenguaje de programación que tiene algún subconjunto de esas características (por ejemplo, objetos). Para el propósito de este documento las frases "código fuente orientada a objetos" y "código orientado a objetos" se usarán para referirnos a un código escrito en un lenguaje que tiene tales características (por ejemplo, un código escrito en un lenguaje reflexivo orientado a objetos, un código escrito en un lenguaje reflexivo basado en objetos). Aunque los lenguajes de procedimientos, los lenguajes no reflexivos orientados a objetos, y los lenguajes no reflexivos basados en objetos son lenguajes de programación que típicamente no soportan tales características, pueden usarse técnicas de transformación para proporcionar tales características (por ejemplo, mediante la emulación) para el código adecuadamente escrito en tales lenguajes; y de este modo, tales técnicas transforman tales lenguajes en un lenguaje reflexivo basado en objetos o un lenguaje reflexivo orientado a objetos. (Estas técnicas no necesitan emular todas las características de los lenguajes orientados en objetos o basados en objetos, pero pueden emular sólo las características que son de interés para el resto de este documento). Para el propósito de este documento, las frases "código fuente orientado a objetos" y "código orientado a objetos" se usarán también para referirnos a tales procedimientos transformados, el código de lenguaje no reflexivo orientado a objetos, y el código de lenguaje no reflexivo basado en objetos. A modo de ejemplo, y no de limitación este documento principalmente describe un código fuente orientado a objetos escrito en un lenguaje reflexivo orientado a objetos. También, los términos objeto y instancia se usan de forma intercambiable en este documento.
Usados principalmente en la programación orientada a objetos, el términos método se refiere a un elemento de código que está asociado exclusivamente bien con una clase (llamada métodos de clase, métodos estáticos, o métodos de fábrica) o con un objeto (llamados métodos de instancias). Como un procedimiento en los lenguajes de programación de procedimientos, un método usual consiste de una secuencia de declaraciones para realizar una acción, un conjunto de parámetros de entrada para configurar esas acciones, y posiblemente se devuelve un valor de salida de alguna clase.
Cuando los programadores escriben un programa usando un lenguaje orientado a objetos, el código resultante puede verse conceptualmente de forma que incluye cuatro tipos básicos de código. El primer tipo incluye comandos que operan sobre instancias de entrada para proporcionar instancias de salida (denominados en este documento como código de "transformación"); típicamente escritos como métodos (denominados en este documento como métodos de transformación). El segundo tipo incluye comandos de representación de instancias que hacen que la rutina de ejecución represente instancias de clases (denominados en este documento como código de "representación de instancias"). El tercer tipo incluye comandos de manipulación de propiedad (denominados en este documento como código de "preparación de datos") para invocar métodos de propiedad (que acceden, o que producen un cambio, etc.) de las instancias anteriores. El cuarto tipo incluye secuencias de comandos que causan la secuenciación de invocación de métodos que usan las instancias adecuados (donde las instancias adecuadas incluyen las instancias a usar como argumentos, las instancias a usar por los métodos de instancias, y las instancias de meta clases usadas por los métodos de clases) para especificar qué métodos de transformación de qué instancias invocar, en qué orden, y con qué parámetros de los cuales las instancias sensibles a los cambios producidos por el código de preparación de datos (denominado en este documento como código de "secuenciación de invocación manual"). El código de secuenciación de invocación manual se escribe a veces como métodos separados de los métodos de transformación, y de este modo el código de secuenciación de invocación manual incluye secuencias de comandos de invocación para los métodos de transformación. Típicamente un programa itera entre el código de preparación de datos y el código de secuenciación de invocación manual (el cual puede también profundizar en el código de representación de instancias), el cual a su vez invoca el código de transformación (que puede también profundizar en código de representación de instancias y los tipos de código de preparación de datos). Se observará que esta es una representación conceptual de un programa, y de este modo, no debería tomarse en absoluto con respecto a cómo ver un programa.
\vskip1.000000\baselineskip
Rutina de Ejecución
El término rutina de ejecución se usa en este documento para referirnos a un programa o una librería de códigos básicos que corre otro código escrito en el mismo y/o en diferente lenguaje. De este modo, una rutina de ejecución es una colección de funciones de utilidad que soportan un programa mientras que se está ejecutando, incluyendo el funcionamiento con el sistema operativo para proporcionar facilidades tales como funciones matemáticas, entrada y salida. Estas hacen innecesario para los programadores reescribir continuamente capacidades básicas especificadas en un lenguaje de programación o proporcionadas por un sistema operativo. Como la demarcación entre la rutina de ejecución y el sistema operativo puede estar borrosa, el término rutina de ejecución se usa en este documento para referirnos a un código separado del sistema operativo y/o al código que es parte del sistema operativo.
Rutinas de ejecución primitivas, tales como el FORTRAN, proporcionan características tales como operaciones matemáticas. Otros lenguajes añaden características más sofisticadas - por ejemplo, la recogida de basura de memoria, a menudo en asociación con el soporte para objetos. Los lenguajes más recientes tienden a tener rutinas de ejecución considerablemente mayores con considerablemente más funcionalidad. Muchos lenguajes orientados a objetos también incluyen un sistema conocido como el "despachador" o "cargador de clases". La Máquina Virtual de Java (JVM) es un ejemplo de tal rutina de ejecución: también interpreta o compila los programas Java binarios portátiles (código de octetos de bits) en la rutina de ejecución. El esquema de la rutina de ejecución de lenguaje común (CLR) es otro ejemplo de una rutina de ejecución.
\vskip1.000000\baselineskip
Esquema de Programación y Ejecución
Un esquema dentro del cual se proporcionan las aplicaciones a los usuarios finales incluye tres divisiones básicas. La primera división incluye la creación del sistema operativo y la rutina de ejecución. La primera división se realiza por los programadores con experiencia en programación altamente avanzada. Cuando se trabaja en esta división, los programadores se denominan respectivamente como programadores de sistemas operativos y programadores de rutinas de ejecución. Cuando se crea una rutina de ejecución para un lenguaje orientado a objetos, los programadores de las rutinas de ejecución incluyen un soporte para ejecutar los diversos tipos de comandos utilizados en el código de transformación, el código de representación de instancias, el código de preparación de datos, y el código de secuenciación de invocación manual (por ejemplo, comandos de representación de instancias, comandos de preparación de datos, y comandos de invocación de métodos).
La segunda división incluye la creación de un código fuente de aplicación orientada a objetos a correr por la rutina de ejecución. La segunda división se realiza de nuevo por programadores con experiencia de programación altamente avanzada, así como un entendimiento de los objetivos del negocio de la aplicación. Cuando se trabaja en esta división, los programadores se denominan como programadores de aplicación. Cuando se crea una aplicación en un lenguaje de programación orientado a objetos, los programadores de las aplicaciones escriben el código de transformación específico, el código de representación de instancias, el código de preparación de datos, y el código de secuenciación de invocación manual para la aplicación específica que se está creando. Como parte de esto, si la aplicación requiere una interfaz gráfica de usuario, los programadores de la aplicación también diseñan y codifican la interfaz gráfica de usuario para la aplicación específica; y de este modo también se denominan como diseñadores de aplicación.
La tercera división incluye el uso de programas de aplicación que se corren por la rutina de ejecución. La tercera división se realiza por los usuarios finales que no necesitan tener ninguna experiencia de programación.
\vskip1.000000\baselineskip
Código de Secuenciación de Invocación Manual
Los mayores costes típicamente asociados con la creación de una aplicación involucran la depuración y/o la optimización del código de secuenciación de invocación manual. Para cada una de las oportunidades para los datos a cambiar, el programador de la aplicación debe considerar su efecto y escribir el código de secuenciación de invocación manual para causar los métodos de transformación apropiados de las instancias apropiadas a invocar en el orden apropiado con las entradas apropiadas. Errores de ejemplo producidos por los programadores de la aplicación incluyen: 1) invocar los métodos de la transformación apropiados de las instancias apropiadas en el orden equivocado; 2) olvidar incluir comandos para causar que el uno o más métodos de transformación requeridos de instancias a invocar en respuesta a algunos datos que están cambiando; 3) incluir comandos para causar métodos de trasformación innecesarios de instancias a invocar en respuesta a algunos datos que están cambiando (por ejemplo, incluir comandos para invocar métodos de transformación de instancias que no están afectadas por el cambio en los datos), etc.
A modo de ejemplo, una técnica de generar un código de secuenciación de invocación manual es el uso de un modelo del observador (a veces conocido como "publicar suscribir") para observar el estado de una instancia en un programa. En el modelo del observador, una o más instancias (llamadas observadores u oyentes) están registradas (o se registran a si mismas) para observar un evento, que puede ocasionarse por el objeto observado (el sujeto). La instancia observada, que puede ocasionar un evento, generalmente mantiene una colección de observadores registrados. Cuando se ocasiona el evento, cada observador recibe una llamada de vuelta desde la instancia observada (la instancia observada invoca un método de "notificación" en los observadores registrados). La función de notificación puede pasar algunos parámetros (generalmente información acerca del evento que está ocurriendo) que puede usarse por los observadores. Cada uno de los observadores implementa la función de notificación, y como consecuencia define su propio comportamiento cuando se produce la notificación.
La instancia observada típicamente tiene un método de registro para añadir un nuevo observador y un método de desregistro para eliminar un observador de la lista de instancias a notificar cuando se ocasiona el evento. Además la instancia observada puede también tener métodos para deshabilitar temporalmente y a continuación rehabilitar llamadas para impedir la ineficiente puesta en cascada de varias de las actualizaciones relacionadas. Específicamente, las llamadas de vuelta requeridas en respuesta a un cambio de valor de propiedad a menudo también cambian valores de otras propiedades, disparando llamadas de vuelta adicionales, y así sucesivamente.
Cuando se usa la técnica del modelo del observador, los programadores de aplicaciones que escriben el código de secuenciación de invocación manual, especifican qué métodos de qué instancias llamar, en qué orden, y con qué entradas registrando, desregistrando, inhabilitando, y rehabilitando observadores para diferentes instancias observadas, así como escribiendo la notificación y los métodos de llamada de vuelta para cada uno. Más específicamente, la asociación entre el observador y las instancias observadas se gestiona localmente (por la instancia observada sola, sin sincronización con otras instancias observadas) dentro del modelo del observador, y de este modo el código de secuenciación de invocación manual necesario para sincronizar eventos desde múltiples instancias observadas es típicamente parte de los métodos específicos de llamada de vuelta de cada uno de los observadores.
\vskip1.000000\baselineskip
Almacenamiento Volátil de Llamadas, de Sobre-escritura
Las rutinas de ejecución típicas usan un almacenamiento volátil de llamadas, de sobre-escritura para seguir las llamadas incompletas actualmente invocadas. Un almacenamiento volátil de llamadas, de sobre-escritura se sobre-escribe porque saca y desecha las entradas cada vez que se completa una llamada y es volátil porque se descarta y se reconstruye con cada ejecución. Las rutinas de ejecución típicas usan almacenes volátiles de llamadas, de sobre-escritura porque las rutinas de ejecución típicas combinan la construcción de un almacenamiento volátil de llamadas, de sobre-escritura con la invocación real de los métodos de transformación adecuados de las instancias apropiadas con las entradas apropiadas en respuesta a la ejecución del código de secuenciación de invocación manual. En suma, en respuesta a la ejecución de un código de secuenciación de invocación manual, una rutina de ejecución típica, determina la secuenciación de métodos/instancias de transformación llamada por llamada (a medida que se realiza cada llamada) y mantiene el almacenamiento volátil de llamadas de sobre-escritura para seguir las llamadas incompletas, sólo actualmente invocadas.
\vskip1.000000\baselineskip
Mapeo Relativo a Objetos
El mapeo Relativo a Objetos es una técnica de programación que enlaza bases de datos relacionales con conceptos del lenguaje orientado a objetos, creando (en efecto) una "base de datos de objetos virtuales". Algunos realizadores del mapeo relativo a objetos mantienen las instancias cargadas en memoria en sincronización constante con las bases de datos. Específicamente, después de la construcción de una pregunta de mapeo de objetos a SQL, en primer lugar los datos devueltos se copian dentro de los campos de las instancias en cuestión, al igual que cualquier paquete de mapeo de objetos a SQL. Una vez allí, las instancias tienen que mirar para ver si estos valores cambian, y a continuación invertir cuidadosamente el proceso para escribir los datos de vuelta a la base de datos.
Hibernate 3.0 es una solución de mapeo relativo a objetos para Java y CLR (Jboss® Inc. de Atlanta, Georgia). De este modo Hibernate proporciona un entramado para realizar el mapeo de un modelo de dominio orientado a objetos a una base de datos relacional tradicional. Su objetivo es relevar al desarrollador de algunas tareas de programación relacionadas con la persistencia de datos comunes. Hibernate tiene cuidado del mapeo de las clases a las tablas de las bases de datos (y de los tipos de datos orientados a objetos a tipos de datos SQL), así como de proporcionar peticiones de datos y facilidades de recuperación. Hibernate es una instancia central y construye gráficos que representan las asociaciones entre instancias.
\vskip1.000000\baselineskip
Inversión de Control y el Principio de Inversión de Dependencia
La Inversión de Control, también conocida como IOC, es un principio de programación orientado a objetos que puede usarse para reducir el acoplamiento (el grado en el cual cada módulo de programa depende de cada uno de los otros módulos) inherente en los programas de ordenador. La IOC se conoce también como el Principio de Inversión de Dependencia. En la IOC, una clase X depende de una clase Y si se aplica cualquiera de lo siguiente: 1) X tiene una Y y la llama; 2) X es una Y; o 3) X depende de alguna clase Z que depende de Y (transitividad). Es importante observar que X depende de Y no implica que Y depende de X, si sucede que ambos son ciertos, se llama una dependencia cíclica: X no puede entonces usarse sin Y, y viceversa.
En la práctica, si un objeto x (de la clase X) llama a métodos de un objeto y (de la clase Y), entonces la clase X depende de la clase Y. La dependencia se invierte introduciendo una tercera clase, a saber una clase de interfaz I que debe contener todos los métodos que x podría llamar sobre y. Además, Y debe cambiarse de modo que implementa la interfaz I. X e Y son ahora ambas dependientes de la interfaz I y la clase X ya no dependen de la clase Y (suponiendo que x no crea una instancia sobre Y). Esta eliminación de la dependencia de la clase X sobe la clase Y introduciendo una interfaz I se dice que es una inversión de control (o una inversión de dependencia). Debe observarse que Y debe depender de otras clases. Antes de que se haya aplicado la transformación X, dependía de Y y de este modo X dependía indirectamente de todas las clases de las que depende Y. Aplicando la inversión de control, todas esas dependencias indirectas también se han roto. La interfaz I introducida de nuevo no depende de nada.
La Estructura de Muelle es una estructura de aplicación de fuente abierta para la plataforma Java que usa la IOC y la inversión de dependencia. Específicamente, el centro de la Estructura de Muelle es su contenedor de Inversión de Control que proporciona un medio para configurar y gestionar los objetos Java. Este contenedor se conoce también como BeanFactory, ApplicationContext o contenedor del Núcleo. Ejemplos de operaciones de este contenedor son: la creación de objetos, la configuración de objetos, las llamadas de métodos de inicialización y el paso de objetos a objetos registrados de la llamada de vuelta. Los objetos que se crean por el contendor también se llaman Objetos Gestionados o Habas (Beans). Típicamente el contenedor se configura cargando los ficheros XML que contienen las definiciones de las Beans. Estos proporcionan toda la información que se requiere para crear los objetos. Una vez que se han creado y configurado los objetos sin producir condiciones de error se hacen disponibles para su uso. Los objetos pueden obtenerse por medio de la búsqueda de Dependencias o la inyección de Dependencias. La búsqueda de Dependencias es un modelo donde un llamante pide al contenedor de objetos un objeto con un nombre específico o de un tipo específico. La inyección de Dependencias es un modelo donde el contendor pasa objetos por nombre a otros objetos, bien a través de constructores, propiedades o métodos de fábrica. De esta forma, la Estructura de Muelle es una memoria central y construye gráficos que representan asociaciones entre instancias.
\vskip1.000000\baselineskip
Herramientas Gráficas
Javadoc^{TM} es una herramienta que analiza las declaraciones y los comentarios de la documentación en un conjunto de ficheros fuente de Java y produce el conjunto correspondiente de páginas HTML que describen (por defecto) las clases públicas y protegidas, las clases anidadas (pero no las clases interiores anónimas), las interfaces, los constructores, los métodos y los campos (de Sun Microsystems® Inc. en Santa Clara, California). Javadoc puede usarse para generar la documentación API (Interfaz de Programación de Aplicaciones) o la documentación de implementación para un conjunto de ficheros fuente. Javadoc es una clase y un método central y construye gráficos que representan las asociaciones entre la combinación de clases y sus métodos.
Otro sistema para diseñar aplicaciones software incluye gráficos u objetos analizados por un intérprete para representar y reproducir una aplicación de un ordenador. Este sistema utiliza clases de programación preescritas almacenadas en librerías de código, que pueden escribirse para seguir los modelos de diseño descritos en el documento "Design Patterns" de Gamma y otros, Addison Wesley de 1995, el documento "Patterns in Java" de Grand, Publicaciones de Wiley Computer de 1998, y/o las herramientas de alto nivel de Ingeniería de Software Asistida por Ordenador (CASE). Más específicamente, algunas de tales clases están basadas en el modelo de comportamiento del Observador. Las librerías de código preescrito representan nodos del estado de la aplicación, lógica del procesamiento, y flujo de datos del sistema entre los diversos estados de la aplicación (es decir, los elementos de datos preescritos de la aplicación), de modo que un usuario no necesita escribir, editar o compilar código cuando crea una aplicación software. En cambio, el usuario edita manualmente una aplicación software en una Interfaz Gráfica de Usuario editando objetos visuales asociados con el nodo del estado de la aplicación actual, tales como los datos dentro del nodo del estado de la aplicación o procesos realizados dentro del nodo del estado de la aplicación. A continuación, en base a los cambios producidos por el usuario para el nodo del estado de la aplicación actual, el intérprete presenta en pantalla el estado actualizado de la aplicación al usuario para el estado de la aplicación que acaba de editar. El sistema puede transitar a continuación junto con un perfil transaccional definido por el usuario a otro estado de la aplicación donde el usuario puede editar opcionalmente el siguiente estado de la aplicación o el perfil de transición. Pueden realizarse cambios a un gráfico para las instancias del gráfico que se implementan por el intérprete, mientras que está corriendo la aplicación software.
Este sistema para diseñar aplicaciones software puede incluir representaciones visuales de una aplicación software en funcionamiento que puede hacerse "utilizable" con un controlador de la aplicación. Cuando un usuario cambia objetos visuales, que representan la aplicación software en funcionamiento, el controlador usa la entrada para inducir al intérprete a realizar el cambio del gráfico. El controlador espera a continuación más cambios. Además, las representaciones visuales de tales aplicaciones software pueden importarse o exportarse como documentos XML que describen la representación visual de la aplicación, y por lo tanto de la aplicación de software.
Para editar y/o crear una aplicación software, en la forma de una representación visual de nodos, perfiles dirigidos, y estados de aplicación, puede incluirse además en el sistema una interfaz del programa de la aplicación y un editor de la aplicación. Las palabras clave, y las definiciones asociadas, a partir de las librerías de código preescritas, posibilitan a los desarrolladores de la aplicación definir manualmente una aplicación de software, las etapas de procesamiento, así como la representación visual de la aplicación software proporcionando representaciones gráficas, dentro de un editor, de una aplicación gráfica que correlaciona estrechamente con la estructura real de la aplicación. Un usuario define una nueva aplicación mediante un "adivino de la definición de la aplicación" que después que se cumplimentan ciertos asuntos preliminares, presenta en pantalla la nueva aplicación como una componente gráfica dentro del espacio de trabajo del editor. Un usuario además interactúa con una aplicación haciendo selecciones desde las listas presentadas en pantalla de las posibles componentes de la aplicación pre-creadas y arrastrando y soltando las componentes dentro del espacio de trabajo usando el ratón del ordenador y el teclado. Un usuario puede seleccionar componentes y "arrastrarlos" sobre las componentes existentes. Cuando se "suelta" una nueva componente sobre una componente existente, la nueva componente se convierte en un hijo de la componente existente dentro de un gráfico de la aplicación. Las asociaciones de componentes dentro de la aplicación se definen manualmente por las selecciones del usuario dentro del editor. De este modo se construye por el usuario una estructura de árbol que representa una aplicación. A medida que se crea la aplicación, el usuario puede seleccionar un visor del navegador de la aplicación para representar en pantalla una vista de árbol de la aplicación construida haciendo posible seleccionar y editar cualquier componente de la aplicación. La interfaz del editor procesa las entradas y selecciones del usuario incluyendo crear o borrar elementos de la aplicación, actualizando los atributos de las componentes, y actualizando las propiedades de la pantalla de la aplicación.
El sistema descrito anteriormente, aunque utiliza representaciones visuales de las aplicaciones software, también puede usarse como una herramienta de programación visual para definir y actualizar bases de datos relacionales. El sistema utiliza descripciones XML de representaciones visuales de aplicaciones de software. Una herramienta analiza e interpreta las descripciones XML para producir esquemas de tablas de bases de datos relacionales equivalentes, así como cambios en los mismos. Cuando se cambian los datos dentro de una representación visual de una aplicación software, se almacena una descripción del cambio junto con otros cambios en un fichero registro y a continuación se procesan como un grupo, Un programa intermedio (una aplicación java que opera sobre su propio hilo) realiza transacciones entre las representaciones visuales de la aplicación software y la base de datos relacional. La aplicación java sondea (es decir, comprueba) el registro de cambios para los nodos de representación visual (es decir, los datos en la base de datos) y si hay cambios, realiza los cambios en la base de datos. De este modo, alterando los datos dentro de la representación visual, el sistema actualiza la base de datos. Una aplicación similar permanece entre la representación visual de la aplicación software y la base de datos para manejar las peticiones de datos desde la base de datos.
Otro sistema para análisis de software se llama el Analizador de Árboles de Código (CTA). Un CTA analiza el código fuente estático escrito en un lenguaje de programación orientado a objetos. El CTA genera una tabla de símbolos y un árbol de llamadas a partir del código fuente estático. Usando la tabla de símbolos, el CTA genera un diagrama de clases. Igualmente, usando el árbol de llamadas, el CTA genera un diagrama de secuencias. El diagrama de clases ilustra la asociación entre una clase seleccionada por el usuario y las clases relacionadas con la clase seleccionada por el usuario. El diagrama de secuencias ilustra la secuencia en la cual se llaman los diferentes métodos. Usando tanto el diagrama de clases como el diagrama de secuencias, el CTA genera un artefacto de diseño representativo del código fuente estático. Cuando el usuario modifica el artefacto de diseño, el CTA identifica las porciones impactadas del código fuente usando el diagrama de secuencias. El artefacto de diseño se usa para el mantenimiento del código y/o la ingeniería inversa del código fuente estático.
\vskip1.000000\baselineskip
Breve sumario
Se presentan las realizaciones de una estructura de programación orientada a gráficos de productores con soporte de escenarios. En una realización, se recibe una petición de evaluar los impactos potenciales por un cambio sobre un programa de aplicación. El programa de aplicación incluye un conjunto de productores, teniendo cada uno al menos una instancia y un método asociado con la instancia. En respuesta a la petición, el programa de aplicación puede simularse con el cambio mientras que se conservan los estados existentes y las salidas existentes de los productores.
\vskip1.000000\baselineskip
Breve descripción de los dibujos
La invención puede entenderse de la mejor manera refiriéndonos a la siguiente descripción y a los dibujos adjuntos que se usan para ilustrar las realizaciones de la invención. En los dibujos:
La Figura 1A es un diagrama de bloques que ilustra la asociación de una declaración de dependencias del productor para un método de una clase en un código fuente orientado a objetos con un productor que incluye la clase, una instancia determinada de esa clase y un método de esa clase, de acuerdo con una realización de la invención;
la Figura 1B ilustra ejemplos de asociaciones entre el productor 110A y el productor padre 114A.1 de acuerdo con una realización de la invención;
la Figura 1C ilustra ejemplos de asociaciones entre el productor 110A y el productor hijo 112A.1 de acuerdo con una realización de la invención;
la Figura 1D ilustra algunos ejemplos de combinaciones adicionales de asociaciones de productores padre 114 y los productores hijo 112 para el productor 110A de acuerdo con una realización de la invención;
la Figura 1E ilustra que las instancias diferentes de la misma clase pueden tener productores basados en los mismos y/o diferentes métodos de acuerdo con una realización de la invención;
la Figura 2 es un diagrama de bloques que ilustra la reutilización de una rutina de ejecución con un soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención;
la Figura 3A es un diagrama de bloques que ilustra una rutina de ejecución con un soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención;
la Figura 3B es un diagrama de bloques que ilustra una rutina de ejecución con un soporte de programación orientado a gráficos de productores que también soporta la ejecución incremental y las salidas del productor anuladas de acuerdo con una realización de la invención;
la Figura 4A es un diagrama de bloques que ilustra el descubrimiento y construcción de un gráfico de productores de ejemplo de acuerdo con una realización de la invención;
la Figura 4B es un diagrama de bloques que ilustra la ejecución inicial del gráfico de productores de la Figura 4A de acuerdo con una realización de la invención;
la Figura 4C es un diagrama de bloques que ilustra la ejecución incremental del gráfico de productores de la Figura 4B de acuerdo con una realización de la invención;
la Figura 4D es un diagrama de bloques que ilustra la ejecución incremental del gráfico de productores de la Figura 4B después de que el productor dependiente 2 se ha anulado de acuerdo con una realización de la invención;
la Figura 4E es un diagrama de bloques que ilustra la ejecución incremental del gráfico de productores de la Figura 4B después de que el productor dependiente 2 se ha anulado y el productor fuente independiente 3 se ha modificado de acuerdo con una realización de la invención;
la Figura 5A es un diagrama de bloques que ilustra el descubrimiento y construcción de un gráfico de productores de ejemplo incluyendo una dependencia sin resolver de acuerdo con una realización de la invención;
la Figura 5B es un diagrama de bloques que ilustra la ejecución inicial del gráfico de productores de la Figura 5A y la resolución de la dependencia sin resolver de acuerdo con una realización de la invención;
la Figura 5C es un diagrama de bloques que ilustra la ejecución inicial del gráfico de productores de la Figura 5A y/o la reejecución del gráfico de productores de la Figura 5B de acuerdo con una realización de la invención;
la Figura 5D es un diagrama de bloques que ilustra la ejecución inicial del gráfico de productores de la Figura 5A y/o la reejecución del gráfico de productores de las Figuras 5B ó 5C de acuerdo con una realización de la invención;
la Figura 6 es un diagrama de flujo que ilustra el flujo lógico de ejecución de una rutina de ejecución del cliente y su asociación con una rutina de ejecución con el soporte de programación orientado al gráfico de productores de acuerdo con una realización de la invención;
la Figura 7A ilustra un seudo código de una declaración de dependencias del productor para un método que usa dependencias declaradas de atajo de acuerdo con una realización de la invención;
la Figura 7B es un diagrama de bloques de productores de ejemplo de acuerdo con una realización de la invención;
la Figura 7C ilustra el seudo código de una declaración de dependencias del productor para un método que usa una dependencia declarada no de atajo, e ilustra un diagrama de bloques de productores de ejemplo de acuerdo con una realización de la invención;
la Figura 7D ilustra el seudo código de una declaración de dependencias del productor para un método que usa una dependencia declarada no de atajo, de acuerdo con una realización de la invención;
la Figura 7E es un diagrama de bloques de productores de ejemplo de acuerdo con una realización de la invención;
la Figura 7F es un diagrama de bloques de unas dependencias de ejemplo mediante el uso de una DependenciaHaciaArriba con un productor de determinación de dependencias de acuerdo con una realización de la invención;
la Figura 7G es un diagrama de bloques de posibles dependencias de ejemplo mediante el uso de una DependenciaDébilmenteRestringida con un productor de determinación de dependencias de acuerdo con una realización de la invención;
la Figura 7H ilustra gráficos de productores de ejemplo de productores normalizados de acuerdo con una realización de la invención;
la Figura 7I ilustra un ejemplo de dependencias del productor y productores de determinación de dependencias para descubrir, resolver y construir el gráfico de productores de la figura 7H.
la Figura 8A es un diagrama de bloques que ilustra una primera estructura de ejemplo dentro de la cual se proporcionan aplicaciones a los usuarios finales de acuerdo con una realización de la invención;
la Figura 8B es un diagrama de bloques que ilustra una segunda estructura de ejemplo dentro de la cual se proporcionan aplicaciones a los usuarios finales de acuerdo con una realización de la invención;
la Figura 8C una captura de pantalla de ejemplo y el uso de una selección libre de célula con el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 de acuerdo con una realización de la invención;
la Figura 8D ilustra otra captura de pantalla de ejemplo y el uso de una selección libre de célula con el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 de acuerdo con una realización de la invención;
la Figura 8E ilustra una captura de pantalla de ejemplo y el uso de creación de tablas con el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 de acuerdo con una realización de la invención;
la Figura 8F ilustra otra captura de pantalla de ejemplo y el uso de creación de tablas con el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 de acuerdo con una realización de la invención;
la Figura 9A es un diagrama de bloques que ilustra un primer esquema para distribuir una rutina de ejecución con soporte de programación orientado al gráfico de productores de acuerdo con una realización de la invención;
la Figura 9B es un diagrama de bloques que ilustra un segundo esquema para distribuir una rutina de ejecución con soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención;
la Figura 9C es un diagrama de bloques que ilustra un tercer esquema para distribuir una rutina de ejecución con soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención;
la Figura 10 es un diagrama de bloques de una implementación de ejemplo de acuerdo con una realización de la invención;
la Figura 11A es un diagrama de bloques de un ejemplo de la estructura de seguimiento de clases 1092 de la Figura 10 de acuerdo con una realización de la invención;
la Figura 11B es un diagrama de bloques de un ejemplo de la estructura de seguimiento de instancias 1065 de la Figura 10 de acuerdo con una realización de la invención;
la Figura 11C es un diagrama de bloques de un ejemplo de la estructura de gráficos de productores 1060 de la Figura 10 de acuerdo con una realización de la invención;
la Figura 11D es un diagrama de bloques de un ejemplo de la estructura de seguimiento de métodos 1058 de la Figura 10 de acuerdo con una realización de la invención;
la Figura 12 es un diagrama de bloques que ilustra detalles adicionales de la Figura 10 para soportar las dependencias dinámicas del productor tipo contingente y de suscripción de acuerdo con una realización de la invención;
la Figura 13A ilustra el seudo código de las declaraciones de dependencias del productor para métodos que usan una dependencia declarada no de atajo, no dinámica (no contingente, no de suscripción) de acuerdo con una realización de la invención;
la Figura 13B es un diagrama de bloques de los productores que ilustran una dependencia del productor de ejemplo declarada no de atajo, no dinámica (no contingente, no de suscripción) de acuerdo con una realización de la
invención;
la Figura 13C ilustra un seudo código de las declaraciones de dependencias del productor para métodos que usan una dependencia del productor declarada no de atajo, contingente, no de suscripción de acuerdo con una realización de la invención;
la Figura 13D es un diagrama de bloques de productores que ilustran un ejemplo de una dependencia del productor declarada no de atajo, contingente, no de suscripción de acuerdo con una realización de la invención;
\newpage
la Figura 13E ilustra un seudo código de las declaraciones de dependencias del productor para métodos que usan tanto dependencias del productor declaradas no de atajo, contingentes, no de suscripción como dependencias del productor declaradas de atajo, contingentes, no de suscripción de acuerdo con una realización de la invención;
la Figura 13F es un diagrama de bloques de los productores que ilustra una dependencia del productor declarada no de atajo, contingente, no de suscripción y una dependencia del productor declarada de atajo, contingente, no de suscripción de acuerdo con una realización de la invención;
la Figura 13G ilustra seudo código de las declaraciones de dependencias del productor para métodos que usan una dependencia del productor declarada de atajo, contingente, no de suscripción y una dependencia del productor declarada de atajo, no contingente, no de suscripción de acuerdo con una realización de la invención;
la Figura 13H es un diagrama de bloques de los productores que ilustran una dependencia del productor declarada de atajo, contingente, no de suscripción y una dependencia del productor declarada de atajo, no contingente, no de suscripción de acuerdo con una realización de la invención;
la Figura 13I ilustra seudo código de las declaraciones de dependencias del productor para métodos que usan una dependencia del productor declarada de atajo, no dinámica (no contingente, no de suscripción) de acuerdo con una realización de la invención;
la Figura 13J es un diagrama de bloques de productores que ilustran una dependencia del productor de ejemplo declarada de atajo, no dinámica de acuerdo con una realización de la invención;
la Figura 14A es un diagrama de bloques de un ejemplo del registro de suscripción 1250 de la figura 12 de acuerdo con una realización de la invención;
la Figura 14B es un diagrama de bloques de productores de ejemplo que ilustran una dependencia del productor no contingente, de suscripción absorbente de acuerdo con una realización de la invención;
la Figura 14C es un diagrama de bloques de productores de ejemplo que ilustran una dependencia del productor, no contingente, de suscripción adherente de acuerdo con una realización de la invención;
la Figura 14D ilustra la elección de un productor padre en base al productor de determinación de dependencias del padre creadas por una suscripción adherente de acuerdo con una realización de la invención;
la Figura 14E ilustra la elección de un productor padre en base al productor de determinación de dependencias del padre creado por el productor de determinación de dependencias del hijo, cuyo productor de determinación de dependencia del hijo está enlazado por una dependencia de secuenciación, de acuerdo con una realización de la invención;
la Figura 15 es un diagrama de flujo para representar nuevas instancias de acuerdo con una realización de la invención;
la Figura 16 es un diagrama de flujo para representar nuevos productores y restaurar productores de acuerdo con una realización de la invención;
la Figura 17 es un diagrama de flujo para el bloque 1650 de la Figura 16 de acuerdo con una realización de la invención;
la Figura 18 es un diagrama de flujo para el bloque 1745 de la Figura 17 de acuerdo con una realización de la invención;
la Figura 19 es un diagrama de flujo para el bloque 1630 de la Figura 16 de acuerdo con una realización de la invención;
la Figura 20 es un diagrama de flujo para los bloques 1635 y 1670 de la Figura 16 de acuerdo con una realización de la invención;
la Figura 21 es un diagrama de flujo para anular productores de acuerdo con una realización de la invención;
la Figura 22A es una parte del diagrama de flujo para la ejecución de gráficos de productores actuales de acuerdo con una realización de la invención;
la Figura 22B es otra parte del diagrama de flujo para la ejecución de gráficos de productores actuales de acuerdo con una realización de la invención;
la Figura 23 es un diagrama de flujo para el bloque 2205 de la Figura 22 de acuerdo con una realización de la invención;
la Figura 24 es un diagrama de flujo para el bloque 2225 de la Figura 22 de acuerdo con una realización de la invención;
la Figura 25 es un diagrama de flujo para el bloque 2260 de la Figura 22 de acuerdo con una realización de la invención;
la Figura 26 ilustra una realización alternativa de la invención que soporta el escenario;
la Figura 27A es un diagrama de bloques que ilustra una rutina de ejecución con un soporte de programación orientado a gráficos de productores así como un soporte de escenario de acuerdo con una realización de la invención;
la Figura 27B es un diagrama de bloques que ilustra una rutina de ejecución con un soporte de programación orientado a gráficos de productores que también soporta la ejecución incremental y anulación de las salidas de productores, así como escenarios de acuerdo con una realización de la invención;
las Figuras 28A-D ilustran algunos ejemplos de gráficos de productores de un programa de aplicación para diferentes escenarios;
la Figura 29 es un diagrama de flujo del flujo lógico de ejecución de una rutina de ejecución del cliente y su asociación con una rutina de ejecución con el soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención;
la Figura 30 es un diagrama de bloques de una implementación alternativa de acuerdo con una realización de la invención que soporta el escenario.
la Figura 31A ilustra una realización de ejemplo de una estructura de seguimiento de clases;
la Figura 31B ilustra una realización de ejemplo de una estructura de seguimiento de instancias;
la Figura 31C ilustra una realización de ejemplo de una estructura de gráficos de productores;
la Figura 31D ilustra una realización de ejemplo de una estructura de seguimiento de escenarios;
la Figura 31E ilustra una realización de ejemplo de una estructura de seguimiento de objetos de escenarios;
la Figura 31F ilustra una realización de ejemplo de una lista de impactos;
la Figura 32 es un diagrama de flujo que ilustra un nuevo flujo de representación de escenarios de acuerdo con una realización de la invención;
la Figura 33 es un diagrama de flujo que ilustra un nuevo flujo de representación de instancias que soporta escenarios de acuerdo con una realización de la invención;
las Figuras 34A-34G ilustran diagramas de flujo de representación de un nuevo productor estresado en un escenario objetivo de acuerdo con una realización de la invención; y
las Figuras 35A-35B son diagramas de flujo que ilustran un flujo de ejecución de gráficos de productores estresados de acuerdo con una realización de la invención.
\vskip1.000000\baselineskip
Descripción detallada
En la siguiente descripción, se muestran numerosos detalles específicos tales como implementaciones lógicas, códigos de operación, medios para especificar los operandos, implementaciones de partición/compartir/duplicación de recursos, tipos y asociaciones entre los componentes de un sistema, y elecciones de partición/integración lógicas para proporcionar un entendimiento más perfecto de la invención. Se apreciará, sin embargo, por los especialistas en la técnica que la invención puede llevarse a la práctica sin tales detalles específicos. En cualquier caso, las estructuras de control, las estructuras de datos, y las secuencias de instrucciones software global no se han mostrado en detalle para no obscurecer la invención. Los especialistas en la técnica, con las descripciones incluidas, podrán implementar la funcionalidad apropiada sin experimentación excesiva.
A menos que se especifique lo contrario, las líneas discontinuas en las figuras (con la excepción de las líneas de división discontinuas) se usan para representar los elementos opcionales en las figuras. Sin embargo, no debería presuponerse que todos los elementos opcionales se muestran usando líneas discontinuas, sino que más bien que los mostradas en líneas discontinuas se eligieron por una diversidad de razones (por ejemplo pudieron mostrarse fácilmente, para proporcionar una mayor claridad, etc.)
\newpage
Las referencias en esta especificación a "una de las realización", "una realización", "una realización de ejemplo", etc. indican que la realización descrita puede incluir una característica, estructura o rasgo particular, pero cada realización puede que no incluya necesariamente el rasgo, estructura o característica particular. Además, tales frases no necesariamente se refieren a la misma realización. Además, cuando se describe un rasgo, estructura o característica particular en conexión con una realización, se sostiene que está dentro del conocimiento de cualquier especialista en la técnica
afectar a tal rasgo, estructura o característica en conexión con otras realizaciones se describa explícitamente o no.
En la siguiente descripción y reivindicaciones, pueden usarse los términos "acoplados" y "conectados", junto con sus derivados. Debería entenderse no se pretende que estos términos sean sinónimos entre sí. Más bien, en realizaciones particulares, "conectados" puede usarse para indicar que dos o más elementos están en contacto directo entre sí. "Acoplados" puede significar que dos o más elementos están en contacto directo. Sin embargo, "acoplados" puede también significar que dos o más elementos no están en contacto directo entre sí, pero que aún cooperan o interactúan entre sí.
En algunos casos, las operaciones de diagramas de flujo se describen con referencia a las realizaciones de ejemplo de otros diagramas de bloques. Sin embargo, debería entenderse que las operaciones de los diagramas de flujo pueden realizarse por realizaciones de la invención distintas de las tratadas con referencia a estos otros diagramas de bloques, y que las realizaciones de la invención tratadas con referencia a estos otros diagramas de bloques pueden realizar operaciones diferentes de las tratadas con referencia a los diagramas de flujo.
Las técnicas mostradas en las figuras pueden implementarse usando código y datos almacenados y ejecutados sobre uno o más ordenadores. Tales ordenadores almacenan y comunican (internamente y con otros ordenadores sobre una red) código y datos que usan medios legibles por una máquina, tales como los medios de almacenamiento de una máquina (por ejemplo, discos magnéticos; discos ópticos; memoria de acceso aleatorio; memoria de sólo lectura; dispositivos de memoria flash) y medios de comunicación de máquinas (por ejemplo, eléctricos, ópticos, acústicos u otra forma de señales propagadas - tales como ondas portadoras, señales de infrarrojos, señales digitales, etc.). Además, tales ordenadores típicamente incluyen un conjunto de uno o más procesadores acoplados a uno o más componentes, tales como un dispositivo de almacenamiento, varios dispositivos de entrada/salida de usuario (por ejemplo, un teclado o una pantalla), y una conexión de red. El acoplamiento del conjunto de procesadores y otros componentes típicamente se produce a través de uno o más buses y puentes (también denominados como controladores de bus). El dispositivo de almacenamiento y el tráfico de red representan respectivamente una o más medios de almacenamiento de las máquinas y medios de comunicación de las máquinas. De este modo, el dispositivo de almacenamiento de un sistema de ordenador determinado típicamente almacena código y datos para la ejecución del conjunto de uno o más procesadores de ese ordenador. Por supuesto, pueden implementarse una o más partes de una realización de la invención usando diferentes combinaciones de software, firmware, y/o hardware.
\vskip1.000000\baselineskip
Visión General
De acuerdo con un aspecto de la invención, un productor es al menos una instancia (o un objeto) y un método específico, de modo que si se ejecuta el productor durante la rutina de ejecución, se ejecuta el método específico sobre la instancia específica. De este modo, un productor determinado se representa a partir de una instancia determinada y un método determinado asociado con esa instancia. Al igual que las clases, instancias, y métodos los productores son elementos básicos o constructores manipulados por la rutina de ejecución. De este modo, la representación de un productor se interpreta y se sigue por la rutina de ejecución, y de este modo la rutina de ejecución sigue la combinación de las instancias y métodos representados por los productores. En otras palabras, un productor es un constructor que se puede representar por una rutina de ejecución que se sigue por la rutina de ejecución, que se ejecuta por la rutina de ejecución, y que incluye al menos una instancia y un método asociado con esa instancia, de modo que la ejecución de las rutinas de ejecución del productor da como resultado que se ejecuta el método del productor sobre la instancia del productor. También el método de un productor tiene asociado con el mismo una declaración de dependencias del productor que identifica, con un conjunto de cero o más dependencias del productor, un conjunto de cero o más productores para el productor determinado. Específicamente las dependencias del productor se declaran para métodos que usan declaraciones de dependencias del productor, la declaración de dependencias del productor para un método determinado puede incluir cero o más dependencias del productor, y cada una de las dependencias del productor identifica un conjunto de cero o más productores. De esta forma, las declaraciones de dependencia del productor y las dependencias del productor que definen se interpretan y se siguen por la rutina de ejecución, y de este modo la rutina de ejecución sigue las asociaciones entre productores indicadas por las declaraciones de dependencias del productor.
Donde un productor determinado es dependiente de un conjunto de uno o más productores, la rutina de ejecución asegurará la ejecución del conjunto de otros productores antes que el productor determinado. De este modo las declaraciones de dependencias del productor representan las asociaciones de ejecución entre productores, mientras que los productores representan las operaciones a realizar (método) e instancias. Aunque en algunas realizaciones de la invención se permiten dependencias de los productores padre sobre los productores hijo a declarar en la declaración de dependencias del productor asociada con el método del productor padre (la declaración de dependencias del productor, del productor padre identifica cualesquiera productores hijo - denominadas en este documento como declaradas hacia abajo), otras realizaciones de la invención también permiten dependencias a declarar en la declaración de dependencias del productor asociada con el método de los productores hijos (la declaración de dependencias del productor, del productor hijo identifica uno o más productores padre - denominada en este documento como declaradas hacia arriba).
En las diferentes realizaciones de la invención un productor identifica cosas adicionales. Por ejemplo, aunque en algunas realizaciones de la invención un productor es al menos una instancia y un método asociado con esa instancia, en otras realizaciones de la invención un productor es una clase, una instancia de esa clase, y un método asociado con esa instancia (por ejemplo, un productor puede incluir directamente una clase, una instancia y un método; un productor puede incluir directamente una instancia y un método, mientras que identifica indirectamente una clase de esa instancia a través de una referencia (por ejemplo, una referencia en la instancia)). Aunque la invención puede usarse en el contexto del código escrito en diferentes lenguajes de programación (por ejemplo, un código orientado a objetos escrito en un lenguaje reflexivo orientado a objetos; un código orientado a objetos escrito en un lenguaje reflexivo basado en objetos; un código escrito en un procedimiento, no reflexivo orientado a objetos, un lenguaje no reflexivo basado en objetos y transformado en un código de lenguaje reflexivo orientado a objetos), se describirán realizaciones de la invención, a modo de ejemplo y no de limitación, con referencia a los lenguajes reflexivos de programación orientados a objetos y con referencia a los productores que incluyen directamente clases, instancias y métodos. También, aunque en una realización de la invención el método de un productor es un método de una instancia (un método puede usar campos de instancias además de cualesquiera entradas recibidas como argumentos), realizaciones alternativas de la invención también pueden soportar o alternativamente soportan el método de un productor que es un método de clase (métodos que reciben todas las entradas como argumentos y/o usa variables independientes de la instancia) (donde el método de un productor es un método de una instancia, la instancia de ese productor es una instancia de una clase; aunque donde el método de un productor es un método de clase, la instancia de ese productor es una instancia de meta-clase que representa la clase).
La Figura 1A es un diagrama de bloques que ilustra la asociación de una declaración de dependencias del productor para un método de una clase en un código fuente orientado a objetos para un productor que incluye la clase, una instancia determinada de esa clase, y un método de esa clase, de acuerdo con una realización de la invención. En la Figura 1A, el código fuente orientado a objetos 100 se muestra incluyendo una clase 102, que a su vez incluye un método 104 y una declaración de dependencias del productor 106 para el método 104. Por supuesto, la clase 102 típicamente incluiría uno o más campos (no mostrados) y métodos adicionales (no mostrados). Además, el código fuente orientado a objetos 100 típicamente incluiría clases adicionales.
Durante la rutina de ejecución, se representa una instancia 108 de la clase 102. La instancia 108 incluye los datos de los campos de la clase 102. Además, se representa el productor 110, donde el productor 110 identifica la clase 102, la instancia 108 de la clase 102 (que tiene asociado con la misma el método 104 de la clase 102), y el método 104 de la clase 102. La declaración de dependencias del productor 106 identifica para la rutina de ejecución un conjunto de cero o más productores 112 (denominados como productores hijo del productor 110) que deben ejecutarse antes de la ejecución del productor 110. En otras palabras, el productor 110 depende del conjunto de cero o más productores 112. Además de, o en lugar de, consumir salidas del conjunto del productor 112, el productor 110 puede consumir datos de la instancia 108. Además, el productor 110 proporciona al menos una salida, salida que puede ser interna a la instancia 108 (y de este modo, modificar los datos de la instancia 108) y/o puede ser externa; de cualquier modo, la salida del productor 110 puede consumirse por un conjunto de cero o más de otros productores 114 (denominados como productores padres del productor 110). Como se ha indicado anteriormente y se describe con más detalle más adelante en este documento, la declaración de dependencias del productor 106, en algunas realizaciones de la invención, también pueden identificar para la rutina de ejecución de cero o más productores 114.
Debería entenderse que las entradas y salidas de los productores están basadas en las entradas y salidas de los métodos sobre los cuales están basados esos productores. Como tal, estas entradas y salidas pueden representar múltiples parámetros que tienen una diversidad de estructuras de datos.
La declaración de dependencias del productor para un método determinado identifica en la rutina de ejecución el conjunto de cero o más productores a representar y a ejecutar. A modo de ejemplo, donde una declaración de dependencias de un productor (por ejemplo, la declaración de dependencias del productor 106) para un método determinado (por ejemplo, el método 104) identifica una dependencia del productor sobre un productor determinado (cuyo productor determinado identifica una primera clase, una primera instancia de esa clase, y un primer método de esa primera clase) (por ejemplo, uno del conjunto de productores 112), a continuación la declaración de dependencias del productor del método determinado identifica para la rutina de ejecución que se va a representar la primera instancia (si no lo está ya) y que se va a usar el primer método para representar el productor determinado para la primera instancia (en estos ejemplos, el término primera no significa localización u orden).
En funcionamiento, cuando durante el tiempo de ejecución, se designan un conjunto determinado de uno o más productores como productores de interés y tienen dependencias del productor declaradas para los mismos, la rutina de ejecución: 1) genera automáticamente (descubre, construye y opcionalmente resuelve) un conjunto de uno o más gráficos, que pueden ser multi-nivel y pueden ser de una diversidad de formas (por ejemplo de cadena, de árbol), desde el conjunto determinado de productores designados como productores de interés bajando a los productores fuente en base a las declaraciones de dependencias del productor); y 2) la ejecución de secuencias de productores del conjunto de gráficos para generar las salidas del conjunto determinado de productores designado como productores de interés. De este modo, la rutina de ejecución usa las declaraciones de dependencias del productor para determinar qué métodos, con qué argumentos para ejecutar sobre qué instancias, y cuando para propósitos de sincronización.
De este modo, las dependencias del productor representan la secuenciación de la ejecución de los productores para la rutina de ejecución. Sin embargo, además de indicar la secuenciación de la ejecución, las dependencias del productor pueden representar diferentes entradas para sacar asociaciones en diferentes realizaciones de la invención. Por ejemplo diferentes realizaciones de la invención pueden soportar una o más dependencias de argumentos del productor, dependencias de campos del productor, y dependencias de secuenciación sólo del productor (las dependencias de secuenciación sólo del productor se denominan en este documento con las dependencias del productor de secuenciación taquigráficas). Aunque cada una de las dependencias de argumentos del productor, las dependencias de campos del productor, y las dependencias de secuenciación del productor representan la asociación de secuenciación de la ejecución entre productores, argumentos y dependencias de campos del productor adicionalmente representan los datos de los cuales se da cuenta la rutina de ejecución. Específicamente, una dependencia de argumentos del productor causa que la rutina de ejecución realice el mapeo de la salida de un productor hijo como un parámetro de entrada para un productor padre, mientras que una dependencia de un campo del productor indica el uso de un campo de una instancia. Independientemente de la asociación de la entrada con la salida representada por las dependencias del productor, el uso adecuado de las dependencias del productor asegura que los productores que acceden a la información se secuencian después de los productores que impactan esa información.
Las dependencias de secuenciación pueden usarse para una diversidad de propósitos, incluyendo asegurar el orden de ejecución entre los productores que modifican los datos de un modo, del cual la rutina de ejecución no está enterada y los productores que consumen esos datos (un productor hijo puede escribir sus salidas en un modo que requiere que el método del productor padre incluya código para acceder a esa salida (por ejemplo, un método que impacta el entorno afectando a una salida que no es la salida del productor normal y, como tal, que no se detecta por la rutina de ejecución - tal como un método que fija una variable global, que fija un campo en una instancia que no es la salida del productor, que impacta una fuente de datos externa, etc.)). De este modo, una dependencia de secuenciación refleja una dependencia de un productor padre sobre un productor hijo pero requiere salidas que se necesita proporcionar, si las hay, desde una a la otra se produce a través de la escritura de código (por ejemplo, el código en el método del productor hijo para escribir una salida para un mecanismo determinado (tal como fijar una variable global, impactar una fuente de datos externa, fijar un campo en una instancia que no es la salida del productor, etc.) y un código en el método del productor padre para leer esa salida desde el mecanismo determinado). De este modo, las dependencias de secuenciación permiten a la rutina de ejecución sincronizar la ejecución de cualesquiera productores padre que descansan sobre una salida que la rutina de ejecución no puede detectar. Influir en las fuentes (tales como las variables globales o las fuentes de datos externas) de las que la rutina de ejecución no es consciente y leer desde estas fuentes es una característica que debería evitarse en los productores donde se requieren capacidades de escenario.
En una realización de la invención la declaración de dependencias del productor para un método determinado identifica sólo dependencias directas sobre los productores (por ejemplo, descendientes directos (hijos), en contraste con los descendientes indirectos (nietos, bisnietos, etc.). En tal realización, cada una de las declaraciones de dependencias del productor proporciona un nivel único o capa de productores cuyas salida pueden usarse directamente por un productor representado desde el método determinado, dejando el descubrimiento/construcción/resolución de las capas adicionales del gráfico de productores al procesamiento de la rutina de ejecución de otras declaraciones de dependencias del productor.
\vskip1.000000\baselineskip
Claves de Ejemplo
Un productor puede verse como un conjunto de identificadores múltiples un identificador para cada uno de los niveles adicionales de granularidad especificada (clase, instancia, método, etc.). Además, algunas realizaciones de la invención implementan cada uno de los identificadores como una clave separada, mientras que otras realizaciones tienen ciertos identificadores compartiendo una clave. A modo de ejemplo, algunas realizaciones de la invención implementan un productor como un triplete de una clase, una instancia, y un método e implementan claves, de modo que cada una de esas partes del triplete se identifica por una clave separada (una clave de clase, una clave de instancia, y una clave de método) y el productor se identifica por la combinación de clave de clase, clave de instancia y clave de método (la clave del productor).
Las realizaciones de la invención que usan claves pueden variar en la unicidad de las claves utilizadas. Por ejemplo, en una realización de la invención, cada una de las claves de clase es única, cada una de las claves de instancia es única a través de todas las instancias de todas las clases, y cada una de las claves de los métodos es única a través de todos los métodos de todas las clases. Como un ejemplo adicional, en otras realizaciones de la invención, cada una de las clases tiene una clave única, cada instancia de una clase determinada tiene una clave única (a través de las instancias de clases), y cada uno de los métodos de una clase tiene una clave única (a través de los métodos de clase); pero las instancias de las diferentes clases pueden tener la misma clave de instancia, y los métodos de diferentes clases pueden tener la misma clave de método; esta última aproximación se usará en el resto del documento a modo de ejemplo y no de limitación. Por ejemplo, asumamos que una primera clase incluye métodos y tiene una clave para cada uno de estos métodos que es única dentro de la primera clase, a continuación las instancias de esta clase (que tendrán cada una clave única como cada una de las otras) tienen las mismas claves de métodos asociadas con los mismos. Como otro ejemplo, asumamos que una segunda clase diferente incluye métodos (sean algunos, todos o ninguno los mismos que los métodos de la primera clase) que tienen las mismas claves de método que las usadas por la primera clase; como tal, una instancia de esta clase diferente puede tener asociada con la misma las mismas claves de método que las asociadas con una instancia de la primera clase.
\newpage
El uso de las claves permite una diversidad de características, incluyendo: 1) el seguimiento de cada una de las entidades identificadas por los identificadores del productor (por ejemplo, el seguimiento de cada una de las clases, instancias y métodos); 2) diversos productores padre (no conscientes de su mutua existencia) para conectar al mismo productor hijo en base a sus declaraciones de dependencias del productor (que especifican dependencias del productor que usan claves del productor), etc. En una realización de la invención, la clave de instancia es una instancia de una clase (ClaveInstancia) que mantiene dos elementos: una clave de instancia natural que indica si el identificador de la clave es una referencia a la instancia u otro objeto (tal como una cadena de caracteres), y un identificador de clave que puede ser bien una referencia a la instancia, o a otro objeto (tal como una cadena de caracteres). El almacenamiento de una referencia de instancia en la clave de instancia ahorra al programador inventar un nombre para identificar estas instancias.
\vskip1.000000\baselineskip
Asociaciones de Ejemplo
En el contesto de la exposición anterior respecto al productor que está viendo como un conjunto de identificadores múltiples (con un identificador para cada nivel adicional de granularidad especificada), en una realización de la invención las diversas asociaciones soportadas entre un productor y sus hijos y padres son aquellas en las que al menos uno de tales identificadores es diferente entre un productor y su conjunto de cero o más productores padre y uno de tales identificadores es diferente entre un productor y cada uno de su conjunto de cero o más productores hijo. Como modo de proporcionar algunas asociaciones de ejemplo, asumamos que se representa un primer productor, donde el primer productor es una primera instancia de una primera clase y un primer método de esa primera clase, y asumamos que la declaración de dependencias del productor para ese primer método identifica en la rutina de ejecución un segundo productor como un hijo, entones el segundo productor puede ser: 1) la primera instancia de la primera clase y un segundo método de esa primera clase; 2) una segunda instancia de la primera clase y un segundo método de esa primera clase; 3) una segunda instancia de la primera clase y el primer método de la primera clase; o 4) una instancia de la segunda clase y un método de esa segunda clase. En tal caso, el primer productor es dependiente del segundo productor - representando, de este modo, una asociación de una entrada con una salida del primer productor sobre el segundo productor. Las diversas asociaciones y combinaciones de esas asociaciones se describen más adelante para una realización de la invención que usa un lenguaje orientado a objetos y en el cual un productor identifica al menos una clase, una instancia y un método.
Las Figuras 1B-1D ilustran asociaciones de ejemplo entre un productor determinado, su conjunto de productores padre, y su conjunto de productores hijo de acuerdo con una realización de la invención. Las Figuras 1B-1D muestran cada uno los siguiente 1) una definición de clase 102A incluyendo métodos 104A-C y declaraciones de dependencias del productor 106A-C para cada uno de estos métodos, respectivamente; 2) una definición de clase 102B incluyendo métodos 104D-E y las declaraciones de dependencias del productor 106D-E para cada uno de esos métodos, respectivamente; 3) una definición de clase 102C incluyendo un método 104F y una declaración de dependencias del productor 106F para ese método; 4) una instancia 108A de la clase 102A, 5) un productor 110A que identifica la clase 102A, la instancia 108A, y el método 104A; y 6) un productor 112A.1 y un productor 114.1 que representan respectivamente uno del conjunto de productores 112 y 114. Las líneas discontinuas con letras encuadradas sobre las mismas se usan en las Figuras 1B-1D para ilustrar las asociaciones de ejemplo. De este modo, la colección de líneas discontinuas con la letra A encuadrada sobre las mismas representa una asociación. Las asociaciones en la figura 1B son combinables con las asociaciones en la Figura 1C; como tal, estas combinaciones representan combinaciones de asociaciones entre los productores padres 114A y los productores hijos 112A para el productor 110A. Además la Figura 1D ilustra algunas combinaciones de ejemplo adicionales de las asociaciones entre productores padres 114A y productores hijos 112A para el productor 110A.
La Figura 1B ilustra asociaciones de ejemplo entre el productor 110A y el productor padre 114A.1 de acuerdo con una realización de la invención. La Figura 1B incluye adicionalmente una instancia 108B. El conjunto de productores 114 se identifica por otras declaraciones de dependencia de diferentes métodos de la misma clase, diferentes instancias de la misma clase, y/o métodos de una clase diferente; y de este modo, cada uno del conjunto de productores 114 puede ser: 1) de la misma instancia que el productor 110A (instancia 108A de la clase 102A) y un método diferente asociado con esa instancia (ilustrada por la letra A encuadrada sobre las líneas discontinuas desde la instancia 108A para el productor 114A.1 y desde el método 104B al productor 114A.1); 2) de una instancia diferente de la clase 102A y un método diferente asociado con esa instancia (ilustrado con la letra B encuadrada sobe las líneas discontinuas desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el método 104B al productor 114A.1); 3 de una instancia de una clase diferente y un método asociado con esa instancia (ilustrado por la letra C encuadrada sobre las líneas discontinuas desde la clase 102B a la instancia 108B, desde la instancia 108B al productor 114A.1 y desde el método 104D al productor 114A.1); o 4) de una instancia diferente de la clase 102A (que la instancia 108A) y el mismo método (método 104A) de esa instancia (por ejemplo con una dependencia contingente - descrita más adelante en este documento) (ilustrada por la letra D encuadrada sobre las líneas discontinuas desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el método 104A al productor 114A.1); además, donde hay múltiples productores en el conjunto de productores 114, los productores 114 ellos mismos pueden ser parte de la misma instancia de la clase 102A, diferentes instancias de la clase 102A, una instancia de una clase diferente, y/o una mezcla de las anteriores.
La Figura 1C ilustra asociaciones de ejemplo entre el productor 110A y el productor hijo 112A.1 de acuerdo con una realización de la invención. La Figura 1C adicionalmente incluye una instancia 108C. Cada productor del conjunto de productores 112A puede ser: 1) de la misma instancia que el productor 110A (instancia 108A de la clase 102A) y un método diferente asociado con esa instancia (ilustrada por la letra E encuadrada sobre las líneas discontinuas desde la instancia 108A al productor 112A.1 y desde el método 104C al productor 112A.1 y desde el método 104C al productor 112A.1); 2) de una instancia diferente de la clase 102A y un método diferente asociado con esa instancia (ilustrado por la letra F encuadrada sobre las líneas discontinuas desde la clase 102A a la instancia 108C, desde la instancia 108C al productor 112A.1 y desde el método 104C al productor 112A.1); 3) de una instancia de una clase diferente y un método asociado con esa instancia (ilustrados por la letra G encuadrada sobre las líneas discontinuas desde la clase 102C a la instancia 108C, desde la instancia 108C al productor 112A.1 y desde el método 104F al productor 112A.1); ó 4) de una instancia diferente de la clase 102A (que la instancia 108) y el mismo método (método 104A) de esa instancia (por ejemplo, con una dependencia contingente descrita más adelante en este documento) (ilustrado por la letra H encuadrada sobre las líneas discontinuas desde la clase 102A a la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el método 104A al productor 112A.1). De este modo, cada uno del conjunto de productores 112A puede ser de la misma instancia que el productor 110A, de diferente instancia de la clase 102A, o de una instancia de una clase diferente; además, donde hay múltiples productores en el conjunto de productores 112A, los propios productores 112A pueden ser parte de la misma instancia de la clase 102A, diferentes instancias de la clase 102A, la misma instancia de una clase diferente, diferentes instancias de una clase diferente, y/o una mezcla de las anteriores.
La Figura 1D ilustra algunas combinaciones de ejemplo adicionales de las asociaciones de productores padre 14 y de productores hijo 112 para el productor 110A de acuerdo con una realización de la invención. La Figura 1D adicionalmente incluye la instancia 108B y la instancia 108C. Las combinaciones de la Figura 1D se muestran en la Tabla 1 siguiente:
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
TABLA 1
1
2
3
\vskip1.000000\baselineskip
La Figura 1E ilustra que instancias diferentes de la misma clase pueden tener productores en base a los mismos y/o diferentes métodos de acuerdo con una realización de la invención. La Figura 1E muestra: 1) la definición de clase 102A incluyendo los métodos 104A-C y las declaraciones de dependencias del productor 106A-C para cada uno de esos métodos, respectivamente; 2) la instancia 108A y la instancia 108B que son de la clase 102A, 3) un productor 110A es el método 104A de la instancia 108A de la clase 102A; 4) un productor 110B es el método 104B de la instancia 108A de la clase 102A; 5) un productor 110C es el método 104A de la instancia 108B de la clase 102A; y 6) un productor 110D es el método 104C de la instancia 108B de la clase 102A. Además, la Figura 1D muestra que: 1) la declaración de dependencias del productor 106A para el método 104A identifica en la rutina de ejecución productores hijos tanto del productor 110A como del productor 110C; 2) la declaración de dependencias del productor 106B para el método 104B identifica en la rutina de ejecución el productor hijo del productor 110B, y 3) la declaración de dependencias del productor 106C para el método 104C identifica en la rutina de ejecución el productor hijo del productor 110D.
\vskip1.000000\baselineskip
Rutinas de Ejecución de Ejemplo
La Figura 2 es un diagrama de bloques que ilustra la reutilización de una rutina de ejecución con el soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención. En la Figura 2, están corriendo múltiples programas de aplicación orientados a objetos (códigos de aplicaciones orientadas a objetos con declaraciones de dependencias del productor 210A-I) por la misma rutina de ejecución con el soporte de programación orientado a gráficos de productores 220.
La Figura 3A es un diagrama de bloques que ilustra una rutina de ejecución con un soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención. En la Figura 3A, una rutina de ejecución con el soporte de programación orientado a gráficos de productores 335 incluye un módulo de generación automatizada de gráficos de productores 340 y un módulo de ejecución de gráficos de productores 345. Además la rutina de ejecución 335 es para ejecutar el código fuente orientado a objetos, y de este modo incluye módulos adicionales no mostrados.
Además, la Figura 3A muestra las declaraciones de dependencias del productor para métodos en un código fuente orientado a objetos 320, un conjunto actual de uno o más productores cuyas salidas son de interés 325 (también denominadas en este punto como los productores seleccionados actualmente de interés), y las salidas de los productores fuente 330 (descritos más adelante en este documento). El módulo de generación automatizada de gráficos de productores 340 recibe las declaraciones de dependencias del productor 320 y el conjunto actual de productores de interés 325.
El módulo de generación automatizada de gráficos de productores 340 intenta descubrir, en base a las declaraciones de dependencias del productor, productores hijo con salidas que contribuyen directamente e indirectamente a la entrada de los productores seleccionados actualmente de interés (y algunas realizaciones de la invención que soportan dependencias declaradas hacia arriba, productores padre), y construye un conjunto de uno o más gráficos actuales de productores que representan la dependencia de esos productores sobre cada uno de los otros desde los productores seleccionados actualmente de interés, a través de cualquiera de los productores descubiertos que son productores no fuente, a aquellos de los productores descubiertos que son productores fuente. Los gráficos de productores actuales se almacenan en la estructura de gráficos de productores 380. Aunque realizaciones de la invención pueden almacenar y manipular los gráficos de productores como una colección de gráficos, otras realizaciones de la invención almacenan y manipulan los gráficos de productores como una colección de productores que están enlazados entre sí para formar gráficos (en oposición a la colección de gráficos) para facilitar la fusión y división de gráficos de productores. A modo de ejemplo y no de limitación, se describen en este documento realizaciones de la invención que almacenan y manipulan los gráficos de productores como una colección de productores.
El módulo de ejecución de gráficos de productores 345 recibe los gráficos de productores actuales desde el módulo de generación automatizada de gráficos de productores 340 y las salidas de los productores fuente 330, y ejecuta los productores de los gráficos de productores actuales para determinar la salida actual de los productores de interés seleccionados actualmente. El módulo de ejecución de gráficos de productores 345 almacena temporalmente las salidas actuales de los productores en la estructura de gráficos de productores 380 como se ilustra por el almacenamiento temporal de la salida del productor 384.
El almacenamiento temporal de las salidas del productor de los gráficos de productores durante la ejecución permite la sincronización. Por ejemplo, el momento apropiado para ejecutar un productor padre que es dependiente de múltiples productores hijos es después de que se han ejecutado todos los múltiples productores hijo; en otras palabras, sería poco económico (y, en algunos casos no posible) ejecutar el productor padre cada vez que uno de sus productores hijo completó la ejecución. El almacenamiento temporal de las salidas del productor permite que la ejecución del productor padre no sólo se posponga hasta que todos los productores hijo se hayan ejecutado sino que también permite una determinación del momento apropiado para la ejecución del productor padre - cuando todos los productores hijo se han ejecutado y sus salidas se han almacenado temporalmente. De este modo, la rutina de ejecución realiza esta decisión de sincronización para el programador comprobando el estado de ejecución de los productores hijos; en otras palabras, tal sincronización se automatiza (el programador no necesita incluir un código fuente separado que determine el instante apropiado para identificar una instancia y ejecutar un método determinado asociado con esa instancia sobre esa instancia). A modo de otro ejemplo, donde varios productores padre son dependientes del mismo productor hijo así como sobre otros productores hijos diferentes, el instante apropiado para ejecutar cada uno de los varios productores padre es típicamente diferente; la rutina de ejecución determina automáticamente el instante apropiado para ejecutar cada una de las varios productores padre dependiendo de la disponibilidad de salidas de su conjunto de productores hijos.
Como se describirá con mayor detalle más adelante en este documento, como puede que no se puedan descubrir actualmente algunas partes del gráfico de productores debido a las dependencias dinámicas del productor, el módulo de generación automatizada de gráficos de productores 340 "intenta" descubrir y construir todo el gráfico de productores, pero no puede inicialmente completar todo el gráfico de productores hasta que se ejecuten algunos productores. Como tal, el módulo de ejecución de gráficos de productores 345 puede invocar el módulo de generación automatizada de gráficos de productores 340 con las salidas del productor necesarias durante la ejecución del gráfico de productores actual para completar cualquiera de los restos no resueltos del gráfico de productores actual (esto se ilustra en la Figura 3A por una línea discontinua con flecha desde el módulo de ejecución del gráfico de productores 345 hasta el módulo de generación automatizada de gráficos de productores 340; se usa una línea discontinua con flecha porque tal soporte es opcional).
La Figura 4A es un diagrama de bloques que ilustra el descubrimiento y construcción de un gráfico de productores de ejemplo de acuerdo con una realización de la invención. La Figura 4A muestra que el conjunto actual de productores de interés consiste del productor 1. En base al productor 1 y su declaración de dependencias del productor, se descubren el productor 2 y el productor 3. En otras palabras la declaración de dependencias para el productor 1 identifica que la entrada al productor 1 requiere la ejecución del productor 2 y el productor 3. Como tal, el productor 1 es un productor dependiente (un productor que tiene una o más dependencias del productor). La Figura 4A también muestra que aunque el productor 3 es un productor independiente (un productor que no tiene ninguna dependencia del productor, y de este modo es un productor fuente), el productor 2 no lo es. Como resultado, en base a la declaración de dependencias del productor 2, se descubren el productor 4 y el productor 5. En la Figura 2A, el productor 4 y el productor 5 son productores independientes (y de este modo, productores fuente).
La Figura 4B es un diagrama de bloques que ilustra la ejecución inicial del gráfico de productores de la Figura 4A de acuerdo con una realización de la invención. En la Figura 4B, las líneas curvas con flecha ilustran la ejecución de uno de los productores para generar una salida que se proporciona como entrada a otro productor. Como se muestra en la figura 3A, la salida de los productores fuente 330 se proporciona al módulo de ejecución de gráficos de productores 345; en contraste, las salidas de los productores dependientes 1-2 se determinan por la ejecución de esos productores como se muestra en la Figura 4B. De este modo, en la Figura 4B ocurre lo siguiente: 1) se proporcionan la salida del productor fuente 4 y el productor fuente 5 al productor dependiente 2; 2) se ejecuta el productor dependiente 2; 3) se proporcionan al productor 1 las salidas del productor dependiente 2 y el productor fuente 3; y 4) se ejecuta el productor 1 y su salida se proporciona como salida actual de interés. Merece la pena observar que el gráfico de productores de la Figura 4B son datos controlados en el sentido de que los datos fluyen desde un productor a otro productor hacia arriba en el gráfico.
De este modo, pueden generarse las declaraciones de dependencias del productor 320 ligadas a los gráficos de productores posibles; mientras el conjunto seleccionado actualmente de productores de interés 325 identifica el nodo de comienzo del gráfico de productores actual a generar. A partir de estos dos, el módulo de generación automatizada de gráficos de productores 340 descubre y construye el gráfico de productores. El descubrimiento y la construcción están automatizados ya que en el módulo de generación automatizada de gráficos de productores 340 no se proporciona el gráfico de productores (por ejemplo no necesita estar identificado manualmente por un programador) o incluso una lista de los productores que estarán en el gráfico de productores. En lugar de esto, el módulo de generación automatizada de gráficos de productores 340 analiza las declaraciones de dependencias del productor del conjunto actual de productores seleccionados de interés para descubrir su productores hijos (y en algunas realizaciones de la invención que soportan dependencias declaradas hacia arriba, productores padre), a continuación analiza las declaraciones de dependencia del productor de los productores descubiertos, y de este modo baja a los productores fuente (en algunas realizaciones de la invención descritas más adelante en este documento, esto puede hacerse con la asistencia del módulo de ejecución de gráficos de productores 345). En el caso en el que el gráfico de productores es un árbol, un productor de interés seleccionado actualmente típicamente será el nodo raíz, y las declaraciones de dependencias del productor se analizarán hasta que se descubren los nodos hoja (productores fuente).
\vskip1.000000\baselineskip
Productores Anulados y Ejecución Incremental
La Figura 3B es un diagrama de bloques que ilustra una rutina de ejecución con un soporte de programación orientado a gráficos de productores que también soporta la ejecución incremental y la anulación de salidas de los productores de acuerdo con una realización de la invención. Debería entenderse que la ejecución incremental y la anulación de salidas del productor son cada una características opcionales independientes, y de este modo realizaciones diferentes de la invención pueden implementar una o ambas.
En la Figura 3B, una rutina de ejecución con un soporte de programación orientado a gráficos de productores 360 incluye un módulo de generación automatizada de gráficos de productores 365, un módulo de ejecución de gráficos de productores 370, y un módulo de anulación de la salida del productor 390. La rutina de ejecución 360 es para ejecutar el código fuente orientado a objetos, y de este modo incluye módulos adicionales no mostrados.
Además, la Figura 3B muestra, las declaraciones de dependencias del productor para métodos en el código fuente orientado a objetos 320, el conjunto actual de uno o más productores cuyas salidas son de interés 325 (también denominados en este documento como productores seleccionados actualmente de interés), y la salida de los productores fuente 350. La salida de los productores fuente 350 incluye las salidas del conjunto de productores independientes en el código fuente 352 (por ejemplo, constantes, valores por defecto, etc.) y las salidas del productor anuladas actualmente 354 (las salidas de los productores independientes y/o los productores dependientes cuyas salidas están actualmente anuladas).
En algunas realizaciones de la invención, las salidas de los productores pueden anularse explícitamente con un valor proporcionado actualmente (es decir, en lugar de ejecutar un productor para determinar su valor de salida en base a sus entradas actuales, el valor de salida para el productor se proporciona explícitamente). Además de cualquiera de los productores independientes de un gráfico de productores, los productores fuente de un gráfico de productores incluyen cualesquiera productores anulados actualmente.
El módulo de anulación de la salida del productor 390 recibe las salidas del productor anuladas 354 (que identifican qué productores se están anulando y con qué valores de salida se están anulando). En una realización de la invención, los productores pueden clasificarse como productores de propiedad y productores de métodos. Los productores de propiedad son los basados en los métodos de propiedad (por ejemplo, obtener y fijar). Los productores de métodos son los basados en métodos no de propiedad. El módulo de anulación de la salida del productor 390 incluye un módulo de anulación de la salida del productor de propiedad 392 para los productores de propiedad anulados y un módulo de anulación de la salida del productor de métodos 394 para productores del método anulados. El módulo de anulación de la salida del productor de propiedad 392 causa que el valor anulado se almacene en el almacenamiento temporal de la salida del productor 384 y en los datos de la instancia, mientras que el módulo de anulación de la salida del productor de métodos 394 provoca que el valor anulado se almacene en el almacenamiento temporal de la salida del productor 384. Dependiendo de la realización de la invención, esta provocación puede ser directa o indirecta. La Figura 3B ilustra una provocación indirecta mediante el uso de un registro de anulación 396 que recoge las salidas del módulo de anulación de las salidas del productor 390 y que se consume por el módulo de ejecución de gráficos de productores 370. Para propósitos de optimización, el registro de anulación 396 permite retardar las anulaciones para recoger múltiples anulaciones para su procesamiento por lotes.
Similar al módulo de generación automatizada de gráficos de productores 340, el módulo de generación automatizada de gráficos de productores 365: 1) recibe las declaraciones de dependencias del productor 320 y el conjunto actual de productores de interés 325; y 2) intenta descubrir, en base a las declaraciones de dependencias del productor, productores hijo con salidas que contribuyan directamente o indirectamente a la entrada de los productores seleccionados actualmente de interés (y en algunas realizaciones de la invención que soportan dependencias declaradas hacia arriba, productores padre), y construye un conjunto de uno o más gráficos de productores actuales que representan la dependencia de la entrada de estos productores sobre cada uno de los otros productores seleccionados actualmente de interés, mediante cualesquiera productores descubiertos no fuente, a los productores descubiertos que son productores fuente (productores independientes y productores anulados actualmente). Los gráficos de productores se almacenan en la estructura de gráficos de productores 380.
Similar al módulo de ejecución de gráficos de productores 345, el módulo de ejecución de gráficos de productores 370 recibe el gráfico de productores actual desde el módulo de gráficos automatizado 365 y las salidas de los productores fuente 350, y ejecuta los productores del gráfico de productores actual para determinar la salida actual de los productores seleccionados actualmente de interés. El módulo de ejecución de gráficos de productores 370 almacena temporalmente las salidas actuales de los productores en la estructura de gráficos de productores 380 como se ilustra por el almacenamiento temporal de salida del productor 384.
Como se ha descrito anteriormente, el almacenamiento temporal de las salidas del productor durante la ejecución permite la sincronización (por ejemplo, no necesita escribirse el código fuente separado para determinar cuándo el productor 2 de la Figura 4B debería ejecutarse, pero en cambio la rutina de ejecución hace esta decisión de sincronización para el programador comprobando la disponibilidad de las salidas necesarias en el almacenamiento temporal de salidas del productor 384; en otras palabras, tal sincronización se automatiza). Además, este almacenamiento temporal de la salida del productor 384 se usa para la ejecución incremental. Más específicamente, después de que un gráfico de productores se ha generado y ejecutado inicialmente, la anulación de un productor en un gráfico de productores actual requiere algún nivel de reejecución. Aunque algunas realizaciones de la invención simplemente reejecutan todo el gráfico, las realizaciones alternativas de la invención soportan la ejecución incremental (reejecutando sólo las partes del gráfico de productores que están afectadas por la anulación). Algunas realizaciones de ejemplo que soportan la ejecución incremental usan la marcación de la ejecución incremental 382 en la estructura de gráficos de productores 380 para ayudar a determinar qué productores requieren reejecución. De este modo, el mantenimiento de los gráficos de productores se refiere a modificar los enlaces de los gráficos de productores según se necesite a través de ejecuciones múltiples para mantenerlos actuales (al momento), mientras que la ejecución incremental se refiere tanto a mantener el gráfico de productores como a usar el gráfico de productores actual (al momento), para reejecutar sólo las partes de los gráficos de productores que están afectadas por una anulación.
Similar a la Figura 3A, hay una línea discontinua con flecha desde el módulo de ejecución del gráfico de productores 370 al módulo de ejecución automatizada de gráficos de productores 365 para representar un soporte opcional para dependencias dinámicas. Debería observarse que las dependencias dinámicas pueden cambiar durante la reejecución de un gráfico de productores.
La Figura 4C es un diagrama de bloques que ilustra la ejecución incremental del gráfico de productores de la Figura 4B de acuerdo con una realización de la invención. En la Figura 4C, la salida del productor 5 se ha modificado explícitamente, pero las salidas del productor 3 y del productor 4 no se han modificado. En base al seguimiento de las dependencias de la salida con la entrada en el gráfico de productores y que sólo se ha modificado explícitamente la salida del productor 5, se determina que sólo el productor 2 y el productor 1 están afectados por esta modificación. Como resultado, la determinación de una salida actualizada del productor 1 requiere sólo la reejecución del productor 2 y el productor 1 con la nueva salida del productor 5 y las salidas anteriores del productor 4 y del productor 3. Esta reejecución parcial del gráfico de productores se ilustra en la Figura 4C por las líneas curvas con flecha desde el productor 5 al productor 2 y desde el productor 2 al productor 1, pero no desde el productor 4 al productor 2 o desde el productor 3 al productor 1. La falta de las líneas curvadas con flechas desde el productor 4 al productor 2 y desde el productor 3 al productor 1 no son para indicar que las salidas del productor 3 y del productor 4 no son necesarias, si no más bien que el productor 3 y el productor 4 no necesitan reejecutarse si sus salidas anteriores están disponibles, (por ejemplo, almacenadas temporalmente desde la anterior ejecución del gráfico de productores).
El ejemplo relativamente simple de la Figura 4C ilustra que puede haber un ahorro en los recursos del procesamiento como resultado de la ejecución incremental. Tales ahorros dependen de varios factores (por ejemplo, el número de productores que no necesitan reejecutarse, la cantidad de procesamiento de esos productores que se habría requerido, etc.). Aunque se ilustra una realización de la invención que realiza ejecución incremental, pueden implementarse realizaciones alternativas de forma diferente (por ejemplo, una realización alternativa puede reejecutar todos los productores en respuesta a una modificación).
La Figura 4D es un diagrama de bloques que ilustra la ejecución incremental del gráfico de productores de la Figura 4B después de que el productor dependiente 2 se ha anulado de acuerdo con una realización de la invención. En la Figura 4, la salida del productor 2 se ha modificado explícitamente, pero la salida del productor 3 no se ha modificado. En base al gráfico de productores y a que sólo se ha modificado explícitamente la salida del productor 2, se determina que sólo está afectado el productor 1 por esta modificación. Como resultado, la determinación de una salida actualizada del productor 1 requiere sólo la reejecución del productor 1 con la salida anulada del productor 2 y la salida anterior del productor 3. Esta reejecución parcial del gráfico de productores se ilustra en la Figura 4D por la línea curva con flecha desde el productor 2 al productor 1, pero no desde el productor 4 y el productor 5 al productor 2 ó desde el productor 3 al productor 1.
La Figura 4E es un diagrama de bloques que ilustra la ejecución incremental del gráfico de productores 4B después de que el productor dependiente 2 se ha anulado y el productor fuente independiente 3 se ha modificado de acuerdo con una realización de la invención. En base al gráfico de productores y a que sólo se han modificado las salidas del productor 2 y del productor 3, se determina que sólo el productor 1 está afectado por esta modificación. Como resultado, la determinación de una salida actualizada del productor 1 sólo requiere la reejecución del productor 1 con la salida anulada del productor 2 y la salida modificada del productor 3. Esta reejecución parcial del gráfico de productores se ilustra en la Figura 4E por la línea curvada con flecha desde los productores 2 y 3 al productor 1, pero no desde los productores 4 y 5 al productor 2.
Aunque una realización de la invención que soporta la anulación de las salidas del productor también soporta la restauración de las salidas del productor, realizaciones alternativas de la realización no lo soportan. Aunque una realización de la invención que soporta la restauración de los productores deja un productor anulado como anulado hasta que se restaura específicamente, pueden implementarse realizaciones alternativas de la invención de forma diferente (por ejemplo, restaurando un productor anulado cuando uno de sus progenitores está anulado).
Construcción y Ejecución de Gráficos de productores
Pueden implementarse diferentes realizaciones de la invención para descubrir y construir un gráfico de productores para diferentes extensiones (por ejemplo, construir el gráfico de productores hasta que todos los caminos desde el nodo raíz terminan en productores independientes (en cuyo caso, los nodos finales de un gráfico de productores son productores independientes, con la posibilidad de que cualesquiera de los productores anulados sean nodos intermedios); construir el gráfico de productores hasta que cada camino desde el nodo raíz termine en un productor anulado o un productor independiente, cualquiera que se alcance primero (en cuyo caso, cada uno de los nodos de un gráfico de productores es o un productor independiente o un productor anulado).
"Los productores de comienzo de la ejecución" se refiere a los productores de un gráfico de productores desde los cuales comienza una ejecución determinada del gráfico de productores. Para una ejecución inicial de un gráfico de productores, las diferentes realizaciones pueden comenzar desde productores diferentes (por ejemplo, en realizaciones de la invención que construyen el gráfico de productores hasta que todos los caminos desde el nodo raíz terminan en productores independientes, la ejecución puede comenzar desde los nodos finales (que serían los productores independientes), desde los productores fuente (que incluirían los nodos de productores independientes y cualesquiera nodos de productores anulados), desde un subconjunto de productores fuente consistente de la combinación de cualesquiera productores independientes con al menos un camino entre ellos y el productor raíz que no incluye un productor anulado y cualesquiera productores anulados, o desde un subconjunto de productores fuente que consiste en la combinación de cualesquiera productores anulados sin ningún descendiente que esté anulado y cualquiera productores independientes con al menos un camino entre ellos y el productor raíz que no incluye un productor anulado; en realizaciones de la invención donde el gráfico de productores bajo los productores anulados no está construido y hasta que tal productor está restaurado, puede comenzar la ejecución desde los nodos finales (que pueden ser productores independientes y/o productores anulados), etc.
Para posteriores ejecuciones de un gráfico de productores, las diferentes realizaciones pueden comenzar desde diferentes productores (por ejemplo, desde los productores independientes del gráfico de productores (por ejemplo, en realizaciones de la invención que no soportan ejecución incremental); desde los productores fuente del gráfico de productores (por ejemplo, en realizaciones de la invención que no soportan ejecución incremental); desde un subconjunto de productores fuente que consiste de los productores fuente que se han anulado y/o añadido desde la última ejecución (por ejemplo, en realizaciones de la invención que soportan ejecución incremental); de los productores fuente que se han anulado y/o añadido desde la última ejecución, desde la combinación de cualesquiera de tales productores anulados sin cualesquiera descendientes que estén anulados y cualesquiera de tales productores añadidos con al menos un camino entre ellos y el productor raíz que no incluye un productor anulado (por ejemplo, en realizaciones de la invención que soportan ejecución incremental), etc.). A modo de ejemplo y no de limitación, las realizaciones de la invención que realizan lo siguiente se describirán más adelante: 1) no construyen el gráfico de productores bajo los productores anulados si y hasta que tales productores estén restaurados; 2) para una ejecución inicial del gráfico de productores, la ejecución comienza desde los nodos finales (que pueden ser productores independientes y/o productores anulados); 3) implementa ejecución incremental; y 4) para las ejecuciones posteriores de un gráfico de productores, la ejecución comienza desde un subconjunto de productores fuente que consiste de los productores fuente que se han anulado y/o añadido desde la última ejecución.
Con respecto al concepto anterior de los productores de comienzo de ejecución, el flujo del procesamiento del gráfico de productores también difiere entre realizaciones diferentes. Por ejemplo, en una realización de la invención, los ancestros de los productores de comienzo de la ejecución se determinan y sitúan en una colección, se ejecutan los productores de comienzo de la ejecución, y la colección se rastrea de forma iterativa en busca de productores para los cuales se han ejecutado todas las dependencias - eventualmente se alcanzan los nodos raíz. Como uno ejemplo más, en una realización de la invención, se ejecutan los productores de comienzo de la ejecución, se identifican los padres de los productores de comienzo de la ejecución, se ejecutan esos padres, y se identifican sus padres y se ejecutan, y así sucesivamente. La última realización de la invención se usa a continuación a modo de ejemplo y no de limitación.
Tipos de Dependencias de Ejemplo Dependencias Dinámicas del Productor de Ejemplo
Una dependencia dinámica del productor es una dependencia del productor que puede cambiar durante la rutina de ejecución. Debería entenderse que los criterios para resolver las dependencias del productor se presentan en el código fuente, y de este modo los productores para los cuales pueden resolverse las dependencias del productor están limitados. Con referencia a la Figura 3A, la línea discontinua con flecha desde el módulo de ejecución de gráficos de productores 345 al módulo de generación automatizada de gráficos de productores 340 representa el soporte para la ejecución de uno o más productores en el gráfico de productores actual que son necesarios para descubrir y construir todo el gráfico de productores actual. En otras palabras, una realización de la invención que soporta dependencias dinámicas del productor puede iterar entre el módulo de generación automatizada del gráfico de productores 340 y el módulo de ejecución del gráfico de productores 345 hasta que se descubre todo el gráfico de productores, se construye, se resuelve y se ejecuta (esto es, se itera entre: 1) invocar el módulo de generación automatizada del gráfico de productores para descubrir y construir las partes del gráfico de productores actual que puedan resolverse en ese momento; y 2) invocar el módulo de ejecución del gráfico de productores para ejecutar los productores del gráfico de productores actual). En este sentido, descubrir se refiere al acceso de las declaraciones de dependencia de los productores y la determinación de los productores que identifican; construir se refiere a representar los productores y añadirlos al gráfico de productores; y resolver se refiere a determinar las dependencias dinámicas del productor actualmente sin resolver.
La Figura 5A es un diagrama de bloques que ilustra el descubrimiento y la construcción de un gráfico de productores de ejemplo incluyendo una dependencia sin resolver de acuerdo con una realización de la invención. La Figura 5A muestra el conjunto actual de productores de interés consistente del productor 1. En base al productor 1 y su declaración de dependencias del productor, se descubren el productor 2 y el productor 3. En otras palabras, la declaración de dependencias para el productor 1 identifica que el productor 1 requiere como entradas la salida del productor 2 y el productor 3. La Figura 5A también muestra que mientras que el productor 3 es un productor independiente (y de este modo, un productor fuente), el productor 2 no lo es. Como resultado, en base a la declaración de dependencias del productor 2, se descubren el productor 4 y el productor 5. Además, la Figura 5A también muestra que mientras que el productor 4 es un productor independiente ((y de este modo, un productor fuente), el productor 5 no lo es. Como resultado, en base a la declaración de dependencias del productor 5, se descubren el productor 6 y la dependencia actualmente no resuelta. La Figura 5A también muestra que la dependencia no resuelta actualmente puede ser para el productor 7A y/o el productor 7B.
La Figura 5B es un diagrama de bloques que ilustra la ejecución inicial del gráfico de productores de la Figura 5A y la resolución de la dependencia sin resolver de acuerdo con una realización de la invención. La Figura 5B ilustra el gráfico de productores de la Figura 5A con las líneas curvas con flecha que muestran la ejecución de los productores y la provisión de sus salidas para los productores padres dependientes. Además, la Figura 5B muestra que la dependencia no resuelta del productor 5 se resuelve como una dependencia sobre el productor 7A, y que el productor 7A es un productor independiente.
La Figura 5C es un diagrama de bloques que ilustra la ejecución inicial del gráfico de productores de la Figura 5A y/o la reejecución del gráfico de productores de la Figura 5B de acuerdo con una realización de la invención. La Figura 5C ilustra el gráfico de productores de la Figura 5A con líneas curvas con flecha que muestran la ejecución de los productores y la provisión de sus salidas a los productores padre dependientes. Además, la Figura 5C muestra que la dependencia no resuelta del productor 5 se resuelve como una dependencia sobre el productor 7B y que el productor 7B es un productor dependiente. Como resultado, en base a la declaración de dependencias del productor 7B, se descubre el productor 8. El productor 8 es un productor independiente (y de esta forma, es un productor fuente). Asumiendo que la Figura 5C representa la ejecución inicial del gráfico de productores de la Figura 5A, se emplearían todas las líneas curvas con flechas en la Figura 5C. Sin embargo, asumiendo que la Figura 5C representa la reejecución del gráfico de productores de la Figura 5B, la reejecución da como resultado la dependencia dinámica que se resuelve de diferente forma (un conmutador desde el productor 5 que es dependiente sobre el productor 7A para el productor 7B). Además, si se realiza la reejecución sin la ejecución incremental, a continuación se emplearían todas las líneas curvas con flecha en la Figura 5C; sin embargo, si se usó la ejecución incremental, sólo se emplearían las líneas curvas no discontinuas (productor 8 al productor 7B, productor 7B al productor 5, productor 5 al productor 2, y productor 2 al productor 1). También debería entenderse que el cambio dinámico en la dependencia ilustrada en la Figura 5C es de ejemplo, y de este modo podría presentar cualquier número de situaciones diferentes (por ejemplo, el cambio dinámico puede que nunca se produzca; el productor 5 podría haber sido primero dependiente del productor 7B y a continuación cambiar al productor 7A; el productor 5 podría haber sido primero dependiente del productor 7B y no producirse nunca ningún cambio dinámico; el productor 5 podría encontrarse que es dependiente tanto del productor 7A como del productor 7B como se ilustra en la Figura 5D; etc.). Aunque diferentes realizaciones pueden resolver las dependencias dinámicas
del productor de diferentes maneras, se proporcionan más adelante en este documento algunos ejemplos.
De este modo, la reejecución automatizada de un gráfico de productores no está limitada al productor que se está modificando y su padre directo que se está reejecutando, más bien un cambio se riza automáticamente a través del gráfico de productores por la rutina de ejecución, afectando cualesquiera productores y dependencias apropiadas, ya que los gráficos de productores se mantienen (y se usa la ejecución incremental donde se soporta). Como tal, los cambios producen cualquier descubrimiento adicional necesario, construyendo, resolviendo, y ejecutando. De este modo, la reejecución del gráfico de productores se automatiza en el sentido de que un usuario/programador no necesita determinar qué productores del gráfico de productores están afectados y posiblemente corrija manualmente el gráfico.
Dependencias Estáticas del Productor
Una dependencia estática es la que no cambia durante la rutina de ejecución. De este modo, en una realización de la invención que soporta dependencias dinámicas contingentes y de suscripción (descritas más adelante en este documento), una dependencia no contingente y no de suscripción es una dependencia estática. El gráfico de productores de ejemplo de la Figura 4A ilustra un gráfico de productores de dependencias estáticas.
Formas de los Gráficos de Productores
Como un productor es al menos una instancia y un método asociado con esa instancia, un gráfico de productores es un gráfico que representa instancias y métodos asociados con esas instancias - y de este modo los gráficos de productores son al menos una instancia y un método central. En realizaciones de la invención en las cuales un productor es al menos una clase, una instancia, y un método, los gráficos de productores son al menos una clase, una instancia y un método central.
Debería entenderse que un gráfico de productores puede tomar una diversidad de formas diferentes (por ejemplo, una simple cadena de productores, un árbol, etc.). El gráfico de productores de ejemplo de la Figura 5B es un árbol con un nodo raíz del productor 1, desde el cual hay dos ramas - una para cada uno del productor 2 y el productor 3. Donde el productor 3 es un nodo hoja, el productor 2 tiene dos ramas que se extienden desde el mismo - una para cada uno del productor 4 y el productor 5. El productor 5 tiene dos ramas que se extienden desde el mismo - una para cada uno del productor 6 y el productor 7A. El gráfico de productores de ejemplo de la Figura 5B se dice que es multi-nivel, con el nivel 1, incluyendo el productor nodo raíz 1, con el nivel 2 incluyendo el productor 2 y el productor 3, con el nivel 3 incluyendo el productor 4 y el productor 5, con el nivel 4 incluyendo el productor 6 y el productor 7A (en la Figura 5C, el nivel 4 incluye el productor 7B, y el nivel 5 incluye el productor 8). Cuando se considera la rama desde el productor 1 con el productor 2, el primer productor de la rama es el productor 2 y los últimos productores de la rama son el productor 4, el productor 6; y el productor 7A en la Figura 5B.
Aunque la Figura 5B ilustra un gráfico de productores en el cual el conjunto actual de productores de interés incluye un productor único, las realizaciones de la invención que soportan más de un productor actual de interés descubrirían y construirían gráficos de productores para cada uno. Se debería entender que donde hay simultáneamente múltiples productores de interés, los gráficos de productores resultantes pueden ser independientes o pueden tener intersecciones. Donde los gráficos de productores tienen intersecciones, pueden implementarse las realizaciones de la invención para: 1) duplicar productores para mantener gráficos de productores separados; o 2) evitar tal duplicación y mantener los gráficos de productores con intersecciones. Debería entenderse que tales gráficos de productores con intersecciones pueden incluir un gráfico de productores que es un subconjunto de otro gráfico de productores. Por ejemplo, si el productor 5 se incluyó con el productor 1 en el conjunto actual de productores de interés, entonces habría un primer gráfico de productores con un nodo raíz del productor 5 y un segundo gráfico de productores con un nodo raíz del productor 1, donde el segundo gráfico de productores incluye el primer gráfico de productores. Si, por ejemplo, el productor 7B se incluyo con el productor 1 y el productor 5 en el conjunto actual de productores de interés, habría un tercer gráfico de productores, separado del primer y el segundo gráficos de productores, con un nodo raíz del productor 7B en la Figura 5B. Además, si la dependencia dinámica del productor 5 cambió desde el productor 7A al productor 7B (Figura 5C), entonces el cambio daría como resultado que el tercer gráfico de productores se convertiría en un subconjunto del segundo gráfico de productores restante, y el segundo gráfico de productores se convertiría en un subconjunto del primer gráfico de productores. Como se ha establecido anteriormente, aunque realizaciones de la invención pueden almacenar y manipular los gráficos de productores como una colección de gráficos, otras realizaciones de la invención almacenan y manipulan los gráficos de productores como una colección de productores que están enlazados entre sí para formar gráficos (en oposición a una colección de gráficos) para facilitar la unión y división de los gráficos de productores. A modo de ejemplo y no de limitación, se describen en este documento realizaciones de la invención que almacenan y manipulan gráficos de productores como una colección de productores.
Flujo de Ejecución de Ejemplo
La Figura 5 es un diagrama de flujo, de un flujo lógico de ejecución de una rutina de ejecución del cliente y su asociación con una rutina de ejecución con un soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención. En la Figura 6, la línea 600 de división discontinua separa el flujo lógico de ejecución de una rutina de ejecución del cliente 610 de la rutina de ejecución con el soporte de programación orientado a gráficos de productores 640.
El flujo lógico de ejecución de la rutina de ejecución del cliente 610 incluye los bloques 615, 620, 625 y 630, mientras que la rutina de ejecución con el soporte orientado a gráficos de productores incluye los bloques 645, 650, 660, y opcionalmente 655. Una línea continua con flecha representa una asociación directa causal del bloque 630 al bloque 660. En contraste, las líneas de puntos con flechas ilustran una asociación causal desde los bloques 615 y 625 en el flujo lógico de ejecución de la rutina de ejecución del cliente 610 a los bloques 645 y 650 en la rutina de ejecución con el soporte orientado a gráficos de productores 640, respectivamente; dependiendo de la realización de la invención, esta asociación causal puede ser directa o indirecta. Por ejemplo, la Figura 6 ilustra una provocación indirecta opcional mediante el uso del registro de comandos 665 en un óvalo discontinuo sobre la rutina de ejecución con el soporte orientado a gráficos de productores 640 el lado de la línea discontinua 600. El registro de comandos 665 recoge los comandos resultantes de los bloques 615 y 625 del flujo lógico de ejecución de la rutina de ejecución del cliente 610; y el registro de comandos 655 se consume, en respuesta al bloque 630, procesando el bloque 660. De este modo, el registro de comandos 665 permite el retardo de los comando para recoger múltiples comandos juntos y procesarlos por lotes para propósitos de optimización. De este modo, el registro de comandos 665 es similar al registro de anulaciones 396 de la Figura 3B, y realmente incluiría el registro de anulaciones 396 en algunas realizaciones de la invención.
En el bloque 615, el conjunto de uno o más productores de interés se determina como el conjunto actual de productores de interés y el control pasa al bloque 620. En respuesta a las asociaciones causales entre el bloque 615 y el bloque 645, el bloque 645 muestra que el conjunto actual de productores de interés están representados y que se realiza un intento de descubrir, construir y resolver los gráficos de productores para cada uno (si se soportan las dependencias dinámicas y se descubren una o más en el gráfico de productores), incluyendo representar cualesquiera instancias y productores de los mismos cuando sea necesario, en base a las declaraciones de dependencias del productor en la rutina de ejecución del cliente 610. Con referencia a las Figuras 3A y 3B, se invocan respectivamente el módulo de generación automatizada de gráficos de productores 340 y 365.
En el bloque 620, se determina si hay cualesquiera anulaciones de salidas de productor. Si es así, el control pasa al bloque 625; de lo contrario el control pasa el bloque 630.
En el bloque 625, se reciben una o más anulaciones de salidas de productor para un conjunto de uno o más productores y el control pasa al bloque 630. En respuesta a las asociaciones causales entre el bloque 625 y el bloque 650, el bloque 650 muestra que el conjunto actual de productores anulados están representados (si no están ya representados en el bloque 645), sus salidas se modifican, y se siguen. Un productor anulado puede haberse representado ya, porque se descubrió que ya era parte del gráfico de productores en el bloque 645. Sin embargo, un productor anulado puede no descubrirse ya en el bloque 645 debido a una dependencia dinámica sin resolver. Como tal, este productor anulado se representa y se anula con la expectación de que puede añadirse al gráfico de productores cuando se resuelvan las dependencias dinámicas. También, como se ha indicado anteriormente, el registro de anulaciones 396 de la figura 3B, si se implementa, existe entre el bloque 625 y el bloque 650 y es parte del registro de comandos 665. Además, el conjunto de productores anulados se sigue en algunas realizaciones de la invención que soportan la ejecución instrumental. Aunque en las realizaciones de la invención que soportan el registro de anulación 396/registro de comandos 665 el seguimiento es parte del registro, en realizaciones alternativas de la invención el seguimiento está realizado separadamente en el bloque 650 con un mecanismo diferente.
En el bloque 630, se invoca el módulo de ejecución del gráfico de productores y el control vuelve opcionalmente al bloque 615 y/o al bloque 625. En respuesta a las asociaciones causales entre el bloque 630 y el bloque 660, el bloque 660 muestra que los gráficos de productores actuales han progresado y cualesquiera productores que requieran ejecución se ejecutan en base al seguimiento. Se han tratado anteriormente diversas técnicas para ejecutar los productores del gráfico de productores y son aplicables en este punto. Con referencia a las figuras 3A y 3B, se invoca el módulo de ejecución del gráfico de productores 345 y 370, respectivamente. Además, en las realizaciones de la invención en las que se implementa el registro de comandos 665, las asociaciones causales incluyen consumir el registro de comandos 665 y realizar los bloques de procesamiento 645 y 650 antes del bloque 660. Además, en realizaciones de la invención que soportan la posibilidad de dependencias sin resolver, el control fluye desde el bloque 660 al bloque 655 cuando es necesario.
En el bloque 655, se realiza un intento de resolver las dependencias no resueltas y descubrir y construir el resto de los gráficos de productores, incluyendo representar cualesquiera instancias y productores de los mismos. Desde el bloque 655, el control fluye de vuelta al bloque 660.
Formas de Ejemplo de Declaraciones de Dependencia del Productor
Las Figuras 7A-7F ilustran algunas formas de ejemplo de declaraciones de dependencias del productor de acuerdo con realizaciones de la invención. Aunque las Figuras 7A-7F ilustran realizaciones que soportan argumentos, campos, y dependencias de secuenciación, debería entenderse que las diferentes realizaciones pueden soportar sólo una o dos de las tres formas de dependencias. En las realizaciones de la invención mostradas en las Figuras 7A-7F, se realiza una declaración de dependencias del productor del establecimiento de declaraciones de dependencias del productor, y opcionalmente el código explícito de declaraciones de dependencias del productor. Una dependencia del productor declarada no de atajo es aquella en la cual se usa un código explícito de declaración de dependencias del productor, mientras que una dependencia del productor declarada de atajo es aquella en la que no se usa ningún código explícito de declaración de dependencias del productor (en su lugar, el rutina de ejecución no usa un código de declaración de dependencias del productor y/o la implementa sobre la marcha en base a la información en el establecimiento de declaraciones de dependencias del productor.
Las diferentes realizaciones de la invención pueden usar diferentes sintaxis para declarar dependencias del productor. Por ejemplo, diferentes realizaciones de la invención pueden incluir diferentes sintaxis para su uso en los establecimientos de declaración de dependencias del productor que restringen fuertemente, restringen débilmente y/o no restringen el tipo de dependencias del productor que puede crearse. Una dependencia del productor fuertemente restringida es aquella para la cual se usa una sintaxis en el establecimiento de declaraciones de dependencias del productor que sustancialmente limita el tipo de dependencias del productor que pueden crearse. Una dependencia del productor débilmente restringida es aquella para la cual se usa una sintaxis en el establecimiento de declaraciones de dependencias del productor que es menos limitativa del tipo de dependencias del productor que pueden crearse; y una dependencia del productor sin restricciones es aquella para la cual se usa una sintaxis en el establecimiento de declaraciones de dependencias del productor que no limita el tipo de dependencias del productor que pueden creare.
A modo de ejemplo, y no de limitación, las realizaciones de la invención descritas más adelante incluyen lo siguiente: 1) una sintaxis para una dependencia del productor fuertemente restringida para argumentos (DependenciaArgumento = dependencia del argumento declarada hacia abajo fuertemente restringida [estática o dinámica, y si dinámica, contingente y/o de suscripción absorbente]); 2) una sintaxis para una dependencia del productor fuertemente restringida para campos (DependenciaCampo = dependencia del campo declarada hacia abajo fuertemente restringida [estática o dinámica, y si dinámica, contingente y/o de suscripción absorbente]), 3) una sintaxis para una dependencia del productor fuertemente restringida para las dependencias de secuenciación (DependenciaSecuenciación = dependencia de secuenciación declarada hacia abajo fuertemente restringida [estática o dinámica, y si dinámica, contingente y/o de suscripción adherente]), 4) una sintaxis para una dependencia del productor declarada débilmente restringida declarada hacia arriba para dependencias de argumentos, campos, o secuenciación (DependenciaHaciaArriba = dependencia débilmente restringida declarada hacia arriba de campo, argumento, o secuenciación [estática o dinámica, y si dinámica, contingente]), y 5) una sintaxis para una dependencia del productor débilmente restringida (DependenciaDébilmenteRestringida = una cualquiera de a) una dependencia de sólo secuenciación declarada hacia abajo [estática o dinámica, y si dinámica, contingente y/o de suscripción adherente]; o b) una dependencia declarada hacia arriba [argumento, campo o secuenciación] [estática o dinámica, y si dinámica, contingente]. Debería entenderse que aunque algunas realizaciones de la invención soportan una sintaxis para el establecimiento de declaraciones de dependencias del productor que distinguen dependencias de argumentos declaradas hacia abajo, dependencias de campos declaradas hacia abajo, dependencias declaradas hacia arriba (que pueden devolver dependencias de argumentos, campos o secuenciación declaradas hacia arriba), y dependencias débilmente restringidas (que pueden devolver dependencias de secuenciación declaradas hacia abajo, dependencias de argumento, campo o secuenciación declaradas hacia arriba), realizaciones alternativas de la invención pueden adoptar una sintaxis diferente (por ejemplo, tienen una sintaxis que tiene todas las dependencias que son dependencias no restringidas con productores de determinación de dependencias que pueden devolver cualesquiera dependencias soportadas (dependencias de argumento, campo, y secuenciación declaradas hacia abajo y hacia arriba); tienen una sintaxis que distingue todas las dependencias soportadas; tienen una sintaxis que distingue dependencias de argumento y campo declaradas hacia abajo y hacia arriba y que distingue una dependencia débilmente restringida que puede devolver sólo dependencias de secuenciación declaradas hacia arriba y hacia abajo; una sintaxis que distingue dependencias de argumento y de campo declaradas hacia abajo y que distinguen dependencias declaradas hacia arriba que pueden devolver sólo dependencias de secuenciación declaradas hacia arriba; una sintaxis que distingue dependencias de argumento, campo, y secuenciación declaradas hacia abajo (suscripciones adherentes y dependencias declaradas hacia arriba no se soportan); etc.).
Debería entenderse que la sintaxis del establecimiento de las declaraciones de dependencias del productor no necesariamente se equipara a las dependencias del productor (por ejemplo, el enlace) creadas en el gráfico de productores (por ejemplo, una DependenciaArgumento crea una dependencia de argumento; pero una DependenciaHaciaArriba puede crear una dependencia de argumento, campo, o secuenciación). Como tal, donde sea apropiado para el entendimiento, se usa un espacio entre un calificador (por ejemplo, argumento, campo, o secuenciación) y la palabra "dependencia" para referirnos a la dependencia creada por la rutina de ejecución, mientras que se usa una ausencia de espacio para referirnos a la sintaxis.
La Figura 7A ilustra un seudo código de una declaración de dependencias del productor para un método que usa dependencias declaradas de atajo de acuerdo con una realización de la invención; mientras que la Figura 7B es un diagrama de bloques de productores de ejemplo de acuerdo con una realización de la invención. La Figura 7A muestra: 1) un establecimiento de declaraciones de dependencias del productor 705 incluyendo DependenciasArgumento 1-N, DependenciasCampo 1-M, DependenciasSecuenciación 1-L, DependenciasHaciaArriba 1-P, y DependenciasDébilmenteRestringidas 1-Q; y 2) Un método alfa 710 que tiene argumentos 1-N desde el establecimiento de declaraciones de dependencias del productor 705. En una realización de la invención, los argumentos de un establecimiento de declaraciones de dependencias del productor están numeradas para proporcionar una ID de argumento para cada uno de los propósitos de seguimiento. La Figura 7B muestra un productor 720 que tiene dependencias hijo para los siguiente: 1) productor 725 para la ID de argumento 1; 2) productor 730 para la ID de argumento N; 3) productores 740-745 para DependenciasCampo 1-M; 4) productores 746-747 para DependenciasSecuenciación 1-L; y 5) productores 748-749 para DependenciasHaciaArriba 1-P (obsérvese que las DependenciasDébilmenteRestringidas 1..Q no se muestran, pero se describirán con mayor detalle con referencia a la Figura 7G). De este modo los argumentos del establecimiento de declaraciones de dependencias del productor 705 corresponden con los argumentos del método alfa 710, y las ID de los argumentos en el establecimiento de declaraciones de dependencias del productor 705 se siguen con respecto a los productores hijos que identifican.
La Figura 7C ilustra seudo código de una declaración de dependencias del productor para un método que usa una dependencia declarada no de atajo, e ilustra un diagrama de bloques de productores de ejemplo de acuerdo con una realización de una realización de la invención. La Figura 7C muestra el establecimiento de declaraciones de dependencias del productor 705 y el método alfa 710 de la Figura 7A, así como los productores 720 y 725 de la Figura 7B. Además, la Figura 7C incluye el código de declaración de dependencias del productor 715 asociado con la DependenciaArgumento 1. Durante el tiempo de ejecución, la rutina de ejecución accede y ejecuta el código de declaración de dependencias del productor 715 en respuesta con la DependenciaArgumento 1 del establecimiento de declaraciones de dependencias del productor 705. La ejecución del código de declaración de dependencias del productor 715 devuelve al productor 725 como dependencias del productor para la DependenciaArgumento 1. De este modo la Figura 7C ilustra realizaciones de la invención en las cuales el código de declaración de dependencias del productor 715 puede ser parte de un método (distinto que el método alfa 710), pero no es parte de un productor.
La Figura 7D ilustra un seudo código de un declaración de dependencias del productor para un método que usa una dependencia declarada no de atajo de acuerdo con una realización de la invención; mientras que la Figura 7E es un diagrama de bloques de productores de ejemplo de acuerdo con una realización de la invención. La Figura 7D muestra el establecimiento de declaraciones de dependencias del productor 705 y el método alfa 710 de la Figura 7A, mientras que la Figura 7E muestra los productores 720 y 725 de la Figura 7B. Además la Figura 7D incluye: 1) un establecimiento de declaraciones de dependencias del productor 750; y 2) un método beta 755 que incluye el código de declaración de dependencias del productor 760. La Figura 7D también muestra que la dependencia del argumento 1 del establecimiento de declaraciones de dependencias del productor 705 identifica un productor (mostrado en la Figura 7E como el productor 765) en base al método beta 755 que devolverá la dependencia para la dependencia del argumento 1. Durante el tiempo de ejecución, la rutina de ejecución, en respuesta a la dependencia del argumento 1 del establecimiento de declaraciones de dependencias del productor 705, ejecuta el productor 765 para devolver la identificación que la dependencia del productor para la dependencia del argumento 1 es el productor 725. Como tal, el productor 765 se denomina como productor de determinación de dependencias (su salida es la dependencia del productor - y de este modo. se devuelve usando una clase/instancia que se monitoriza en búsqueda de un tratamiento especial (manipulación de los gráficos de productores por la rutina de ejecución con el soporte de programación orientado a gráficos de productores), mientras que el productor 725 se denomina como un productor normalizado (su salida, si existe, no se procesa directamente por la rutina de ejecución para manipular un gráfico de productores; pero su salida, si existe, puede consumirse por un productor padre (sea un productor de determinación de dependencia u otro productor normalizado) y/o proporcionarse como la salida del gráfico de productores (si el productor normalizado es un productor de interés, y de este modo un nodo raíz).
De este modo, las Figuras 7D-E ilustran realizaciones de la invención en las que el código de declaración de dependencias del productor 715 es parte de otro productor - denominado como un productor de determinación de dependencias. Aunque en las Figuras 7D-7E el código fuente orientado a objetos incluye el código explícito de la declaración de dependencias del productor en métodos de los cuales los productores de determinación de dependencias se representa en el tiempo de ejecución por la rutina de ejecución para dependencias declaradas no de atajo, realizaciones alternativas de la invención adicionalmente o en su lugar implementan la rutina de ejecución para incluir el código genérico de declaración de dependencias del productor que los invoca como uno o más productores de determinación de dependencias genéricos sobre la marcha para dependencias declaradas de atajo. También, aunque las Figuras 7C-E se ilustran con referencia a las DependenciasArgumento, las técnicas ilustradas son aplicables a otros tipos de dependencias declaradas hacia abajo. Además, las Figuras 7F- G ilustran el uso de un productor de determinación de dependencias para una DependenciaHaciaArriba y una DependenciaDébilmenteRestringida.
La Figura 7F es un diagrama de bloques de una dependencia de ejemplo a través del uso de una DependenciaHaciaArriba con un productor de determinación de dependencias de acuerdo con una realización de la invención. La Figura 7F muestra el productor 720 que tiene una dependencia del productor de secuenciación para el productor de determinación de dependencias 772. El productor de determinación de dependencias puede devolver un argumento declarado hacia arriba de no suscripción, un campo o una dependencia de secuenciación del productor padre 748 sobre el productor 720. Además, tal productor de determinación de dependencias puede implementar una dependencia dinámica (por ejemplo, una dependencia contingente que selecciona entre lo anterior que depende de valores de datos, incluyendo entre ID de argumentos diferentes, como se describe más adelante en este documento). Aunque algunas realizaciones de lo invención soportan todas estas posibilidades, realizaciones alternativas de la invención sólo soportan un subconjunto (por ejemplo, sólo dependencias de secuenciación declaradas hacia arriba de no suscripción).
La Figura 7G es un diagrama de bloques de dependencias de ejemplo posibles a través del uso de una DependenciaDébilmenteRestringida con un productor de determinación de dependencias de acuerdo con una realización de la invención. La Figura 7G muestra al productor 720 que tiene una dependencia del productor de secuenciación para el productor de determinación de dependencias 775. En algunas realizaciones de la invención, el productor de determinación de dependencias puede devolver cualquiera de los siguiente: 1) una dependencia de secuenciación declarada hacia abajo no de suscripción sobre un productor hijo 780; 2) una dependencia de argumento, campo o secuenciación declarada hacia arriba, no de suscripción del productor padre 785 sobre el productor 720; y 3) una suscripción adherente (descrita más adelante en este documento). Además, tal productor de determinación de dependencias puede implementar una dependencia dinámica (por ejemplo, una dependencia contingente que selecciona entre los anteriores dependiendo de los valores de los datos, incluyendo las diferentes ID de argumentos, como se describe más adelante en este documento). Aunque algunas realizaciones de la invención soportan todas estas posibilidades, realizaciones alternativas de la invención sólo soportan un subconjunto (por ejemplo dependencias de secuenciación declaradas hacia arriba no de suscripción).
Como se ha indicado anteriormente, las dependencias de secuenciación pueden usarse para una diversidad de propósitos, incluyendo asegurar el orden de ejecución entre productores que modifican datos en un modo que la rutina de ejecución no conoce y los productores que consumen estos datos (un productor hijo puede escribir sus salidas en un modo que requiere el método del productor padre para incluir código para acceder a esa salida (por ejemplo un método que impacta el entorno afectando una salida que no es la salida del productor regular y, como tal, que no es detecta por la rutina de ejecución - tal como un método que fija un variable global, que fija un campo en una instancia que no es la salida del productor, que impacta una fuente de datos externa, etc,)), etc.
Diferentes realizaciones pueden soportar una o más formas de declarar las dependencias del productor con respecto a los productores de propiedad. Específicamente, en algunas realizaciones de la invención, los productores que leen un campo deberían ser dependientes del productor de obtención de propiedad, mientras que el productor de obtención de propiedad debería ser dependiente sobre cualesquiera productores que fijan el campo para el cual es sensible el método de obtención de propiedad. Una técnica de manejar esta situación que puede usarse en realizaciones de la invención que soportan las dependencias del productor de secuenciación es proporcionar, para un método de obtención de propiedad, un establecimiento de declaraciones de dependencias del productor que crea dependencias del productor de secuenciación sobre cada método que fija el campo para el cual es sensible ese método de obtención de propiedad (por ejemplo, con respecto a la Figura 7G, donde el productor 780 es un productor que fija un campo y el productor 720 es el productor de obtención de propiedad sensible para ese campo, el productor de determinación de dependencias 775 se escribiría para devolver una dependencia de secuenciación declarada hacia abajo del productor 720 sobre el productor 780). Una segunda técnica de manejar esta situación que puede usarse en las realizaciones de la invención que soporta tanto dependencias del productor de secuenciación como las dependencias del productor declaradas hacia arriba es incluir en el establecimiento/código de declaraciones de dependencias del productor para cualquier método que fija un campo, una dependencia del productor de secuenciación declarada hacia arriba (por ejemplo usando una DependenciaHaciaArriba o una DependenciaDébilmenteRestringida) sobre el método de obtención sensible para ese campo (por ejemplo, con respecto a la Figura 7G, donde el productor 720 es un productor que fija un campo y el productor 785 es el productor de obtención de propiedad sensible para ese campo, el productor de determinación de dependencia 775 escribiría para devolver una dependencia de secuenciación declarada hacia arriba del productor padre 785 sobre el productor 720). Esta segunda técnica permite al programador del método que fija el campo que será sensible para proporcionar una dependencia del productor para el método de obtención apropiado, en oposición a requerir que el programador vaya al método de obtención y modifique su establecimiento/código de declaraciones de dependencias del productor.
Cuando se usan dependencias de secuenciación, cuando un productor determinado depende de una variable determinada, esa variable no debería modificarse por más de uno de los productores descendientes de ese productor en una ejecución determinada del gráfico de productores (debería observarse que a través de las dependencias contingentes (descritas más adelante en este documento), diferentes productores descendientes pueden modificar esa variable durante las diferentes ejecuciones de los gráficos de productores actuales. Por ejemplo, un productor de obtención de propiedad debería depender sólo de otro productor que fija el campo para el cual el productor de obtención de propiedad es sensible en una ejecución determinada de los gráficos de productores actuales.
Debería entenderse que las diferentes realizaciones de la invención pueden implementar una o más de las realizaciones de la invención mostradas en las Figuras 7A-F. Por ejemplo, una realización de la invención soporta dependencias declaradas de atajo y no de atajo, usando ambas productores de determinación de dependencias; específicamente, en esta realización de la invención: 1) el código fuente orientado a objetos incluye el código explícito de declaración de dependencias del productor en métodos desde los cuales los productores de determinación de dependencias están representados en el tiempo de ejecución por la rutina de ejecución para las dependencias declaradas de no atajo; 2) la rutina de ejecución incluye el código genérico de declaración de dependencias del productor que invoca uno o más como productores genéricos de determinación de dependencias sobre la marcha para dependencias declaradas atajos, contingentes (descritas más adelante en este documento); y 3) la rutina de ejecución incluye un soporte para enlazar directamente las dependencias del productor no contingentes, declaradas de atajo (descritas más adelante en este documento).
Como otro ejemplo, una realización de la invención soporta dependencias del productor declaradas de atajo y no de atajo usando productores de determinación de dependencia; específicamente, en esta realización de la invención: 1) el código fuente orientado a objetos incluye el código explícito de declaración de dependencias del productor en métodos desde los cuales los productores de determinación de dependencias están representados en el tiempo de ejecución por la rutina de ejecución para las dependencias declaradas no de atajo; y 2) la rutina de ejecución incluye el código genérico de determinación de dependencias que se invoca como uno o más productores genéricos de determinación de dependencias sobre la marcha para las dependencias declaradas de atajo (independientemente del tipo). Esta última realización permite un tratamiento consistente de las dependencias del productor, y de este modo, simplifica la rutina de ejecución.
Además, aunque en una realización de la invención el establecimiento de declaraciones de dependencias del productor para un método está localizado justo encima de ese método en el código fuente orientado a objetos, en realizaciones alternativas de la invención está localizado en otro sitio (por ejemplo, los establecimientos de declaraciones de dependencias del productor para todos los métodos para una clase están agrupados juntos dentro de la clase, los establecimientos de declaraciones de dependencias del productor para todos los métodos en todas las clases se agrupan juntos como una tabla de datos separada, etc.). También, aunque en una realización de la invención el código de declaración de dependencias del productor de la invención está separado de los establecimientos de declaraciones de dependencias del productor, en realizaciones alternativas de la invención están combinados (por ejemplo, el código de declaración de dependencias del productor está dentro del paréntesis del establecimiento de declaraciones de dependencias del productor, el código de declaraciones de dependencias del productor está situado directamente debajo del establecimiento de declaraciones de dependencias del productor y se trata por la rutina de ejecución como una unidad única, etc.).
Las Figuras 7H-I ilustran la distinción entre diferentes sub-gráficos que pueden existir en un gráfico de productores debido a los productores de determinación de dependencias. La figura 7H ilustra gráficos de productores de ejemplo de productores normalizados de acuerdo con una realización de la invención. Específicamente, la Figura 7H muestra un gráfico de productores con un nodo raíz S1, un gráfico de productores con un nodo raíz S5, y un gráfico de productores con un nodo raíz S11. El productor normalizado S1 tiene como productores hijos normalizados S2, S3, y S4; los productores normalizados S2 y S3 tienen productores hijos normalizados S7 y S8; el productor normalizado S5 tiene como productores hijos normalizados S4 y ; y el productor normalizado S11 tiene productores hijos normalizados S6 y S10. Los gráficos de productores de ejemplo de la figura 7H pueden descubrirse, construirse, y resolverse usando cualquier número de dependencias del productor y los productores de determinación de dependencias. La Figura 7I ilustra un ejemplo de dependencias de productores y productores de determinación de dependencias para descubrir, resolver y construir el gráfico de productores de la Figura 7H. Específicamente, la Figura 7I muestra los gráficos de la Figura 7H como sub-gráficos de un gran conjunto de gráficos de productores. En otras palabras, los gráficos de productores de la Figura 7I incluyen los gráficos de la Figura 7H (denominados como "sub-gráficos objetivos" e ilustrados usando líneas continuas con flecha y óvalos continuos) y los gráficos que asisten en el descubrimiento, resolución y construcción de los sub-gráficos objetivo (denominados como "sub-gráficos de decisión" e ilustrados usando líneas discontinuas con flecha y óvalos discontinuos). Los sub-gráficos de decisión en la Figura 7H incluyen productores de determinación de dependencia (DDP) 1-11 y productores normalizados S9-10. En la Figura 7H, S1 se muestra como dependiente sobre los DDP 1-3, que devuelven respectivamente las dependencias de productor declaradas hacia abajo de S1 sobre S2, S3, y S4; S4 se muestra como dependiente sobre DDP4, que devuelve una dependencia del productor declarada hacia arriba de S5 sobre S4; S5 se muestra como dependiente sobre DDP5, que devuelve una dependencia del productor declarada hacia abajo de S5 sobre S6; S3 se muestra como dependiente sobre DDP6, que ha su vez es dependiente sobre DDP8, que devuelve una dependencia del productor declarada hacia abajo de DPP6 sobre S9 y S10, que causa que DDP6 devuelva una dependencia declarada hacia abajo de S3 sobre S7; S3 se muestra como dependiente sobre DDP7, que devuelve una dependencia del productor declarada hacia abajo de S3 sobre S8; S8 se muestra como dependiente sobre DDP9, que devuelve una suscripción adherente para la cual S6 es un productor de disparo y S11 es el padre creado (de este modo, la dependencia del productor de S11 sobre S6); S2 se muestra como dependiente sobre DDP10, que devuelve una colección de dependencias del productor declaradas hacia abajo de S2 sobre S7 y S8; y S11 se muestra como dependiente sobre DDP11,que devuelve una dependencia del productor declarada hacia abajo de S11 sobre S10. debería entenderse que un productor normalizado puede ser tanto parte de un sub-gráfico objetivo como un sub-gráfico de decisión (por ejemplo, véase S10). Merece la pena observar que los sub-gráficos objetivos son datos controlados en el sentido de que los datos fluyen desde un productor normalizado a otro productor normalizado hacia arriba en el gráfico.
Ejemplo de Programación y Estructura de Ejecución
La Figura 8A es un diagrama de bloques que ilustra una primera estructura de ejemplo dentro de la cual se proporcionan aplicaciones a los usuarios finales de acuerdo con una realización de la invención. La estructura mostrada en la Figura 8A incluye tres divisiones básicas. La primera división incluye la creación de la rutina de ejecución con el soporte de programación orientado gráficos de productores 810. Esta primera división se realiza por los programadores con experiencia de programación altamente avanzada. Cuando se trabaja en esta división los programadores se denominan como programadores de la rutina de ejecución. Cuando se crea una rutina de ejecución con un soporte de programación orientado a gráficos de productores, los programadores de la rutina de ejecución incluyen soportes para gráficos de productores, así como el soporte para la ejecución de los diversos tipos de comandos usados en el código de transformación, código de representación, y código de preparación de datos.
La segunda división incluye la creación del código fuente de la aplicación orientada a objetos 820 a ejecutar por la rutina de ejecución. El código fuente de aplicación orientado a objetos 820 incluye dos divisiones básicas; 1) definiciones de clases que incluyen la lógica del negocio expresada en métodos con las declaraciones de dependencias del productor 822 (esto puede incluir opcionalmente otras funcionalidades, tales como una interfaz gráfica de usuario - en cuyo caso, la interfaz gráfica de usuario está escrita usando productores y declaraciones de dependencias del productor); y 2) definiciones de clases que incluyen código del cliente expresado en métodos 824, incluyendo el código de representación (clases, instancias, y productores de interés, para causar la generación de los gráficos de productores) 824, el código de preparación de datos 824B (por ejemplo, comandos de fijación, tales como los comandos de fijación que disparan la anulación de las salidas del productor), comandos de ejecución global 824C para causar la ejecución de gráficos de productores (por ejemplo, los comandos de ejecutar y obtener), y cualquier interfaz gráfica del usuario requerida 824D (no incluida en 822). Las declaraciones de dependencias del productor se usan para definir las ataduras entre productores durante la definición de clases que incluye la lógica del negocio, más bien que después de crearse las instancias de esas clases. El código fuente orientado a objetos 820 son clases, instancias y métodos codificados directamente que se compilan y se ejecutan.
Aunque en una realización de la invención se implementa un comando de ejecución global, cuya ejecución causa el intento de ejecución de todos los gráficos de productores actualmente en la estructura de gráficos de productores 380, realizaciones alternativas de la invención también o alternativamente implementan un comando de ejecución específica de gráficos que requiere la identificación del gráfico determinado de los gráficos de productores actuales que se va a ejecutar. Además, el comando de ejecución global puede ser explicito (por ejemplo, fijar, fijar, fijar, ejecutar, obtener, obtener) o implícito dependiendo de la implementación de la rutina de ejecución. Por ejemplo, un comando de ejecución global implícito podría ser 1) disparar por el primer comando de obtención de un productor de interés (por ejemplo, fijar, fijar, fijar, obtener (ejecución implícita), obtener); 2) disparado por cada manipulación de datos (fijar (ejecución implícita), fijar (ejecución implícita), fijar (ejecución implícita) obtener, obtener); etc.
La segunda división se realiza de nuevo por programadores con experiencia de programación avanzada, así como con un entendimiento de los objetivos del negocio de la aplicación. Cuando se trabaja en esta división, los programadores se denominan como programadores de aplicaciones. Como parte de esto, si la aplicación requiere una interfaz gráfica de usuario, los programadores de aplicaciones también diseñan y codifican la interfaz gráfica de usuario para la aplicación específica; y de este modo se denominan como diseñadores de aplicaciones.
La tercera división incluye el uso de los programas de aplicaciones que se corren por la rutina de ejecución. La tercera división se realiza por los usuarios finales que no necesitan tener ninguna experiencia de programación. El programa de aplicación puede distribuirse en una diversidad de modos (por ejemplo, como código fuente; una transformación del código fuente, tal como el código de octetos de bits; como binario, etc.). Además, el programa de aplicación puede distribuirse para uso individual 830 (en cuyo caso, todo el programa de aplicación (y la rutina de ejecución si no está ya presente) se proporciona a un sistema de ordenador) y/o un uso del cliente/servidor. En una realización de la invención, una distribución de cliente/servidor incluye distribuir las definiciones de clases que incluyen la lógica de negocio expresada en métodos con las declaraciones de dependencias del productor 822 (y la rutina de ejecución sin no está ya presente) para uso del servidor 832 y las definiciones de clases que incluyen el código del cliente expresado en métodos 824 (y la rutina de ejecución sin no está ya presente) para uso del cliente 834, donde el uso del cliente 834 sobre el sistema de ordenador causa una comunicación con el uso del servidor 832 sobre el sistema del servidor.
La Figura 8A también muestra un módulo opcional de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 que se proporciona para un uso independiente 830 y un uso de cliente 834. El código fuente orientado a objetos 820 se correría por la rutina de ejecución para generar los gráficos de productores, y el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 permite la representación en pantalla de forma gráfica desde las salidas e interactuar con los gráficos de productores. Específicamente, el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 incluye: 1) un módulo de configuración y mapeo de la interfaz gráfica del usuario 844 para permitir la configuración de la distribución y mapeo de las salidas seleccionadas del productor (por ejemplo, áreas de la pantalla a utilizar, cómo se presentan en pantalla los datos, etc.); y 2) un módulo de interfaz gráfica de usuario de interpretación e inter-actuación 846 para interpretar la distribución configurada y permitir la anulación de las salidas del productor (que da como resultado la actualización de los gráficos de productores a través de un comando de ejecución global). Deberá entenderse que el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 puede crearse o no por la misma entidad que escribe la rutina de ejecución 810.
La Figura 8B es un diagrama de bloques que ilustra una segunda estructura de ejemplo dentro de la cual se proporcionan las aplicaciones a los usuarios finales de acuerdo con una realización de la invención. La Figura 8B es idéntica que la Figura 8A, con las siguientes excepciones: 1) no está presente el uso independiente 830; 2) el código fuente orientado a objetos 820 se proporciona al uso del servidor 832, mientras que el código del cliente 824 no se proporciona para uso del cliente 834; 3) el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 se proporciona al uso del servidor 832 y no al uso del cliente 834; y 4) la interfaz genérica configurable interactiva del cliente de distribución de salidas del productor 855 se proporciona para uso del cliente 834. La interfaz genérica configurable interactiva del cliente de distribución de salidas del productor 855 se usa para hacer interfaz con el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840.
Independientemente de la estructura utilizada, en una realización de la invención la estructura de programación orientada a gráficos de productores ofrece la capacidad de interfaz con programas no escritos con declaraciones de dependencias del productor. Esta capacidad para hacer interfaz con programas no escritos con declaraciones de dependencias del productor incluye: 1) una parte llamante (tal como una interfaz de gráfica de usuario no escrita de acuerdo con la programación orientada a gráficos de productores); y 2) una parte llamada (tal como una fuente de datos externa no escrita de acuerdo con la programación orientada a gráficos de productores). La parte llamante puede, a través del código de cliente, emitir comandos de programación orientados a gráficos de productores. La parte llamada se implementa como la parte de productores que envuelven la parte llamada (denominada como "productores de envoltura"). Ejecutando la parte llamada (tal como leyendo datos desde un fuente de datos o suscribiendo cambios de los datos en una fuente de datos externa) puede a su vez disparar modificaciones de instancias. Estos cambios pueden ocurrir llamando los métodos de fijación de propiedad en el código de los productores de envoltura. Los productores de obtención de propiedad (recuperadores) se causa que tengan dependencias sobre estos productores de envoltura, para asegurarse que las modificaciones de instancias disparadas por los cambios que ocurren en una fuente de datos externa se propagan adecuadamente a través del gráfico de productores. Como se ha descrito anteriormente, diferentes realizaciones pueden soportar uno o más modos de declarar dependencias del productor con respecto a los productores de propiedad. Por ejemplo, en algunas realizaciones de la invención que soportan dependencias de secuenciación del productor, pueden usarse las DependenciasSecuenciación para declarar las dependencias del productor de secuenciación declaradas hacia debajo de no suscripción sobre los productores de envoltura. Como otro ejemplo más, en algunas realizaciones de la invención que soportan dependencias del productor de secuenciación y dependencias del productor declaradas hacia arriba de no suscripción, pueden situarse las DependenciasHaciaArriba y/o las DependenciasDébilmenteRestringidas en la declaración de dependencias del productor de los productores de envoltura para crear dependencias del productor de secuenciación declaradas hacia arriba de no suscripción para los productores de propiedad.
Las Figuras 8C-F ilustran capturas de pantalla de ejemplo y el uso del módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 de acuerdo con una realización de la invención. Aunque las realizaciones de la invención se describirán con referencia al módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 que proporciona la configuración, mapeo, e interacción con las salidas seleccionadas de los gráficos de productores actuales en la forma de una hoja de cálculo, pueden implementarse realizaciones alternativas de la invención para proporcionar adicionalmente o como alternativa un soporte para otra forma. Además, aunque se describen modos de ejemplo de realizar la configuración, mapeo, e interacción en la forma de una hoja de cálculo de acuerdo con algunas realizaciones de la invención, otras realizaciones de la invención pueden realizar estas operaciones de otro modo, con diferente interfaz; y/o con una distribución de pantalla diferente. Además, la hoja de cálculo puede soportar cualquiera de las funcionalidades conocidas asociadas con las hojas de cálculo (por ejemplo, selección de color, selección de fuentes, gráficos de barras, de tarta, de líneas, tablas dinámicas, distribución de ahorros, distribución de cargas, etc.)
Las Figuras 8C-D ilustran capturas de pantalla de ejemplo y el uso de la selección libre de células de acuerdo con una realización de la invención, mientras que las Figuras 8E-F ilustran capturas de pantalla de ejemplo y el uso de la creación de tablas de acuerdo con una de las realizaciones de la invención: Cada una de las Figuras 8C-F incluye una barra de menú 850 a lo largo de la parte superior de la pantalla, una lista de clases (con sus métodos de obtención de propiedad) 852 de los productores en el gráfico de productores actual y sus salidas hacia abajo al lado izquierdo de la pantalla, y un visor de configuración y mapeo 854 que rellena el resto de la pantalla con una hoja de cálculo como distribución. Además, las Figuras 8C-F también muestran de ejemplo la siguiente lista de clases con sus métodos de obtención de propiedades en la lista 852; 1) la clase PERSONA; 2) los métodos de obtención de propiedad de la clase persona incluyendo su NOMBRE (por ejemplo, una cadena de caracteres) APELLIDOS (por ejemplo, una cadena de caracteres), GÉNERO (por ejemplo, una cadena de caracteres), DIRECCIÓNCASA (una instancia de la clase DIRECCIÓN), DIRECCIÓNPROFESIÓN (una instancia de la clase DIRECCIÓN), FECHANACIMIENTO (por ejemplo, una fecha), y EDAD (por ejemplo, un número entero); 3) la clase DIRECCIÓN; y 4) los métodos de obtención de propiedad de la clase DIRECCIÓN incluyendo CIUDAD (por ejemplo, una cadena de caracteres), ESTADO (por ejemplo, una cadena de caracteres) CÓDIGOPOSTAL (por ejemplo, una cadena de caracteres). Como tal, el gráfico de productores actual incluye los productores de las clases PERSONA y DIRECCIÓN así como productores cuyas salidas son de las clases PERSONA y DIRECCIÓN. También merece la pena observar que el método de obtención de propiedad EDAD calcula la edad en base a la salida del método de obtención de propiedad FECHANACIMIENTO; como tal, un productor representado por el método de obtención de propiedad EDAD será dependiente del productor representado a partir del método de obtención de propiedad FECHANACIMIENTO.
Las Figuras 8C-D muestran el siguiente texto libre introducido, en células consecutivas de la primera columna del visor: CLIENTE, NOMBRE, APELLIDOS, FECHA DE NACIMIENTO y EDAD; mientras que las Figuras 8E-F muestran los siguiente: 1) texto libre introducido en la primera fila del visor - LISTA DE CLIENTES; y 2) texto libre introducido en células consecutivas de la segunda fila del visor NOMBRE, APELLIDOS, FECHA DE NACIMIENTO y EDAD.
La Figura 8C ilustra una captura de pantalla de ejemplo y el uso de la selección libre de células con el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 de acuerdo con una realización de la invención. La Figura 8C muestra un conjunto de mapeos 856 de la clase PEROSNA y los métodos seleccionados de obtención de propiedad de la clase PERSONA para las diferentes células del visor. Específicamente, la clase PERSONA está situada en la célula de la derecha del texto libre CLIENTE. Como parte de esta acción, algunas realizaciones de la invención invitan al usuario a seleccionar desde uno de varios filtros soportados (mostrados como la selección de filtros 858) (por ejemplo, lista desplegable, flechas de formas de desplazamiento, etc.). Estos filtros posibilitan la selección de una o más claves de instancias de los productores de la clase seleccionada, o uno o más claves de instancias de los productores cuya clase de salida es la clase seleccionada. Aunque algunas realizaciones de la invención soportan varios filtros, otras realizaciones de la invención presentan uno (y permiten al usuario elegir si seleccionar uno diferente) o sopórtanoslo uno y no necesitan realizar la selección de filtros 858. Los mapeos 856 también muestran que los métodos de obtención de propiedad NOMBRE, APELLIDOS, FECHA DE NACIMIENTO y EDAD de la clase PERSONA se sitúan respectivamente en las células adyacentes a las células con el texto libre correspondiente. Tal mapeo puede realizarse con cualquiera de varias técnicas bien conocidas, incluyendo el arrastrar y soltar, tecleando en un campo de la Interfaz Gráfica de Usuario, etc.
La Figura 8D ilustra otra captura de pantalla de ejemplo y el uso de la selección de células libres con el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 de acuerdo con una realización de la invención. La Figura 8D muestra la célula a la cual se mapeo la clase PERSONA para permitir la selección de instancias 854. Específicamente, en base al filtro utilizado para esta célula, al usuario se le da la oportunidad de seleccionar una instancia de la clase PERSONA desde una lista que incluye las claves de instancias de los productores de la clase PERSONA y las claves de instancias de los productores que producen la clase PERSONA. La selección de la instancia de la clase PERSONA (o la existencia de una instancia única) da como resultado la repoblación automática de las células, para las cuales se mapearon los métodos de obtención de propiedad de la clase PERSONA, con las salidas de los métodos de obtención de propiedad correspondientes a esa instancia. Esta repoblación de la tabla en base a las instancias de la clase PERSONA se etiqueta como 858. En el ejemplo de la Figura 8D, las células a las cuales se mapearon los métodos de obtención de propiedad NOMBRE, APELLIDOS, FECHA DE NACIMIENTO
y EDAD de la clase PERSONA se rellenaron respectivamente con JHON, SMITH, 7/20/1990, y 16.
La Figura 8D también muestra que las células del visor a las cuales se han mapeado los métodos de obtención de propiedad pueden anularse. A modo de ejemplo, la Figura 8D muestra que si la célula a la cual se mapea el método de obtención de propiedad FECHANACIMIENTO se anula, entonces causará la anulación de la salida del productor cuya salida está rellenando actualmente esa célula, la invocación de un comando de ejecución global (el cual daría como resultado la reejecución del productor cuya salida está rellenando actualmente la célula a la cual está mapeado el método de obtención de propiedad EDAD), y cualquier actualización necesaria de la pantalla.
La Figura 8E ilustra una captura de pantalla de ejemplo y el uso de la creación de tablas con el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 de acuerdo con una realización de la invención. La Figura 8E muestra que se realiza una operación de selección de zona y de orientación 864 para identificar una tabla vertical de filas de árbol directamente debajo de las células con texto libre NOMBRE, APELLIDOS, FECHA DE NACIMIENTO y EDAD (ilustradas con una delgada línea discontinua alrededor de estas células). Diferentes realizaciones de la invención pueden soportar la realización por el usuario de esta operación de cualquiera de los diversos modos (incluyendo: 1) selección de un área con un dispositivo de entrada como un ratón, y 2) selección entre una tabla vertical horizontal, o de giro con una interfaz tal como un menú de ventanas emergentes - asumiendo que se soportan múltiples orientaciones). La Figura 8E también muestra un conjunto de mapeos 866 de los métodos de obtención de propiedad seleccionados de la clase PERSONA a las diferentes células del visor. Específicamente, los mapeos 866 muestran que los métodos de obtención de propiedad NOMBRE, APELLIDOS, FECHANACIMIENTO, y EDAD de la clase PERSONA se mapean respectivamente a las células directamente debajo de las células con el texto libre correspondiente.
La Figura 8F ilustra otra captura de pantalla de ejemplo y el uso de la creación de tablas con el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 de acuerdo con una realización de la invención. Los mapeos 866 dan como resultado la repoblación automática de las columnas de la tabla, a las cuales se mapearon los métodos de obtención de propiedad de la clase PERSONA, con las salidas de los métodos obtención de propiedad correspondientes de las instancias de esa clase. Esta repoblación de la tabla en base a las instancias de la clase PERSONA se etiqueta con 868. En el ejemplo de la Figura 8D, las columnas a las cuales se mapearon los métodos de obtención de propiedad NOMBRE, APELLIDOS, FECHANACIMIENTO, y EDAD de la clase PERSONA se rellenaron con las siguiente filas de datos: 1) STEVE, COLLINS, 20/07/1990, y 16; 2) JENNIFER, ADAMS, 20/07/1990, y 16; y 3) JOHN, SMITH, 20/07/1985, y 21.
Como en la Figura 8D, la Figura 8F muestra que las células del visor a las cuales se han mapeado los métodos de obtención de propiedad pueden anularse. A modo de ejemplo, la Figura 8F muestra que si la célula de la segunda fila de la columna a la cual está mapeado el método de obtención de propiedad FECHANACIMIENTO se anula, entonces causará la anulación de la salida del productor cuya salida está rellenando actualmente esa célula, la invocación de un comando global de ejecutar (que daría como resultado una reejecución del productor cuya salida está rellenando actualmente la célula a la cual está mapeado el método de obtención de propiedad EDAD), y cualquier actualización necesaria de la pantalla.
Las Figuras 8C-F ilustran pantallas de ejemplo generadas por el módulo de interfaz gráfico de usuario de configuración y mapeo 842. Las pantallas generadas por el módulo de interpretación y de interfaz gráfico de usuario interactiva 846 son lo mismo, con la excepción de que la lista de clases (con sus métodos de obtención de propiedad) 852, la configuración y el visor del mapeo 854 se reemplazan por un visor de interpretación interactivo (no mostrado) que contiene la misma imagen que el visor de configuración y mapeo 854 presentado en pantalla (siendo la diferencia la característica de mapeo que ya no está disponible).
Ejemplos de Esquemas de Distribución de la Rutina de Ejecución
Las Figuras 9A-C ilustran varios esquemas para distribuir una rutina de ejecución con el soporte de programación orientado a gráficos de productores. Debería entenderse que estos esquemas de distribución son de ejemplo, y de este modo otros esquemas están dentro del alcance de la invención.
La Figura 9A es un diagrama de bloques que ilustra un primer esquema para distribuir una rutina de ejecución con un soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención. En la Figura 9A, se muestra el código fuente orientado a objetos 905 (que incluiría declaraciones de dependencias del productor) sobre la parte superior de una rutina de ejecución con un soporte de programación orientado a gráficos de productores 910, que está en la parte superior de una rutina de ejecución con la carga de clases, la representación de clases dinámicas, invocación de métodos únicos dinámicos, y la introspección de clases/métodos 915, que está en la parte superior del sistema operativo 920. En la Figura 9A, la rutina de ejecución 910 funciona con la rutina de ejecución 915. Aunque puede usarse cualquiera de varios mecanismos para permitir que la rutina de ejecución 910 funcione con la rutina de ejecución 915, se describe una facilidad de los metadatos a modo de ejemplo. Una facilidad de metadatos permite añadir información adicional al código fuente, cuya información se usa por las herramientas de desarrollo. Por ejemplo la Facilidad de Metadatos para la especificación de Java define una API para campos de anotación, métodos y clases que tienen atributos particulares que indican que deberían procesarse en modos especiales por las herramientas de desarrollo, las herramientas de despliegue, o las librerías de rutinas de ejecución (Petición de Especificación Java 175). En este ejemplo, un programador que programa un código fuente orientado a objetos 905 añadiría anotaciones a los métodos en la forma de declaraciones de dependencias del productor. Como estas anotaciones se manejan por la rutina de ejecución 915 para la rutina de ejecución 910, la rutina de ejecución 910 dicta la sintaxis de las declaraciones de dependencias del productor. En la Figura 9A las rutinas de ejecución 910 y 915 pueden desarrollarse y/o distribuirse por diferentes organizaciones.
La Figura 9B es un diagrama de bloques que ilustra un segundo esquema para distribuir una rutina de ejecución con el soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención. En la Figura 9B, se muestra el código fuente orientado a objetos 925 (que incluiría las declaraciones de dependencias del productor) sobre la parte superior de una rutina de ejecución (con carga de clases, representación dinámica de clases, invocación dinámica de métodos únicos e introspección de clases/métodos, así como el soporte de programación orientado a gráficos de productores) 930, que está en la parte superior del sistema operativo 935. En comparación con la Figura 9A, las rutinas de ejecución 910 y 915 se han combinado en una rutina de ejecución única 930. Como resultado de esta combinación, la rutina de ejecución 930 dicta la sintaxis de las declaraciones de dependencias del productor. De este modo, el programador que programa el código fuente orientado a objetos 925 añadiría las declaraciones de dependencias del productor en la sintaxis requerida.
La Figura 9C es un diagrama de bloques que ilustra un tercer esquema para distribuir una rutina de ejecución con el soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención. En la Figura 9C, se muestra el código fuente orientado a objetos 940 (que incluiría las declaraciones de dependencias del productor) sobre la parte superior de la rutina de ejecución del sistema operativo (con carga de clases, representación dinámica de clases, invocación dinámica de métodos únicos, e introspección de clases/métodos, así como el soporte de programación orientado a gráficos de productores) 945. En comparación con la Figura 9B, la rutina de ejecución 920 y el sistema operativo 935 se han combinado dentro de una entidad única. Como resultado de esta combinación, la rutina de ejecución del sistema operativo 945 dicta la sintaxis de las declaraciones de dependencias del productor. De este modo, el programador que programa el código fuente orientado a objetos 940 añadiría declaraciones de dependencias del productor en la sintaxis requerida.
Aunque se han descrito realizaciones en las cuales la rutina de ejecución tiene carga de clases, representación dinámica de clases, invocación dinámica de métodos únicos, e introspección de clases/métodos, realizaciones alternativas pueden incluir más o menos características (por ejemplo, clonación de instancias, representantes dinámicos, conversiones de tipos de primitivas, etc.)
Ventajas de Ejemplo
En una realización de la invención, las dependencias del productor se declaran para métodos como un modo para especificar la secuenciación de invocación de métodos usando las instancias apropiadas (donde las instancias apropiadas incluyen instancias a usar como argumentos, las instancias a utilizar por los métodos de instancias, y las instancias de meta clases usadas por los métodos de clases) sin usar el código de secuenciación de invocación manual. Efectivamente, el trabajo de generar algo o todo el código de secuenciación de invocación manual se reemplaza con: 1) el trabajo hecho por el programador de aplicación para escribir las declaraciones de dependencias del productor; y 2) el trabajo hecho por la rutina de ejecución para descubrir y construir los gráficos de productores y ejecutar los productores de esos gráficos de productores. En otras palabras, la lógica que estaba contenida anteriormente en el código de secuenciación de invocación manual se puede descubrir por la rutina de ejecución durante el tiempo de ejecución en base a las declaraciones de dependencia de productor. De este modo, las declaraciones de dependencias de productor informan a la rutina de ejecución de qué métodos y qué instancias con qué argumentos ejecutar, y cuándo para propósitos de sincronización. Aunque el esfuerzo de escribir la rutina de ejecución es relativamente grande, sólo se necesita escribir una vez ya que puede usarse para ejecutar cualesquiera aplicaciones orientadas a objetos escritas para la rutina de ejecución; en contraste, para una aplicación típica, el esfuerzo de escribir las declaraciones de dependencias del productor es relativamente bajo en comparación con escribir el código de secuenciación de invocación manual.
Reducción de Errores de Programación
La programación orientada a gráficos de productores típicamente reduce los costos asociados con la depuración y/o ajuste del funcionamiento del código de secuenciación de invocación manual. Esto es cierto al menos por la razón de que la infraestructura de un programa de aplicación conceptualmente es un conjunto de gráficos no formalizados de métodos de transformación de objetos (la salida de un método asociado con un objeto es la entrada del otro, y así sucesivamente) que funciona sobre las entradas especificas. Las declaraciones de dependencias del productor y la rutina de ejecución con el soporte de programación orientado a gráficos de productores formalizan estos gráficos como gráficos de productores. De este modo, en cada oportunidad para cambiar datos, el programador de la aplicación no necesita considerar su efecto y escribir el código de secuenciación de invocación manual para causar los métodos de transformación apropiados de las instancias apropiadas a invocar en el orden apropiado con las entradas apropiadas. En otras palabras, para cada una de las oportunidades de cambiar datos, el programador de la aplicación no necesita considerar qué gráficos están afectados, así como qué métodos de transformación de instancias dentro de esos gráficos están afectados. En cambio, el módulo de generación automatizada de gráficos de productores descubre y construye los gráficos de productores y el módulo de ejecución de gráficos de productores reejecuta los gráficos de productores según se necesite para reflejar los cambios en los datos. Este automatismo ayuda a los programadores de la aplicación a evitar errores tales como: 1) invocar los métodos de trasformación apropiados de las instancias apropiadas en el orden equivocado; 2) olvidar incluir comandos para hacer que uno o más métodos de transformación requeridos de instancias en un gráfico a invocar en respuesta a que se cambiaron algunos datos; 3) incluir comandos para causar métodos de transformación innecesarios de instancias a invocar en respuesta a que se cambiaron algunos datos (por ejemplo, incluyendo comandos para invocar métodos de transformación de instancias que no son parte de un gráfico afectado por el cambio en los datos; incluyendo comandos para invocar métodos de transformación de instancias que son parte de un gráfico afectado por el cambio en los datos, pero que no están ellos mismos afectados; etc.).
Como se ha descrito anteriormente, el almacenamiento temporal de las salidas del productor durante la ejecución permite la sincronización. De este modo, en términos de comparación para el patrón del observador, las declaraciones de dependencias del productor notifican a la rutina de ejecución con soporte de programación orientado a gráficos de productores de las dependencias, y la rutina de ejecución determina qué productores y cuándo llamarlos de vuelta.
Capacidad para Explicar Totalmente cualquier Resultado
En una realización de la invención, se incluye un módulo de introducción/visión (no mostrado) como parte de la rutina de ejecución. El módulo de introducción/visión proporciona una interfaz gráfica de usuario que, a través del la interacción por el usuario final, permite introducirse hacia abajo dentro del gráfico de productores (avanzando hacia abajo en un gráfico de productores desde el nodo raíz) para ver las salidas de los diversos productores del gráfico de productores. Esto permite a un usuario final ver las diversas salidas que contribuyen a la salida del productor de interés, incluyendo los valores de datos y las dependencias (devueltas por los productores de determinación de dependencias). Además, en una realización de la invención, este módulo de introducción/visión proporciona la capacidad para el usuario final de ver el código dentro de los métodos de los productores, los valores de las instancias de los productores, y/o el contenido de las clases de los productores.
De este modo el módulo de introducción/visión proporciona una diversidad de actividades de procesamiento posterior, incluyendo la depuración, la explicación de las salidas, etc.
Ejemplo de Aplicación Práctica/Efectos Técnicos/Aplicabilidad Industrial
Hay una diversidad de aplicaciones prácticas de ejemplo de los diferentes aspectos y realizaciones de la invención. Por ejemplo, la rutina de ejecución, como parte de la ejecución de los programas de aplicación, causa la recuperación de información desde un medio de almacenamiento de una máquina (por ejemplo, accediendo al código fuente orientado a objetos, incluyendo las declaraciones de dependencias del productor), el almacenamiento de información para un medio de almacenamiento de una máquina (por ejemplo, almacenando las estructuras de datos como la estructura de gráficos de productores, etc.), el funcionamiento de los recursos de procesamiento hardware, la provisión de las salidas de los productores de interés (por ejemplo, a través de la interfaz gráfica de usuario, el almacenamiento en los medios de almacenamiento de una máquina, transmisión, etc.), etc. En un sentido, la actividad de pre-procesamiento incluye la escritura de tal programa e aplicación y/o la provisión de datos (los cuales pueden representar cualquier número de elementos físicos y/o prácticos, tales como valores financieros, valores geográficos, valores meteorológicos, valores actuariales, valores estadísticos, mediciones físicas, valores de estados de una máquina, etc.), mientras que la actividad de post-procesamiento incluye la provisión de resultados (los cuales pueden representar cualquier número de elementos físicos o prácticos, tales como análisis financieros, análisis geográficos, análisis meteorológicos, análisis actuariales, análisis estadísticos, medidas industriales, información de control de una máquina, etc. A modo de ejemplo específico, la actividad de post procesamiento puede proporcionarse por 1) el módulo de visión del gráfico de productores 1062 de la Figura 10 para representar gráficamente en pantalla una representación de los gráficos de productores actuales generados por la rutina de ejecución; y/o 2) el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840 (véase también, el módulo configurable interactivo de la interfaz gráfica de usuario de distribución salidas del productor 1085 de la Figura 10) para representar gráficamente en pantalla las salidas de los gráficos de productores e interactuar con ellos.
Como otro ejemplo, el programa de aplicación con declaraciones de dependencias del productor por si mismo, cuando se ejecuta por la rutina de ejecución, representa los elementos físicos/prácticos y causa las operaciones descritas anteriormente. A modo de ejemplo específico, estas declaraciones de dependencias del productor causan que se formen estructuras de datos en un medio de almacenamiento de una máquina en respuesta a su ejecución por la rutina de ejecución. También, las declaraciones de dependencias del productor se almacenan y se recuperan desde el medio de almacenamiento de la máquina junto con el programa de aplicación. Además, estas declaraciones de dependencias del productor representan asociaciones entre productores, mientras que los productores representan las operaciones a realizar (métodos) e instancias. Las instancias en la programación orientada a objetos pueden usarse para representar elementos
físicos y/o prácticos, mientras que los productores representan las operaciones a realizar sobre estas representaciones.
A modo de otro ejemplo, un conjunto de uno o más programas de aplicación y la rutina de ejecución implementan un software de gestión de riesgos de activos cruzados que cubre las transacciones internacionales, paridad, tasas de interés, crédito, inflación, materias primas y productos compuestos de activos cruzados. Estos productos varían desde el efectivo y productos físicos simples a productos derivados complejos y exóticos. También está incluido un conjunto de modelos de evaluación matemáticos para estos productos, y sus datos de mercado asociados, pagos y rutinas de generación de entradas de contabilidad y sus modelos de calibración asociados observables y sus entradas sin tratar asociadas.
A modo de otro ejemplo, un conjunto de uno o más programas de aplicación y la rutina de ejecución pueden implementar un procesador de textos, una hoja de cálculo, un software de comunicaciones/correo electrónico, un software de visión de fotos, un software de búsqueda de virus, un reproductor de medios, un servidor de una base de datos, un juego, una aplicación industrial, una aplicación de herramienta de diseño asistido por ordenador, y/o un sistema operativo. Por supuesto, los programas de aplicación pueden implementarse para realizar una diversidad de tareas diferentes.
Implementaciones de Ejemplo
A modo de ilustración, se describirán realizaciones de ejemplo de la invención que soportan dependencias, dependencias dinámicas (incluyendo dependencias contingentes y dependencias de suscripción), productores de determinación de dependencia explicita para dependencias declaradas de atajo y para dependencias declaradas no de atajo, productores de determinación de dependencia sobre la marcha para dependencias declaradas de atajo, claves de clases, claves de instancias, claves de métodos, comandos de anulación/restauración de productores (que son tipos de comandos de fijación), y comandos de ejecución global. Además, las realizaciones de ejemplo opcionalmente soportan un módulo visor interactivo de gráficos de productores y ejecución incremental. Por supuesto, las realizaciones alternativas de la invención pueden implementar más, menos y/o diferentes características.
La Figura 10 es un diagrama de bloques de una implementación de ejemplo de acuerdo con una realización de la invención. En la Figura 10, la línea de división discontinua 1000 separa una rutina de ejecución del cliente 1002 de una rutina de ejecución con soporte de programación orientado a gráficos de productores 1004.
El flujo lógico de ejecución de la rutina de ejecución del cliente 1002 incluye los bloques 1010, 1020, 1025, 1030, y 1035 y la rutina de ejecución con el soporte de programación orientado a gráficos de productores 1004 incluye respectivamente los bloques correspondientes 1095, 1098, 1040, 1045; y 1070; mientras que una línea continua con flecha representa una asociación directa causal desde el bloque 1035 del flujo lógico de ejecución de la rutina de ejecución del cliente 1002 al bloque 1070 de la rutina de ejecución con soporte orientado a gráficos de productores 1004, las líneas de puntos con flechas ilustran un asociación causal desde los bloques 1010, 1020, 1025, y 1030 de la rutina de ejecución del cliente 1002 a los bloques 1095, 1098, 1040 y 1045 de la rutina de ejecución con soporte de programación orientado a gráficos de productores 1004. Dependiendo de la realización de la invención, estas últimas asociaciones causales pueden ser directas o indirectas. Por ejemplo, similar a la Figura 6, puede usarse una provocación indirecta opcional mediante el uso de un registro de comandos (no mostrado) y/o el registro de anulaciones 1047. Los bloques adicionales 1095 y 1098 son discontinuos porque pueden ser opcionalmente parte de un bloque diferente dependiendo de la realización de la invención (por ejemplo, el bloque 1095 puede ser parte del bloque 1098; el bloque 1098 puede ser parte del bloque 1040; los bloques 1095 y 1098 pueden ser parte del bloque 1040). De forma similar, el bloque 1045 es discontinuo porque opcionalmente puede ser parte de un bloque diferente dependiendo de la realización de la invención (por ejemplo, el bloque 1045 puede ser parte del bloque 1070).
En la Figura 10, la rutina de ejecución 1002 incluye definiciones de clases que incluyen la lógica del negocio 1010 que tiene datos 1012, métodos 1014, declaraciones de dependencias del productor 1016, y opcionalmente claves de clases 1090. Las definiciones de clases 1010 son clases en un lenguaje de programación orientado a objetos, y de este modo, incluyen definiciones para datos 1012 y métodos 1014. Además, estas definiciones de clases 1010 incluyen declaraciones de dependencias del productor 1016 para el método 1014 como se ha descrito anteriormente. Además, en una realización de la invención, cada clase tiene una clave de clase 1090 para propósitos de seguimiento.
El nuevo módulo de clases 1095 y la rutina de ejecución 1004 cargan y realizan la introspección de las definiciones de clases 1010 (por ejemplo, en respuesta a los nuevos comandos de clases). Esta carga e introspección pueden hacerse usando cualquiera de las varias técnicas bien conocidas o que se desarrollen en el futuro, incluyendo aquellas para la carga selectiva de clases para propósitos de optimización. La carga de las clases por el nuevo módulo de clases 1095 se ilustra por las clases 1054 de la rutina de ejecución 1004. Como parte de la carga y la introspección de las clases 1054, el nuevo módulo de clases 1095 también carga y realiza la introspección de las declaraciones de dependencias del productor 1016 como se ilustra por los métodos y las declaraciones de dependencias del productor 1056 en las clases 1054. El nuevo módulo de clases 1095 también mantiene una estructura de seguimiento de clases 1092 que se usa para el seguimiento de clases usando las claves de clases. De este modo, la estructura de seguimiento de clases 1092 mantiene una correspondencia entre claves de clases y referencias dentro de las clases 1054. Además, el nuevo módulo de clases 1095 también mantiene una estructura de seguimiento de métodos 1058 que se usa para el seguimiento de módulos usando las claves de métodos. De este modo, la estructura de seguimiento de métodos 1058 mantiene una correspondencia entre las claves de métodos y las referencias a los métodos, así como la información relativa a las declaraciones de dependencias del productor.
La rutina de ejecución del cliente 1002 también incluye comandos de representación de instancias con las claves de instancias 1020. El nuevo módulo de instancias 1098 de la rutina de ejecución 1004 representa las instancias diseñadas por los comandos de representación de instancias con las claves de instancias 1020 (por ejemplo en respuesta a los nuevos comandos de instancias). Esta representación de instancias puede hacerse usando cualquiera de varias técnicas conocidas o desarrolladas en el futuro, incluyendo aquellas para representar selectivamente instancias para propósitos de optimización. Como parte de esta representación de instancias, el nuevo módulo de instancias 1098 accede a la estructura de seguimiento de de clases 1092 usando una clave de clases para acceder a la clase apropiada de las clases 1054. La representación de instancias por el nuevo módulo de instancias 1098 se ilustra por las instancias 1052 de la rutina de ejecución 1004, El nuevo módulo de instancias 1095 también mantiene una estructura de seguimiento de instancias 1065 que se usa para el seguimiento de instancias que usan las claves de instancias. De este modo la estructura de seguimiento de instancias 1065 mantiene una correspondencia entre las claves de instancias y las referencias dentro de las instancias 1052. Como se ha indicado anteriormente, el nuevo módulo de clases 1095 puede ser parte del nuevo módulo de instancias 1098 en que las clases 1054 pueden representarse en respuesta a los comandos de representación de instancias 1020, en oposición a los nuevos comandos separados de clases.
La rutina de ejecución del cliente 1002 también incluye comandos de representación de productores con claves de productores 1025. El módulo de generación automatizada de gráficos de productores 1040 de la rutina de ejecución 1004 representa a los productores designados por los comandos de representación de productores con las claves de productores 1025 (por ejemplo, en respuesta a los nuevos comandos de productores que designan el conjunto actual de productores de interés). Además, el módulo de generación automatizada de gráficos de productores 1040 también descubre, construye y opcionalmente resuelve los gráficos de productores en respuesta al conjunto actual de productores de interés como se ha descrito anteriormente. En una realización de la invención, una clave de productor está comprendida de una clave de clase, una clave de instancia, y una clave de método. Como parte de esta representación de productores, el módulo de generación automatizada de gráficos de productores 1040: 1) accede a la estructura de seguimiento de clases 1092 usando la clave de clases para acceder a la clase apropiada de las clases 1054; 2) accede a la estructura de seguimiento de instancias 1065 usando la clave de instancias para acceder a la instancia apropiada de las instancias 1052; y 3) accede a la estructura de seguimiento de métodos usando la clave de métodos para acceder al establecimiento de declaraciones de dependencias del productor apropiado. La representación de los productores designados por los comandos de representación de productores con las claves del productor 1025 y la representación de cualesquiera productores descubiertos y la construcción del gráfico de productores se ilustra por la estructura de gráficos de productores 1060 de la rutina de ejecución 1004. De este modo, en una realización de la invención, las claves de productores identificadas por los comandos de representación del productor con las claves del productor 1025 y las descubiertas a través de la generación del gráfico de productores se almacenan en la estructura de gráficos de productores 1060, junto con la información adicional para representar los gráficos de productores actuales.
Como se ha descrito anteriormente, los bloques 1095 y 1098 pueden ser parte del bloque 1040, y de este modo la decisión con respecto a qué clases, instancias, y productores cargar/representar se controla por los productores que están en los gráficos de productores actuales. En tal realización de la invención, la carga/representación de clases, instancias, y productores se optimiza y es un productor central.
La rutina de ejecución del cliente 1002 también incluye comandos de preparación de datos, incluyendo los comandos de anulación/restauración de salidas del productor 1030. Los comandos de anulación/restauración incluyen la clave del productor para anular/restaurar, así como los valores de anulación cuando se anulan. El módulo de anulación de la salida del productor 1045 de la rutina de ejecución 1004 causa que los productores designados por los comandos de anulación/restauración se anulen/restauren. Esta provocación puede ser indirecta o directa.
En el caso de una provocación indirecta, el módulo de anulación de la salida del productor 1045 rellena el registro de anulaciones 1047 para consumo por el módulo de ejecución de gráficos de productores 1070. En el caso de una provocación directa, el módulo de anulación de la salida del productor 1045 accede al almacenamiento temporal de la salida del productor 1097 de la estructura de gráficos de productores 1060 y las instancias 1052. Específicamente, como se ha descrito con referencia al módulo de anulación de la salida del productor 390, en una realización, los productores pueden clasificarse como productores de propiedad o productores de métodos; de este modo, el módulo de anulación de la salida del productor1045 puede incluir un módulo de anulación de la salida del productor de propiedad (no mostrado) para anular los productores de propiedad y un módulo de anulación de la salida de productores de métodos (no mostrado) para anular los productores de métodos; la anulación de un método de propiedad causa que el valor anulado se almacene en el almacenamiento temporal de la salida 1097 de la estructura de gráficos de productores 1060, y se almacene en los datos de la instancia apropiada de las instancias 1052, mientras que la anulación de un productor de métodos causa que el valor anulado se almacene en el almacén temporal de la salida del productor 1097.
En una realización de la invención los productores puede que no se anulen antes de que el gráfico de productores del que formarán parte se haya ejecutado inicialmente (de este modo, el productor ya se representará como el resultado de lo que se designa como un productor de interés o como el resultado de lo que se descubre por el módulo de generación automatizada de gráficos de productores 1040). Sin embargo, en la realización mostrada en la Figura 10, los productores pueden anularse antes de la ejecución inicial representándose y anulándose con un comando de anulación del productor. Tal productor anulado típicamente se convertirá eventualmente en parte de un gráfico de productores a través del proceso de descubrimiento (por ejemplo cuando se resuelve una dependencia dinámica). En algunas realizaciones de la invención, esta preparación de datos puede incluir también otros tipos de comandos de fijación. El módulo de anulación de las salidas del productor 1045 se muestra como una caja discontinua porque puede que no esté presente en realizaciones alternativas de la invención.
La estructura de gráficos de productores 1060 incluye también opcionalmente el marcado de ejecución incremental 1080 para algunas realizaciones de la invención que soportan ejecución incremental. Como se ha descrito anteriormente con referencia al marcado de ejecución incremental 382 de la Figura 3B, las marcaciones de ejecución incremental 1080 se usan para asistir con la ejecución incremental de los gráficos de productores sobre la ejecución más allá de la ejecución inicial. Diferentes realizaciones de la invención que usan el marcado de la ejecución incremental 382, lo usan de formas diferentes. Por ejemplo, en una de tales realizaciones de la invención que tiene un registro de comandos, el registro se usa para seguir qué productores se han añadido y/o modificado, y se usa el marcado de ejecución incremental 382 para marcar los productores que están afectados (ancestros de los productores modificados o añadidos, y de este modo dependientes de los mismos). Como otro ejemplo, en una de tales realizaciones de la invención que no tienen un registro de comandos, se usa la marcación de ejecución incremental 382 para marcar a los productores que se añaden o se modifican, así como a los que son ancestros de los productores modificados o añadidos (y de este modo, dependientes de los mismos). Como otro ejemplo, en una de tales realizaciones de la invención que no tiene un registro de comandos, se hacen inmediatamente modificaciones y adiciones de productores y se usa el marcado de ejecución incremental 382 para marcar los productores que son ancestros de los productores modificados o añadidos (y de este modo, dependientes de los mismos). Aunque se han descrito realizaciones de la invención que soportan la ejecución incremental y usan el marcado de ejecución incremental, otras realizaciones de la invención soportan la ejecución incremental que no usan el marcado de ejecución incremental (por ejemplo, se usa un registro de comandos para seguir qué productores se añaden o se modifican, y se mantiene una lista de productores de comienzo de ejecución en el registro de comienzo de ejecución; donde el módulo de ejecución de gráficos de productores 1070 comienza desde los productores de comienzo de la ejecución y sigue su camino hacia los ancestros de los gráficos de productores en la parte superior; a modo de ejemplo y no de limitación, esta realización de la invención se describe más adelante en este documento con respecto a las Figuras 15-25.
\newpage
La rutina de ejecución del cliente 1002 incluye comandos de ejecución global 1035. El módulo de ejecución de gráficos de productores 1070 de la rutina de ejecución 1004 ejecuta los gráficos de productores. Como tal el módulo de ejecución de gráficos de productores 1070 modifica el almacenamiento temporal de la salida del productor 1097 (en el caso de productores de propiedad y productores de métodos), usa el marcado de ejecución incremental 1080 (si está presente), y modifica los datos de las instancias 1052 (en el caso de métodos de propiedad). Anteriormente se han descrito diversas técnicas para ejecutar los productores del gráfico de productores y son aplicables en este punto. Por ejemplo, en realizaciones en las que se implementa un registro de comandos, el registro de comandos se consume y a continuación se ejecutan los gráficos de productores. Además en realizaciones de la invención que soportan la posibilidad de dependencias no resueltas, el módulo de ejecución de gráficos de productores 1070 incluye el módulo de dependencias dinámicas 1075, que puede invocar al módulo de generación automatizada de gráficos de productores 1040.
La Figura 10 muestra un módulo opcional del visor de gráficos de productores 1062 que proporciona un mecanismo (por ejemplo una interfaz gráfica de usuario) por el cual el usuario/programador puede ver los gráficos de productores y las salidas del productor de la estructura de gráficos de productores. Además, la Figura 10 muestra un módulo opcional de la interfaz gráfica del usuario de distribución de salidas del productor configurable interactivo 1085 para proporcionar una interfaz gráfica de usuario (incluyendo la invocación dinámica de bloques 1030, y 1035) que representa el módulo de interfaz gráfica de usuario de la distribución de salidas del productor configurable interactiva 840.
En realizaciones de la invención que usan un registro de comandos, pueden usarse diferentes disparos para disparar diferentes acciones. Por ejemplo, los comandos de representación del productor pueden registrarse y procesarse por lotes en respuesta a un comando explícito (registro de comienzo y registro de final), un comando de ejecución global explícito ( registrando automáticamente los comienzos en la inicialización y después de cada uno de los comandos de ejecución global explícito, y se procesa cada uno de los registros en respuesta al siguiente comando de ejecución global explícito), un comando de preparación de datos explícito, etc. De forma similar, los comandos de preparación de datos pueden registrarse y procesarse por lotes en respuesta a un comando explícito de ejecución global, un primer comando de obtención, cada uno de los comandos de obtención, etc.
Estructuras de Seguimiento de Ejemplo
Las Figuras 11A-D son diagramas de bloques que ilustran el contenido de ejemplo de las estructuras de datos de la Figura 10, de acuerdo con una realización de la invención. Aunque las Figuras 11A-D ilustran estas estructuras de datos como tablas, debería entenderse que puede usarse cualquier estructura de datos adecuada (por ejemplo, un mapa hash, un conjunto, una lista).
La Figura 11A es un diagrama de bloques de un ejemplo de la estructura de seguimiento de clases 1092 de la Figura 10 de acuerdo con una realización de la invención. En la Figura 11A se muestran, la columna de claves de clases 1110 y la columna de referencia de clases 1115 para almacenar respectivamente las claves de clases y las referencias correspondientes a las clases cargadas.
La Figura 11B e un diagrama de bloques de un ejemplo de estructura de seguimiento de instancias 1065 de la Figura 10 de acuerdo con una realización de la invención. En la Figura 11B, la columna de claves de instancias 1120 y la columna de referencia de instancias 1125 se muestran para almacenar respectivamente las claves de instancias y las referencias correspondientes a las instancias. En realizaciones de la invención en las cuales las claves de instancias no necesitan ser única a través de todas las clases, la estructura de seguimiento de instancias también incluye la clave de clases o referencia, para la clase de instancia.
La Figura 11C es un diagrama de bloques de un ejemplo de la estructura de gráficos de productores 1060 de la Figura 10 de acuerdo con una realización de la invención. En la Figura 11C, la columna de referencia de clases 1135, la columna de referencia de instancias 1140, y la columna de referencia de métodos 1145 se muestran para almacenar respectivamente referencias que preparan los productores actuales de los gráficos de productores actuales. Estas referencias pueden tomar una diversidad de formas. Por ejemplo, estas columnas pueden almacenar respectivamente referencias dentro de las clases 1054 (o alternativamente 1092), las instancias 1052 (o como alternativa 1065), y los métodos 1056 (o como alternativa 1058). Aunque en una realización de la invención estas columnas almacenan referencias, en una realización alternativa de la invención una o más columnas almacenan claves.
Además, la Figura 11C incluye una columna de enlaces de productores padres 1150 (incluyendo para cada enlace una referencia al productor padre, y una referencia al productor de determinación de dependencias) y una columna de enlaces de productores hijos 1160 (incluyendo para cada uno de los enlaces, referencias al productor hijo, una referencia al productor de determinación de dependencias, un modo de enlace, y un indicador de enlace adherente). Cada productor puede tener cero o más enlaces del productor hijo en la columna 1160. Cada uno de los enlaces del productor hijo en la columna 1160 incluye: 1) referencias del productor hijo que son referencias a otras filas de la estructura de gráficos de productores para representar una dependencia del productor de acuerdo con la declaración de dependencias del productor; 2) una referencia al productor de determinación de dependencias que es una referencia a otra fila de la estructura de gráficos de productores y representa el productor de determinación de dependencias que ha creado el enlace del hijo; y 3) un modo de enlace con un tipo de dependencias del productor que identifica si la dependencia del productor es un resultado de un argumento, un campo, o una dependencia de secuenciación (véase la discusión respecto a las Figuras 7A-F), y si es un argumento, la ID del argumento de la dependencia del productor; y 4) un indicador de adherencia para indicar que el modo de enlace es el resultado de una dependencia declarada hacia arriba (en realizaciones de la invención que soportan dependencias declaradas hacia arriba) o el resultado de una suscripción adherente (en realizaciones de la invención que soportan suscripciones adherentes) y no debería modificarse a través de declaraciones de dependencias de argumentos de productor de este productor (es decir, el productor almacenado en la fila de la columna que contiene el indicador de adherencia). Cada uno de los productores puede tener cero o más enlaces de productores padres en la columna 1150. Cada uno de los enlaces del productor padre en la columna 1150 incluye: 1) una referencia al productor padre que almacena de vuelta una referencia de acuerdo con una referencia del productor hijo de otro productor (es decir, una referencia a otra fila de la estructura de gráficos de productores para representar un productor padre dependiente de este productor); y 2) una referencia del productor de determinación de dependencia que es una referencia a otra fila de la estructura del gráfico de productores y representa el productor de determinación de dependencia que ha creado el enlace del padre, De este modo, cuando se crea un enlace, la columna del enlace del productor padre de la fila del productor hijo y la columna del enlace del productor hijo de la fila del productor padre están modificadas para representar el enlace (y la referencia del productor de determinación de dependencia es la misma en ambos). En una realización de la invención, como múltiples caminos en el gráfico de productores o diferentes gráficos de productores pueden incluir un productor determinado, hay múltiples enlaces de productores padre para un productor determinado.
Además, la Figura 11C incluye un almacenamiento temporal de la salida del productor y una columna de modificación de la salida del productor anulada 1170 para almacenar las salidas actuales del productor, así como una indicación de si el productor está anulado y el valor de la salida anulada. También, la Figura 11C incluye una columna de marcado de ejecución incremental 1180 para almacenar el marcado de ejecución incremental como se ha descrito anteriormente.
La Figura 11D es un diagrama de bloques de un ejemplo de una estructura de seguimiento de métodos 1058 de la Figura 10 de acuerdo con una realización de la invención. En la Figura 11D se muestran, una columna de claves de método 1190 y una columna de referencias de métodos 1192 para almacenar respectivamente las claves de métodos y las referencias correspondientes a los métodos de las clases cargadas. Además, la Figura 11D también incluye una columna de DependenciasArgumento 1194, una columna de DependenciasCampo 1196, y una columna de DependenciasSecuenciación 1195, una columna de DependenciasHaciaArriba 1193, una columna de DependenciasDébilmenteRestringidas 1199, una columna de clases de salida 1197, y una columna de anotaciones adicionales opcional 1198. La columna de DependenciasArgumento 1194, la columna de DependenciasSecuenciación 1195, la columna DependenciasHaciaArriba 1193, la columna de DependenciasDébilmenteRestringidas 1199, la columna DependenciasCampo 1196 almacenan información de dependencias del productor analizada desde el establecimiento de declaraciones de dependencias del productor del método (por ejemplo, véase 705 de la Figura 7A), mientras que la columna de clases de salida 1197 almacena información relativa a la clase de salida de la salida del método (determinable por la firma del método - por ejemplo véase 710 de la Figura 7A). Los contenidos de ejemplo de la columna DependenciasArgumento 1194, la columna DependenciasCampo 1196, la columna de DependenciasSecuenciación 1195, la columna DependenciasHaciaArriba 1193, y la columna de DependenciasDébilmenteRestringidas 1199, usadas en algunas realizaciones de la invención se proporcionan más adelante en este documento.
Dependencias Dinámicas del Productor
Como se ha descrito anteriormente, una realización de la invención soporta dependencias del productor no dinámicas y dinámicas. Aunque diferentes realizaciones pueden soportar tipos diferentes de dependencias dinámicas del productor, una realización de la invención soporta tipos contingentes y de suscripción de las dependencias dinámicas del productor. De esta forma una dependencia no contingente, no de suscripción es una dependencia no dinámica (estática).
La Figura 12 es un diagrama de bloques que ilustra detalles adicionales de la Figura 10 para soportar dependencias del productor del tipo dinámicas, contingentes y de suscripción de acuerdo con una realización de la invención. La Figura 12 incluye de la Figura 10 la línea de división discontinua 1000, las definiciones de clases que incluyen lógica del negocio 1010 (que incluyen los datos 1012, los métodos 1014, y declaraciones de dependencias del productor 1016), el nuevo módulo de clases 1095, las clases 1054 (incluyendo métodos y declaraciones de dependencias del productor 1056), el nuevo módulo de instancias 1098, las instancias 1052, la estructura de seguimiento de instancias 1065, el módulo de generación automatizada de gráficos de productores 1040, la estructura de gráficos de productores 1060, y el módulo de ejecución de gráficos de productores 1070 (incluyendo el módulo de dependencias dinámicas 1075).
La Figura 12 muestra que las declaraciones de dependencia del productor 1016 opcionalmente incluyen dependencias contingentes 1210, dependencias de suscripción 1220, y múltiples productores 1215. En este punto, múltiples productores 1215 se refiere a la capacidad de una dependencia del productor para devolver una colección de productores. Además, la Figura 12 incluye un módulo de suscripción 1240 y un módulo de contingencia 1230 en el módulo de generación automatizada de gráficos de productores 1040 para procesar las dependencias contingentes 1210 y las dependencias de suscripción 1220. La Figura 12 también muestra que el módulo de suscripción 1240 accede a un registro de suscripción 1250. Además, el módulo de dependencias dinámicas 1075 incluye un módulo de contingencia 1260 y un módulo de suscripción 1265 para procesar las dependencias contingentes 1210 y las dependencias de suscripción 1220. El módulo de suscripción 1265 accede al registro de suscripción 1250.
La siguiente descripción de dependencias contingentes y de suscripción se hace en el contexto de una realización de la invención que usa una clase DEP (una abreviación de dependencia), desde la cual se devuelve una instancia por los productores de determinación de dependencia y se analiza por la rutina de ejecución con el soporte de programación orientado a gráficos de productores. La clase DEP incluye los siguientes campos: 1) TIPO que pude fijarse a suscripción, no suscripción declarada hacia abajo (productores hijos que no son suscripciones), o declaradas hacia arriba de no suscripción (productores padres que son no de suscripción); 2) PROD que se usa para las dependencias declaradas hacia abajo no de suscripción y es una colección de productores hijo (como tal, puede almacenar cero o más productores); 3) SUP TIPO que se usa para dependencias de suscripción y se fija para indicar el tipo de dependencia de suscripción (usada en realizaciones de la invención que soportan múltiples tipos de suscripción; mientras que la realización de la invención descrita en este punto soporta dos tipos - adherente y absorbente, realizaciones alternativas pueden soportar más o menos y/o diferentes tipos de suscripción; 4) SUB CRIT que se usa para dependencias de suscripción y se fija para indicar los criterios de suscripción; 5) MODO ENLACE PAR que se usa para dependencias de suscripción adherentes y dependencias declaradas hacia arriba de no suscripción y se fija para indicar qué modo de enlace debería ser el productor padre; 6) CLASE PAR que se usa para dependencias de suscripción adherentes y dependencias declaradas hacia arriba de suscripción y se fija para indicar qué clase de productor padre debería ser (por ejemplo, la clave de clase); 7) MÉTODO PAR que se usa para dependencias de suscripción adherentes y dependencias declaradas hacia arriba de no suscripción y se fija para indicar qué método de productor padre debería ser (por ejemplo, la clave de método); y 8) INSTANCIA PAR que se usa para dependencias de suscripción adherente y dependencias de no suscripción declaradas hacia arriba y se fija para indicar qué instancia del productor padre debería ser (por ejemplo, la clave de instancia) (si INSTANCIA PAR se deja en blanco, la clave de instancia del productor hijo se usa entonces para el productor padre). Una realización alternativa de la invención podría usar una colección de productores padre (manteniendo cada uno de los elementos de la colección una CLASE_PAR, INSTANCIA_PAR, MÉTODO_PAR, MODOENLACE_PAR) en el caso de dependencias de suscripción adherentes y/o dependencias declaradas hacia arriba de no suscripción. Por supuesto, otras realizaciones alternativas de la invención podrían usar una estructura diferente para devolver dependencias.
Dependencias Contingentes
En una realización de la invención, se soportan tanto las dependencias del productor contingentes como no contingentes. Una dependencia del productor no contingente es aquella que es independiente de la salida de otros productores, mientras que una dependencia del productor contingente es la que es dependiente de la salida de otros productores. Aunque una realización de la invención soporta dependencias del productor tanto no contingentes como contingentes, realizaciones alternativas soportan sólo dependencias no contingentes o contingentes (las dependencias del productor contingentes pueden controlarse inicialmente por los valores por defecto).
Como se ha tratado anteriormente, un productor puede verse como un conjunto de múltiples identificadores, un identificador por cada uno de los niveles de granularidad especificados. En una realización de la invención, una dependencia del productor contingente puede ser contingente en el sentido de que una cualquiera o todos del conjunto de identificadores pueden determinarse condicionalmente en base a los valores de los datos actuales. Por ejemplo, una primera dependencia del productor contingente puede tener sólo el identificador de instancia a determinar condicionalmente (los identificadores de clase y método son fijos), mientras que una segunda dependencia del productor contingente puede tener los identificadores de clase, instancia, y método determinados condicionalmente. Aunque en una realización de la invención todos los identificadores de la pluralidad de identificadores de una dependencia de productor contingente pueden ser condicionales, realizaciones alternativas de la invención pueden implementarse de diferente forma (por ejemplo, permitir que sólo un subconjunto de la pluralidad de identificadores sea condicional).
Las Figuras 13A-J son diagramas de bloques que ilustran seudo código y productores de ejemplo de acuerdo con una realización de la invención. Además, las realizaciones mostradas en la Figura 13A-J usan el mismo mecanismo de determinación de dependencia para ambas dependencias contingente y no contingente. Como tal, para propósitos de explicación, algunos de los ejemplos en las Figuras 13A-J son ejemplos de dependencias del productor no contingentes, mientras que las otras son ejemplos de dependencias del productor contingentes. Además, una dependencia del productor no contingente es aquella en la cual la dependencia es para un productor de determinación de dependencia que es un productor independiente (por ejemplo, en una realización de la invención, el tipo de dependencia es identificable porque su declaración de dependencias del productor está vacía); mientras que una dependencia de productor contingente es aquella en la cual la dependencia es para un productor de determinación de dependencias que es un productor dependiente (por ejemplo, en una realización de la invención, el tipo de dependencia es identificable porque su declaración de dependencias del productor está no vacía).
Además, en las Figuras 13A-J se usan números y letras en un círculo para ilustrar el orden en el cual se realizan las operaciones de acuerdo con una realización de la invención. También, se usa una notación X::Y::Z en las Figuras 13A-J para representar una clave de productor construida de una clave de clase (X), una clave de instancia (Y), y una clave de método (Z). Además los círculos y las líneas con flechas discontinuas representan operaciones que no se realizan en algunas realizaciones de la invención. En particular, donde la ejecución de un productor de determinación de dependencias independiente para una dependencia determinada siempre devolverá la misma dependencia (por ejemplo, un productor de determinación de dependencia independiente), tal productor de determinación de dependencia en algunas realizaciones de la invención se ejecuta pero no se representa y se enlaza en los gráficos de productores.
Productores de Determinación de Dependencia Explícita
La Figura 13A ilustra un seudo código de declaraciones de dependencias del productor para métodos que usan una dependencia declarada de no atajo, no dinámica (no contingente, no de suscripción) de acuerdo con una realización de la invención; mientras que la Figura 13B es un diagrama de bloques de productores que ilustra un ejemplo de una dependencia del productor declarada no de atajo, no dinámica (no contingente, no de suscripción) de acuerdo con un realización de la invención. La Figura 13A muestra: 1) un establecimiento de declaraciones de dependencias del productor 1300 para un método alfa 1305, donde el establecimiento de declaraciones de dependencias del productor 1300 incluye una dependencia de un productor para el productor CW::IY::BETA; y 2) un establecimiento de declaraciones de dependencias del productor 1310 para un método beta 1315, donde el establecimiento de declaraciones de dependencias del productor 1310 está vacío y donde el método beta 1315 devuelve como argumento una instancia de la clase DEP. El método beta 1315 incluye un código de declaración de dependencias del productor 1320 que fija TIPO.DEP a declarada hacia abajo no de suscripción, fija PROD.DEP al productor 13 y devuelve DEP.
En la Figura 13A, el número 1 en un círculo indica que se accede la declaración de dependencias del productor 1300 (por ejemplo, como resultado de la designación de un productor en base al método alfa 1305 como un productor de interés, como resultado de un descubrimiento automatizado de un productor en base al método alfa 1305, como un progenitor de un productor de interés, etc.). El número 2 en un círculo en la Figura 13B muestra que el productor C0::I0::ALFA está representado en base al método alfa 1305. El número 3 en un círculo en la Figura 13A indica que se procesa la dependencia del productor para el productor CW::IY::BETA para determinar la dependencia del productor, y como resultado, el número 4 en un círculo indica que se accede a la declaración de dependencias del productor 1310. Un número 5 en un círculo discontinuo en la Figura 13B muestra que el productor CW::IY::BETA está representado como un productor de determinación de dependencias 1380. Un número 6 en un círculo discontinuo en la Figura 13B indica que el productor C0::I0::ALFA está enlazado en el gráfico de productores para indicar que el productor CW::IY::BETA es un productor hijo. El número 7 en un círculo en la figura 13B indica que el productor CW::IY::BETA se ejecuta y devuelve una DEP para identificar al productor 13. El número 8 en un círculo indica que está representado el productor 13, mientras que un número 9 en un círculo indica que el productor 13 está enlazado como productor hijo en el gráfico de productores al productor C0::I0::ALFA. En la Figura 13B, el productor C0::I0::ALFA y el productor 13 son productores normalizados 1385 (no son productores de determinación de dependencias).
La Figura 13C ilustra un seudo código de las declaraciones de dependencias del productor para métodos que usan una dependencia del productor declarada no de atajo, contingente, no de suscripción de acuerdo con una realización de la invención; mientras que la Figura 13D es un diagrama de bloques de productores que ilustra un ejemplo de dependencia del productor declarada no de atajo, contingente, no de suscripción de acuerdo con una realización de la invención. Además, la Figura 13D se refiere a los productores 5, 7A y 7B de la Figura 5A y la resolución de la dependencia dinámica del productor 5 para el productor 7A.
La Figura 13C muestra: 1) un establecimiento de declaraciones de dependencias del productor 1300 para un método alfa 1305, donde el establecimiento de declaraciones de dependencias del productor 1300 incluye una dependencia de productor para el productor CW::IY::BETA; 2) un establecimiento de declaraciones de dependencias del productor 1325 para un método beta 1315, donde el establecimiento de declaraciones de dependencias del productor 1325 incluye una dependencia del productor para el productor CU::IV::DELTA, y donde el método beta 1315 devuelve como argumento una instancia a la clase DEP; 3) un establecimiento de declaraciones de dependencias del productor 1332 para un método delta 1334, donde el establecimiento de declaraciones de dependencias del productor 1332 está vacío, y donde el método delta 1334 devuelve como argumento una instancia de la clase DEP; y 4) un establecimiento de declaraciones de dependencias del productor 1338 para un método gamma 1340 donde el establecimiento de declaraciones de dependencias del productor 1338 está vacío, y donde el método gamma 1340 devuelve una variable X (donde X es desde una fuente externa, un valor por defecto (explícito o constante en la clase). El método beta 1315 incluye un código de declaración de dependencias del productor 1330 que fija TIPO.DEP a declarada hacia abajo, no de suscripción, fija PROD.DEP al productor 7A ó 7B dependiendo de la salida del productor CX::IZ::GAMMA, y devuelve DEP. El método delta 1332 incluye el código de declaración de dependencias del productor 1336 que fija TIPO.DEP a declarada hacia abajo, no de suscripción, fija PROD.DEP al productor CX::IZ::GAMMA, y devuelve PROD.DEP.
En la Figura 13C, el número 1 en un círculo indica que la declaración de dependencias del productor 1300 se accede (por ejemplo como resultado de la designación de un productor en base al método alfa 1305 como productor de interés, como resultado de un descubrimiento automatizado de un productor en base al método alfa 1305 como un progenitor de un productor de interés, etc.). El número 2 en un círculo en la Figura 13D muestra que el productor 5 se representa en base al método alfa 1305. El número 3 en un círculo en la Figura 13C indica que la dependencia del productor para el productor CW::IY::BETA se procesa para determinar la dependencia del productor, y como resultado el número 4 en un círculo indica que se ha accedido a la declaración de dependencias del productor 1325. El número 5 en un círculo 5 en la Figura 13D muestra que el productor CW::IY::BETA está representado como un productor de determinación de dependencia 1380. El número 6 en un círculo en la Figura 13D indica que el productor 5 está enlazado en el gráfico de productores para indicar que el productor CW::IY::BETA es un productor hijo.
Un número 7 en un círculo en la Figura 13C indica que la dependencia del productor para el productor
CU::IV::DELTA se procesa para determinar la dependencia del productor, y como resultado, el número 8 en un círculo indica que la declaración de dependencias del productor 1332 está accedida. Un número 9 en un circulo discontinuo en la Figura 13D muestra que el productor CU::IV::DELTA se representa como un productor de determinación de dependencias 1380. El número 10 en un círculo discontinuo en la Figura 13D indica que el productor CW::IY::BETA está enlazado en el gráfico de productores para indicar que el productor CU::IV::DELTA es un productor hijo. Un número 11 en un círculo en la Figura 13D indica que se ejecuta el productor CU::IV::DELTA y devuelve una DEP para identificar CX::IZ::GAMMA. Un número 12 en un círculo indica que el productor CX::IZ::GAMMA está representado, mientras que un número 13 en un círculo indica que el productor CX::IZ::GAMMA que está enlazado como un productor hijo en el gráfico de productores al productor CW::IY::BETA.
En la Figura 13D, una letra A en un círculo indica que el productor CX::IZ::GAMMA se ejecuta y devuelve X al productor CW::IY::BETA, mientras que una letra B en un círculo indica que el productor CW::IY::BETA, devuelve una DEP para identificar al productor 7A; una letra C en un círculo indica que el resto sin resolver (método beta) 1390 está resuelto ahora y el productor 7A está representado, mientras que una letra D en un círculo indica el enlace del productor 5 con el productor 7A. En la Figura 13D, los productores CX::IZ::GAMMA, 5 y 7A son productores normalizados 1385.
Productores de Determinación de Dependencia Sobre la Marcha
La Figura 13E ilustra un seudo código de las declaraciones de dependencia del productor para métodos que usan tanto dependencias del productor declaradas de no de atajo, contingentes, de no suscripción como dependencias del productor declaradas de atajo, contingente, de no suscripción de acuerdo con una realización de la invención; mientras que la Figura 13F es un diagrama de bloques de los productores que ilustran una dependencia del productor declarada de no de atajo, contingente, de no suscripción y una dependencia del productor declaradas de atajo, contingente, de no suscripción de acuerdo con una realización de la invención. De forma similar a las Figuras 13D, la Figura 13F se refiere a los productores 5, 7A, y 7B de la Figura 5A y la resolución de la dependencia dinámica del productor 5 al productor 7A.
Las Figura 13E-F son las mismas que las Figuras 13C-D, con las excepciones: 1) el establecimiento de declaraciones de dependencias del productor 1342 reemplaza al establecimiento de declaraciones de dependencias del productor 1325; 2) un método fly 1344 reemplaza al método delta 1334; y 3) el productor CW::IY::FLY reemplaza al productor CU::IC::DELTA. El establecimiento de declaraciones de dependencias del productor 1342 incluye una dependencia del productor declarada de atajo para el CX::IZ::GAMMA. De este modo, el número 4 en un círculo en la Figura 13E ahora indica que la declaración de dependencias del productor 1342 está accedida. El número 7 en un círculo en la Figura 13E indica ahora que la dependencia del productor declarada de atajo para productor CX::IZ::GAMMA se procesa para determinar la dependencia del productor, y como resultado, la rutina de ejecución invoca al productor de determinación de dependencias CW::IY::FLY sobre la marcha en base al método fly 1344. El número 8 en un círculo indica ahora que la declaración de dependencias del productor 1332 está accedida. El número 9 en un círculo en la Figura 13F muestra ahora que el productor CW::IY::FLY está representado. El número 10 en un círculo discontinuo en la Figura 13F indica que el productor CW::IY::BETA está enlazado en el gráfico de productores para indicar que el productor CW::IY::FLY es un productor hijo. El número 11 en un círculo en la Figura 13F indica que el productor CW::IY::VUELO se ejecuta y devuelve una DEP para identificar CX::IZ::GAMMA. El resto de las Figuras 13E-F es el mismo que en las figuras 13C-D.
La generación sobre la marcha por la rutina de ejecución del productor de determinación de dependencias
CW::IY::FLY alivia al programador de aplicación de tener que escribir el código explícito de la declaración de dependencias del productor y representar un productor de determinación de dependencias en base al mismo. Además, permite al programador de aplicación especificar directamente la dependencia sobre el productor CX::IZ::GAMMA en el establecimiento de declaraciones de dependencias del productor para el método beta 1315, en oposición a especificar el productor de determinación de dependencias CU::IV::DELTA.
La técnica de atajo puede usarse en una diversidad de situaciones, y puede tener adicionalmente una diversidad de formados. Por ejemplo, aunque en las Figuras 13E-F la dependencia declarada de atajo es para una dependencia no contingente (identifica directamente el productor hijo) y es un establecimiento de declaraciones de dependencias del productor para un método sobre el cual se basa del productor de determinación de dependencias, se muestran otras situaciones y formatos como sigue: 1) las Figuras 13G-H ilustran el uso de dos atajos, donde uno es contingente y el otro no es contingente y es parte de un establecimiento de declaraciones de dependencias del productor para un método sobre el cual está basado un productor normalizado y el otro es no contingente y es parte de un establecimiento de declaraciones de dependencias del productor para un método sobre el cual está basado un productor de determinación de dependencias; y 2) las Figuras I-J ilustran el uso de un atajo que no es contingente y que es un establecimiento de declaraciones de dependencias del productor para un método sobre el cual está basado un productor normalizado.
La Figura 13G ilustran el seudo código de las declaraciones de dependencias del productor para métodos que usan una dependencia del productor declarada de atajo, contingente, no de suscripción y una dependencia del productor declarada de atajo, no contingente, no de suscripción de acuerdo con una realización de la invención; mientras que la Figura 13H es un diagrama de bloques de productores que ilustran un ejemplo de dependencia del productor declarada de atajo, contingente, no de suscripción y una dependencia del productor declarada de atajo, no contingente, no de suscripción de acuerdo con una realización de la invención. La Figura 13G muestra: 1) un establecimiento de declaraciones de dependencias del productor 1345 para el método alfa 1305, donde el establecimiento de declaraciones de dependencias del productor 1345 incluye una dependencia del productor declarada de atajo, contingente, para el productor <P>GETC1::I1::M1; 2) un establecimiento de declaraciones de dependencias del productor 1350 para un método fly1 1355, donde el establecimiento de declaraciones de dependencias del productor 1350 incluye una dependencia del productor declarada de atajo, no contingente, para el productor C0::I0::GETC1, y donde el método fly1 1355 devuelve como argumento una instancia de DEP: 3) el establecimiento de declaraciones de dependencias del productor 1332 para un método fly2 1362, donde el método fly2 1362 devuelve como argumento como una instancia de DEP; y 4) el establecimiento de declaraciones de dependencias del productor 1365 para un método getc1, donde el método getc1 1370 devuelve C1 con el valor de CX o de CY.
El método FLY1 1355 y su establecimiento de declaraciones de dependencias del productor 1350 se proporcionan por la rutina de ejecución en respuesta a la dependencia declarada de atajo <P>GETC1::I1::M1 (que indica que se ha usado el atajo para la clave de clase). El método fly1 1355 incluye un código de declaración de dependencias del productor 1360 que fija TIPO.DEP a declarada hacia abajo de no suscripción, fija PROD.DEP al productor CX::I1::M1 ó CY::I1::M1 dependiendo del valor de la salida C1 por el productor C0::I0::GET1, y devuelve DEP. Aunque que en el ejemplo de la Figura 13H, se usa <P> para designar que es la clave de clase del productor que es contingente, realizaciones alternativas de la invención podrían usar otras sintaxis. Además, aunque en el ejemplo de la Figura 13H, se usa <P> para designar que es la clave de clase del productor que es contingente, una realización de la invención soporta tener más identificadores y/o diferentes de los identificadores que construyen la clave del productor a indicar como contingente de este modo.
En la Figura 13G, un número 1 en un círculo indica que la declaración de dependencias del productor 1345 está accedida (por ejemplo, como resultado de la designación de un productor en base al método alfa 1305 como un productor de interés, como resultado del descubrimiento automatizado de un productor en base al método alfa 1305, como progenitor de un productor de interés, etc.). Un número 2 en un círculo en la Figura 13H muestra que el productor C0::I0::ALFA se representa en base al método alfa 1305. Un número 3 en un círculo en la Figura 13G indica que la dependencia del productor declarada de atajo se procesa para determinar las dependencias del productor y la rutina de ejecución proporciona el método fly1 1355; y como resultado, un número 4 en un círculo indica que la declaración de dependencias del productor 1350 está accedida.
Un número 5 en un círculo en la Figura 13H muestra que un productor C0::I0::FY1 está representado como un productor de determinación de dependencia 1380. Un número 6 en un círculo en la figura 13H indica que el productor C0::I0::ALFA está enlazado en el gráfico de productores para indicar que el productor C0::I0::FLY1 es un productor hijo. Un número 7 en un círculo en la Figura 13G indica que la dependencia del productor declarada de atajo para el productor C0::I0::GETC1 se procesa para determinar las dependencias del productor y la rutina de ejecución proporciona el método fly2 1362, y como resultado, un número 8 en un círculo indica que la declaración de dependencias del productor 1332 está accedida. Un número 9 en un círculo discontinuo en la Figura 13H muestra que el productor C0::I0::FLY2 está representado. Un número 10 en un círculo discontinuo en la Figura 13H indica que el productor C0::I0::FLY1 está enlazado en el gráfico de productores para indicar que el productor C0::I0::FLY2 es un productor hijo.
Un número 11 en un círculo en la Figura 13H indica que el productor C0::I0::FLY2 se ejecuta y devuelve una DEP para identificar al productor C0::I0::GETC1. Un número 12 en un círculo indica que el productor C0::I0::GETC1 está representado, mientras que un número 13 en un círculo indica que el productor C0::I0::GETC1 está enlazado en el gráfico de productores al productor C0::I0::FLY1 es un productor hijo.
En la Figura 13H, una letra A en un círculo indica que el productor C0::I0::GETC1 se ejecuta y devuelve C1=CX al productor C0::I0::FLY1, mientras que una letra B en un círculo indica que el productor C0::I0::FLY1 se ejecuta y devuelve una DEP para identificar al productor CX::I1::M1; una letra C en un círculo indica que el resto sin resolver (método fly1) 1390 está ahora resuelto, y una letra D en un círculo indica el enlazamiento del productor C0::I0::ALFA con el productor CX::I1::M1. En la Figura 13H, los productores C0::I0::GETC1, C0::I0::ALFA, y CX::I1::M1 son productores normalizados 1385.
La generación sobre la marcha por la rutina de ejecución del productor de determinación de dependencias
C0::I0::FLY1 y C0::I0::FLY2 alivia al programador de la aplicación de tener que escribir el código explicito de la declaración de dependencias del productor y representar a los productores de determinación de dependencias en base a los mimos. Además, permite a los programadores de aplicación especificar directamente la dependencia contingente sobre el productor **::I1::M1 a través del método getC1 en el establecimiento de declaraciones de dependencias del productor para el método alfa 1305, en oposición a especificar el productor de determinación de dependencias CW::IY::BETA.
La Figura 13I ilustra un seudo código de las declaraciones de dependencia del productor para los métodos que usan una dependencia del productor declarada de atajo, no dinámica (no contingente, no de suscripción) de acuerdo con una realización de la invención; mientras que la Figura 13J es un diagrama de bloques de productores que ilustran un ejemplo de dependencia del productor declarada de atajo, no dinámica de acuerdo con una realización de la invención. La Figura 13I muestra: 1) un establecimiento de declaraciones de dependencias del productor 1372 para un método alfa 1305, donde el establecimiento de declaraciones de dependencias del productor 1372 incluye una dependencia del productor declarada de atajo para el productor 10; y 2) un establecimiento de declaraciones de dependencias del productor 1374 para un método fly 1376, donde el establecimiento de declaraciones de dependencias del productor 1374 está vacío, y donde el método fly 1376 devuelve como argumento una instancia de DEP. El método fly 1776 y su establecimiento de declaraciones de dependencias del productor 1374 se proporcionan por la rutina de ejecución en respuesta a la dependencia declarada de atajo. El método fly 1376 incluye un código de declaración de dependencias del productor 1378 que fija TIPO.DEP a declarada hacia abajo no de suscripción, fija PROD.DEP al productor 10 y devuelve DEP.
En la Figura 13I un número 1 en un círculo indica que la declaración de dependencias del productor 1372 está accedida (por ejemplo, como resultado de la designación de un productor en base al método alfa 1305 como productor de interés, como resultado de un descubrimiento automatizado de un productor en base al método alfa 1305 como un progenitor de un productor de interés, etc.) Un número 2 en un círculo en la Figura 13J muestra que el productor C0::I0::ALFA está representado en base al método alfa 1305. Un número 3 en un círculo en la Figura 13I indica que se procesa la dependencia del productor declarada de atajo para determinar las dependencias del productor y la rutina de ejecución proporciona el método fly 1376; y como resultado, un número 4 en un círculo indica que la declaración de dependencias del productor 1374 está accedida. Un número 5 en un círculo discontinuo en la Figura 13J indica que el productor C0::I0::FLY está representado como el productor de determinación de dependencias 1380. Un número 6 en un círculo discontinuo en la Figura 13J indica que el productor C0::I0::ALFA está enlazado en el gráfico de productores para indicar que el productor C0::I0::FLY es un productor hijo.
Un número 7 en un círculo en la Figura 13J indica que se ejecuta el productor C0::I0::FLY y devuelve una DEP para identificar el productor 10. Un número 8 en un círculo indica que el productor 10 está representado, mientras que un número 9 en un círculo indica el productor C0::I0::ALFA que está enlazado en el gráfico de productores para indicar que el productor 10 es un productor hijo. En la Figura 13J, el productor C0::I0::ALFA y el productor 10 son productores normalizados 1385.
Debería entenderse que el programador de la rutina de ejecución, en una realización de la invención, escribe un simple método fly para interpretar todas las sintaxis y combinaciones soportadas (por ejemplo, el método fly 1334, el método fly1 1355, el método fly2 1362, el método fly 1376) y los incluye en la rutina de ejecución. Esto no sólo permite a los programadores de aplicaciones evitar escribir el código para los productores de determinación de dependencia donde puede usarse un método fly, el programador de la rutina de ejecución sólo necesita escribir el método genérico fly una vez (el único fly para todas las situaciones soportadas). Además debería entenderse que las dependencias declaradas de atajo permiten que una rutina de ejecución use los productores de determinación de dependencias mientras que al mismo tiempo permiten a un programador de aplicación indicar los productores normalizados en las declaración de dependencias del productor (por ejemplo, las Figuras 13G-J).
Estructura de Seguimiento de Métodos
Refiriéndonos de nuevo a la estructura de seguimiento de métodos de la Figura 11D, se describirán ahora los contenidos de ejemplo de la columna DependenciasArgumento 1194, la columna DependenciasCampo 1196, la columna de DependenciasSecuenciación 1195, la columna de DependenciasHaciaArriba 1193, la columna de DependenciasDébilmenteRestringidas 1199 usadas en algunas realizaciones de la invención. Específicamente, la columna DependenciasArgumento 1194 almacena una colección de elementos, uno para cada DependenciaArgumento. En una realización de la invención, cada uno de los elementos incluye lo siguiente: 1) la ID del argumento; 2) un identificador de la naturaleza de la clave de clase, que es una de la clase explícita, la misma clase, y la clase contingente; 3) un identificador explícito de la clave de clase relleno cuando el identificador de la naturaleza de la clave de clase que indica la clase explícita; 4) un identificador de la clave del método de determinación de clase contingente relleno cuando el identificador de la naturaleza de la clave de clase indica una clase contingente; 5) un identificador de la naturaleza de la clave de instancia, siendo uno de la instancia explícita, la misma instancia, y la instancia contingente; 6) un identificador de la clave de instancia explícita relleno cuando el identificador de la naturaleza de la clave de instancia indica instancia explícita; 7) un identificador de la clave del método de determinación de instancia contingente relleno cuando el identificador de la naturaleza de la clave de instancia indica instancia contingente; 8) un identificador de la naturaleza de la clave de método, siendo uno de método explícito, el mismo método y el método contingente; 9) un identificador de la clave del método explícito relleno cuando el identificador de la naturaleza de la clave de método indica el método explícito; 10) un identificador de la clave de método de determinación del método contingente relleno cuando el identificador de la naturaleza de la clave del método indica un método contingente; y 11) un identificador de atajo que indica si la declaración de dependencias del productor para el argumento en el establecimiento de declaraciones de dependencias del productor contenía una indicación de atajo (es decir, el establecimiento de declaraciones de dependencias del productor identifica directamente un productor hijo normalizado en lugar de un productor de determinación de dependencias).
La indicación "...explicito" de los diversos indicadores de la naturaleza de la clave se usa donde se proporciona la clave explícita para las dependencias del productor en el establecimiento de declaraciones de dependencias del productor. A modo de ejemplo, la dependencia del productor "CW::IY::BETA" del establecimiento de declaraciones de dependencias del productor 1300 de la Figura 13A proporciona una clase explícita, una instancia, y una clave de método.
En algunas realizaciones de la invención, se soporta una técnica de taquigrafía para los establecimientos de declaraciones de dependencias del productor de modo que: 1) si no se proporciona una clase para una dependencia del productor determinado, entonces se usa la misma clase que el productor padre; y 2) si no se proporcionan una clase y una instancia para una dependencia de un productor determinado, entonces se usan la misma clase e instancia que el productor padre. En otras realizaciones de la invención , se usa una sintaxis para permitir que cualquier combinación de clases, instancias y métodos para sean las mismas que los padres (con la excepción de que todas sean las mismas) (por ejemplo, se usa un separador para designar cada una de las clases, instancias, y métodos, y una ausencia de tal separador indica los mismo que los padres - a modo de ejemplo específico, la sintaxis puede ser "#C:", "#I:", y "#M:", de modo que una dependencia del productor en un establecimiento de declaraciones de dependencias del productor puede ser #C:"clave de clase"::#I:"clave de instancia":: #M:"clave de método") (donde las comillas indican un espacio para un valor de la variable). La indicación "...igual" de los diversos identificadores de la naturaleza de clave se usan donde se use esta técnica de taquigráfica en el establecimiento de declaraciones de dependencias del productor:
Como se ha indicado anteriormente, en algunas realizaciones de la invención se soporta una dependencia del productor contingente a través de la sintaxis (por ejemplo, <P>) usada en el establecimiento de declaraciones de dependencias del productor propiamente (véase 1345 de la Figura 13G), y tal sintaxis puede usarse sobre una o más de las clases, instancias, y métodos de una dependencia del productor. La indicación "...contingente" de los diversos identificadores de la naturaleza de clave se usan para identificar cuándo se produce tal dependencia del productor contingente, mientras que el "identificador de clave del método de determinación...contingente" indica la clave del método del productor hijo (la clase y la instancia son las mismas que las del productor padre). A modo de ejemplo, las dependencias del productor "<P>GETC1::I1::M1" para la declaración de dependencias del productor 1345 de la Figura 13G proporciona una clase contingente (donde la clave del método de determinación de clase contingente es GETC1), una clave de instancia explícita, y una clave de método explícita.
La columna DependenciasSecuenciación 1195, la columna DependenciasHaciaArriba 1193, y la columna DependenciasDébilmenteRestringidas 1195 almacenan cada una, una colección de elementos, uno por cada DependenciaSecuenciación, DependenciaHaciaArriba, y DependenciaDébilmenteRestringida. En una realización de la invención, cada uno de tales elementos tiene la misma estructura que un elemento de la colección para las DependenciasArgumento, excepto que no incluye una ID de argumento. Además, aunque las figuras 13A-J ilustran dependencias declaradas hacia abajo no de suscripción que se originan desde los productores de determinación de dependencias, deberá entenderse que en el caso de una dependencia declarada hacia arriba o una dependencia débilmente restringida el productor de determinación de dependencias puede devolver las otras dependencias tratadas con referencia a las Figuras 7F-G.
La columna DependenciasCampo 1196 almacena una colección de elementos, uno para cada DependenciasCampo. Aunque en una realización de la invención cada uno de los elementos incluye una clave de método de propiedad, en realizaciones alternativas de la invención pueden tener la misma estructura que un elemento de la colección de DependenciasSecuenciación.
Dependencias de Suscripción
En una realización de la invención, se soportan ambas dependencias del productor de no suscripción y de suscripción. Cuando se declara una dependencia del productor de suscripción para un método determinado y se representa el productor determinado desde ese método determinado, la rutina de ejecución puede resolver durante el tiempo de ejecución (en base a la existencia de otros productores) el conjunto de cero o más productores que cumplen los criterios de la suscripción. Aunque una realización de la invención soporta ambas dependencias del productor de no suscripción y de suscripción, realizaciones alternativas sólo soportan de no suscripción. Además, aunque en una realización de la invención se soportan dos tipos de dependencias de suscripción (absorbentes y adherentes), realizaciones alternativas de la invención pueden soportar más, menos, y/o diferentes tipos de dependencias del productor de suscripción.
Las Figuras 14A-C son diagramas de bloques que ilustran las suscripciones absorbentes y adherentes de acuerdo con una realización de la invención. La Figura 14A es un diagrama de bloques de un ejemplo de registro de suscripción 1250 de la figura 12 de acuerdo con una realización de la invención. Aunque la Figura 14A ilustra esta estructura de registro como una tabla, debería entenderse que puede usarse cualquier estructura de datos adecuada (por ejemplo, un mapa hash). La Figura 14B es un diagrama de bloques de productores de ejemplo que ilustra una dependencia del productor de suscripción absorbente, no contingente de acuerdo con una realización de la invención. La Figura 14C es un diagrama de bloques de productores de ejemplo que ilustra una dependencia del productor de suscripción adherente no contingente de acuerdo con una realización de la invención. Se muestran dos filas en la tabla de la Figura 14A rellenas con el contenido usado en los ejemplos de las Figuras 14B-C. Los números en un círculo usados en las Figuras 14B-C para ilustrar el orden en el cual se realizan las operaciones de acuerdo con una realización de la invención.
En la Figura 14A, la columna de claves del productor del suscriptor 1400, la columna del tipo de suscripción 1405, y el criterio de suscripción para disparar la columna de productores de disparo 1410 se muestran para almacenar respectivamente el contenido correspondiente al nombre de la columna. Además, la Figura 14A muestra una columna del modo de enlace del padre 1425 para almacenar el modo de enlace para el productor padre de la dependencia de suscripción, esta información se describirá con más detalle con respecto a las Figuras 14B-C.
La Figura 14A también muestra una columna de productores de coincidencia 1415 y una columna completa 1420 usada para suscripciones absorbentes. La columna de productores de coincidencia 1415 se usa para almacenar las claves productores, de los productores de disparo que cumplen los criterios de suscripción de la suscripción absorbente, mientras que la columna completada 1420 se usa para seguir si la suscripción absorbente se ha completado durante una ejecución determinada del conjunto actual de los gráficos de productores. La columna de productores coincidentes 1415 y la columna completados 1420 proporcionan una optimización opcional adicional que permite que el trabajo de escanear los productores representados se divida entre la generación automatizada de gráficos de productores y la ejecución de los gráficos de productores como se describe más adelante en este documento.
La Figura 14A también muestra una columna de clase de padres 1430, una columna de métodos de padres 1435, y una columna de instancias de padres 1437 usadas para suscripciones adherentes. La columna de clases de padres 1430, la columna de métodos de padres 1435, y la columna de instancias de padres 1437 respectivamente almacenan las claves de clases, la clave de métodos, y la clave de instancias de los productores padres a crear para la suscripción adherente. Además, la Figura 14A muestra una columna de referencias del productor de determinación de dependencias 1421 que almacena una referencia al productor de determinación de dependencias que crea la suscripción.
Suscripción Absorbente
En una dependencia del productor de suscripción absorbente, la dependencia es para la colección de todos los productores de la estructura de gráficos de productores actuales que cumplen el criterio de suscripción de absorción. Con referencia a la Figura 14B, un número 1 en un círculo indica que un productor 1450 está representado (por ejemplo, como resultado de la designación del productor 1450 como un productor de interés, como resultado de un descubrimiento automatizado del productor 1450 como un progenitor de un productor de interés, etc.). El productor 1450 está basado en un método para el cual la declaración de dependencias del productor incluye una dependencia del productor (por ejemplo, con una ID de argumento X). Un número 2 en un círculo indica que la dependencia del productor, del productor 1450 se procesa para identificar un productor 1455.
Un número 3 en un círculo indica que el productor 1450 está enlazado (en el ejemplo anterior, a través de la ID de argumento X) en el gráfico de productores para el productor 1455 como un productor hijo. Un número 4 en un círculo indica la ejecución del productor 1455. El productor 1455 es un productor de determinación de dependencia que incluye el código de declaración de dependencias del productor que indica una dependencia del productor de suscripción absorbente y que indica el criterio de suscripción absorbente. Como tal la ejecución del productor 1455 da como resultado el relleno del registro de suscripción. Con respecto al ejemplo en la primera fila de la Figura 14A, la columna de claves del productor del subscriptor 1400, la columna del tipo de suscripción 1405, los criterios de suscripción para la columna de productores de disparo 1410, la columna del modo de enlace del padre 1425, y la columna de referencias del productor de determinación de dependencias 1421 se rellenan respectivamente con la clave del productor 1450, una indicación de que la suscripción es del tipo absorbente, los criterios de suscripción absorbente contendidos dentro del productor 1455, el modo de enlace del productor 1450 enlazado con el productor 1455 (el cual, en el caso de una suscripción absorbente será una dependencia de argumento e incluirá una ID de argumento, pero cuyo indicador de adherencia indicará no adherencia - en el ejemplo anterior, la ID de argumento X), y una referencia para el productor 1455 (el productor de determinación de dependencias que crea la suscripción).
5A-N en un círculo indica la representación de productores 1460A-N. En este ejemplo, los productores 1460A-N cumplen los criterios de suscripción absorbente y de este modo son productores de disparo. Como tal, 6A-N en un círculo indica el enlace del productor 1450 con los productores 1460A-N (en el ejemplo anterior, a través de la ID de argumento X). Un número 7 en un círculo indica que está completada la dependencia de suscripción absorbente para la ejecución actual de los gráficos de productores, y a continuación se ejecuta el productor 1450.
En una realización de la invención, los criterios de suscripción absorbente pueden ser una o más de las claves que construyen una clave del productor. De este modo, en las realizaciones de la invención donde una clave de productor comprende una clave de clase, una clave de instancia, y una clave de método, el criterio de suscripción podría ser una o más de tales claves. A modo de ejemplo con referencia a la Figura 11C, un rastreo a través de los productores representados en búsqueda de los que cumplen el criterio de suscripción es un rastreo a través de una o más de las tres primeras columnas de la estructura de gráficos de productores para determinar si las claves de los productores representados coinciden con las claves de los criterios de suscripción absorbente. Aunque en una realización de la invención, el criterio de suscripción absorbente puede ser uno o más de cualesquiera claves que construyen una clave de productor, en realizaciones alternativas de la invención el criterio de suscripción de absorción está limitado a un subconjunto de claves que construyen una clave de productor.
Suscripción Adherente
En una dependencia de productor de suscripción adherente, la dependencia causa que el productor padre a representar para cada productor cumpla el criterio de suscripción adherente. Con referencia a la Figura 14C, un número 1 en un círculo indica un productor 1470 que está representado (por ejemplo, como resultado de la designación del productor 1470 como productor de interés, como resultado de un descubrimiento automatizado del productor 1470 como progenitor de un productor de interés a través de la dependencia de secuenciación (por ejemplo, como resultado de una DependenciaSecuenciación o DependenciaDébilmenteRestringida, etc.). El productor 1470 es un productor de determinación de dependencia que incluye un código de declaración de dependencias del productor que indica una suscripción adherente, el criterio de suscripción adherente para los productores de disparo, y las características de suscripción adherente para los productores padre a crear.
La ejecución del productor 1470 da como resultado el relleno del registro de suscripción. Con respecto al ejemplo en la segunda fila de la Figura 14A, la columna de claves de productor del suscriptor 1400, la columna del tipo de suscripción 1405, y el criterio de suscripción para la columna de productores de disparo 1410 se rellenan respectivamente con la clave del productor, del productor 1470, una indicación de que la suscripción es del tipo adherente, y el criterio de suscripción adherente para los productores de disparo contenidos dentro del productor 1470. Además, la columna de clases de padres 1430, la columna de métodos de padres 1435, la columna de instancias de padres 1437, y la columna de modo de enlace 1425 del productor padre a enlazar con el productor de disparo se rellenan con las características de suscripción adherente para el productor padre a crear - en esta realización de la invención, respectivamente la clase del productor padre a representar, el método del productor padre a representar, la instancia del productor padre a representar (si se deja en blanco, sería igual a la clave de instancia del productor de disparo), el modo de enlace (que en el caso de suscripción adherente, puede ser: 1) un argumento, un campo, o una dependencia de secuenciación; 2) una ID de argumento si es una dependencia de argumento - la ID de argumento del productor padre a enlazar con el productor de disparo (por ejemplo la ID de argumento Y). Además, la columna de referencias del productor de determinación de dependencias 1421 se rellena con una referencia al productor de determinación de dependencias que creó la suscripción (en la Figura 14C, el productor 1470).
Con referencia a la Figura 14C, un número 2 en un círculo indica que el productor 1475 está representado (por ejemplo como resultado de la designación del productor 1475 como un productor de interés, como resultado de un descubrimiento automatizado del productor 1475 como un progenitor de de un productor de interés, etc.). Además, se determina si el productor 1475 cumple el criterio de suscripción adherente para un productor de disparo. Un número 3 en un círculo indica que en respuesta al productor de disparo 1475, se representa el productor 1480 en base a las características de suscripción adherente para el productor padre a crear. Con referencia a la segunda fila de ejemplo de la Figura 14C, la clave de clase, la clave de método, la clave de instancia, y el modo de enlace se acceden desde la columna de clases de padres 1430, la columna de métodos de padres 1435, la columna de instancias 1427, y la columna de modos de enlaces de padres 1425, respectivamente. El productor padre tiene una clave de productor que comprende la clave de clase accedida, la clave de instancia accedida (si se deja en blanco, la clave de instancia del productor de disparo (en la Figura 14C, el productor 1475)), y la clave del método accedido - en el ejemplo de la Figura 14C, este es el productor 1480. Un número 4 en un círculo indica que el productor padre representado 1480 está enlazado en el gráfico de productores al productor de disparo hijo 1475 a través del modo de enlace accedido (en el ejemplo anterior el tipo del modo de enlace = dependencia de argumento; la ID del argumento del modo de enlace = Y). También un número 4 en un círculo, en el caso de una dependencia de argumento, el indicador de adherencia se fija para indicar adherencia - que la dependencia del productor en esa posición del establecimiento de declaraciones de dependencias del productor para el método sobre el cual está basado el productor padre representado 1480 debería ignorarse por el productor 1480 - esto impide que el enlace creado por la dependencias del productor de suscripción adherente se sobrescriba por las operaciones de generación automatizada del gráfico de productores.
En una realización de la invención, el criterio de suscripción adherente para productores de disparo puede ser una o más de las claves de construcción de una clave de productor. De este modo, en realizaciones cuando una clave de productor comprende una clave de clase, un clave de instancia, y una clave de método, el criterio de suscripción adherente para el disparo podrían ser una o más de las claves de clase, instancia y método. A modo de ejemplo con referencia a la Figura 11C, un rastreo a través de los productores representados en búsqueda de los que cumplen el criterio de suscripción adherente para los productores de disparo es un rastreo a través de una o más de las primera-tercera columnas de la estructura de gráficos de productores para determinar si las claves de los productores representados coinciden con las claves del criterio de suscripción adherente para los productores de disparo. Aunque en una realización de la invención el criterio de suscripción adherente para productores de disparo puede ser una o más de las claves de construcción de una clave de productor, en realizaciones alternativas de la invención el criterio de suscripción absorbente puede ser un número más limitado de las claves que construyen una clave de productor.
Las Figuras 14D-E ilustran la elección de un productor padre en base al productor de determinación de dependencias de padres de acuerdo con una realización de la invención. Aunque las Figuras 14D-E se describen con referencia a dependencias de argumentos, realizaciones de la invención pueden soportar el uso de las dependencias de secuenciación y de campo.
La Figura 14D ilustra la elección de un productor padre en base al productor padre de determinación de dependencia creado por una suscripción adherente de acuerdo con una realización de la invención. Al igual que la Figura 14C, la Figura 14D muestra el productor de suscripción adherente 1470 y el productor de disparo 1475; sin embargo, en lugar del productor 1480, la Figura 14D muestra un productor de determinación de dependencia 1480 creado a través de la suscripción adherente del productor de suscripción adherente 1470. Además, la Figura 14D muestra que el modo de enlace de la suscripción adherente es la dependencia de argumento, ID de argumento = X, y el indicador de adherencia = adherencia. Como se ilustra por la línea curva discontinua desde productor 1475 al productor de determinación de dependencia 1480, la DEP devuelta por el productor de determinación de dependencias puede basarse en la salida del productor 1475 propiamente (el argumento de ID de argumento=X). En la Figura 14D, el productor de determinación de dependencias 1480 devuelve una dependencia del productor declarada hacia arriba de no suscripción sobre un productor 1482, con el modo de enlace indicando dependencia de argumento y la ID de argumento=Y. Mientras que las ID de argumentos de X e Y se usan en la Figura 14D para mostrar que pueden diferir, debería entenderse que podrían ser iguales.
La Figura 14E ilustra la elección de un productor padre en base al productor padre de determinación de dependencias creado por el productor de determinación de dependencias hijo, cuyo productor de determinación de dependencia hijo está enlazado por una dependencia de secuenciación, de acuerdo con una realización de la invención. La Figura 14E es similar en estructura a la Figura 14D; específicamente, los productores 1475, 1480 y 1482 se reemplazan con los productores 1486, 1496, y 1498. Sin embargo, en lugar del productor de suscripción adherente 1470 que crea el enlace entre los productores 1480 y 1475, el productor 1486 tiene una dependencia de secuenciación sobre el productor de determinación de dependencias 1494 (por ejemplo, creada a través de una DependenciaHaciaArriba o una DependenciaDébilmenteRestringida), la cual crea el productor de determinación de dependencias 1496 a través de una dependencia declarada hacia arriba de no suscripción.
Merece la pena observar que las dependencias de suscripción adherente y las dependencias no de suscripción declaradas hacia arriba (por ejemplo creadas a través de DependenciasHaciaArriba y/o DependenciasDébilmenteRestringidas) causan un construcción de abajo a arriba de un gráfico de productores (en oposición a la construcción de arriba abajo descrita anteriormente en este documento). Además, esta construcción de abajo a arriba no está limitada a la construcción de un nivel único, sino que puede ser de múltiples niveles) (por ejemplo, si, debido a una suscripción adherente o una dependencia declarada hacia arriba de no suscripción, se representa un productor padre, el mismo productor padre puede también ser un productor de disparo para una suscripción adherente o puede incluir una dependencia declarada hacia arriba de no suscripción y causar la representación de oto productor padre, y así sucesivamente). En este sentido, las dependencias de suscripción adherente, así como las dependencias no de suscripción declaradas hacia arriba, invierten la construcción del gráfico de productores.
Aunque en algunas realizaciones de la invención, los productores padre identificados por las características de la suscripción adherente son productores normalizados (véase la Figura 14C), pueden implementarse realizaciones alternativas para soportar la identificación de otros tipos de productores. Por ejemplo, en realizaciones de la invención que permiten a las características de suscripción adherente identificar un productor de determinación de dependencias (véase la Figura 14D), tal productor de determinación de dependencias puede acceder a la salida del productor de disparo y puede, en base a esa salida, disparar la creación de un productor particular como productor padre que necesita soportarse sobre el hijo (este productor padre puede existir ya o no; si ya existe, está simplemente enlazado, y el productor hijo se añade a su argumento; si no existe aún, se crea). El caso donde el productor de determinación de dependencias devuelve un productor constante imita una suscripción absorbente. El caso donde el productor de determinación de dependencia devuelve un productor cuya clave de instancia es única por productor de disparo (por ejemplo, devuelve un productor cuya clave de instancia es la clave del productor del productor de disparo) da como resultado un productor padre separado por productor hijo y se denomina como una suscripción adherente pura. El caso donde el productor de determinación de dependencia devuelve una clave de instancia que no es ni constante ni única por productor de disparo, puede mezclar los comportamientos de las suscripciones adherentes puras y las subscripciones absorbentes y se denominan como una suscripción adherente no pura.
Ventajas de Ejemplo
Como se ha descrito anteriormente, en una realización de la invención, las dependencias del productor se declaran para los métodos como un modo de especificar una secuenciación de invocación de métodos que usa las instancias apropiadas (donde las instancias apropiadas incluyen las instancias a usar como argumentos, las instancias a usar por los métodos de instancias, y las instancias de meta clases usadas por los métodos de clases) sin el uso del código de secuenciación de invocación manual; efectivamente, el trabajo de generar algo o todo el código de secuenciación de invocación manual se reemplaza con: 1) el trabajo hecho por el programador de aplicación para escribir las declaraciones de dependencias del productor; y 2) el trabajo hecho por la rutina de ejecución para descubrir y construir los gráficos de productores y ejecutar los productores de esos gráficos de productores. Aunque el esfuerzo para escribir la rutina de ejecución es relativamente grande, sólo necesita escribirse una vez ya que puede usarse para ejecutar cualesquiera aplicaciones orientadas a objetos escritas para la rutina de ejecución; en contraste, para una aplicación típica, el esfuerzo de escribir las declaraciones de dependencias del productor es relativamente bajo en comparación con escribir el código de secuenciación de invocación manual.
Las dependencias del productor no dinámicas proporcionan un modo para especificar un código de secuenciación de invocación de un método incondicional, y de este modo elimina la necesidad de escribir código de secuenciación de invocación manual incondicional. Las dependencias del productor contingente proporcionan un modo para especificar el procesamiento condicional, y de este modo reemplazan la necesidad de escribir el código de secuenciación de invocación manual condicional. El soporte de las dependencias del productor que permiten devolver una colección de productores, proporciona un modo para especificar el relleno de una colección antes de que se pase como un parámetro, y de este modo evitar la necesidad de escribir múltiples llamadas en el código de secuenciación de invocación manual para rellenar una colección antes de que se pase como un parámetro. El soporte de suscripciones proporciona un entorno en el cual un programador no necesita escribir código de escucha específico para cada tipo de objeto a escuchar (por ejemplo, en una hoja de cálculo de programación orientada a gráficos de productores, puede usarse una suscripción absorbente para calcular un promedio de un intervalo de células (siendo cada una de las células un productor) teniendo las células de identificación el criterio de suscripción absorbente dentro del intervalo, y recalculando el promedio cada vez que se añade un nuevo productor a la suscripción de absorción; en una hoja de cálculo de programación orientada o gráficos de productores, puede usarse una suscripción adherente como un convertidor de divisas teniendo el criterio de suscripción adherente células de identificación que mantienen el contenido de la divisa y características de suscripción adherente de productores adherentes a representar que realizan la conversión de divisas (los productores (que mantienen las cantidades convertidas) creados por las suscripciones adherentes estarían disponibles a continuación para su presentación en pantalla en otras células).
Operación Nuevos Comandos de Instancias
La Figura 15 es un diagrama de flujo para representar nuevas instancias de acuerdo con una realización de la invención. Como se ha descrito anteriormente con referencia a la Figura 10, el nuevo módulo de clases 1095 de la Figura 10 puede implementarse como parte del nuevo módulo de instancias 1098. El diagrama de flujo de la Figura 15 asume tal realización y se realiza por el nuevo módulo de instancias 1098; la parte el diagrama de flujo de la Figura 15 que representa el nuevo módulo de clase 1095 se muestra como el bloque discontinuo 1580, que incluye los bloques 1540 y 1550.
En respuesta al nuevo comando de instancias (bloque 1510), el control pasa al bloque 1520. En el bloque 1520, se determina si la instancia ya existe. Si no existe, el control pasa al bloque 1530, de lo contrario, la instancia no necesita representarse y el control pasa al bloque 1570 en el cual termina el diagrama de flujo. En una realización que soporta claves de instancias, se realiza el bloque 1520 accediendo a la estructura de seguimiento de instancias 1065 de la Figura 10 para la clave de instancias (y la clave de clases si las claves de instancias no necesitan ser únicas a través de las clases) proporcionada como parte del nuevo comando de instancias.
En el bloque 1530, se determina si la definición de clase de la instancia está ya cargada. Si no lo esta, el control pasa al bloque 1540; de lo contrario el control pasa al bloque 1560. En una realización que soporta claves de clases, el bloque 1540 se realiza accediendo a la estructura de seguimiento de clases 1092 de la Figura 10 para la clave de clase proporcionada como parte del nuevo comando de instancias.
En el bloque 1540, se carga la clase y el control pasa al bloque 1550. En el bloque 1550, la definición de clase se almacenaría de acuerdo con la clave de clase e introspección, incluyendo cualquier establecimiento de declaraciones de dependencias del productor (almacenado por la clave de método dentro de la clase - véase la Figura 11D). Desde el bloque 1550, el control pasa al bloque 1560. Con referencia a la Figura 10, se realiza lo siguiente en los bloques 1540 y 1550: 1) la clase se cargaría desde las definiciones de clases que incluye la lógica del negocio 1010 dentro de las clases 1054 (esta carga da como resultado los métodos y las declaraciones de dependencias del productor de la clase que se está almacenando en el método y las declaraciones de dependencia del productor 1056); 2) la clase se añadiría a la estructura de seguimiento de clases 1092; y 3) los métodos se añadirían a la estructura de seguimiento de métodos 1058. Además, se cargarían las clases de salida de los métodos.
En el bloque 1560, una instancia de la clase se representaría y se almacenaría de acuerdo con la clave de instancias. Con referencia a la Figura 10, la instancia se representaría dentro de las instancias 1052; y la instancia se añadiría a la estructura de seguimiento de instancias 1065. Desde el bloque 1550, el control pasa al bloque 1570 donde termina el diagrama de flujo. En algunas realizaciones de la invención en las que se usa la técnica de mapeo relacionado con objetos, los datos pueden almacenarse desde una fuente de datos externa para rellenar el campo de instancia como parte del bloque 1560.
En algunas realizaciones de la invención, las clases e instancias pueden cargarse/representarse de un modo que la rutina de ejecución con el soporte de programación orientado a gráficos de productores no es consciente (por ejemplo, en la Figura 9A, si la rutina de ejecución 915 carga/representa sin que la rutina de ejecución 910 sea consciente). En tales casos, las realizaciones de la invención que también soportan que la clave de instancia sea una instancia de la clase ClaveInstancia (que mantiene dos elementos: una clave de instancia natural que indica si el identificador de la clave es una referencia a la instancia u otro objeto (tal como una cadena de caracteres) y un identificador de clave que puede ser bien una referencia a la instancia, u otro objeto (tal como una cadena de caracteres)), los bloques 1520 y 1530 se informan de si la instancia y la clase se representaron/cargaron de modo que la rutina de ejecución con el soporte de programación orientado a gráficos de productores sea consciente. En los casos donde la rutina de ejecución con el soporte de programación orientado a gráficos de productores no sea consciente de la clase esté ya cargada, la clase no se cargaría, pero la clase se añadiría a la estructura de seguimiento de clases 1092 y los métodos se añadirían a la estructura de seguimiento de métodos 1058. En los casos donde la rutina de ejecución con el soporte de programación orientado a gráficos de productores no sea consciente de una instancia ya representada, la instancia no se representaría, pero la instancia se añadiría a la estructura de seguimiento de instancias 1065.
Nuevos Comandos del Productor y de Restauración
La Figura 16 es un diagrama de flujo para representación de nuevos productores y restauración de productores de acuerdo con una realización de la invención. Con referencia a la Figura 10, los flujos de la Figura 15 se realizan por el módulo de generación automatizada de gráficos de productores 1040 y el módulo de anulación de productores 1045 (o, como se describe con referencia a las realizaciones alternativas respecto a la Figura 10, el módulo que maneja la anulaciones y restauraciones).
En respuesta al nuevo comando del productor (bloque 1600), el control pasa al bloque 1605. En una realización de la invención, se puede ejecutar un nuevo comando del productor en respuesta a una diversidad de situaciones. La Tabla 2 a continuación identifica las diversas situaciones y parámetros pasados de acuerdo con una realización de la invención.
TABLA 2
4
5
En el bloque 1605, se determina si el productor ya existe. Si no existe el control pasa al bloque 1610; de lo contrario el control pasa al bloque 1670. El bloque 1605 se realiza accediendo a la clase, instancia, y método identificados (por ejemplo, por clave y/o referencia) como parte del nuevo comando del productor. En una realización que soporta las claves de productor, el bloque 1605 se realiza accediendo a la estructura de los gráficos de productores 1060 de la Figura 10 para la clave del productor como parte del nuevo comando del productor (la clave de productor en la columna de productor llamado de la Tabla 2).
En el bloque 1610, el nuevo módulo de instancias se llama con un nuevo comando de instancias y el control pasa al bloque 1615. En una realización de la invención, el bloque 1610 se realiza llamando al diagrama de flujo de la Figura 15 usando la clave de instancias desde la clave del productor en la columna del productor llamado de la Tabla 2).
En el bloque 1615, la definición de clases de la instancia del productor se accede y el control pasa al bloque 1620. Con referencia a la Figura 10, el bloque 1615 se realiza usando la clave de clases desde la clave de productor en la columna del productor llamado de la Tabla 2 para acceder a la clase apropiada de las clases 1054 de acuerdo con la estructura de seguimiento de clases 1092.
En el bloque 1620, se acceden el método y el establecimiento de declaraciones de dependencias del productor y el control pasa al bloque 1625. Con referencia a la Figura 10, el bloque 1620 se realiza usando la clave de método desde la clave del productor en la columna del productor llamado de la Tabla 2 para acceder al método apropiado de los métodos y declaraciones de dependencias del productor 1056 desde la clase localizada en el bloque 1615.
En el bloque 1625, se añade el productor al gráfico de productores y el control pasa al bloque 1630. Con referencia a la realización de la invención en la Figura 11C, las tres primeras columnas se rellenan.
En el bloque 1630, para cada un de las suscripciones registradas, el criterio de filtrado de suscripción se procesa para determinar si el productor coincide. Con referencia a la realización de la invención en la Figura 14A, una suscripción se considera registrada cuando se añade al registro de suscripciones. Más adelante en este documento, se describen operaciones de ejemplo para registrar una suscripción. El bloque 1630 es una optimización opcional que permite para el trabajo de rastreo de los productores representados dividirlos entre la generación automatizada del gráfico de productores y la ejecución del gráfico de productores. Como tal, una realización alternativa de la invención podría no realizar el bloque 1630.
En el bloque 1635, el productor está enlazado dentro de los gráficos de productores si se llamó debido a una dependencia. Desde el bloque 1635, el control pasa el bloque 1640. El modo de realizar el bloque 1635 depende de la situación que resultó en el nuevo comando del productor que se ejecutó (véase la Figura 20). Por ejemplo, si la situación es que este es un productor de interés o un productor que está anulado, entonces no se llamó debido a la dependencia y no se hace nada. Por el contrario, si la situación es de declarada hacia abajo no de suscripción, entonces se llamó debido a una dependencia declarada hacia abajo no de suscripción; y con referencia a la realización de la invención en la Figura 11C, se realiza lo siguiente: 1) el enlace del productor padre en la columna 1150 del productor hijo llamado (la columna del productor llamado de la Tabla 2) se modifica con la referencia del productor padre para la fila del productor padre llamante (la columna del productor llamante de la Tabla 2) y la referencia del productor de determinación de dependencia (la columna de referencia del productor de determinación de dependencia de la Tabla 2); y 2) la columna del enlace del productor hijo 1160 de la línea del productor padre llamante (la columna del productor llamante de la Tabla 2) se modifica con una referencia del productor hijo para la fila del productor hijo llamado (la columna del productor llamado de la Tabla 2), una referencia del productor de determinación de dependencia (la columna de referencia del productor de determinación de dependencia de la Tabla 2), y un modo de enlace (fijado de acuerdo con la columna del modo de enlace de la Tabla 2).
Por el contrario, si la situación es una suscripción adherente, entonces se llamó debido a un productor de disparo que se identificó; y con referencia a la realización de la invención en la Figura 11C, se realiza lo siguiente: 1) la columna de enlaces del productor padre 1150 del productor hijo llamante (la columna del productor llamante de la Tabla 2) se modifica con la referencia del productor padre para la fila del productor padre llamado (la columna del productor llamado de la Tabla 2) y la referencia del productor de determinación de dependencia (la columna de referencias del productor de determinación de dependencias de la Tabla 2); y 2) los enlaces de productores hijo 1160 de la fila del productor llamado padre (la columna del productor llamado de la Tabla 2) se modifica con la referencia del productor hijo para la fila del productor hijo llamante (la columna del productor llamante de la Tabla 2), una referencia del productor de determinación de dependencia (la columna de referencias del productor de determinación de dependencia de la Tabla 2), un modo de enlace (fijado de acuerdo con la columna del modo de enlace de la Tabla 2) y un indicador de adherencia fijado para indicar adherencia. En este respecto, la situación de declarado hacia arriba de no suscripción se maneja de forma similar a la suscripción adherente.
En el bloque 1640, el productor se marca como no ejecutado y el control pasa el bloque 1645. Con referencia a la realización de la invención en la Figura 11C, la columna de marcado de ejecución incremental 1180 de la fila apropiada se rellena con una indicación de no ejecutado.
En el bloque 1645, se determina si el productor tiene cualesquiera dependencias y no está anulado. Si es así, el control pasa al bloque 1650; de lo contrario el control pasa al bloque 1665. El bloque 1645 se realiza comprobando la declaración de dependencias del productor accedida en el bloque 1620 y la columna del tipo de llamada de la Tabla 2.
En el bloque 1650, para cada una de las dependencias en la declaración de dependencias del productor que se va a resolver ahora, se determina el número de productores y se invoca un nuevo comando de productores para cada uno. Desde el bloque 1650, el control pasa al bloque 1655. Las deferentes realizaciones de la invención determinan diferentes tipos de dependencias en diferentes instantes; el modo de realizar el bloque 1650 en una realización de ejemplo de la invención se describirá más adelante en este documento.
En el bloque 1655 se añade el productor al registro de comienzo de ejecución si todos sus productores dependientes existen y se han ejecutado. Desde el bloque 1655, el control pasa a al bloque 1660. Cuando para un productor determinado representado como parte de la iteración actual de este flujo, se realiza el bloque 1655, a continuación la invocación de otra iteración de este flujo para un productor del que depende el productor determinado devolverá el estado de ejecución de ese productor (véase el bloque 1660) (por ejemplo, con respecto a la realización de la invención de la Figura 11C, el estado desde la columna de marcado de ejecución incremental 1180 de la fila apropiada). Se existen todos los productores dependientes y el estado de ejecución de todos los productores dependientes es de ejecutados, entonces se añade el productor de la iteración actual al registro de comienzo de la ejecución.
En el bloque 1660, se devuelve el estado de ejecución del productor como un parámetro.
En el bloque 1670, similar al bloque 1635, el productor se enlaza dentro del gráfico de productores si se llamó debido a una dependencia. Desde el bloque 1670, el control pasa al bloque 1675. El bloque 1670 puede alcanzarse por una diversidad de razones. Por ejemplo, el bloque 1670 puede alcanzarse porque el productor se representó anteriormente en respuesta a un comando de anulación de productor pero no se enlazó dentro del gráfico de productores. Como otro ejemplo, el bloque 1670 puede alcanzarse porque el productor es ya parte de un gráfico de productores y se añade a otro (por ejemplo representado anteriormente en respuesta a que es un productor de interés, un progenitor de un productor de interés, etc.)
En el bloque 1675, se determina si el flujo del nuevo productor se llamó debido a una anulación, a una dependencia de suscripción adherente, o a una dependencia declarada hacia arriba no de suscripción. Si es así, el control pasa al bloque 1680; de lo contrario, el control pasa al bloque 1660. El bloque 1675 se realiza comprobando la columna del tipo de llamada de la Tabla 2 para ver si ésta es una llamada a un productor anulado, una dependencia de suscripción adherente, o a una dependencia declarada hacia arriba de no suscripción.
En el bloque 1680, al igual que el bloque 1640, el productor se marca como no ejecutado y el control pasa al bloque 1665. El bloque 1680 puede alcanzarse por una diversidad de razones.
En el bloque 1665, se añade el productor al registro de comienzo de ejecución, si no está ya presente, y el control pasa al bloque 1660.
En respuesta al comando de restauración de un productor (bloque 1690), el control pasa al bloque 1695. En el bloque 1695, el productor se marca como no anulado y el control pasa al bloque 1640. Con referencia a la realización de la invención de las figuras 11C, el almacenamiento temporal de la salida del productor y la columna de indicaciones de anulación de la salida del productor 1170 de la fila del productor se accede y se altera para indicar que el productor ya no está anulado. Continuando este flujo, el bloque 1640 conduciría al bloque 1645, y si el productor tenía cualesquiera dependencias, al bloque 1650, el cual causaría descubrir el gráfico de productores bajo el productor y construirlo si no lo estaba ya. Si el gráfico de productores bajo el productor ya estaba descubierto y construido, entonces la invocación del nuevo comando del productor dará como resultado que el flujo va desde 1600 a 1605, a 1670 y así sucesivamente, además, la devolución del estado de ejecución de los productores del gráfico bajo el productor en el bloque 1660 determinará si se añade el productor al registro de comienzo de ejecución en el bloque 1655. Sin embargo, si el gráfico de productores bajo el productor no está descubierto y construido, entonces la invocación del nuevo comando del productor dará como resultado que se descubre y se construye con los flujos yendo desde 1600 a 1605, a 1610, y así sucesivamente.
La Figura 17 es un diagrama de flujo para el bloque 1650 de la Figura 16 de acuerdo con una realización de la invención. De este modo, el control fluye desde el bloque 1645 al bloque 1700 en el bloque 1650. En el bloque 1700, para cada una de las dependencias en la declaración de dependencias del productor (una para cada una de DependenciaArgumento, DependenciaCampo, DependenciaSecuenciación, DependenciaHaciaArriba, y DependenciaDébilmenteRestringida), se realizan los bloques siguientes 1705-1745. Con referencia a las Figuras 10 y 11D, se accede a la estructura de seguimiento del método para determinar la información respecto a la dependencia del productor. También debería entenderse que los bloques 1715, 1725, 1730, 1740, y 1750 son una optimización cuando se realizan antes de la ejecución del gráfico de productores.
En el bloque 1705, se determina si la dependencia es una dependencia de argumento ya enlazada debido a una dependencia adherente. Si es así, el control pasa al bloque 1710 donde se completa el flujo para esta dependencia; de lo contrario, el control pasa al bloque 1715. Con respecto a la realización de la invención mostrada en la Figura 11C, se comprueba el indicador de adherencia para determinar si la ID del argumento de esta dependencia está sujeta a una dependencia del argumento de suscripción adherente o una dependencia del argumento declarada hacia arriba.
En el bloque 1715, se determina si la dependencia es una dependencia contingente. Si es así, el control pasa al bloque 1720; en caso contrario, el control pasa al bloque 1725. El bloque 1715 se realiza comprobando la declaración de dependencias del productor del productor hijo identificado por la dependencia a determinar si está vacía (el productor hijo es un productor independiente). Con respecto a las Figuras 13A-J, esto podría ser cierto para productores con números en círculos discontinuos (por ejemplo, en la Figura 13D, el productor CU::IV::DELTA), pero no cierto para los otros productores (por ejemplo, en la Figura 13D, el productor CW::IY::BETA). De este modo, con referencia a la Figura 13D, el bloque 1715 está representado por los números 1, 4, y 8 en un círculo. El bloque 1715 y el flujo desde el mismo a través de los bloques 1725-1750 es una optimización que evita tanto añadir/enlazar los productores con números en círculos discontinuos al gráfico de productores, como también dividir el trabajo de ejecutar productores entre la generación automatizada de gráficos de productores y la ejecución del gráfico de productores.
En el bloque 1720, se invoca un nuevo comando del productor para el productor de determinación de dependencia y el flujo termina. Por ejemplo, con referencia a la Figura 13D, el bloque 1720 causa lo que se representa por los números 5, 6, y 7 en un círculo.
En el bloque 1725, se ejecuta el productor de determinación de dependencia y el control pasa al bloque 1730. Por ejemplo, con referencia a la Figura 13D, el bloque 1725 se representa por un número 11 en un círculo (de esta forma el flujo de la Figura 17 ilustró la realización descrita anteriormente en la cual los números 9 y 10 en un círculo de la Figura 13D no se realizan).
En el bloque 1730, se determina si la dependencia es una dependencia no de suscripción. Si es así, el control pasa al bloque 1750; de lo contrario el control pasa al bloque 1740. En otras palabras, en el bloque 1725, se ejecuta el código de determinación de dependencias del productor en el método del productor de determinación de dependencias, que es parte de la declaración de dependencias del productor del productor padre. Una vez ejecutado este código de declaración de dependencias del productor, cuyo código identificaría si esta dependencia es una dependencia de suscripción se determina el tipo de dependencias del productor padre. Con respecto al ejemplo en la Figura 13D, el número 11 en un círculo daría como resultado que el flujo de la Figura 17 pase desde el bloque 1730 al bloque 1750.
En el bloque 1750, se determina el número de productores devueltos por la ejecución del productor de determinación de dependencias en el bloque 1725 y se invoca un nuevo comando del productor para cada uno, usando los argumentos descritos en la Tabla 2, incluyendo la referencia al productor de determinación de dependencias ejecutado en 1725. Por ejemplo, con referencia a la Figura 13D, el bloque 1750 causaría los números 12 y el 13 en un círculo y las letras C y la D en un círculo.
Con referencia al ejemplo de suscripción absorbente de las figuras 14B, el bloque 1725 representa un número 4 en un círculo; el cual causa que el flujo pase a través del bloque 1730 al bloque 1740.
En el bloque 1740, la suscripción se añade al registro de suscripción, y si la suscripción es absorbente se marca como incompleta. Desde el bloque 1740, el control pasa al bloque 1745. Con referencia a la realización de la invención mostrada en la Figura 14A, el registro de suscripción se rellena con la suscripción como se ha descrito anteriormente.
En el bloque 1745, todos los productores representados se rastrean para ver si coinciden en el criterio de suscripción (y de este modo son productores de disparo), y se procesan cualesquiera coincidentes.
La Figura 18 es un diagrama de flujo para el bloque 1745 de la Figura 17 de acuerdo con una realización de la invención. De este modo, el control fluye desde el bloque 1740 al bloque 1800 en el bloque 1745. En el bloque 1800, para cada uno de los productores representados, se realizan los bloques siguientes 1810-1830.
En el bloque 1810, se determina si el productor cumple los criterios de suscripción. Si es así, el control pasa al bloque 1815; de lo contrario el control pasa al bloque 1830 donde el flujo termina para el productor que se está procesando actualmente. Con referencia a las realizaciones de la invención mostradas en la Figura 11C y 14C, los gráficos de productores se acceden para determinar si incluyen productores que cumplan el criterio de suscripción.
El modo de procesamiento de un productor coincidente depende del tipo de suscripción que se esté procesando. Con referencia al bloque 1815, si la suscripción es del tipo absorbente, el control pasa al bloque 1825; de lo contrario el control pasa al bloque 1820. El bloque 1815 se realizaría en respuesta al tipo de suscripción añadida en el bloque 1740 ó 2235.
En el bloque 1825, el productor coincidente se añade al registro de suscripción y el productor con suscripción absorbente se enlaza con el productor coincidente. Desde el bloque 1825, el control pasa al bloque 1830. Con referencia a las realizaciones de la invención mostradas en las Figuras 11C y 14A-B, se realiza lo siguiente: 1) se usó el criterio de suscripción desde el criterio de suscripción para la columna de productores de disparo 1410 en el bloque 1810 y se localizó un productor coincidente (por ejemplo, uno de los productores 1460A-N); 2) el productor coincidente se añade a la columna de productores coincidentes 1415 en la fila de la suscripción; y 3) el productor con la suscripción absorbente (por ejemplo, el productor 1450 se enlaza al productor coincidente (por ejemplo, uno de los productores 1460A-N) en la estructura de gráficos de productores de la Figura 11C (usando la referencia del productor de determinación de dependencia extraída de la columna de referencia del productor de determinación de dependencia 1421 del registro de suscripción 14A para la suscripción absorbente determinada).
En el bloque 1820, se invoca un nuevo comando del productor para el productor padre a crear. Desde el bloque 1820, el control pasa al bloque 1830 donde termina el diagrama de flujo para al productor actual seleccionado en el bloque 1800. Con referencia a las realizaciones de la invención mostradas en las Figuras 14A y la 14C, se realiza lo siguiente: 1) se usó el criterio de suscripción desde el criterio de suscripción para la columna de productores de disparo 1410 en el bloque 1810 y se localizó un productor coincidente (por ejemplo, el productor 1475); y 2) se invoca un nuevo comando de productor con los parámetros de la tabla 2 fijados como sigue: a) el tipo de llamada es una suscripción adherente; b) un productor llamante es la clave del productor del productor hijo llamante (por ejemplo, el productor 1475); c) el productor llamado es la clave de productor del productor padre llamado a crear (por ejemplo, el productor 1480); la clave de productor que se forma usando la la clave de método, la clase, y la instancia del padre desde las características de la suscripción adherente para el productor padre a crear (Figura 14A, columnas 1430, 1435, y 1437) (si la clave de instancia está vacía, se usa la clave de instancia del productor hijo llamante); d) el modo del enlace para el productor padre llamado (Figura 14A, columna del modo de enlace 1425); y e) la referencia del productor de determinación de dependencia extraída de la columna de referencias del productor de determinación de dependencia 1421 del registro de suscripciones 14A para la suscripción adherente determinada.
La Figura 19 es un diagrama de flujo para el bloque 1630 de la Figura 16 de acuerdo con una realización de la invención. De este modo, el control fluye desde el bloque 1625 al bloque 1900 en el bloque 1630. La Figura 19 es muy similar a la Figura 18. Específicamente, los bloques 1910, 1915, 1920, y 1930 de la Figura 19 son idénticos que los bloques 1810, 1815, 1820, y 1830; mientras que el bloque 1900 y el 1925 difieren de los bloques 1800 y 1825. Como tal, sólo se describirán las diferencias en este punto.
El bloque 1900 indica que el flujo se realiza para cada una de las suscripciones registradas, mientras que el bloque 1800 indica que el flujo se realiza para cada uno de los productores representados. De este modo, cuando el flujo de la Figura 18 está centrado sobre una suscripción única y rastreando todos los productores, el flujo de la Figura 19 se centra sobre un productor único y rastrea todas las suscripciones.
El bloque 1925 es el mismo que el bloque 1825, con la excepción de que la suscripción absorbente está marcada como incompleta. Con referencia a la realización de la invención mostrada en la Figura 14A, la columna completada 1420 en la fila apropiada se actualiza para indicar incompleta.
La Figura 20 es un diagrama de flujo para los bloques 1635 y 1670 de la Figura 16 de acuerdo con una realización de la invención. De este modo, el control fluye desde el bloque 1605 y el bloque 1630 al bloque 2005 en los bloques 1635 y 1670. En el bloque 2005 se determina si esta iteración del diagrama de flujo de la Figura 16 se invocó debido a una dependencia (por ejemplo, desde el bloque 1630 (bloque 1920) ó 1650 (bloques 1720, 1750 ó 1745/1820) de la iteración anterior). Si no es así, el control pasa al bloque 1640 ó 1675 dependiendo de donde se introdujo el flujo (desde el bloque 1630 ó 1605).
En el bloque 2010, se determina si el flujo se llamó debido a una suscripción adherente o una situación declarada hacia arriba no de suscripción. Si no es así, el control pasa al bloque 2015; de lo contrario el control pasa al bloque 2020. El bloque 2010 se realiza comprobando el parámetro del tipo de llamada de la Tabla 2 (es decir el tipo de llamada es una suscripción adherente o no de suscripción declarada hacia arriba o no). Con referencia a las realizaciones de la invención mostradas en las Figuras 18 y 19, si se invocó el nuevo comando del productor desde los bloques 1820 ó 1920.
En el bloque 2020, el productor padre actual se enlaza con el productor hijo llamante. Con referencia a las realizaciones de la invención mostradas en las Figuras 11C y 14C, el productor padre llamado (por ejemplo, el productor 1480) identificado por el parámetro desde la columna del productor llamado de la tabla 2 está enlazado en la estructura de los gráficos de productores de la Figura 11C al productor hijo llamante (por ejemplo, el productor 1475) identificado por el parámetro desde la columna del productor llamante de la tabla 2, usando el modo de enlace y la referencia del productor de determinación de dependencia identificado por el parámetro del modo de enlace y las columnas de referencias del productor de determinación de la tabla 2. Si el padre existía anteriormente, el comportamiento del bloque 2020 imita el comportamiento de una dependencia de suscripción absorbente en el sentido de que un argumento único se puede mapear a cero o más productores hijo.
En el bloque 2015, el productor padre llamante se enlaza con el productor hijo llamado actual. Con referencia a la realización de la invención mostrada en la Figura 11C, el productor padre llamante identificado por el parámetro desde la columna del productor llamante de la tabla 2 se enlaza en la estructura de gráficos de productores de la Figura 11C al productor hijo llamado identificado por el parámetro desde la columna del productor llamado de la Tabla 2, usando la referencia del productor de determinación de dependencia identificado por la columna de referencias del productor de determinación de dependencia de la tabla 2. Desde los bloques 2015 y 2020 el control pasa al bloque 1640 ó 1675 dependiendo de desde donde se introdujo el flujo (desde el bloque 1605 ó 1630).
La Figura 21 es un diagrama de flujo para anular productores de acuerdo con una realización de la invención. Con referencia a la Figura 10, el flujo de la Figura 21 se realiza por el módulo de anulación de productores 1045 (o, como se describió con referencia a las realizaciones alternativas respecto a la Figura 10, el módulo maneja las anulaciones y restauraciones).
En respuesta al comando de anulación del productor (bloque 2110), el control pasa al bloque 2120. En el bloque 2120, se invoca un nuevo comando de productor para el productor identificado por el comando de anulación del productor y el control pasa al bloque 2130. El bloque 2120 se realiza en una realización de la invención en caso de que el productor a anular no se haya representado aún, así como para marcar el productor como no ejecutado (bloque 1640 ó 1680) y registrarlo en el registro de comienzo de ejecución (bloque 1665). Una realización alternativa de la invención que no permite la anulación de un productor que está aún representado realizaría una comprobación adicional entre los bloques 1605 y 1610 para determinar si se llamó este nuevo comando del productor en respuesta a un comando de anulación de productor, y para indicar un error si este nuevo comando del productor se llamó en respuesta a un comando de anulación del productor.
En el bloque 2130, se fija la salida en el almacenamiento temporal de la salida del productor (y en la instancia si un campo) y el productor se marca como anulado.
Comandos de Ejecución Global
La Figura 22A es una parte de un diagrama de flujo para la ejecución de gráficos de productores actuales de acuerdo con una realización de la invención; aunque la Figura 22B es otra parte de un diagrama de flujo para la ejecución de los gráficos de productores actuales de acuerdo con una realización de la invención. Con referencia a la Figura 10, se realiza el flujo de la Figura 22 se realiza por el módulo de ejecución de gráficos del productores 1070.
En respuesta al comando de ejecución global, el bloque 2200 muestra que se selecciona un conjunto de candidatos para ejecutarse en base a los productores sobre el registro de comienzo de ejecución y el control pasa el bloque 2205. En una realización de la invención los productores anulados se marcan como no ejecutados y la ejecución de los mismos devuelve su resultado anulado (en oposición a causar que se ejecuten sus métodos), el conjunto actual de productores candidatos son los productores sobre el registro de comienzo de ejecución. Aunque anteriormente se ha descrito una realización de la invención en la cual los productores anulados se marcan como no ejecutados y la ejecución de los mismos devuelve su resultado anulado (en oposición a causar que se ejecuten sus métodos), realizaciones alternativas de la invención pueden operar de forma diferente (por ejemplo, marcar los productores anulados como ejecutados y cuando se selecciona el conjunto actual de productores candidatos, los productores independientes del registro de comienzo de ejecución y se seleccionan los padres de los productores anulados sobe el registro de comienzo de ejecución).
En el bloque 2205, se selecciona un subconjunto de productores listos para su ejecución desde el conjunto del conjunto de productores candidatos y el control pasa al bloque 2210. Más adelante en este documento se describe un modo de ejemplo de realizar el bloque 2205.
En el bloque 2210, los productores del conjunto actual de los productores listos se clasifican por tipos - los productores normalizados van al bloque 2215 y los productores de determinación de dependencia van al bloque 2225. En una realización de la invención, el bloque 2210 se realiza comprobando la clase de retorno del productor. Con referencia a las Figuras 10 y 11D, la estructura de seguimiento de métodos se accede para determinar si la clase de salida del productor es una DEP, y de este modo este productor es un productor de determinación de dependencia.
En el bloque 2215, cualesquiera productores normalizados en el conjunto actual de productores listos se ejecutan y el control pasa al bloque 2220. En una realización de la invención, se realiza el bloque 2215 llamando el método con cualesquiera parámetros de entrada mapeados desde las salidas de cualesquiera productores hijos que resultan desde las dependencias de los argumentos (para argumentos, se usa la ID de argumento del modo de enlace para mapear la salida del hijo apropiado al argumento de entrada apropiado del método que se está ejecutando). En algunas realizaciones de la invención, tal ejecución puede dar como resultado la ejecución del código en el método de un productor hijo que escribe una salida a un mecanismo determinado (tal como fijar una variable global, fijar un campo en una instancia que no es la salida del productor, impactar una fuente de datos externa, etc.) o un código en el método del productor padre que lee esa salida desde el mecanismo determinado). En el bloque 2220, para los padres, si los hay, que tienen una suscripción absorbente sobre cualquiera de estos productores normalizados ejecutados, la suscripción se marca como incompleta. Desde el bloque 2220, el control pasa al bloque 2245. Con referencia a la Figura 14A, la fila apropiada de la columna de completados 1420 se fija para indicar incompleta.
En el bloque 2225, cualesquiera productores de determinación de dependencia en el conjunto actual de productores listos se preparan para su ejecución y el control pasa al bloque 2230. Más adelante en este documento se describe un modo de ejemplo de realizar el bloque 2225.
En el bloque 2230, se ejecutan cualesquiera productores de determinación de dependencia en el conjunto actual de productores listos y el control pasa al bloque 2235. En una realización de la invención, se realiza el bloque 2230 de forma similar al bloque 2215.
En el bloque 2235, se ejecuta un nuevo comando del productor para cualesquiera productores descubiertos, y se realiza el registro de suscripción y el procesamiento para cualesquiera suscripciones. El nuevo comando del productor parte del bloque 2235 se realiza de forma similar al bloque 1750, mientras que se realiza el registro de suscripción y el procesamiento de forma similar que los bloques 1740 y 1745.
En el bloque 2240, añadimos al conjunto de productores candidatos los nuevamente añadidos al registro de comienzos de ejecución. Desde el bloque 2240, el control pasa al bloque 2245. El bloque 2240 se realiza de forma similar al bloque 2200, excepto que sólo los productores nuevamente añadidos al registro de comienzos de ejecución como resultado de los bloques 2230 y 2235 se añaden al conjunto de productores candidatos.
En el bloque 2245, los productores que se ejecutaron se marcan como ejecutados, el almacenamiento temporal de salida del productor (y el almacenamiento temporal de instancias) se actualizan si es necesario, cualesquiera productores padre de los productores que se ejecutaron se añaden al conjunto actual de productores candidatos, y los productores que se ejecutaron se eliminan del conjunto actual de productores candidatos y listos. Desde el bloque 2245, el control pasa al bloque 2250.
En el bloque 2250, se determina si el conjunto de productores candidatos está vacío. Si no lo está, el control pasa de vuelta al bloque 2205; de lo contrario el control pasa al bloque 2255.
En el bloque 2255, se determina si se han completado todas las suscripciones. Si es así, el control pasa al bloque 2265 donde termina el diagrama de flujo; de lo contrario, el control pasa al bloque 2260. Con referencia a la realización de la invención en la Figura 14A, la columna del tipo de suscripción 1405 y la columna de completas 1420 se exploran en busca de cualesquiera suscripciones absorbentes que no estén completas.
En el bloque 2260 se procesan las suscripciones absorbentes incompletas y el control pasa de vuelta al bloque 2205. Un modo de ejemplo de realizar el bloque 2260 se describe más adelante en este documento.
La Figura 23 es un diagrama de flujo para el bloque 2205 de la Figura 22 de acuerdo con una realización de la invención. De este modo, el control fluye desde el bloque 2200 al bloque 2305 en el bloque 2205. En el bloque 2305, para cada uno de los productores en el conjunto de productores candidatos, se realizan los siguientes bloques 2310-2325.
En el bloque 2310, se determina si el productor tiene cualesquiera dependencias de suscripción absorbente que esté incompleta. Si es así, el control pasa al bloque 2325; de lo contrario, el control pasa al bloque 2315. Con referencia a la realización de la Figura 14A, se rastrea la columna de claves del productor del suscriptor 1400 y la columna del tipo de suscripción 1405 en búsqueda de una coincidencia del productor seleccionado actual y el tipo de suscripción absorbente; y si se encuentra una coincidencia, se comprueba la columna de completas 1420 en la fila apropiada para determinar el estado de la dependencia de la suscripción absorbente.
En el bloque 2315, se determina si están ejecutados los productores de los cuales depende el productor seleccionado actualmente. Si no lo están, el control pasa al bloque 2325; de lo contrario, el control pasa al bloque 2320. Con respecto a la realización de la invención mostrada en la Figura 11C, la columna de marcado de ejecución incremental 1180 para las filas de las dependencias del hijo se comprueban para determinar el estado de ejecución de los hijos del productor seleccionado actualmente.
En el bloque 2320, el productor candidato seleccionado actualmente se añade al conjunto actual de productores listos y el control pasa al bloque 2325.
En el bloque 2325, el flujo termina para el productor actual seleccionado en el bloque 2305.
La Figura 24 es un diagrama de flujo para el bloque 2225 de la Figura 22 de acuerdo con una realización de la invención. De este modo el control fluye desde el bloque 2210 al bloque 2405 en el bloque 2225. En el bloque 2405, para cada productor de determinación de dependencia se realizan los siguientes bloques 2410-2430.
En el bloque 2410, se determina el tipo de cualesquiera dependencias anteriores generadas por el productor de determinación de dependencias seleccionado actualmente. Si el tipo de la dependencia es de no suscripción, a continuación el control pasa al bloque 2420; si el tipo es una suscripción absorbente, entonces el control pasa al bloque 2415; mientras que, si el tipo es una suscripción adherente, a continuación el control pasa al bloque 2425. El bloque 2410 se determina comprobando la salida actual del productor almacenado en el almacenamiento temporal de la salida del productor. Con referencia a la clase DEP, la salida indicaría de no suscripción, suscripción absorbente, y suscripción adherente.
En ambos bloques 2415 y 2425, se elimina la entrada desde el registro de suscripción. Con referencia a la realización de la invención mostrada en las Figuras 14A-C, se realiza lo siguiente: 1) para las suscripciones absorbentes (bloque 2415), el productor de determinación de dependencias (por ejemplo, el productor 1455) se usa para determinar su productor padre (por ejemplo, el productor 1450) en los gráficos de productores, y a continuación se busca el productor padre en el registro de suscripciones y se elimina su entrada; y 2) para suscripciones adherentes (bloque 2425), el productor de determinación de dependencia (por ejemplo, el productor 1470) se busca en el registro de suscripción y se elimina su entrada. Desde el bloque 2415, el control pasa al bloque 2420; desde el bloque 2425, el control pasa al bloque 2420.
En el bloque 2420, los enlaces ya creados por el productor de determinación de dependencia seleccionado actualmente se borran de los gráficos de productores y el control pasa al bloque 2430. Con referencia a la realización de la invención mostrada en la Figura 11C, se realiza lo siguiente. En primer lugar se determina si el productor de determinación de dependencias se ha "adherido" sobre un productor existente. Esto se hace rastreando la columna de enlaces del productor hijo del productor de determinación de dependencias en la Figura 11C, y comprobando si uno de los enlaces tiene un indicador de adherencia que indica adherencia.
Si el productor de determinación de dependencia no está adherido sobre un productor existente, a continuación: 1) para un productor de determinación de dependencia que ha producido dependencias declaradas hacia abajo de no suscripción (dependencias de argumento, campo, o secuenciación), el padre del productor de determinación de dependencias se accede en el gráfico de productores a través de la columna de referencias del productor padre 1150 en la fila del productor de determinación de dependencias seleccionado actualmente, y en esta entrada del productor padre, se accede la columna de enlaces del productor hijo 1160 para hacer coincidir la referencia del productor de determinación de dependencias y se borran todas las referencia de los productores hijo que tienen esa referencia del productor de determinación de dependencia; el 2) para un productor de determinación de dependencias que ha producido dependencias declaradas hacia arriba de no suscripción, el padre del productor de determinación de dependencias se accede en el gráfico de productores a través de la columna de enlaces del productor padre 1150 en la fila del productor de determinación de dependencias actualmente seleccionado, y en esta entrada del productor padre, se accede la columna de enlaces del productor padre 1150 para hacer coincidir la referencia del productor de determinación de dependencias, y se borran todas referencias de los productores padre que tienen esa referencia del productor de determinación de dependencias; 3) para un productor de determinación de dependencias que ha producido una suscripción absorbente, se tiene el mismo comportamiento que las dependencias declaradas hacia abajo de no suscripción; y 4) para un productor de determinación de dependencias que ha producido una suscripción adherente, la referencia del productor de determinación de dependencias extraída de la columna 1421 del registro de suscripciones 14A anterior a la eliminación de la suscripción se busca en la estructura de gráficos de productores en la columna de enlaces del productor padre 1150, y se borran todas las referencias de los productores padre que tienen esa referencia del productor de determinación de dependencias.
Si el productor de determinación de dependencia se ha adherido sobre un productor existente, como resultado de una dependencia declarada hacia arriba de no suscripción o una suscripción adherente, entonces se accede al productor hijo sobre el que se ha adherido el productor de determinación de dependencias (el productor hijo en la columna 1160 con un indicador de adherencia indicando adherencia), y en esta entrada del productor hijo, se accede a la columna de enlaces del productor padre 1150 para hacer coincidir la referencia del productor de determinación de dependencia, y se borran todas las referencias de los productores padres que tienen esa referencia del productor de determinación de dependencias.
En el bloque 2430, el flujo termina para el productor de determinación de dependencias seleccionado en el bloque 2405.
La Figura 25 es un diagrama de flujo para el bloque 2260 de la Figura 22 de acuerdo con una realización de la invención. De este modo, el control fluye desde el bloque 2255 al bloque 2505 en el bloque 2260. En el bloque 2505, para cada uno de los productores con dependencia de suscripción absorbente que está incompleta se realizan los siguientes bloques 2510-2525.
\newpage
En el bloque 2510, se determina si se han ejecutado todos los productores coincidentes. Si es así, el control pasa al bloque 2515; de lo contrario, el control pasa al bloque 2525. Con referencia a las realizaciones de las Figuras 11C y 14C, se accede la columna de productores coincidentes 1415 en la fila apropiada para determinar los productores coincidentes, y se comprueba la columna de ejecución incremental 1180 en las filas apropiadas para cada uno de los productores coincidentes.
En el bloque 2515, la suscripción absorbente se marca como completa y el control pasa al bloque 2520. Con referencia a las realizaciones de la Figura 14A, la columna de completas 1420 en la fila apropiada se fija para indicar completa.
En el bloque 2520, el productor seleccionado en el bloque 2505 se añade al conjunto actual de productores candidatos y el control pasa al bloque 2525.
En el bloque 2525, el flujo termina para el productor seleccionado en el bloque 2505.
Escenarios
En algunas realizaciones, los escenarios proporcionan un modo para especificar el rellenado de una colección con resultados de invocar múltiples veces los mismos métodos de las mismas instancias con diferentes parámetros; y de esta forma evitar la necesidad de escribir en múltiples invocaciones de código de secuenciación de invocación manual de los mismos métodos de las mismas instancias con diferentes parámetros. En algunas realizaciones de la invención que soportan dependencias dinámicas, dos escenarios diferentes de una aplicación pueden tener gráficos de productores estructuralmente diferentes o sub-gráficos en un gráfico de productores de la aplicación si se usan diferentes instancias, diferentes métodos, y/o diferentes clases en los escenarios. Por ejemplo, se proporciona un programa de aplicación de ejemplo para calcular una salida en base a un modelo matemático que toma como entrada un vector nombrados de valores numéricos. Para evaluar los impactos de usar diferentes vectores nombrados, pueden crearse escenarios que usan diferentes instancias de vectores, donde cada instancia corresponde a un distinto vector. Como alternativa, el programa de aplicación de ejemplo puede usar el mismo ejemplo de vector, pero diferentes modelos matemáticos para calcular la salida de interés. Para evaluar el impacto de adoptar un primer modelo matemático frente a adoptar un segundo modelo matemático, pueden crearse un primer escenario y un segundo escenario. En el primer escenario, se invoca un primer método que representa el primer modelo. En el segundo escenario, se invoca un segundo método que representa el segundo modelo. Además, la clase en el primer escenario puede ser o no la misma que la clase en el segundo escenario. Si el primero y el segundo métodos se definen para que estén dentro de la misma clase, entonces la clase permanece la misma en el primero y el segundo escenarios. Sin embargo, si el primer método se define para que esté dentro de la primera clase y el segundo método se define para que esté dentro de la segunda clase diferente de la primera clase, entonces el primero y el segundo escenarios tienen diferentes clases. Obsérvese que el primer método en la primera clase y el segundo método en la segunda clase pueden tener o no nombres idénticos.
La Figura 26 ilustra una realización alternativa de la invención que soporta un escenario. Similar a la realización mostrada anteriormente en la Figura 1A, el código fuente orientado a objetos 100 incluye una clase 102, que a su vez incluye un método 104 y una declaración de dependencias del productor 106 para el método 104. Por supuesto, la clase 102 típicamente incluiría uno o más campos (no mostrados) y métodos adicionales (no mostrados). Además, el código fuente orientado a objetos 100 típicamente incluiría clases adicionales.
Como se ha descrito anteriormente con respecto a la Figura 1A, se representa una instancia 108 de la clase 102 durante el tiempo de ejecución. La instancia 108 incluye los datos de los campos de la clase 102. Además, se representa un productor 110, donde el productor 110 identifica la clase 102, la instancia 108 de la clase 102 (que tiene asociada con la misma el método 104 de la clase 102), y el método 104 de la clase 102. La declaración de dependencias del productor 106 identifica para la rutina de ejecución un conjunto de cero o más productores 112 (denominados como productores hijos del productor 110) que deben ejecutarse antes de la ejecución del productor 110. En otras palabras, el productor 110 depende del conjunto de cero o más productores 112. Además o en lugar de consumir salidas del conjunto de productores 112, el productor 110 puede consumir datos de la instancia 108. Además, el productor 110 proporciona al menos una salida, cuya salida puede ser interna a la instancia 108 (y de este modo, modificar los datos de la instancia 108) y/o puede ser externa; de cualquier modo, la salida del productor 110 puede consumirse por un conjunto de cero o más productores distintos 114 (denominados como productores padres del productor 110)). En algunas realizaciones, un gráfico de productores que comprende un productor 110, los productores padre 114, y los productores hijo 112 están asociados con un primer escenario que tiene una clave única del primer escenario.
Para crear un gráfico de productores o un sub-gráfico para un segundo escenario distinto del primer escenario, pueden estresarse uno o más de los productores 110, 112, y 114. Para estresar un productor, el productor se duplica. En una segunda realización un productor puede duplicarse representando el productor a partir de la declaración de clases 102, el método determinado 104 y la declaración de dependencias del productor 106. Como alternativa, un productor puede duplicarse clonando o copiando el productor correspondiente existente para un escenario de referencia (tal como el primer escenario descrito anteriormente). A continuación se describen detalles de algunas realizaciones de ambas técnicas. En general, todos los productores impactados directamente están estresados. Además, los productores dependientes de los productores impactados directamente, es decir los productores impactados indirectamente, pueden estar también estresados. En una realización, un productor impactado indirectamente está estresado si el productor impactado indirectamente cae sobre el camino entre un productor de interés y los productores impactados directamente. Refiriéndonos de nuevo a la Figura 26, supongamos que el productor 110 es un productor impactado directamente para el segundo escenario, entonces el productor 110 se estresa para generar un productor estresado 2610 para el segundo escenario. Todos los productores padre 114 del productor 110 están impactados indirectamente porque todos los productores padre 114 dependen del productor 110. Si un productor padre dentro del conjunto de productores padre 114 cae dentro del camino entre un productor de interés y el productor 110, entonces el productor padre está estresado. Una colección de productores padres estresados del productor 110 se representa por el conjunto 2614 para el segundo escenario. Además, si hay una dependencia dinámica entre algunos de los productores dentro del conjunto 2614, entonces los productores en el conjunto 2614 pueden estresarse de forma recursiva para el segundo escenario. Como para los productores hijos 112 del productor 110, los productores hijo 112 pueden no estar estresados para el segundo escenario ya que los productores hijos 112 no son dependientes del productor 110. Sin embargo, si un productor hijo dentro del conjunto 112 está directamente o indirectamente impactado en el segundo escenario, entonces el productor hijo impactado dentro del conjunto 112 puede estresarse para generar un productor hijo estresado 2612 para el segundo escenario. Las dependencias entre los productores 2610, 2612, y 2614 pueden permanecer sin cambiar en el segundo escenario. Como alternativa, algunas o todas las dependencias entre los productores 2610, 2612, y 2614 pueden cambiar en el
segundo escenario. En la Figura 26, el gráfico de productores del segundo escenario se ilustra con líneas de puntos.
En una realización de la invención todos los productores en un primer gráfico de productores de un programa de aplicación están estresados para un nuevo escenario. Como resultado, se crea un gráfico de productores del productor estresado y se añade a la colección de gráficos de productores que representan un programa de aplicación. Sin embargo, puede permitirse la optimización en algunas realizaciones de modo que sólo un subconjunto de productores esté estresado para crear un sub-gráfico dentro del primer gráfico de productores para el nuevo escenario. Más detalles de algunas realizaciones de la creación de gráficos de productores o sub-gráficos de productores se tratan más adelante.
La Figura 27A es un diagrama de bloques que ilustra una rutina de ejecución con soporte de programación orientado a gráficos de productores así como un soporte de escenario de acuerdo con una realización de la invención. Detalles de las referencias numéricas 320, 325, 330, 335, 340, 380, 384 y 345 también se han descrito anteriormente con referencia a la Figura 3A. Para soportar el escenario, la rutina de ejecución 335 también recibe información de representación del escenario 328. La información de representación del escenario 328 también puede proporcionarse a la rutina de ejecución 335 a través de diversas maneras, tales como, por ejemplo, a través del código del cliente (tal como, una interfaz gráfica de usuario (GUI), una interfaz de línea de comandos (CLI), etc.). Como alternativa, la información de representación del escenario 328 puede especificarse en una declaración de dependencias del productor (tal como un establecimiento de declaraciones de dependencia del productor o un código de declaración de dependencias del productor). Como alternativa, algo o toda la información la información de representación del escenario 328 pude especificarse en un código fuente de un método de un productor de generación de productores estresados. Más detalles del productor de generación de productores estresados se tratan más adelante.
De acuerdo con una realización de la invención, se proporciona información de representación de escenarios 328 para un nuevo módulo de escenarios 337 de la rutina de ejecución 335. En base a la información de representación de escenarios 328, el nuevo módulo de escenarios 337 representa nuevos escenarios. En algunas realizaciones, la rutina de ejecución 335 incluye un estructura de seguimiento de escenarios 338 para almacenar claves de escenarios, referencias a objetos de escenario, que pueden especificar un conjunto de uno o más productores impactados directamente y las salidas predeterminadas correspondientes o las transformaciones de salida de los productores impactados directamente, y una estructura de seguimiento de la trayectoria del impacto, la cual mantendrá posteriormente la lista de productores impactados por el escenario. En base al conjunto actual de uno o más productores estresados cuyas salidas son de interés 325, el módulo de generación automatizada del gráfico de productores 340 puede generar un gráfico de productores o un sub-gráfico para uno o más productores estresados de interés actuando sobre la estructura de seguimiento del escenario 338. Para evaluar el impacto sobre el productor estresado de interés por una o más salidas predeterminadas de uno o más productores impactados directamente en los escenarios, el módulo de ejecución de gráficos de productores 345 puede pasearse a través el gráfico o sub-gráfico de productores generado para ejecutar productores impactados, directamente o indirectamente por las salidas predeterminadas o las transformaciones de salida para el escenario.
En algunas realizaciones, la información del escenario 328 incluye una clave del escenario de referencia, una clave del escenario objetivo, una lista de uno o más productores impactados directamente y las salidas correspondientes predeterminadas de los productores impactados directamente. En general, una clave de escenario es una clave única para identificar un escenario. En algunas realizaciones, un escenario de referencia es un escenario existente, que puede incluir los estados actuales y las salidas del programa de aplicación. Un escenario objetivo es una colección de impactos atribuidos a la lista de los productores impactados directamente y sus salidas correspondientes. Para el escenario objetivo, las salidas de los productores identificados por la lista de productores impactados directamente se anularán con las salidas especificadas en la lista. La rutina de ejecución 335 puede usar el escenario de referencia para encontrar productores impactados indirectamente por los productores impactados directamente. El impacto sobe un productor estresado de interés por los productores impactados directamente puede evaluarse usando el escenario objetivo sin sobrescribir o modificar el escenario de referencia. En otras palabras, las salidas existentes y/o las instancias de los productores se conservan o mantienen para el primer escenario. En algunas realizaciones, una porción del gráfico de productores del escenario de referencia puede enlazarse con el gráfico de productores del escenario objetivo si el productor de interés depende de la porción y la porción no está impactada, directamente o indirectamente, por los productores impactados directamente en el escenario objetivo. En otras palabras, puede crearse un sub-gráfico para el escenario objetivo dentro del gráfico de productores del escenario de referencia.
La Figura 27B es un diagrama de bloques que ilustra una rutina de ejecución con soporte de programación orientado a gráficos de productores que también soporta ejecución incremental y salidas de productores anuladas, así como escenarios, de acuerdo con una realización de la invención. Se han tratado anteriormente detalles de los componentes 320, 325, 350, 352, 354, 360, 365, 380, 382, 384, 370, 396, 390, 392, y 394 con referencia a la Figura 3B. Para soportar escenarios, se introduce la información de representación de escenarios 328 en el módulo de generación automatizada de gráficos de productores 365. Detalles de algunas realizaciones de la información de representación de escenarios 328 se han descrito anteriormente con referencia a la Figura 27A. En base a la información de representación de escenarios 328, el módulo de generación automatizada de gráficos de productores 365 puede construir un gráfico o sub-gráfico de productores para cada uno de los escenarios. Más detalles de algunas realizaciones de la construcción de gráficos o sub-gráficos de productores para un escenario se describen a continuación. Para evaluar el impacto sobre un productor estresado de interés (es decir, un productor de interés para un escenario particular), el módulo de ejecución de gráficos de productores 370 puede pasearse a través del gráfico o sub-gráfico de productores creado para ese escenario para ejecutar los productores consecuentemente. Más detalles de algunas realizaciones de la ejecución de un gráfico o sub-gráfico de productores para un escenario se describen más adelante.
En algunas realizaciones, la información de representación de escenarios 328 se proporciona al módulo de anulación de la salida del productor 390, que anula la salida de uno o más productores impactados directamente en el escenario correspondiente. Anteriormente se han descrito detalles de la operación del módulo de anulación de la salida del productor 390 con respecto a la Figura 3B.
Las Figuras 28A-D ilustran algunos ejemplos de gráficos de productores de un programa de aplicación para diferentes escenarios. Refiriéndonos a la Figura 28A, se muestra un gráfico de productores para el escenario 1 en la parte superior y se muestra un gráfico de productores para el escenario 2 en la parte inferior. Los escenarios 1 y 2 tienen claves de escenario "S1" y "S2" respectivamente. En algunas realizaciones, el escenario 1 se denomina también como el escenario por defecto o escenario de referencia. El programa de aplicación de muestra tiene al menos siete productores, a saber, Productor 1 - Productor 7, donde el Productor 1 depende directamente del Productor 3 y el Productor 4, el Productor 2 depende directamente del Productor 4, el Productor 3 depende directamente del Productor 5 y el Productor 6, y el Productor 4 depende directamente del Productor 7. En el escenario 1, la salida del Productor 7 tiene el valor de X_{1} y la salida del Productor 1 tiene un valor de Z_{1}.
En algunas realizaciones, un productor estresado se identifica por un par de una clave del productor y una clave de escenario. Por ejemplo, el Productor estresado 1 en el escenario 2, se identifica por el par (Productor 1, S2). Un productor estresado puede especificarse por los usuarios a través de diversos modos, tal como a través de un código de cliente (por ejemplo, una GUI, una CLI, etc.). Como alternativa el programa de aplicación puede incluir un productor de generación de productores estresados para generar uno o más productores estresados. Una realización de ejemplo de un productor de generación de productores estresados, a saber, el Productor 8, se muestra en la Figura 28B. Refiriéndonos a la Figura 28B, se muestra un seudo código de ejemplo del Productor 8 en el lateral derecho de la figura. Inicialmente, se define una clase de productores estresados que tienen un campo que representa la clave del productor de interés y un campo que representa el escenario. En el ejemplo actual, el Productor 8 es independiente, esto es, el establecimiento de declaraciones de dependencias del productor del Productor 8 es nulo. Entonces un método del Productor 8 puede proporcionar información del escenario 2, asignando valores a los campos de un productor estresado, y sacar una colección de productores estresados.
Refiriéndonos de nuevo a la Figura 28A, el escenario 2 se define por la siguiente información de usuario: clave del escenario de referencia = nula, clave del escenario objetivo = S2, y una lista de productores impactados directamente y sus salida correspondientes. En el ejemplo actual, la lista de productores impactados directamente tiene sólo un productor, a saber el Productor 7, que tiene una salida asignada X_{2}. Sin embargo, debería apreciarse que puede haber múltiples productores impactados directamente en un escenario. En algunas realizaciones, se reproduce todo el gráfico de productores para el escenario 2 creando cada uno de los Productor 1 - Productor 7, como se ilustró en la Figura 28A. En el gráfico de productores para el escenario 2, la salida del productor impactado directamente, es decir el Productor 7, se anula con la salida especificada en la definición del escenario 2, es decir X_{2}. El productor de interés en el ejemplo actual es el Productor 1. Ejecutando el gráfico de productores para el escenario 2, la salida del productor estresado de interés, es decir, el Productor 1 en el escenario 2, se determina que es Z_{2}. Aproximaciones alternativas para generar sub-gráficos para los escenarios dentro de un gráfico de productores existente están disponibles y algunas realizaciones las mismas se describen en detalle a continuación.
Como se crea un segundo gráfico de productores para el escenario 2, las modificaciones realizadas para el escenario 2 (por ejemplo, anulación de la salida del Productor 7) no afectan al gráfico de productores para el escenario 1. De este modo, las salidas de los productores para el escenario 1 no se sobrescriben ejecutando el programa de aplicación con las modificaciones realizadas para el escenario 2, Como tal, la técnica de crear escenarios es útil para evaluar impactos potenciales o posibles y/o efectos de modificaciones sin perder las salidas existentes de los productores en el programa de aplicación. Puede ser útil retener o conservar las salidas existentes de los productores por diversas razones, tales como, por ejemplo, para determinar automáticamente derivadas de productores usando diferencias finitas. Refiriéndonos de nuevo a la realización en la Figura 28A y asumiendo que Z_{1}, Z_{2}, X_{1}, y X_{2} son valores numéricos, la derivada del productor de interés, es decir el Productor 1, desde el escenario 1 al escenario 2 puede calcularse fácilmente usando salidas de ambos escenarios 1 y 2 como sigue:
Derivada del Productor 1 = (Z_{1} - Z_{2}) / (X_{2} - X_{1})
Además, el orden más alto de las derivadas, es decir las derivadas de orden N (donde N es un número entero mayor de uno), puede calcularse también fácilmente usando las salidas desde diferentes escenarios. En algunas realizaciones, pueden calcularse las derivadas cruzadas de una salida de un productor de interés cuando cambia más de una entrada desde un escenario a otro. Por ejemplo, supongamos que las entradas X_{1}, e Y_{1} se cambian a X_{2}, e Y_{2} respectivamente, desde un escenario a otro. Como resultado, se cambia una salida de un productor de interés desde Z_{1} a Z_{2}. Entonces una derivada cruzada de la salida del productor de interés puede calcularse como sigue:
Derivada Cruzada del Productor de Interés = (Z_{2} - Z_{1})^{2} / (X_{2} - X_{1})* (Y_{2} - Y_{1}))
Como la rutina de ejecución puede mantener el seguimiento de las salidas de productores para diferentes escenarios y puede determinar automáticamente las derivadas de los productores, los programadores no tienen que escribir el código de secuenciación de invocación manual para correr el programa de aplicación múltiples veces, para mantener el seguimiento de las salidas correspondientes, y para codificar métodos para calcular derivadas usando las salidas correspondientes.
Como se ha mencionado anteriormente, están disponibles las aproximaciones alternativas para generar un sub-gráfico para el escenario 2. Ejemplos de algunas aproximaciones alternativas se ilustran en las Figuras 28C y 28D.
Refiriéndonos a la Figura 28C, se usa una técnica de enlazar una porción de un gráfico de productores para el escenario 1 (es decir, el escenario de referencia) para generar el gráfico de productores para el escenario 2 (es decir, el escenario objetivo). Inicialmente, una rutina de ejecución puede recibir un nuevo comando de productores estresados desde un usuario a través del código del cliente para indicar que un productor de interés es el Productor 1. Como alternativa, un productor de generación de productores estresados, tal como el Productor 8, puede disparar la invocación de un nuevo comando de productores estresados. En respuesta al nuevo comando del productor estresado, la rutina de ejecución construye un gráfico de productores para el Productor 1 para el Escenario 1, que también se denomina como escenario por defecto o escenario de referencia. A continuación se recibe un segundo nuevo comando de productor estresado del usuario a través del código del cliente o disparado por un productor de generación de productores estresados (por ejemplo, el Productor 8) para indicar que un productor de interés es el Productor 2. En respuesta al segundo nuevo comando de productor estresado, la rutina de ejecución añade el Productor 2 dentro del gráfico de productores para el escenario 1.
A continuación la rutina de ejecución recibe la información de escenario que define el escenario 2. De nuevo, la información de escenario puede ser del código del cliente. La información de escenario especifica una clave del escenario de referencia como "S1", una clave del escenario objetivo como "S2", y una lista de productores impactados directamente y sus salidas correspondientes para el escenario objetivo. La lista de productores impactados directamente incluye sólo un productor en el ejemplo actual, a saber el Productor 7, y la salida del Productor 7, a saber X_{2}.
Para evaluar el impacto o efecto del escenario 2, es decir, cambiando la salida del Productor 7 a X_{2}, sobre un productor, tal como el Productor 1, en el programa de aplicación, el Productor 1 se identifica como productor de interés. Además, el Productor 1 se identifica con el escenario que es de interés. De este modo, se identifica un productor estresado, que es un par de claves una del productor de interés y una clave de escenario, a saber, {Productor 1, S2}. En algunas realizaciones, el productor de interés se identifica por los usuarios a través del código de cliente, tal como GUI, CLI, etc. Como alternativa, el productor de interés puede identificarse en la salida del productor de generación de productores estresados (por ejemplo, el Productor 8).
En base a las dependencias entre productores y la información del escenario, la rutina de ejecución puede identificar tanto productores impactados directamente como indirectamente para el escenario 2. La identificación de los productores impactados directamente e indirectamente también puede denominarse como seguimiento. Los productores impactados directamente e indirectamente pueden seguirse usando una estructura de seguimiento de trayectorias de impactados (IPTS). En el ejemplo actual, la estructura de seguimiento de trayectorias de impactados contiene el Productor 7, el Productor 4, el Productor 1, y el Productor 2. Obsérvese que los Productores 1, 2, y 4 son productores impactados indirectamente mientras que el Productor 7 es un productor impactado directamente para el escenario 2. En algunas realizaciones, usando la lista de impactos del escenario 2, la rutina de ejecución puede identificar los productores impactados directamente. A continuación la rutina de ejecución puede usar el gráfico de productores para el escenario 1 para seguir los productores impactados indirectamente atravesando el gráfico de productores para el escenario 1 desde los productores impactados directamente como se indica por [B], [C], [D], y [E] en la Figura 28C. Si el gráfico de productores para el escenario 1 no se ha construido aún, la rutina de ejecución pude construir el gráfico de productores para el escenario 1 antes de seguir los productores impactados indirectamente. Como alternativa, si no se proporciona ningún escenario de referencia o el gráfico de productores para el escenario de referencia no se ha construido aún, la rutina de ejecución puede crear el productor de interés, los productores impactados directamente, y cualesquiera productores intermedios que caen sobre el camino entre los productores de interés y los productores impactados directamente para el escenario 2 usando los métodos correspondientes y las declaraciones de dependencias del productor de los productores mencionados anteriormente.
En algunas realizaciones, la rutina de ejecución va a través de la estructura de seguimiento de trayectorias de impactados para invocar un nuevo comando de productores estresados para cada uno de los productores impactados en la estructura de seguimiento de trayectorias de impactados. Los productores estresados generados se interconectan para formar un sub-gráfico del gráfico de productores existente para el escenario 1. La secuencia de invocación puede no importar porque los nuevos productores estresados (es decir, los Productores 1, 2, 4, y 7 para el escenario 2) están interconectados entre sí como se crearon, como se indica por [G] en la Figura 28C. En algunas realizaciones, cuando no existe un productor de interés en el escenario de referencia, tal productor de interés no se seguiría en la estructura de seguimiento de trayectorias de impactados. Sin embargo, la rutina de ejecución invoca un nuevo comando de productores estresados para tal productor de interés para crear el gráfico de productores para el escenario 2.
Para optimizar el gráfico de productores para el escenario 2, los productores que no están impactados, directamente o indirectamente, por el Productor 7 pero son dependientes del productor de interés, es decir, el Productor 1, pueden no estar duplicados o estresados en el escenario 2. En cambio, estos productores están enlazados al gráfico de productores del escenario 2 desde el escenario 1. En el ejemplo actual, estos productores incluyen los Productores 3, 5 y 6, donde el Productor 1 depende directamente del Productor 3 y el Productor 3 depende directamente de los Productores 5 y 6. Como se ilustra en la Figura 28C, se crea un enlace para enlazar el Productor 3 del escenario 1 al Productor 1 del escenario 2 en [F]. Como tal, el subconjunto del gráfico de productores del escenario 1 que tiene el Productor 3 y los productores hijos del Productor 3 (es decir, el Productor 5 y el Productor 6) están enlazados al gráfico de productores del escenario 2. En otras palabras, se ha creado un sub-gráfico dentro del gráfico de productores para el escenario 1 para el escenario 2. Obsérvese que los impactos sobre el productor 7 para el escenario 2 no afectan al Productor 3 porque el Productor 3 no depende, directamente ni indirectamente del Productor 7.
Para optimizar adicionalmente el proceso de creación del gráfico de productores del escenario 2, la rutina de ejecución puede no duplicar ningún productor estresado que sean directamente o indirectamente dependientes del productor de interés, independientemente de si tales productores están impactados o no en el escenario 2. Un ejemplo de tal optimización se ilustra en la Figura 28D. Similar a la Figura 28C, se crea un gráfico de productores para el escenario 1 y se identifica el Productor 1 como un productor de interés en el escenario 2, donde el escenario 2 se define como se ha descrito anteriormente. En algunas realizaciones, se invoca un nuevo comando de productor estresado sobre el productor de interés, es decir, el Productor 1, como se indica por [A] en la Figura 28D. El nuevo comando de productores estresados puede invocarse por el usuario a través del código del cliente o dispararse por un productor de generación de productores estresados, tal como el Productor 8 en la Figura 28B.
Dependiendo del orden de la declaración de dependencias inicial, la rutina de ejecución puede invocar el nuevo comando de productores estresados sobre los productores de los que depende el Productor 1 en ese orden. Por ejemplo, si el Productor 3 viene antes que el Productor 4 en la declaración de dependencias inicial, se invoca el nuevo comando de productores estresados sobre el Productor 3 en primer lugar, y a continuación sobre el Productor 4, y viceversa. Cuando se invoca un nuevo comando de productores estresados sobre el Productor 3, se crea un enlace en [F] para enlazar el Productor 1 en el escenario 2 con el Productor 3 en el escenario 1 ya que el Productor 3 no está impactado en el escenario 2. Cuando se invoca un nuevo comando de productores estresados sobre el Productor 4, el Productor estresado 4 se clona en el escenario 2 como se indica por [G] en la Figura 28D. Para clonar el Productor estresado 4 en el escenario 2, la rutina de ejecución puede usar información del Productor 4 en el gráfico de productores del escenario 1 para hacer una copia del Productor 4 en el sub-gráfico para el escenario 2. Como alternativa, la rutina de ejecución puede crear un nuevo Productor 4 representando el Productor 4 en base a la declaración de dependencias del productor y el código fuente orientado a objetos del Productor 4. Después de que el Productor estresado 4 se añade al gráfico de productores, se invoca un nuevo comando de productores estresados sobre el Productor 7 para estresar el Productor 7 sobre el escenario 2 como se indica por [H] en la Figura 28D. Como el Productor 4, el Productor 7 puede estresarse por representación o clonación. Obsérvese que el sub-gráfico para el escenario 2 se construye ahora completamente como se muestra en la Figura 28D sin estresar el Productor 2 en el escenario 2 porque el productor de interés en el escenario 2, a saber el Productor 1, no depende, ni directamente ni indirectamente del Productor 2, incluso aunque el Productor 2 esté impactado indirectamente por el Productor 7. Como resultado, el proceso de creación del sub-gráfico para el escenario 2 no está optimizado adicionalmente.
La Figura 29 es un diagrama de flujo de un flujo lógico de ejecución de la rutina de ejecución del cliente y su asociación con la rutina de ejecución con soporte de programación orientado a gráficos de productores de acuerdo con una realización de la invención. En la Figura 29, la línea discontinua de división 600 separa el flujo lógico de ejecución de una rutina de ejecución del cliente 610 de la rutina de ejecución con el soporte de programación orientado a gráficos de productores 640. Los detalles de los bloques 615, 620, 625, 630, 645, 650, 655 y 660 se han descrito anteriormente con referencia a la Figura 6. Para soportar escenarios, la rutina de ejecución del cliente 610 en primer lugar comprueba si hay cualquier nuevo escenario en el bloque 616. Si hay un nuevo escenario, la rutina de ejecución del cliente 610 determina la información del nuevo escenario en el bloque 617. Además, puede invocarse un comando de representación de escenario o registrarse en el registro de comandos 665 para representar el nuevo escenario. En respuesta al nuevo comando de escenarios, la rutina de ejecución 640 representa un nuevo escenario en el bloque 648. A continuación la rutina de ejecución del cliente 610 transita dentro del bloque 615 para continuar el flujo de ejecución. De lo contrario, la rutina de ejecución del cliente 610 salta al bloque 617 y transita al bloque 615 para continuar el flujo de ejecución. En el bloque 615, la rutina de ejecución del cliente 610 determina un conjunto de uno o más productores estresados cuya salida es de interés. A continuación la rutina de ejecución del cliente 610 transita al bloque 620 para continuar el flujo de ejecución como se ha descrito anteriormente con referencia a la Figura 6.
Para evaluar los impactos sobre uno o más productores de interés para el escenario, se invoca el módulo de ejecución del gráfico de productores en el bloque 630. A continuación el módulo de ejecución del gráfico de productores puede pasearse a través del gráfico o sub-gráfico de productores para ejecutar cualesquiera productores que se tengan que ejecutar en base al seguimiento del bloque 660. En el bloque 630, se invoca el módulo de ejecución del gráfico de productores y opcionalmente el control vuelve al bloque 615, el bloque 625, y/o el bloque 616.
La Figura 30 es un diagrama de bloques de una implementación alternativa de acuerdo con una realización de la invención que soporta el escenario. En la Figura 30, la línea de división discontinua 1000 separa un cliente de la rutina de ejecución 1002 de la rutina de ejecución con soporte de programación orientado a gráficos de productores 1004. Detalles de los diversos componentes de la rutina de ejecución del cliente 1002 y la rutina de ejecución 1004 se han descrito anteriormente con referencia a la Figura 10. De este modo, la siguiente descripción se enfoca sobre las componentes relacionadas con el escenario. En algunas realizaciones, la rutina de ejecución 1004 incluye además un nuevo módulo de escenario 1096 y una estructura de seguimiento de escenarios 1050 para soportar el escenario.
Como se ha tratado anteriormente con referencia a la Figura 10, un nuevo módulo de clases 1095 puede representar una clase en base a las definiciones de clases 1010. La información de la clase representada puede almacenarse en la estructura de seguimiento de clases 1092. Una realización de ejemplo de la estructura de seguimiento de clases 1092 se muestra en la Figura 31A. Respecto a la Figura 31A, una clave de clase 1110 y una referencia de clase 1115 (tal como un puntero de clases) se almacenan en la estructura de seguimiento de clases para cada una de las clases representadas. Refiriéndonos de nuevo a la Figura 30, las definiciones de clase 1010 del lado de la rutina de ejecución del cliente 1002 incluyen el código del productor de generación de productores estresados 1018 de acuerdo con una realización de la invención. Como se ha tratado anteriormente con referencia a la Figura 28B, un productor de generación de productores estresados es un productor que saca una colección de productores estresados, cada uno de los cuales incluye una clave del productor y una clave del escenario. Algunos seudo códigos de ejemplo del código del productor de generación de productores estresados 1018 también se muestran en la Figura 28B. Para soportar el escenario, la rutina de ejecución del cliente 1002 proporciona además comandos de representación de escenarios 1019 con claves de escenarios. Las claves de escenarios pueden usarse en la representación de las nuevas instancias para asociar las instancias con los escenarios correspondientes. La información sobre las instancias representadas puede almacenarse en la estructura de seguimiento de instancias 1065. Una realización de ejemplo de la estructura de seguimiento de instancias 1065 se muestra en la Figura 31B. Para cada una de las instancias representadas, se almacenan una clave de escenario 1123, una referencia de instancia 1120, y una referencia de la instancia estresada 1125 en la estructura de seguimiento de instancias de ejemplo en la Figura 31B.
Refiriéndonos de nuevo a la Figura 30, la rutina de ejecución del cliente 1002 puede invocar un comando de representación de escenarios 1019 con una clave de escenario única para crear un nuevo escenario. En respuesta al comando de representación del escenario 1019, el nuevo módulo de escenarios 1096 puede almacenar información del nuevo escenario (tal como la información de escenario 328 en la Figura 27A) en la estructura de seguimiento de escenarios 1050. Una realización de ejemplo de la estructura de seguimiento de escenarios 1050 se ilustra en la Figura 31D. En algunas realizaciones las estructura de seguimiento de escenarios 1050 incluye una tabla que tiene una columna para la clave de escenario, una columna para la referencia de escenario, y una columna para la estructura de seguimiento de trayectorias de impactos como se ilustra en la Figura 31D. La clave de escenario 3110 puede ser una clave única asignada al escenario para identificar el escenario. La referencia de escenario 3112 puede referirse a un objeto de escenario. Una estructura de seguimiento de trayectorias de impactos 3113 mantiene el seguimiento de los productores impactados en el escenario correspondiente.
La Figura 31E ilustra una realización de una estructura de seguimiento de objetos de escenario. La estructura de seguimiento de objetos de escenario puede incluir una tabla que tiene una fila para cada uno de los escenarios. Para cada uno de los escenarios, se almacenan una clave del escenario de referencia 3120, una clave del escenario objetivo 3122, y una referencia a una lista de impactos 3124 en la estructura de seguimiento de objetos de escenario. La clave del escenario objetivo 3122, identifica el escenario a construir. De este modo, la clave del escenario objetivo 3122 es la misma que la clave del escenario correspondiente 3110 en la estructura de seguimiento de escenarios en la Figura 31D. La clave del escenario de referencia 3120 identifica un escenario basado en el cual puede construirse el escenario objetivo. Si no hay ningún escenario de referencia, entones la clave de escenario de referencia 3120 es nula. La referencia para una lista de impactos del escenario 3124 se refiere a una lista de impactos del escenario, tal como la lista de impactos de ejemplo, mostrada en la Figura 31F.
En la Figura 31F, la lisa de impactos de ejemplo de un escenario incluye una columna para cada uno de los siguientes: una clave del productor impactado directamente 3130, un indicador relativo o absoluto 3124, una instancia de salida 3132, un parámetro de transformación 3136, y un nombre del método de transformación y clase de método 3138. Cada uno de los productores impactados directamente en el escenario correspondiente ocupa una fila de la lista de impactos. La clave del productor impactado directamente 3130 identifica un productor impactado directamente en el escenario.
En algunas realizaciones, puede asignarse el valor de salida como un valor absoluto o un valor relativo. El indicador de valor relativo o absoluto 3134 indica si al valor de salida se asigna un valor absoluto o un valor relativo. Si el indicador 3134 indica que es un valor absoluto, el valor de salida del productor impactado directamente se designa para que sea la instancia de salida 3132 independientemente de las entradas al productor impactado directamente. Por el contrario, se aplica el parámetro de transformación 3136 a la salida actual del productor impactado directamente (es decir, la salida del productor impactado directamente para el escenario de referencia) para transformar la salida actual del productor impactado directamente usando el método de transformación con el nombre del método de transformación y la clase del método 3138. A continuación la salida del productor impactado directamente para el escenario objetivo se anula con la salida actual transformada. Obsérvese que la salida del productor impactado directamente puede ser un valor (tal como un valor numérico) o una instancia. Por ejemplo, la salida actual de un productor impactado directamente es un valor numérico, el parámetro de transformación 3136 es un valor de factor, y el método de transformación es una multiplicación, entones la salida del productor impactado directamente para el escenario objetivo es un valor igual al producto del valor del factor y el valor actual de la salida del productor impactado directamente. En otro ejemplo, el parámetro de transformación 3136 es un valor de difusión y el método de transformación es una suma, entonces la salida del productor impactado directamente para el escenario objetivo puede ser igual a la suma del valor difundido y el valor actual de la salida del productor impactado directamente. Debería apreciarse que el valor de salida del productor impactado directamente puede generarse usando otra fórmula en diferentes realizaciones como una función del valor de salida actual.
Refiriéndonos de nuevo a la Figura 30, el módulo de generación automatizada de gráficos de productores estresados 3040 accede a la estructura de seguimiento de escenarios 1050. En respuesta a los comandos de representación de productores estresados con las claves del productor y las claves de escenario 1025, el módulo de generación automatizada de gráficos de productores estresados 3040 puede representar un productor estresado en base a la información de escenario del escenario correspondiente desde la estructura de seguimiento de escenarios 1050, la estructura de seguimiento de clases 1092, la estructura de seguimiento de métodos 1058, la estructura de seguimiento de instancias 1065, y las instancias 1052. Como alternativa, el código del productor de generación de productores estresados 1018 dentro de las definiciones de clases 1010 se procesa por la rutina de ejecución 1004 para generar una clase de productores de generación de productores estresados 3054 y un método para generar productores estresados 3056. La clase y el método generados se introducen en el módulo de generación automatizada de gráficos de productores estresados 3040, que representa un productor estresado consecuentemente. El módulo de generación automatizada de gráficos de productores estresados 3040 interconecta los productores estresados representados para generar un gráfico o sub-gráfico de productores para el escenario correspondiente. Detalles de algunas realizaciones del flujo de representación del nuevo productor estresado que soporta el escenario se tratan más adelante con referencia a las Figuras 34A-34G.
De acuerdo con una realización de la invención, el gráfico de productores se almacena en la estructura del gráfico de productores 1060. En la Figura 31C se muestra una estructura de un gráfico de productores de ejemplo. La estructura del gráfico de productores es sustancialmente la misma que la mostrada en la Figura 11C. Como cada uno de los escenarios se sigue individualmente en el correspondiente gráfico o sub-gráfico de productores, el módulo de ejecución de gráficos de productores estresados 3070 puede pasearse a través del correspondiente gráfico o sub-gráfico de productores para el escenario, para ejecutar al menos algunos de los productores estresados para el escenario, para evaluar los impactos sobre uno o más productores estresados de interés para el escenario sin sobrescribir o cambiar las salidas de los productores para otros escenarios. Detalles de algunas realizaciones del flujo de ejecución de los gráficos de productores que soportan escenarios se tratarán más adelante con referencia a las figura 35A y 35B.
Obsérvese que los módulos y estructuras para soportar el escenario en la rutina de ejecución del cliente 1002 y la rutina de ejecución 1004 descritas anteriormente se añaden dentro de algunas realizaciones que soportan dependencias del productor contingentes y de suscripción de tipo dinámico, tal como la ilustrada en la Figura 12 anterior.
La Figura 32 es un diagrama de flujo que ilustra un nuevo flujo de representación de escenarios de acuerdo con una realización de la invención. En el bloque 3210, una rutina de ejecución recibe un nuevo comando de representación de escenarios. La rutina de ejecución comprueba a continuación si el escenario identificado por el nuevo comando de representación de escenarios ya existe en el bloque 3220. Si el escenario ya existe, entonces el nuevo flujo de representación de escenarios se hace en el bloque 3290. De lo contrario, la rutina de ejecución añade información de escenario, tal como, por ejemplo, una clave del escenario objetivo, una clave del escenario de referencia, y una referencia a una lista de impactos del escenario para una estructura de seguimiento de escenarios en el bloque 3230. A continua-
ción la rutina de ejecución transita dentro del bloque 3290 y se efectúa el nuevo flujo de representación de escenarios.
La Figura 33 es un diagrama de flujos que ilustra un nuevo flujo de representación de instancias que soporta escenarios de acuerdo con una realización de la invención. Obsérvese que la Figura 33 es sustancialmente similar a la Figura 15 y se han descrito detalles del flujo con referencia a la Figura 15 anterior. Para soportar escenarios, la rutina de ejecución representa una instancia de una clase y almacena la instancia con su clave de instancia, la referencia a la instancia estresada, y las claves de escenario en el bloque 3360 en la Figura 33. Como se ha tratado anteriormente, hay una clave de escenario única para cada uno de los escenarios. De este modo, puede haber múltiples claves de escenario si la instancia está asociada con múltiples escenarios. En una realización, la clave de instancia y las claves de escenario se almacenan en una estructura de seguimiento de instancias como se ilustra en la Figura 31B. Refiriéndonos a la Figura 31B, la estructura de seguimiento de instancias incluye una columna para cada una de la claves de escenario 1123, la clave de instancia 1120, y la referencia de la instancia estresada 1125.
Las Figuras 34A-34G ilustran diagramas de flujo de la representación de un nuevo productor estresado en un escenario objetivo, de acuerdo con una realización de la invención. Las Figuras 34A-34C ilustran el flujo global de la representación de un nuevo productor estresado mientras que las Figuras 34D-34G ilustran un flujo expandido de ciertas operaciones del flujo global.
Refiriéndonos a la Figura 34A, una rutina de ejecución recibe un nuevo comando de productores estresados en el bloque 1600. El nuevo comando de productores estresados especifica una clave de productor y una clave de escenario objetivo. Un productor con la clave de productor y la clave del escenario objetivo es el productor estresado a generar por el nuevo comando de productores estresados. En una realización de la invención, puede ejecutarse un nuevo comando del productor estresado en respuesta a una diversidad de situaciones. La Tabla 3 siguiente identifica las diversas situaciones y parámetros pasados de acuerdo con una realización de la invención.
TABLA 3
6
8
En respuesta al nuevo comando del productor estresado, la rutina de ejecución comprueba si el productor estresado (es decir el productor con la clave del productor y la clave del escenario objetivo) ya existe en el bloque 1605. Si el productor estresado ya existe, entonces la rutina de ejecución enlaza el productor dentro del gráfico de productores si el productor se llama debido a la dependencia en el bloque 1670. De lo contrario, si no existe el productor estresado, entonces la rutina de ejecución identifica ambos productores impactados directamente e indirectamente si el productor es el productor de interés en el bloque 1601. Detalles del bloque 1601 se tratan más adelante con referencia a la Figura 34D. A continuación, la rutina de ejecución transita dentro del bloque 1602 para manejar escenarios, durante los cuales, la rutina de ejecución fija el valor de la creación del productor. En algunas realizaciones, la creación del productor tiene tres valores posibles, a saber, sin creación, nueva creación, y clonación. Detalles del bloque 1602 se tratan más adelante con referencia a la Figura 34E. A continuación, la rutina de ejecución comprueba el valor de la creación del productor en el bloque 1603. Si la creación del productor es crear nuevo, la rutina de ejecución transita al punto de entrada A en la Figura 34B. Si la creación del productor es clonar, la rutina de ejecución transita al punto de entrada B en la Figura 34B. Si la creación del productor es ninguna creación, la rutina de ejecución transita al bloque 1670.
Después del bloque 1670, la rutina de ejecución comprueba si el productor está anulado, si tiene una suscripción adherente, o si está declarado hacia arriba en el bloque 1675. Si es así, la rutina de ejecución marca el productor como no ejecutado en el bloque 1680 y registra el productor en el registro de comienzo de ejecución en el bloque 1665. A continuación, la rutina de ejecución devuelve el estado de ejecución del productor en el bloque 1660. De lo contrario, si el productor no esta anulado, la rutina de ejecución transita dentro del bloque 1660 para devolver el estado de ejecución del productor.
Refiriéndonos a la Figura 34B, la rutina de ejecución va al punto de entrada A, si la creación del productor es crear nuevo. Desde el punto de entrada A, la rutina de ejecución transita dentro del bloque 1610 para llamar al nuevo módulo de instancias. A continuación la rutina de ejecución accede a la definición de clase de una instancia del productor en el bloque 1615. A continuación, la rutina de ejecución accede al método y el establecimiento de la declaración de dependencias del productor, del productor en la definición de clase en el bloque 1620. A continuación la rutina de ejecución añade el productor al gráfico de productores del escenario objetivo en el bloque 1625. Después la rutina de ejecución transita dentro del bloque 1604.
Refiriéndonos de nuevo al bloque 1603 en la Figura 34A, si la creación del productor es clonar, la rutina de ejecución transita al punto de entrada B en la Figura 34B. Desde el punto de entrada B, la rutina de ejecución transita dentro del bloque 1626 para llamar a un nuevo modelo de instancias para representar una instancia vacía. A continuación la rutina de ejecución copia la información del productor con la clave del productor y la clave del escenario de referencia para rellenar la instancia vacía en el bloque 1627. A continuación, la rutina de ejecución clona el productor con la instancia rellena en el bloque 1628. A continuación la rutina de ejecución añade el productor clonado con la clave del escenario objetivo dentro del gráfico de productores en el bloque 1629. Después la rutina de ejecución transita dentro del bloque 1604.
En el bloque 1604, la rutina de ejecución procesa el impacto si el productor está en la lista de impactos del escenario. Más adelante se tratan detalles del bloque 1604 con referencia a la Figura 34G. A continuación, la rutina de ejecución procesa los criterios de filtrado de la suscripción en el bloque 1630 para cada una de las suscripciones registradas. Si se llama el productor debido a la dependencia, la rutina de ejecución enlaza el productor dentro del gráfico de productores en 1635. A continuación la rutina de ejecución transita al punto de entrada C.
Refiriéndonos a la Figura 34C, la rutina de ejecución transita al bloque 1640 desde el punto de entrada C para marcar el productor como no ejecutado. En algunas realizaciones, la rutina de ejecución puede recibir un comando de anular el productor en el bloque 1690. En respuesta al comando de anular el productor, la rutina de ejecución puede marcar el productor como no anulado en el bloque 1695 y a continuación transita dentro del bloque 1640.
Desde el bloque 1640, la rutina de ejecución transita dentro del bloque 1645 para comprobar si el productor tiene cualesquiera dependencias y no está anulado. Si el productor no tiene ninguna dependencia y no está anulado, entonces la rutina de ejecución transita al punto de entrada D para volver al bloque 1665 en la Figura 34A. Por el contrario, la rutina de ejecución transita dentro del bloque 1650. En el bloque 1650, para cada una de las dependencias en la declaración de dependencias eso es lo que se determina ahora, la rutina de ejecución determina el número de productores e invoca un nuevo comando de productor estresado para cada uno. Si todos los productores dependientes existen y se han ejecutado, la rutina de ejecución añade el productor al registro de comienzo de ejecución en el bloque 1655 y transita al punto de entrada E para volver al bloque 1660 en la Figura 34A.
La Figura 34D ilustra un diagrama de flujo expandido del bloque 1601 de acuerdo con una realización de la invención. La rutina de ejecución en primer lugar localiza la estructura de seguimiento de la trayectoria de impactos usando la estructura de seguimiento de escenarios y la clave de escenario en el bloque 3405. A continuación, la rutina de ejecución determina en el bloque 3410 si la estructura de seguimiento de la trayectoria de impactos en la estructura de seguimiento de escenarios está ya representada. Si la estructura de seguimiento de trayectorias de impactos está ya representada, entonces ambos productores impactados directa e indirectamente ya se han identificado. De este modo, la rutina de ejecución transita al bloque 3419 para terminar el flujo. De lo contrario, la rutina de ejecución transita al bloque 3412. En el bloque 3412 la estructura de seguimiento de trayectorias de impactos se representa y se almacena en la estructura de seguimiento de escenarios. A continuación la rutina de ejecución transita al bloque 3413. Para cada uno de los productores impactados directamente en la definición de escenario, la rutina de ejecución busca un productor con la clave de productor correspondiente y la clave del escenario de referencia en la definición de escenario. La rutina de ejecución determina si tal productor existe en el bloque 3415. Si tal productor existe, la rutina de ejecución añade el productor a la estructura de seguimiento de trayectorias de impactos junto con todos sus ancestros en el bloque 3417 y a continuación transita al bloque 3418. De lo contrario, la rutina de ejecución salta el bloque 3417 y transita al bloque 3418. En el bloque 3418, la rutina de ejecución comprueba si hay algún productor más impactado directamente en la definición de escenario. Si lo hay, entonces la rutina de ejecución vuelve al bloque 3413 para repetir las operaciones descritas anteriormente. De lo contrario la rutina de ejecución transita al bloque 3419 para terminar el flujo.
La Figura 34E ilustra un diagrama de flujo ampliado del bloque 1602 de acuerdo con una realización de la invención. La rutina de ejecución comprueba si la estructura de seguimiento de trayectorias de impactos está vacía en el bloque 3420. Si la estructura de seguimiento de trayectorias de impactos está vacía, la rutina de ejecución transita al bloque 3429. De lo contrario, la rutina de ejecución comprueba si el productor con la clave del escenario de referencia está en la estructura de seguimiento de trayectorias de impactos en el bloque 3422. Si lo está, entones la rutina de ejecución fija la creación del productor a "clonar" en el bloque 3424. De lo contrario, la rutina de ejecución comprueba si el productor existe en el gráfico de productores con el escenario de referencia en el bloque 3426. Si existe, entonces la rutina de ejecución fija la creación del productor a "no creación" en el bloque 3428. Esta es una optimización que da como resultado la duplicación de sólo una porción del gráfico de productores para el escenario objetivo. Los productores que no se ha creado o clonado pueden enlazarse al sub-gráfico para el escenario objetivo desde el escenario de referencia. De lo contrario, la rutina de ejecución transita al bloque 3429. En el bloque 3429, la rutina de ejecución fija la creación del productor a "crear nuevo".
La figura 34F ilustra una vista ampliada del bloque 1605 de la Figura 34A de acuerdo con una realización de la invención. En el bloque 1605, la rutina de ejecución comprueba si el productor estresado ya existe. En algunas realizaciones, la rutina de ejecución comprueba si la combinación de la clave de clase, la clave de instancia, la clave de método y la clave de escenario ya existe en la tabla de productores. Si la combinación existe, el productor estresado existe. De lo contrario, el productor estresado no existe.
La Figura 34B ilustra un diagrama de flujo ampliado del bloque 1604 de acuerdo con una realización de la invención. En algunas realizaciones, existen interfaces dedicadas correspondientes para obtener y fijar las salidas de los productores. En el bloque 3430, la rutina de ejecución comprueba si el impacto sobre el productor es relativo. Si no lo es, entonces el impacto sobre el productor es absoluto. De este modo la rutina de ejecución asigna la instancia de salida desde la lista de impactos del escenario como la nueva salida del productor en el escenario objetivo en el bloque 3436. A continuación la rutina de ejecución transita al bloque 3440. De lo contrario, el impacto sobre el productor es relativo y la rutina de ejecución obtiene la salida actual del productor en el bloque 3432. A continuación la rutina de ejecución genera la nueva salida del productor usando la salida actual y el método de transformación correspondiente y el parámetro de transformación correspondiente en la lista de impactos del escenario en el bloque 3434. A continuación la rutina de ejecución transita al bloque 3440.
En algunas realizaciones, la rutina de ejecución puede generar la nueva salida añadiendo el valor difundido a la salida actual. Como alternativa, la rutina de ejecución puede generar la nueva salida multiplicando la salida actual por el valor del factor.
En el bloque 3440, la rutina de ejecución fija la salida del productor al nuevo valor de salida generado en el almacenamiento temporal de la salida del productor y en la instancia si la salida es un campo. La rutina de ejecución marca a continuación el productor como anulado en el bloque 3442 y transita al bloque 1630 en la Figura 34B.
Las Figuras 35A-35B son diagramas de flujo que ilustran un flujo de ejecución del gráfico de productores estresados de acuerdo con una realización de la invención. En el bloque 2200, la rutina de ejecución selecciona un conjunto de productores candidatos a ejecutar en base a los productores sobe el registro de comienzo de ejecución como el conjunto actual de productores candidatos. A continuación la rutina de ejecución selecciona un subconjunto de productores del conjunto actual de productores candidatos que están listos para ejecutarse como un conjunto actual de productores listos en el bloque 2205. Para cada uno de los productores en el conjunto actual de productores listos, la rutina de ejecución comprueba el tipo de productores en el bloque 2210. En una realización, hay tres tipos de productores, a saber, productores normalizados, productores de generación de productores estresados, y productores de declaración de dependencias.
Si el productor es un productor normalizado, la rutina de ejecución transita al bloque 2215 para ejecutar el productor. A continuación la rutina de ejecución marca cualesquiera padres que tienen una dependencia de suscripción absorbente sobre el productor ejecutado como incompleto en el bloque 2220 y transita al punto de entrada A.
Si el productor es un productor de generación de productores estresados, la rutina de ejecución transita al bloque 3710 para ejecutar el productor. A continuación la rutina de ejecución marca cualesquiera padres que tienen una dependencia de suscripción absorbente sobre el productor ejecutado como incompletos en el bloque 3720. A continuación, la rutina de ejecución invoca nuevos comandos de productores estresados para los productores descubiertos, registra y procesa las suscripciones en el bloque 3730. A continuación la rutina de ejecución los añade al conjunto de productores candidatos en base a los productores nuevamente añadidos al registro de comienzo de ejecución en el bloque 3740. La rutina de ejecución transita a continuación al punto de entrada A.
Si el productor es un productor de declaración de dependencias, la rutina de ejecución prepara el productor de determinación de dependencias en el bloque 2225. A continuación, la rutina de ejecución ejecuta el productor de determinación de dependencias para resolver cualesquiera dependencias sin resolver listas para resolverse en el bloque 2230. A continuación la rutina de ejecución invoca nuevos comandos de productores estresados para los productores descubiertos, registra y procesa las suscripciones en el bloque 2235. La rutina de ejecución añade productores nuevamente añadidos al registro de comienzo de ejecución al conjunto de productores candidatos en el bloque 2240. La rutina de ejecución transita a continuación al punto de entrada A.
Refiriéndonos a la Figura 35B, la rutina de ejecución transita desde el punto de entrada A al bloque 2245. En el bloque 2245, las rutinas de ejecución marcan los productores como ejecutados y actualizan el almacenamiento temporal de salida del productor y el almacenamiento temporal de instancias si es necesario. Además, la rutina de ejecución añade cualesquiera productores padre al conjunto de productores candidatos a ejecutar y los marca como no ejecutados. La rutina de ejecución elimina además los productores ejecutados de los conjuntos actuales de productores candidatos y listos. Desde el bloque 2245, la rutina de ejecución transita dentro del bloque 2250 para comprobar si el conjunto de productores candidatos está vacío. Si no está vacío, la rutina de ejecución transita al bloque 2205 a través del punto de entrada B para repetir el flujo descrito anteriormente. Si el conjunto de productores candidatos está vacío, la rutina de ejecución transita al bloque 2255 para comprobar si todas las suscripciones se han completado. Si no se han completado, la rutina de ejecución procesa los productores de suscripción absorbentes incompletos en el bloque 2260 y a continuación vuelve al bloque 2205 a través del punto de entrada B. De lo contrario, esto es, s todas las suscripciones se han completado, la rutina de ejecución transita al bloque 2248. En el bloque 2248, se rastrea la estructura de seguimiento de escenarios y se liberan todas las estructuras de seguimiento de trayectorias de instancias. A continuación la rutina de ejecución transita al bloque 2265 para terminar el flujo.
Lenguajes de Procedimiento
Como se ha indicado anteriormente, el lenguaje del procedimiento escrito adecuadamente, el lenguaje orientado a objetos no reflexivo, y el código de lenguaje basado en objetos no reflexivo pueden transformarse en código de lenguaje orientado a objetos reflexivo. A modo de ejemplo, una clase puede emularse a través de una estructura de datos y un conjunto de funciones estáticas que tienen como primer parámetro un puntero a una instancia de la estructura de datos. De entre estas funciones están el constructor y el destructor. Los constructores se invocan por la rutina de ejecución después de la asignación de un puntero a la estructura de datos y proporcionan las faltas para los elementos en la estructura de datos, y los destructores se invocan por la rutina de ejecución antes de la liberación de un puntero a la estructura de datos. Cada clase tiene su descripción a través de un fichero que incluye: 1) la estructura de datos; 2) otra estructura que describe la clase, manteniendo el tamaño de la estructura y un conjunto de punteros a funciones; 3) una lista de funciones estáticas, con sus códigos (para lenguajes reflexivos orientados a objetos y lenguajes no reflexivos basados en objetos, el código de funciones estáticas se generaría automáticamente rastreando métodos de la clase real, y creando para cada uno de los métodos una función estática que realiza la invocación efectiva del método relacionado); y 4) anotaciones en la parte superior de cada una de las funciones (comentarios que mantienen las declaraciones de dependencias del productor), junto con sus tipos (constructor, destructor, propiedad, etc.). Además de esta definición de clase en el procedimiento, no reflexivo orientado a objetos, o un lenguaje no reflexivo basado en objetos, también se implementa una invocación dinámica. Específicamente, un compilador genera el siguiente código de inicialización para cada clase, código que se llama una vez (por el nuevo módulo de clases) para: 1) representar la estructura que describe la clase, rellenar los punteros a las funciones con las funciones estáticas efectivas; 2) registrar la instancia de esta estructura con un mapa de clases (la estructura de seguimiento de clases) con una clave correspondiente al nombre de la clase; y 3) registrar todos los punteros a funciones en un mapa de funciones (la estructura de seguimiento de métodos) con una clave correspondiente al nombre de la función (junto con las DependenciasArgumento, DependenciasSecuenciación, DependenciasCampo, DependenciasHaciaArriba, DependenciasDébilmenteRestringidas, clave de la clase de salida y anotaciones adicionales). El mapeo permite implementaciones en la rutina de ejecución de funciones de invocación genéricas capaces de: 1) representar una instancia de una clase por nombre (por el nuevo módulo de instancias) (específicamente la rutina de ejecución: a) asignar memoria de acuerdo con el tamaño de la estructura de datos, y añade una cabecera al puntero para almacenar un puntero a la estructura que describe la clase, e implementa por lo tanto punteros inteligentes (por ejemplo, punteros capaces de preguntar sus tipos); y b) invocar las funciones del constructor adecuadas después de la recuperación del puntero relevante para la función estática desde el mapa); y 2) invocar un método por el nombre suponiendo que todos los parámetros se pasan adecuadamente después de la recuperación del puntero relevante para la función estática desde el mapa. Pasar los parámetros de forma adecuada a las funciones identificadas por los punteros a funciones se haría a través del lenguaje de ensamblaje, metiendo y sacando elementos en/desde el almacenamiento para la entrada y salida de parámetros. El método descrito anteriormente asume la existencia de la notación de estructuras de datos y la existencia de la notación de punteros a funciones en el procedimiento, no reflexivo orientado a objetos, o el lenguaje no reflexivo basado en objetos.
\vskip1.000000\baselineskip
Ejemplo de Sintaxis de Código Fuente Orientado a Objetos A. Código Cliente
En una realización de la invención, el código cliente toma la siguiente sintaxis (mostrada en forma de cabecera):
ClaveProductor
Nuevo (String ClaveClase, ClaveInstancia ClaveInstancia, String ClaveMétodo)
CódigoEjecución
Nuevo
\hskip1.5cm
0
AñadirProductoresDeInterés (ClaveProductor ClaveProductorDeInterés);
FijarSalidaProductor (ClaveProductor ClaveAnulaciónProductor, Objeto InstanciaSalidaProductor);
Ejecutar
\hskip1.3cm
0;
\vskip1.000000\baselineskip
ClaveProductor y CódigoEjecución son clases, mientras que Nuevo, AñadirProductorDeInterés, FijarSalidaProductor, y Ejecutar son métodos. AñadirProductorDeInterés causa la invocación del nuevo comando del productor con los valores apropiados para el productor de la situación de interés en la Tabla 2. InstanciaSalidaProductor es una instancia de la clase de salida del productor anulado. De esta forma se representa a través del constructor de clase de salida del productor correspondiente.
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
B. Establecimientos
1. Sintaxis del Establecimiento de la Declaración de Dependencias
DependenciaArgumento =
"DependenciaArgumento1; DependenciaArgumento2; ...";
DependenciaCampo =
"DependenciaCampo1; DependenciaCampo2; ...";
DependenciaSecuenciación =
"DependenciaSecuenciación1; DependenciaSecuenciación2; ...";
DependenciaHaciaArriba =
"DependenciaHaciaArriba1; DependenciaHaciaArriba2; ...";
\newpage
\global\parskip0.950000\baselineskip
DependenciaDébilmenteRestringida =
"DependenciaDébilmenteRestringida1; DependenciaDébilmenteRestringida2; ...";
DependenciaNoRestringida =
"DependenciaNoRestringida1, DependenciaNoRestringida2 ..."
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
2. Sintaxis de Dependencia
a. Sintaxis DependenciaCampoX, DependenciaSecuenciaciónX, DependenciaHaciaArribaX, DependenciaDébilmenteRestringidaX, DependenciaNoRestringidaX;
#C: "ClaveClase" :: #I: "ClaveInstancia" :: #M: "ClaveMétodo"
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
b. Sintaxis DependenciaArgumentoX:
IDArgumento :: #C; "ClaveClase" :: #I: "ClaveInstancia" :: #M: "ClaveMétodo"
\vskip1.000000\baselineskip
En una realización de la invención, la IDArgumento se omite en la sintaxis, y el orden en el cual se han declarado las DependenciasArgumento representa la IDArgumento. La IDArgumento se añade entonces para mejorar la legibilidad.
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
3. Atajo y No Atajo
La sintaxis es la misma que para un no-atajo pero el uso de #S:: delante de la clave del productor identifica un atajo.
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
a. Sintaxis DependenciaCampoX, DependenciaSecuenciaciónX, DependenciaHaciaArribaX, DependenciaDébilmenteRestringidaX, DependenciaNoRestringidaX;
#s :: #C: "ClaveClase" ::#I; "ClaveInstancia" :: #M: "ClaveMétodo"
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
b. Sintaxis DependenciaArgumentoX:
IDArgumento :: #S ::#C: "ClaveClase" :: #I: "ClaveInstancia" : ; : #M: "ClaveMétodo"
\vskip1.000000\baselineskip
En este caso, la clave del productor indicada por la dependencia no es un productor de determinación de dependencia. Otras implementaciones de sintaxis pueden asumir que el atajo es la dependencia por defecto para un cierto tipo de dependencia (tal como un campo); y omitir #S:: En ese caso puede usarse #DDP para indicar la presencia de un DDP.
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
4. Contingente y no contingente
Como se ha descrito anteriormente, puede colocarse una <P> antes de un elemento contingente.
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
a. Ejemplo de clase y método contingentes
1) Sintaxis DependenciaCampoX, DependenciaSecuenciaciónX, DependenciaHaciaArribaX, DependenciaDébilmenteRestringidaX, DependenciaNoRestringidaX;
#C:<P>"ClaveMétodoDeterminaciónClase" :: #I : "ClaveInstancia" ::#M:
<P> "ClaveMétodoDeterminaciónMétodo"
\global\parskip1.000000\baselineskip
2) Sintaxis DependenciaArgumentoX:
IDArgumento :: #C: <P> "ClaveMétodoDeterminaciónClase" :: #I: "ClaveInstancia" :: #M: <P> "ClaveMétodoDeterminaciónMétodo"
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
b. Ejemplo de método contingente
1) Sintaxis DependenciaCampoX, DependenciaSecuenciaciónX, DependenciaHaciaArribaX, DependenciaDébilmenteRestringidaX, DependenciaNoRestringidaX;
#C: "ClaveClase" :: #I: "ClaveInstancia" :: #M:
<P> "ClaveMétodoDeterminaciónMétodo"
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
2) Sintaxis DependenciaArgumentoX:
IDArgumento :: #C: "ClaveClase" :: #I: "ClaveInstancia" :: #M:
<P> "ClaveMétodoDeterminaciónMétodo"
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
c. Ejemplo de instancia contingente
1) Sintaxis DependenciaCampoX, DependenciaSecuenciaciónX, DependenciaHaciaArribaX, DependenciaDébilmenteRestringidaX, DependenciaNoRestringidaX;
#C: "ClaveClase" :: #I: <P> "ClaveMétodoDeterminaciónInstancia":: #M:
"ClaveMétodo"
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
2) Sintaxis DependenciaArgumentoX:
IDArgumento :: #C: "ClaveClase" :: #I:
<P> "ClaveMétodoDeterminaciónInstancia":: #M: "ClaveMétodo"
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
5. Técnica Taquigrafíca
Elementos tales como clase, instancia, o método que se consideran que son idénticos a los elementos del productor padre se omiten. Este es típicamente el caso para campos de atajo. Los ejemplos datos más adelante en este documento combinan la técnica taquigráfica con una declaración de atajo (el atajo se indica por #S::)
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
a. Ejemplo donde se omiten la clase y la instancia
1) Sintaxis DependenciaCampoX, DependenciaSecuenciaciónX, DependenciaHaciaArribaX, DependenciaDébilmenteRestringidaX, DependenciaNoRestringidaX;
#S :: #M: "ClaveMétodo"
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
2) Sintaxis DependenciaArgumentoX:
IDArgumento :: #S :: #M "ClaveMétodo"
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
b. Ejemplos donde se omite la clase
1) Sintaxis DependenciaCampoX, DependenciaSecuenciaciónX, DependenciaHaciaArribaX, DependenciaDébilmenteRestringidaX, DependenciaNoRestringidaX;
#S :: #I: "ClaveInstancia" :: #M "ClaveMétodo"
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
2) Sintaxis DependenciaArgumentoX:
IDArgumento :: #S :: #I "ClaveInstancia" :: #M "ClaveMétodo"
\vskip1.000000\baselineskip
\vskip1.000000\baselineskip
Realizaciones Alternativas
Aunque los diagramas de flujo en las figuras muestran un orden particular de operaciones realizadas por ciertas realizaciones de la invención, debería entenderse que tal orden es un ejemplo (por ejemplo, realizaciones alternativas pueden realizar las operaciones en un orden diferente, combinar ciertas operaciones, solapar ciertas operaciones, etc.)

Claims (26)

1. Un método implementado por ordenador para ejecutar un programa de aplicación escrito en un código orientado a objetos, comprendiendo el método:
representar un productor con una salida que es actualmente de interés, en el que el código orientado a objetos incluye métodos y declaraciones de dependencias del productor, en el que la declaración de dependencias del productor para un método determinado identifica un conjunto de cero o más productores, en el que un productor es una construcción representable por una rutina de ejecución que incluye al menos una instancia y un método asociado con esa instancia;
en respuesta a dicha representación, añadir el productor de interés como parte del primer gráfico de productores;
intentar generar automáticamente un resto del primer gráfico de productores mediante enlazado, y la representación si es necesaria, de otros productores en base a las declaraciones de dependencias del productor y los métodos de los productores ya en el primer gráfico de productores; y
simular el programa de aplicación con un cambio en el programa de aplicación mientras que se impiden estados existentes y salidas existentes de los productores en el primer gráfico de productores.
2. El método de la reivindicación 1, en el que los productores están interconectados entre sí en base a las dependencias entre los productores en el primer gráfico de productores, en el que el primer gráfico de productores, los estados existentes, y las salidas existentes del programa de aplicación corresponden a un primer escenario, en el que el cambio incluye cambios en las salidas de uno o más productores impactados directamente del programa de aplicación.
3. El método de la reivindicación 2, que comprende además:
recibir información de escenario que incluye una clave del escenario de referencia que identifica el primer escenario, una clave del escenario objetivo que identifica un escenario objetivo, y una referencia a una lista de impactos que contiene una colección de una o más claves de productores del uno o más productores impactados directamente para el escenario objetivo e información sobre los cambios de las salidas del uno o más productores impactados directamente; y
crear un segundo escenario usando la información del escenario.
4. El método de la reivindicación 3, en el que crear el segundo escenario comprende:
determinar qué productores, de los productores que están en el primer gráfico de productores se van a impactar por las salidas del uno o más productores impactados directamente usando el primer gráfico de productores; y
registrar los productores impactados en una estructura de seguimiento de productores de impactos.
5. El método de la reivindicación 4, en el que crear el segundo escenario comprende:
crear un segundo gráfico de productores que tiene una copia de al menos un productor de interés, el uno o más productores impactados directamente, y cualquiera de los productores impactados en la estructura de seguimiento de productores de impacto del cual depende el productor de interés; y
cambiar las salidas de la copia de uno o más productores impactados directamente de acuerdo con la información en la lista de impactos.
6. El método de la reivindicación 5, en el que cambiar las salidas de la copia del uno o más productores impactados directamente de acuerdo con la información en la lista de impactos comprende:
anular las salidas de la copia del uno o más productores impactados directamente en el segundo gráfico de productores con un valor predeterminado especificado por la información en la lista de impactos.
7. El método de la reivindicación 5, en el que cambiar las salidas de la copia del uno o más productores impactados directamente de acuerdo con la información en la lista de impactos comprende:
determinar las salidas de los productores en el primer escenario; y
generar la salida de la copia del productor impactado directamente en el segundo escenario usando las salidas de los productores en el primer escenario y la información en la lista de impactos.
\newpage
8. El método de la reivindicación 5, en el que crear el segundo gráfico de productores comprende:
enlazar uno o más productores en el primer gráfico de productores con el segundo gráfico de productores, en el que, el uno o más productores son independientes del productor impactado directamente.
9. El método de la reivindicación 5, en el que crear el segundo gráfico de productores comprende:
clonar el productor de interés y cualquiera de los productores impactados del cual depende el productor de interés usando el primer gráfico de productores.
10. El método de la reivindicación 5, en el que crear el segundo gráfico de productores comprende:
crear el productor de interés y los productores impactados de los cuales depende el productor de interés desde la definición del método y la declaración de dependencias de un método de cada uno de los productores de interés y los productores impactados de los cuales depende el productor de interés.
11. El método de la reivindicación 5, que comprende además:
ejecutar el programa de aplicación en el segundo escenario usando las salidas cambiadas de la copia del uno o más productores impactados directamente para determinar la salida de la copia del productor de interés en el segundo gráfico de productores mientras que se conservan las salidas existentes del productor de interés, el uno o más productores impactados directamente, y los productores impactados para el primer escenario;
almacenar la salida de la copia del productor de interés para el segundo escenario en un almacenamiento temporal mientras que se retiene la salida existente del productor de interés para el primer escenario en el almacenamiento temporal;
almacenar la salida cambiada de la copia del uno o más productores impactados directamente para el segundo escenario en el almacenamiento temporal mientras que se mantiene la salida existente del uno o más productores impactados directamente para el primer escenario en el almacenamiento temporal; y
almacenar las salidas de las copias de los productores intermedios sobre la trayectoria entre el productor de interés y el uno o más productores impactados directamente para el segundo escenario en el almacenamiento temporal mientras que se retienen las salida existentes de los productores intermedios para el primer escenario en el almacenamiento temporal.
12. El método de la reivindicación 11, que comprende además:
determinar automáticamente una derivada de la salida del productor de interés desde el primer escenario al segundo escenario usando la salida de la copia del productor de interés para el segundo escenario y la salida del productor de interés para el primer escenario.
13. El método de la reivindicación 12, que comprende además:
determinar automáticamente y de forma recursiva al menos una de las derivadas de orden N y una derivada cruzada usando la derivada de la salida de la copia del productor de interés desde el primer escenario al segundo escenario, donde N es un número entero mayor de uno.
14. El método de la reivindicación 5, en el que el programa de aplicación comprende ejecutar un productor de generación de productores estresados para crear dinámicamente al menos uno de los productores en el segundo gráfico de productores.
15. Un sistema que comprende:
una rutina de ejecución que corre un código fuente orientado a objetos con declaraciones de dependencias del productor para métodos, en el que un productor es un constructor representable por rutina de ejecución que incluye al menos una instancia y un método asociado con la instancia, en el que cada declaración de dependencias del productor para un método determinado identifica un conjunto de cero o más productores, dicha rutina de ejecución incluye:
un nuevo módulo de escenarios para recibir información de escenarios de un escenario objetivo y, en respuesta a un comando de representación de escenarios; representar el escenario objetivo;
un módulo de generación automatizada de gráficos de productores estresados acoplado al nuevo módulo de escenarios para recibir un productor seleccionado actualmente con una salida de interés, y para construir un gráfico de productores para el escenario objetivo usando la información del escenario, incluyendo el gráfico de productores una copia de cada uno de los productores seleccionados actualmente, uno o más productores que tienen salidas cambiadas en el escenario objetivo de acuerdo con la información de escenario, y los productores intermedios entre el uno o más productores y el productor actualmente seleccionado; y
un módulo de ejecución automatizada de gráficos de productores estresados acoplado al módulo de generación automatizada de gráficos de productores estresados para recibir las salidas cambiadas del uno o más productores en el gráfico de productores para el escenario objetivo y aplicar las salida cambiadas a los productores del gráfico de productores para el escenario objetivo para determinar la salida del productor de interés seleccionado actualmente en el escenario objetivo.
16. El sistema de la reivindicación 15, en el que la información de escenario incluye una referencia
una clave de escenario, una clave de escenario objetivo, una referencia a una lista de productores impactados directamente, y un indicador asociado con cada uno de los productores impactados directamente para indicar si la salida del productor correspondiente impactado directamente va a cambiar a un valor predeterminado o se va a generar a partir de una salida existente del productor correspondiente impactado directamente.
17. El sistema de la reivindicación 16, en el que la rutina de ejecución comprende además:
un módulo de anulación de la salida del productor acoplado con el módulo de generación automatizada de gráficos de productores estresados para anular la salida de cada uno de los productores impactados directamente con el correspondiente valor predeterminado.
18. El sistema de la reivindicación 15, en el que la rutina de ejecución comprende además:
una estructura de gráficos de productores acoplada con el módulo de generación automatizada de gráficos de productores estresados para almacenar el gráfico de productores para el escenario objetivo sin sobrescribir cualesquiera de los gráficos de productores existentes almacenados en el mismo, en el que la estructura del gráfico de productores comprende además una estructura de almacenamiento temporal de la salida del productor para almacenar la salida del productor de interés seleccionado actualmente, las salidas de los productores intermedios, y las salidas cambiadas del uno o más productores para el escenario objetivo sin sobrescribir cualesquiera de las salidas existentes del productor de interés seleccionado actualmente, los productores intermedios, y el uno o más productores almacenados en
el mismo.
19. El sistema de la reivindicación 15, en el que la rutina de ejecución comprende además:
una estructura de seguimiento de escenarios acoplada con el nuevo módulo de escenarios, en el que el nuevo módulo de escenarios se puede actuar para representar el escenario objetivo añadiendo la información de escenario a la estructura de seguimiento de escenarios.
20. El sistema de la reivindicación 15, que comprende además;
un segundo rutina de ejecución que se puede actuar para cargar y representar clases, para invocar métodos, y para realizar la introspección de al menos una de las clases y los métodos, en el que la segunda rutina de ejecución está separada lógicamente de la rutina de ejecución.
21. El sistema de la reivindicación 15, en el que la rutina de ejecución se puede actuar además para cargar y
representar clases, para invocar métodos, y para realizar una introspección sobre al menos una de las clases y de los métodos.
22. El sistema de la reivindicación 15, que comprende además un sistema operativo en el que
la rutina de ejecución está integrada dentro del sistema operativo.
23. Un medio legible por la máquina que proporciona el código fuente orientado a objetos incluyendo:
una pluralidad de definiciones de clases de una pluralidad de clases, incluyendo cada una de la pluralidad de definiciones de clases,
un conjunto de uno o más campos,
un conjunto de uno o más métodos, y
una declaración de dependencias del productor para cada uno de dicho conjunto de métodos, en el que la declaración de dependencias del productor para uno determinado de dichos métodos se usa en la rutina de ejecución para identificar un conjunto de cero o más productores, en el que un productor es un constructor representable por una rutina de ejecución que incluye al menos una instancia de una de la pluralidad de clases y un método asociado con la instancia; y
en el que una primera de dicha pluralidad de definiciones de clases define una primera de la pluralidad de clases que tiene uno o más métodos de generación de productores estresados para generar un conjunto de uno o más productores estresados, incluyendo cada uno de dichos uno o más métodos de generación de productores estresados código para identificar un productor de interés y para definir un escenario objetivo, de tal modo que la rutina de ejecución se puede actuar para ejecutar el método para evaluar el impacto sobre el productor de interés para el escenario objetivo.
24. El medio legible por la máquina de la reivindicación 23, en el que cada uno del uno o más métodos de generación de productores estresados especifica una clave del escenario de referencia, una clave del escenario objetivo, una referencia a una lista de productores impactados directamente, y un indicador asociado con cada uno de los productores impactados directamente para indicar si la salida de un productor impactado directamente se va a cambiar a un valor predeterminado o se va a generar a partir de una salida existente del productor correspondiente impactado directamente.
25. El medio legible por la máquina de la reivindicación 23, en el que cada uno del uno o más
métodos de generación de productores estresados, cuando se ejecutan por la rutina de ejecución, causa que la rutina de ejecución cree uno o más productores estresados en el escenario objetivo y añada los productores estresados al gráfico de productores del escenario objetivo.
26. El medio legible por la máquina de la reivindicación 25, en el que cada uno del uno o más
productores estresados incluye una clave de productor para identificar un productor y una clave de escenario para identificar un escenario.
ES07856313T 2006-12-01 2007-11-30 Soporte de programacion orientado a graficos de productores con soporte de escenario. Active ES2327797T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US607199 1990-10-31
US11/607,199 US8332827B2 (en) 2006-12-01 2006-12-01 Produce graph oriented programming framework with scenario support

Publications (1)

Publication Number Publication Date
ES2327797T3 true ES2327797T3 (es) 2009-11-03

Family

ID=39358358

Family Applications (1)

Application Number Title Priority Date Filing Date
ES07856313T Active ES2327797T3 (es) 2006-12-01 2007-11-30 Soporte de programacion orientado a graficos de productores con soporte de escenario.

Country Status (9)

Country Link
US (2) US8332827B2 (es)
EP (1) EP1958062B1 (es)
JP (1) JP5354603B2 (es)
CN (1) CN101601012B (es)
AT (1) ATE435453T1 (es)
DE (1) DE602007001443D1 (es)
ES (1) ES2327797T3 (es)
RU (1) RU2438161C2 (es)
WO (1) WO2008064902A2 (es)

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8751950B2 (en) 2004-08-17 2014-06-10 Ice Edge Business Solutions Ltd. Capturing a user's intent in design software
US20050071135A1 (en) * 2003-09-30 2005-03-31 Vredenburgh David W. Knowledge management system for computer-aided design modeling
WO2009111885A1 (en) 2008-03-11 2009-09-17 Dirtt Environmental Solutions, Ltd. Automatically creating and modifying furniture layouts in design software
US8332827B2 (en) 2006-12-01 2012-12-11 Murex S.A.S. Produce graph oriented programming framework with scenario support
US8307337B2 (en) 2006-12-01 2012-11-06 Murex S.A.S. Parallelization and instrumentation in a producer graph oriented programming framework
US8191052B2 (en) 2006-12-01 2012-05-29 Murex S.A.S. Producer graph oriented programming and execution
US7865872B2 (en) * 2006-12-01 2011-01-04 Murex S.A.S. Producer graph oriented programming framework with undo, redo, and abort execution support
US8307372B2 (en) 2007-04-02 2012-11-06 International Business Machines Corporation Method for declarative semantic expression of user intent to enable goal-driven information processing
US8370812B2 (en) * 2007-04-02 2013-02-05 International Business Machines Corporation Method and system for automatically assembling processing graphs in information processing systems
US8863102B2 (en) * 2007-04-02 2014-10-14 International Business Machines Corporation Method and system for assembling information processing applications based on declarative semantic specifications
CN101689111A (zh) * 2007-04-03 2010-03-31 Ldra技术公司 软件需求验证的自动化管理
US10248915B2 (en) 2008-03-07 2019-04-02 International Business Machines Corporation Risk profiling for enterprise risk management
CA2781638C (en) 2009-11-24 2019-06-04 Ice Edge Business Solutions Inc. Securely sharing design renderings over a network
US8595709B2 (en) * 2009-12-10 2013-11-26 Microsoft Corporation Building an application call graph from multiple sources
US20120117546A1 (en) * 2010-11-08 2012-05-10 International Business Machines Corporation Run-time Module Interdependency Verification
US8897900B2 (en) * 2011-03-18 2014-11-25 Rockwell Automation Technologies, Inc. Graphical language for optimization and use
US9230358B2 (en) 2011-03-31 2016-01-05 International Business Machines Corporation Visual connectivity of widgets using event propagation
WO2012173741A2 (en) 2011-06-11 2012-12-20 Dirtt Environmental Solutions Inc. Automated re-use of structural components
US9292422B2 (en) 2012-10-12 2016-03-22 Vmware, Inc. Scheduled software item testing
US8949794B2 (en) 2012-10-12 2015-02-03 Vmware, Inc. Binding a software item to a plain english control name
US9069902B2 (en) 2012-10-12 2015-06-30 Vmware, Inc. Software test automation
US9684587B2 (en) 2012-10-12 2017-06-20 Vmware, Inc. Test creation with execution
US8839201B2 (en) 2012-10-12 2014-09-16 Vmware, Inc. Capturing test data associated with error conditions in software item testing
US10067858B2 (en) 2012-10-12 2018-09-04 Vmware, Inc. Cloud-based software testing
US8839202B2 (en) * 2012-10-12 2014-09-16 Vmware, Inc. Test environment managed within tests
US9292416B2 (en) 2012-10-12 2016-03-22 Vmware, Inc. Software development kit testing
US10387294B2 (en) 2012-10-12 2019-08-20 Vmware, Inc. Altering a test
US9201649B2 (en) * 2012-10-26 2015-12-01 Inforsys Limited Systems and methods for estimating an impact of changing a source file in a software
US9471719B2 (en) 2012-12-10 2016-10-18 Dirtt Environmental Solutions, Ltd Efficient lighting effects in design software
CA2838197C (en) 2013-01-25 2020-05-12 Robert W. Blodgett Real-time depth of field effects with design software
US9619920B2 (en) 2013-01-31 2017-04-11 Ice Edge Business Solutions, Ltd. Method and system for efficient modeling of specular reflection
JP5707430B2 (ja) * 2013-01-31 2015-04-30 京セラドキュメントソリューションズ株式会社 アプリケーション開発プログラム
US9245381B2 (en) 2013-01-31 2016-01-26 Ice Edge Business Solutions, Ltd Visual distortion effects through translucent structures in design software
US9292405B2 (en) 2013-03-08 2016-03-22 Sap Se HANA based multiple scenario simulation enabling automated decision making for complex business processes
US9389986B2 (en) * 2013-05-06 2016-07-12 Microsoft Technology Licensing, Llc Identifying impacted tests from statically collected data
CA2883079C (en) 2013-05-31 2021-10-26 Ice Edge Business Solutions Ltd. Associating computer-executable objects with three-dimensional spaces within an architectural design environment
RU2656580C9 (ru) * 2014-01-30 2020-01-22 Общество с ограниченной ответственностью "Аби Девелопмент" Определение порядка инициализации статических объектов
CA2921871A1 (en) 2014-06-09 2015-12-17 Ice Edge Business Solutions Ltd. Associating computer-executable objects with timber frames within an architectural design environment
US9465723B2 (en) * 2014-10-27 2016-10-11 Software Ag Usa, Inc. Systems and/or methods for monitoring live software
RU2693682C2 (ru) * 2014-12-19 2019-07-03 Сергей Анатольевич Горишний Система и способ управления функционально связанными данными
US9411706B1 (en) * 2015-09-30 2016-08-09 Semmle Limited Suggesting candidate removable software dependencies
CN105739983B (zh) * 2016-01-29 2019-03-15 腾讯科技(深圳)有限公司 脚本程序编辑装置及其实现方法
CN105867907A (zh) * 2016-03-23 2016-08-17 沈阳师范大学 去除业务耦合性的JSS多层Web开发框架设计方法
EP3443432A4 (en) * 2016-04-12 2020-04-01 Guardknox Cyber Technologies Ltd. SPECIALLY PROGRAMMED COMPUTER SYSTEMS WITH ASSOCIATED DEVICES CONFIGURED TO IMPLEMENT SECURE LOCKINGS AND METHODS OF USING THEM
US10146530B1 (en) 2017-07-12 2018-12-04 International Business Machines Corporation Simulating and evaluating code branch merge
US10963373B2 (en) * 2019-03-25 2021-03-30 Aurora Labs Ltd. Identifying software dependencies using line-of-code behavior and relation models
US11113030B1 (en) * 2019-05-23 2021-09-07 Xilinx, Inc. Constraints for applications in a heterogeneous programming environment
US11615271B2 (en) 2019-06-03 2023-03-28 Cerebri AI Inc. Machine learning pipeline optimization
CN111857683A (zh) * 2020-07-01 2020-10-30 北京黄金管家科技发展有限公司 Java高效编程系统

Family Cites Families (105)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4558413A (en) * 1983-11-21 1985-12-10 Xerox Corporation Software version management system
US5481740A (en) 1986-04-14 1996-01-02 National Instruments Corporation Method and apparatus for providing autoprobe features in a graphical data flow diagram
US5504917A (en) 1986-04-14 1996-04-02 National Instruments Corporation Method and apparatus for providing picture generation and control features in a graphical data flow environment
US5481741A (en) 1986-04-14 1996-01-02 National Instruments Corporation Method and apparatus for providing attribute nodes in a graphical data flow environment
US5497500A (en) 1986-04-14 1996-03-05 National Instruments Corporation Method and apparatus for more efficient function synchronization in a data flow program
US5155836A (en) 1987-01-27 1992-10-13 Jordan Dale A Block diagram system and method for controlling electronic instruments with simulated graphic display
JPS6432337A (en) * 1987-07-29 1989-02-02 Hitachi Ltd Method for instructing influence of program change
US5371851A (en) 1989-04-26 1994-12-06 Credence Systems Corporation Graphical data base editor
US5313387A (en) * 1989-06-30 1994-05-17 Digital Equipment Corporation Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers
DE69126066T2 (de) * 1990-06-29 1997-09-25 Oracle Corp Verfahren und Gerät zur Optimierung des Logbuchaufhebungsgebrauchs
DE69225544T2 (de) 1991-08-13 1998-12-03 Xerox Corp Elektronische Bilderzeugung
JPH05265975A (ja) * 1992-03-16 1993-10-15 Hitachi Ltd 並列計算処理装置
US5416895A (en) * 1992-04-08 1995-05-16 Borland International, Inc. System and methods for improved spreadsheet interface with user-familiar objects
US5659747A (en) * 1993-04-22 1997-08-19 Microsoft Corporation Multiple level undo/redo mechanism
JPH06332785A (ja) 1993-05-25 1994-12-02 Fujitsu Ltd オブジェクト指向データ処理システム
JPH0713766A (ja) * 1993-06-14 1995-01-17 Internatl Business Mach Corp <Ibm> オブジェクト指向コンピュータ・システムおよびオブジェクト・クラス管理方法
US5758160A (en) * 1993-06-28 1998-05-26 Object Technology Licensing Corporation Method and apparatus for building a software program using dependencies derived from software component interfaces
US5893123A (en) * 1995-06-22 1999-04-06 Tuinenga; Paul W. System and method of integrating a spreadsheet and external program having output data calculated automatically in response to input data from the spreadsheet
US6003037A (en) * 1995-11-14 1999-12-14 Progress Software Corporation Smart objects for development of object oriented software
US5838976A (en) 1995-11-28 1998-11-17 Hewlett-Packard Co. System and method for profiling code on symmetric multiprocessor architectures
US6067415A (en) * 1995-12-26 2000-05-23 Kabushiki Kaisha Toshiba System for assisting a programmer find errors in concurrent programs
US7987427B1 (en) 1996-05-10 2011-07-26 Apple Inc. Graphical editor for program files
US5819293A (en) * 1996-06-06 1998-10-06 Microsoft Corporation Automatic Spreadsheet forms
US5966072A (en) * 1996-07-02 1999-10-12 Ab Initio Software Corporation Executing computations expressed as graphs
US5822593A (en) 1996-12-06 1998-10-13 Xerox Corporation High-level loop fusion
JP3730740B2 (ja) * 1997-02-24 2006-01-05 株式会社日立製作所 並列ジョブ多重スケジューリング方法
US6145121A (en) * 1997-04-17 2000-11-07 University Of Washington Trace based method for the analysis, benchmarking and tuning of object oriented databases and applications
US6026235A (en) * 1997-05-20 2000-02-15 Inprise Corporation System and methods for monitoring functions in natively compiled software programs
US6209125B1 (en) 1997-06-03 2001-03-27 Sun Microsystems, Inc. Method and apparatus for software component analysis
US5990906A (en) * 1997-06-25 1999-11-23 National Instruments Corporation Undo feature for a graphical programming system
US6233733B1 (en) 1997-09-30 2001-05-15 Sun Microsystems, Inc. Method for generating a Java bytecode data flow graph
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6223171B1 (en) * 1998-08-25 2001-04-24 Microsoft Corporation What-if index analysis utility for database systems
US6111575A (en) * 1998-09-24 2000-08-29 International Business Machines Corporation Graphical undo/redo manager and method
US6493868B1 (en) * 1998-11-02 2002-12-10 Texas Instruments Incorporated Integrated development tool
US6826752B1 (en) * 1998-12-17 2004-11-30 California Institute Of Technology Programming system and thread synchronization mechanisms for the development of selectively sequential and multithreaded computer programs
JP2000207223A (ja) * 1999-01-12 2000-07-28 Matsushita Electric Ind Co Ltd 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体
US6385770B1 (en) * 1999-01-29 2002-05-07 Telefonaktiebolaget Lm Ericsson (Publ) Software upgrade
US6957191B1 (en) * 1999-02-05 2005-10-18 Babcock & Brown Lp Automated financial scenario modeling and analysis tool having an intelligent graphical user interface
US6571388B1 (en) * 1999-03-09 2003-05-27 Hewlett-Packard Development Company, L.P. Building a custom software environment including pre-loaded classes
US6407753B1 (en) * 1999-05-04 2002-06-18 International Business Machines Corporation System and method for integrating entities via user-interactive rule-based matching and difference reconciliation
US6665866B1 (en) 1999-05-28 2003-12-16 Microsoft Corporation Extensible compiler utilizing a plurality of question handlers
JP2001005678A (ja) * 1999-06-18 2001-01-12 Fujitsu Ltd ネットワーク型情報処理装置及び方法
WO2001001206A2 (en) 1999-06-30 2001-01-04 Strategic Simulation Systems, Inc. System dynamics model builder and simulator
US6618851B1 (en) * 1999-08-31 2003-09-09 Autodesk, Inc. Method and apparatus for state-reversion
WO2001082068A1 (en) 2000-04-21 2001-11-01 Togethersoft Corporation Methods and systems for identifying dependencies between object-oriented elements
CA2346231A1 (en) 2000-05-08 2001-11-08 Internet Number Corporation Method and system for accessing information on a network using message aliasing functions having shadow callback functions
US6959429B1 (en) * 2000-05-16 2005-10-25 Watterson-Prime Software, Inc. System for developing data collection software applications
US6763515B1 (en) 2000-06-05 2004-07-13 National Instruments Corporation System and method for automatically generating a graphical program to perform an image processing algorithm
US20030005407A1 (en) 2000-06-23 2003-01-02 Hines Kenneth J. System and method for coordination-centric design of software systems
US6889227B1 (en) * 2000-07-21 2005-05-03 Sun Microsystems, Inc. Database access bridge system and process
RU2206119C2 (ru) 2000-09-22 2003-06-10 Закрытое акционерное общество "МЦСТ" Способ получения объектного кода
US6973640B2 (en) * 2000-10-04 2005-12-06 Bea Systems, Inc. System and method for computer code generation
WO2002046916A2 (en) * 2000-10-20 2002-06-13 Polexis, Inc. Extensible information system (xis)
US6826523B1 (en) * 2000-11-01 2004-11-30 Sony Computer Entertainment America Inc. Application development interface for multi-user applications executable over communication networks
US6829572B2 (en) * 2000-12-07 2004-12-07 Internatinal Business Machines Corporation Method and system for efficiently overriding array net values in a logic simulator machine
US6820256B2 (en) * 2000-12-13 2004-11-16 Microsoft Corporation System and method for whole-system program analysis
US7200838B2 (en) 2000-12-20 2007-04-03 National Instruments Corporation System and method for automatically generating a graphical program in response to a state diagram
US6836884B1 (en) * 2001-06-04 2004-12-28 Microsoft Corporation Method and system for editing software programs
US20020188616A1 (en) * 2001-06-07 2002-12-12 Chinnici Roberto R. Database access bridge system and process
US7051339B2 (en) * 2001-06-29 2006-05-23 Goldman, Sachs & Co. System and method to measure latency of transaction information flowing through a computer system
US6995765B2 (en) 2001-07-13 2006-02-07 Vicarious Visions, Inc. System, method, and computer program product for optimization of a scene graph
US6966013B2 (en) * 2001-07-21 2005-11-15 International Business Machines Corporation Method and system for performing automated regression tests in a state-dependent data processing system
US7236915B2 (en) * 2001-08-09 2007-06-26 Hewlett-Packard Development Company, L.P. Technique and interface for computer system resource assignment
US20040205524A1 (en) * 2001-08-15 2004-10-14 F1F9 Spreadsheet data processing system
US7010779B2 (en) * 2001-08-16 2006-03-07 Knowledge Dynamics, Inc. Parser, code generator, and data calculation and transformation engine for spreadsheet calculations
US7017084B2 (en) * 2001-09-07 2006-03-21 Network Appliance Inc. Tracing method and apparatus for distributed environments
US8473922B2 (en) 2001-09-19 2013-06-25 Hewlett-Packard Development Company, L.P. Runtime monitoring in component-based systems
US7069547B2 (en) * 2001-10-30 2006-06-27 International Business Machines Corporation Method, system, and program for utilizing impact analysis metadata of program statements in a development environment
US7194475B2 (en) * 2001-10-30 2007-03-20 International Business Machines Corporation Method, system, and program for performing an impact analysis of program statements in at least one source code file
CA2360650A1 (en) * 2001-10-31 2003-04-30 Ibm Canada Limited-Ibm Canada Limitee Algorithm to create and compare debug scenarios of a computer process
JP2003157185A (ja) * 2001-11-19 2003-05-30 Nec Corp 計算機の動作の解析・表示装置とその解析・表示方法及びコンピュータプログラム
US7203743B2 (en) 2001-12-28 2007-04-10 Nortel Networks Limited Hierarchical tree-based protection scheme for mesh networks
US7039923B2 (en) 2002-04-19 2006-05-02 Sun Microsystems, Inc. Class dependency graph-based class loading and reloading
US7159211B2 (en) * 2002-08-29 2007-01-02 Indian Institute Of Information Technology Method for executing a sequential program in parallel with automatic fault tolerance
US7210128B2 (en) * 2002-10-14 2007-04-24 Fujitsu Limited Event-driven observability enhanced coverage analysis
TWI262383B (en) * 2003-01-10 2006-09-21 Univ Nat Cheng Kung A generic software testing system and method
US7571431B2 (en) 2003-04-29 2009-08-04 Microsoft Corporation Processing macro information and displaying via GUI in different tools
US7299450B2 (en) * 2003-06-17 2007-11-20 Microsoft Corporation Undoing changes in a software configuration management system
KR100513385B1 (ko) * 2003-06-19 2005-09-07 삼성전자주식회사 선형 위상 검출기를 이용한 클럭 및 데이터 복원 장치 및 그 방법
US7559050B2 (en) * 2003-06-30 2009-07-07 Microsoft Corporation Generating software development tools via target architecture specification
US7739252B2 (en) * 2003-07-14 2010-06-15 Oracle America, Inc. Read/write lock transaction manager freezing
US7818718B2 (en) * 2003-09-30 2010-10-19 Sap Ag Undoing user actions in a client program
US7454701B2 (en) * 2003-10-30 2008-11-18 Sap Ag Systems and methods for implementing formulas
US7536678B2 (en) * 2003-12-04 2009-05-19 International Business Machines Corporation System and method for determining the possibility of adverse effect arising from a code change in a computer program
US7792824B2 (en) * 2004-01-08 2010-09-07 International Business Machines Corporation Apparatus and method for enabling parallel processing of a computer program using existing database parallelism
US7917898B2 (en) * 2004-02-02 2011-03-29 Intel Corporation Methods and apparatus to provide a modular native method invocation system
US7316001B2 (en) * 2004-06-05 2008-01-01 Graphlogic Inc. Object process graph system
US7444287B2 (en) * 2004-07-01 2008-10-28 Emc Corporation Efficient monitoring system and method
US7493335B2 (en) 2004-07-02 2009-02-17 Graphlogic Inc. Object process graph relational database interface
US7360209B2 (en) * 2004-07-16 2008-04-15 Graphlogic Inc. Object process graph application controller-viewer
US7506320B2 (en) * 2004-09-09 2009-03-17 International Business Machines Corporation Generating sequence diagrams using call trees
EP1787197A2 (en) * 2004-09-10 2007-05-23 Graphlogic Inc. Object process graph application development system
US7933862B2 (en) * 2004-09-27 2011-04-26 Microsoft Corporation One click conditional formatting method and system for software programs
US7458072B2 (en) * 2004-10-06 2008-11-25 Microsoft Corporation Execution context infrastructure
US20060080660A1 (en) * 2004-10-07 2006-04-13 Dell Products L.P. System and method for disabling the use of hyper-threading in the processor of a computer system
US7831956B2 (en) * 2005-09-13 2010-11-09 Microsoft Corporation Using attributes to identify and filter pluggable functionality
US7904892B2 (en) 2006-01-06 2011-03-08 Northrop Grumman Corporation Systems and methods for identifying and displaying dependencies
US7882498B2 (en) * 2006-03-31 2011-02-01 Intel Corporation Method, system, and program of a compiler to parallelize source code
US7844959B2 (en) 2006-09-29 2010-11-30 Microsoft Corporation Runtime optimization of distributed execution graph
US8902231B2 (en) 2006-10-20 2014-12-02 Alcatel Lucent Method and apparatus for displaying graphical representations of graph layouts
US8307337B2 (en) 2006-12-01 2012-11-06 Murex S.A.S. Parallelization and instrumentation in a producer graph oriented programming framework
US7865872B2 (en) 2006-12-01 2011-01-04 Murex S.A.S. Producer graph oriented programming framework with undo, redo, and abort execution support
US8191052B2 (en) 2006-12-01 2012-05-29 Murex S.A.S. Producer graph oriented programming and execution
US8332827B2 (en) 2006-12-01 2012-12-11 Murex S.A.S. Produce graph oriented programming framework with scenario support

Also Published As

Publication number Publication date
RU2009125011A (ru) 2011-01-10
EP1958062A2 (en) 2008-08-20
RU2438161C2 (ru) 2011-12-27
JP2010511235A (ja) 2010-04-08
DE602007001443D1 (de) 2009-08-13
US20080134152A1 (en) 2008-06-05
US8332827B2 (en) 2012-12-11
WO2008064902A3 (en) 2008-07-17
ATE435453T1 (de) 2009-07-15
CN101601012B (zh) 2014-03-19
EP1958062B1 (en) 2009-07-01
CN101601012A (zh) 2009-12-09
JP5354603B2 (ja) 2013-11-27
WO2008064902A2 (en) 2008-06-05
US20130104109A1 (en) 2013-04-25
US9201766B2 (en) 2015-12-01

Similar Documents

Publication Publication Date Title
ES2327797T3 (es) Soporte de programacion orientado a graficos de productores con soporte de escenario.
ES2497573T3 (es) Salidas de sustitución en un sistema de programación y ejecución orientado por grafos de productor
ES2473765T3 (es) Paralelizaci�n e instrumentaci�n en un marco de programación orientado a grafos de productor
EP1952216B1 (en) Producer graph oriented programming framework with undo, redo, and abort execution support
US7526750B2 (en) Object-based systematic state space exploration of software
Horváth Search-based techniques in model-driven engineering