ES2381373T3 - Programación y ejecución orientadas por gráficos de productor - Google Patents
Programación y ejecución orientadas por gráficos de productor Download PDFInfo
- Publication number
- ES2381373T3 ES2381373T3 ES07254672T ES07254672T ES2381373T3 ES 2381373 T3 ES2381373 T3 ES 2381373T3 ES 07254672 T ES07254672 T ES 07254672T ES 07254672 T ES07254672 T ES 07254672T ES 2381373 T3 ES2381373 T3 ES 2381373T3
- Authority
- ES
- Spain
- Prior art keywords
- producer
- producers
- dependency
- instance
- dependencies
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4494—Execution paradigms, e.g. implementations of programming paradigms data driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Medicines Containing Material From Animals Or Micro-Organisms (AREA)
- Image Generation (AREA)
Abstract
Aparato para la ejecución de un código orientado a objetos, comprendiendo dicho aparato un tiempo de ejecución (355, 360, 1004) que interpreta las declaraciones de dependencia de los productores (320, 1016) en el código orientado a objetos para procedimientos en el código orientado a objetos, identificando dichas declaraciones de dependencia de los productores en un tiempo de ejecución un conjunto de cero o más productores, donde un productor (110) es una construcción instanciada de un tiempo de ejecución, en el que cada productor se instancia a partir de una combinación respectiva de una instancia particular (108) de una clase y un procedimiento particular (104) de esa clase e identifica dicha instancia particular (108) y dicho procedimiento particular (104), en el que la ejecución de un productor resulta en el procedimiento identificado por ese productor que se está ejecutando en la instancia identificada por ese productor, incluyendo el tiempo de ejecución: un módulo de generación automatizada de gráficos del productor (340, 365, 1040) para recibir una designación de un productor de interés (325, 1025), para añadir el productor de interés como parte de un gráfico del productor, y para generar automáticamente un resto del gráfico del productor a través de la vinculación, e instanciación si es necesario, de otros productores sobre la base de las declaraciones de dependencia de los productores de los procedimientos identificados por los productores que ya están en el gráfico del productor; y un módulo de ejecución del gráfico del productor (345, 370, 1070) para ejecutar los productores en el gráfico del productor en el orden indicado por el gráfico del productor.
Description
Programación y ejecución orientadas por gráficos de productor
5
Campo
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 un tiempo de ejecución.
10 Antecedentes
Programación orientada a objetos
15 La programación orientada a objetos es un paradigma de programación de ordenadores. La idea detrás de la programación orientada a objetos es que un programa de ordenador pueda ser visto como que comprende una colección de unidades individuales (llamados objetos o instancias) que actúan entre sí, en oposición a un punto de vista tradicional en el cual un programa puede ser visto como una colección de funciones, o simplemente como una lista de instrucciones al ordenador. Un objeto es un mecanismo de lenguaje para el enlace de datos con los
20 procedimientos que operan sobre esos datos. Cada objeto es capaz de ser llamado a través de procedimientos, datos de procesamiento, y proporcionar resultados con otros objetos. Cada objeto puede ser visto como una máquina independiente o un actor con un papel o responsabilidad distinta.
Un lenguaje reflexivo orientado a objetos es un lenguaje de programación que tiene un conjunto particular de
25 características (por ejemplo, clases, objetos/instancias, herencia, reflexión, etc.), mientras que un lenguaje reflexivo basado en objetos a veces se utiliza para etiquetar un lenguaje de programación que tiene algún subconjunto de esas características (por ejemplo, objetos). Para los propósitos de este documento, las frases "código fuente orientado a objetos" y "código orientado a objetos" se utilizan para referirse al código escrito en un lenguaje que tiene estas características (por ejemplo, código escrito en un lenguaje reflexivo orientado a objetos, código escrito en
30 un lenguaje reflexivo basado en objetos). Si bien los lenguajes del procedimiento, lenguajes no reflexivos orientados a objetos, y lenguajes no reflexivos basados en objetos son lenguajes de programación que normalmente no soportan estas características, se pueden utilizar técnicas de transformación para proporcionar estas características (por ejemplo, a través de la emulación) para codificar escritas correctamente en los dos lenguajes, y por lo tanto, estas técnicas transforman estos lenguajes en un lenguaje reflexivo basado en objetos o en un lenguaje reflexivo
35 orientado a objetos. (Estas técnicas no necesitan emular todas las características de los lenguajes orientados a o basados en objetos, sino que sólo pueden emular las características que sean de interés para el resto de este documento). Para los propósitos de este documento, las frases "código fuente orientado a objetos" y "código orientado a objetos" también se utilizan para referirse a este procedimiento transformado, de código de lenguaje no reflexivo orientado a objetos, y no reflexivo basado en objetos. A modo de ejemplo, y no de limitación, este
40 documento describe principalmente un código fuente orientado a objetos escrito en un lenguaje reflexivo orientado a objetos. Además, los términos objeto y ejemplo se utilizan indistintamente en este documento.
Utilizado principalmente en programación orientada a objetos, el término procedimiento se refiere a un trozo de código que está exclusivamente asociado, ya sea con una clase (llamados procedimientos de clase, procedimientos
45 estáticos o procedimientos de fábrica) o con un objeto (llamado procedimientos de instancia). Al igual que un procedimiento en lenguajes de programación de procedimiento, un procedimiento usualmente consiste en una secuencia de instrucciones para realizar una acción, un conjunto de parámetros de entrada para parametrizar las acciones, y, posiblemente, un valor de salida de algún tipo que se devuelve.
50 Cuando los programadores escriben un programa utilizando un lenguaje orientado a objetos, el código resultante puede ser visto conceptualmente como que incluye cuatro tipos básicos de código. El primer tipo incluye comandos que operan en instancia(s) de entrada para proporcionar instancia(s) de salida (referidos aquí como código de "transformación"); típicamente escrito como procedimientos (referidos aquí como procedimientos de "transformación"). El segundo tipo incluye comandos de instanciación de instancias que hacen que el tiempo de
55 ejecución cree instancias de clases (indicados aquí como código de "instanciación de instancias"). El tercer tipo incluye comandos de manipulación de la propiedad (indicados aquí como código de "preparación de datos") para invocar procedimientos de acceso de propiedad, mutaciones, etc.) de las instancias anteriores. El cuarto tipo incluye secuencias de comandos que causan que la secuenciación de invocación del procedimiento usando las instancias correspondientes (cuando las instancias apropiadas incluyen las instancias para utilizar como argumentos, las
60 instancias son utilizadas por los procedimientos de instancia y las instancias de clases meta utilizadas por los procedimientos de clase) para especificar qué procedimientos de transformación de qué instancias que invocan, en qué orden, y con qué parámetros de qué instancias responden a los cambios introducidos por el código de preparación de datos (indicados aquí 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 procedimientos separados de los procedimientos de
65 transformación, y por lo tanto, la invocación manual del código de secuenciación incluye secuencias de comandos de invocación de procedimientos de transformación. Un programa típicamente itera entre el código de preparación de datos y código de secuenciación de invocación manual (que también puede sumergirse en el código de instanciación de instancias), que a su vez invoca el código de transformación (que también puede sumergirse en el código de instanciación de instancias y los tipos de código de preparación de datos). Cabe señalar que esta es una
5 representación conceptual de un programa, y por lo tanto, no debe ser tomada como una absoluta respecto a cómo ver un programa.
Tiempo de ejecución
]El tiempo de ejecución término se utiliza aquí para referirse a un programa o una librería de código básico que se ejecuta otro código escrito en el mismo y/o un lenguaje diferente. Por lo tanto, un tiempo de ejecución es una colección de funciones de utilidad que apoyan un programa mientras se está ejecutando, incluyendo el trabajo con el sistema operativo para proporcionar servicios tales como funciones matemáticas, de entrada y de salida. Esto hace que sea innecesario para los programadores que reescribir continuamente las capacidades básicas especificadas en
15 un lenguaje de programación o proporcionada por un sistema operativo. Puesto que la demarcación entre un tiempo de ejecución y un sistema operativo puede ser borrosa, el tiempo de ejecución término se utiliza aquí para referirse a código separado del sistema operativo y/o código que forma parte del sistema operativo.
Los tiempos de ejecución iniciales, como el de FORTRAN, ofrecen características tales como operaciones matemáticas. Otros lenguajes añaden características más sofisticadas, por ejemplo, recogida de restos de memoria, a menudo en asociación con soporte para objetos. Lenguajes más recientes tienden a tener tiempos de ejecución considerablemente más grandes con más funcionalidades. Muchos lenguajes orientados a objetos también incluyen un sistema conocido como "despachador" y "cargador de clases". La Máquina Virtual de Java (JVM) es un ejemplo de este tiempo de ejecución: también interpreta o compila los programas de Java portátiles binarios (byte-código) en
25 el tiempo de ejecución. El marco de tiempo de ejecución de lenguaje común (CLR) es otro ejemplo de un tiempo de ejecución.
Marco de programación y ejecución
Un marco en el que las aplicaciones se proporcionan a los usuarios finales incluye tres divisiones básicas. La primera división incluye la creación del sistema operativo y el tiempo de ejecución. Esta primera división se lleva a cabo por los programadores con conocimientos de programación muy avanzados. Cuando se trabaja en esta división, los programadores son llamados, respectivamente, programadores del sistema operativo y programadores del tiempo de ejecución. Cuando se crea un tiempo de ejecución para un lenguaje orientado a objetos, los
35 programadores de tiempo de ejecución incluyen el soporte para la ejecución de los distintos tipos de comandos que se utilizan en el código de transformación, el código de instanciación de instancias, el código de preparación de datos, y el código de secuencia manual de invocación (por ejemplo, comandos de instanciación de instancias, comandos de preparación de datos y comandos de invocación del procedimiento).
La segunda división incluye la creación de código de fuente de aplicación orientado a objetos que se ejecutará por el tiempo de ejecución. La segunda división se realiza de nuevo por los programadores con conocimientos de programación más avanzados, así como la comprensión de los objetivos de negocio de la aplicación. Cuando se trabaja en esta división, a los programadores se les conoce como programadores de aplicaciones. Al crear una aplicación en un lenguaje de programación orientado a objetos, los programadores de aplicaciones escriben el
45 código de transformación específico, el código de instanciación de instancias, el código de preparación de datos, y el código de secuencia de invocación manual para la aplicación específica que se creó. 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 por lo tanto, también se les conoce como los diseñadores de aplicaciones.
La tercera división incluye el uso de programas de aplicaciones que son ejecutan por el tiempo de ejecución. La tercera división se lleva a cabo por los usuarios finales que no necesitan tener conocimientos de programación.
Código de secuenciación de invocación manual
55 Los mayores costes asociados típicamente con la creación de una aplicación implican la depuración y/o la optimización del código de secuenciación de invocación manual. Para cada oportunidad para que los datos cambien, el programador de la aplicación debe tener en cuenta su efecto y escribir el código de secuenciación de invocación manual para hacer que los procedimientos de transformación adecuados de las instancias apropiadas sean invocados en el orden apropiado, con las entradas correspondientes. Errores de ejemplo realizados por los programadores de aplicaciones incluyen: 1) invocar los procedimientos de transformación adecuados de las instancias correspondientes en el orden incorrecto, 2) olvidarse de incluir comandos para hacer que uno o más procedimientos de transformación necesarios de las instancias que deben invocarse respondan a algunos datos que se cambiaron, 3) incluir los comandos para hacer que los procedimientos de transformación de innecesarias deban
65 invocarse en respuesta a algunos datos que están siendo modificados (por ejemplo, incluyendo comandos para invocar procedimientos de transformación de instancias que no están afectadas por el cambio en datos), etc.
A modo de ejemplo, una técnica de generación de código de secuenciación de invocación manual es el uso del patrón observador (a veces conocido como "subscribir publicación") para observar el estado de una instancia en un programa. En el patrón de observador, una o más instancias (llamadas observadores u oyentes) se registran (o se registra a sí mismas) para observar un evento que puede ser suscitado por el objeto observado (el sujeto). La
5 instancia observada, que puede provocar un evento, generalmente mantiene una colección de observadores registrados. Cuando se provoca el evento, cada observador recibe una devolución de llamada desde la instancia observada (la instancia observada invoca un procedimiento de "notificación" en los observadores registrados). La función de notificación puede pasar algunos parámetros (generalmente información sobre el evento que se está produciendo) que pueden ser utilizados por los observadores. Cada observador 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 procedimiento de registro para agregar un nuevo observador y un procedimiento no registrado para la eliminación de un observador de la lista de instancias a notificar cuando se provoca el evento. Además, la instancia observada también puede tener procedimientos para inhabilitar
15 temporalmente y luego volver a habilitar llamadas para prevenir el derramamiento ineficiente de un número de cambios relacionados. Específicamente, las devoluciones de llamada en respuesta a un cambio del valor de la propiedad con frecuencia también cambian los valores de algunas otras propiedades, provocando devoluciones de llamada adicionales, y así sucesivamente.
Cuando se utiliza la técnica de patrón de observador, los programadores de aplicaciones que escriben manualmente el código de secuenciado de invocación manual especifican qué procedimientos de qué instancias se llaman, en qué orden, y con qué entradas mediante registro, anulación del registro, desactivación y vuelta a la rehabilitación de observadores a las diferentes instancias observadas, así como la escritura de los procedimientos de notificación y devolución de llamadas para cada uno. Más específicamente, la relación entre el observador y los casos observados
25 se administra localmente (por ejemplo la instancia observada solamente, sin sincronización con otras instancias observadas) dentro del patrón del observador, y por lo tanto, el código de secuenciación de invocación manual necesario para sincronizar los eventos a partir de múltiples instancias observadas es típicamente parte de los procedimientos de devolución de llamadas específicos de cada observador.
Pila de llamadas volátil de sobreescritura
Los tiempos de ejecución típicos utilizan una pila de llamadas volátil de sobreescritura para realizar un seguimiento de las llamadas actualmente invocadas no completadas. Una pila de llamadas volátil de sobreescritura sobrescribe porque despacha y descarta entradas cuando se ha completado cada llamada, y es volátil porque se descarta y se
35 reconstruye en cada ejecución. Los tiempos de ejecución típicos utilizan pilas de llamadas volátiles de sobreescritura debido a que los tiempos de ejecución típicos combinan la construcción la pila de llamadas volátil de sobreescritura, con la invocación real de procedimientos de transformación apropiados de las instancias apropiadas con las entradas adecuadas que responden a la ejecución del código de secuencia manual de invocación. En suma, que responda a la ejecución del código de secuenciación de invocación manual, un tiempo de ejecución típico determina el procedimiento de transformación/llamada de secuenciación de instancia por llamada (cuando se realiza cada llamada) y mantiene la pila de llamadas volátil de sobreescritura para realizar un seguimiento de sólo de las llamadas invocadas no completadas.
Asignado Objeto-Relacional
45 La asignación objeto-relacional es una técnica de programación que enlaza bases de datos relacionales con conceptos de lenguaje orientados a objetos, creando (en efecto) una "base de datos de objetos virtuales". Algunos mapeadores objeto-relacional mantienen automáticamente las instancias cargadas en la memoria en sincronización constante con la base de datos. En concreto, después de la construcción de una consulta de asignado objeto a SQL, los primeros datos devueltos se copian en los campos de las instancias en cuestión, como cualquier paquete de asignado objeto-SQL. Una vez allí, la instancia tiene que mirar para ver si estos valores cambian, y luego, invertir con cuidado el proceso de escritura de los datos de nuevo a la base de datos.
Hibernate 3.0 es una solución de asignado objeto-relacional para Java y CLR (JBoss® Inc., de Atlanta, Georgia). Por
55 lo tanto, Hibernate ofrece un marco para la asignación de un modelo de dominio orientado a objetos en una base de datos relacional tradicional. Su objetivo es aliviar el desarrollador de algunas tareas comunes de programación de datos relacionados con la persistencia. Hibernate se encarga de la asignación de las clases a las tablas de bases de datos (y a partir de los tipos de datos orientados a objetos a tipos de datos SQL), así como los que ofrecen consultas de datos e instalaciones de recuperación. Hibernate está centrado en las instancias y crea gráficos que representan relaciones entre instancias.
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 se
65 puede utilizar para reducir el acoplamiento (el grado en que cada módulo de programa se basa en cada módulo de otro tipo) inherente a los programas de ordenador. La IOC también se conoce como el principio de inversión de la dependencia. En la IOC, una clase X depende de la clase Y si se aplica alguno de los siguientes casos: 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). Cabe señalar que X dependa de Y no implica que Y dependa de X; si ambos resultan ser ciertos, se llama una dependencia cíclica: X no puede ser utilizada sin Y, y viceversa.
5 En la práctica, si un objeto x (de la clase X) llama a los procedimientos de uno objeto y (de la clase Y), entonces la clase X depende de Y. La dependencia se invierte mediante la introducción de una tercera clase, es decir, una clase de interfaz I que debe contener todos los procedimientos que x podría llamar en y. Además, Y se debe cambiar de tal manera que implementa la interfaz I. X e Y ahora son ambas dependientes de la interfaz I y la clase X ya no depende de la clase Y (suponiendo que x no es una instancia de Y). Esta eliminación de la dependencia de la clase X en Y mediante la introducción de una interfaz I se dice que es una inversión de control (o una inversión de la dependencia). Cabe señalar que Y podría depender de otras clases. Antes de que la transformación se haya aplicado, X depende de Y, y así X dependía indirectamente de todas las clases de las que Y depende. Mediante la aplicación de la inversión de control, todas estas dependencias indirectas se han roto también. La interfaz I recién
15 introducida no depende de nada.
El marco de muelle es un marco de aplicaciones de código abierto para la plataforma Java que utiliza IOC e inversión de la dependencia. En concreto, lo central en el marco de muelle es su inversión del contenedor de control que proporciona un medio para configurar y administrar los objetos de Java. Este contenedor se conoce también como factoría de vainas, contexto de aplicaciones o contenedor de núcleo. Ejemplos de las operaciones de este contenedor son: creación de objetos, configuración de los objetos, procedimientos de inicialización de llamadas y paso de objetos a los objetos de devolución de llamadas registrados. Los objetos que se crean por el contenedor también se denominan objetos administrados o vainas. Normalmente, el contenedor está configurado por la carga de archivos XML que contienen definiciones de vainas. Estas proporcionan toda la información que se requiere para
25 crear objetos. Una vez que los objetos son creados y configurados sin elevar las condiciones de error, están disponibles para su uso. Los objetos pueden ser obtenidos por medio de búsqueda de dependencia o inyección de dependencia. La búsqueda de la dependencia es un patrón en el que una persona que llama le pide al objeto contenedor un objeto con un nombre específico o de un tipo específico. La inyección de dependencia es un patrón donde el contenedor pasa objetos por su nombre a otros objetos, ya sea a través de constructores, propiedades o procedimientos de fábrica. Por lo tanto, el marco de muelles está centrado en la memoria y construye gráficos que representan las relaciones entre las instancias.
Herramientas de representación gráfica
35 Javadoc™ es una herramienta que analiza las declaraciones y comentarios de documentación en un conjunto de archivos de código fuente Java y genera un conjunto de páginas HTML que describen (por defecto) las clases públicas y protegidas, clases anidadas (pero no clases internas anónimas), interfaces, constructores, procedimientos y campos (Sun Microsystems®, Inc., de Santa Clara, CA). Javadoc se puede utilizar para generar la documentación API (Interfaz de Programación de Aplicaciones) o la documentación de implementación de un conjunto de archivos de código fuente. Javadoc está centrado en la clase y el procedimiento y crea gráficos que representan las relaciones entre la combinación de clases y sus procedimientos.
Otro sistema para el diseño de aplicaciones de software incluye gráficos de los objetos analizados por un intérprete para representar y reproducir una aplicación informática. Este sistema utiliza clases de programación escritas 45 previamente almacenadas en las librerías de código, que pueden ser escritas para seguir los patrones de diseño descritos en "Design Patterns" de Gamma et al, Addison Wesley 1995, "Patterns in Java" de Grand, Wiley Computer Publishing, 1998, y/o herramientas de Ingeniería de software asistido (CASE) de alto nivel. Más específicamente, algunas clases se basan en el patrón de comportamiento del observador. Las librerías de código escritas previamente representan nodos de aplicación del estado, la lógica de procesamiento, y el flujo de datos del sistema entre los diversas estados de aplicaciones (es decir, los elementos de datos escritos previamente de la aplicación), por lo que un usuario no tiene que escribir, editar, o compilar el código, cuando se crea una aplicación de software. En cambio, un usuario edita manualmente una aplicación de software en una interfaz gráfica de usuario mediante la edición de objetos visuales asociados con un nodo del estado actual de la aplicación, tal como datos en el nodo de estado de la aplicación o los procesos realizados en el nodo de estado de la aplicación. Luego, basándose en los
55 cambios introducidos por el usuario para el nodo del estado actual de la aplicación, el intérprete muestra el estado de la aplicación actualizada para el usuario para el estado de la aplicación que acaba de ser editada. Entonces, el sistema puede hacer la transición a lo largo de un borde definido por el usuario de transición a otro estado de la aplicación donde el usuario puede, opcionalmente, editar el estado de la aplicación siguiente o el borde de transición. Se pueden hacer cambios en un gráfico a las instancias del gráfico que son implementadas por el intérprete, mientras que la aplicación de software se está ejecutando.
Este sistema para el diseño de aplicaciones de software puede incluir representaciones visuales de una aplicación de software en funcionamiento que se puede hacer "utilizable" con un controlador de aplicación. Cuando un usuario cambia los objetos visuales, que representa la aplicación de software que se ejecuta, el controlador utiliza la entrada 65 para inducir al intérprete para hacer el cambio al gráfico. El controlador entonces espera más cambios. Además, las representaciones visuales de las aplicaciones de software no pueden ser importadas o exportadas como
documentos XML que describen la representación visual de la aplicación, y por lo tanto, la aplicación de software.
Con el fin de modificar y/o crear una aplicación de software, en forma de una representación visual de nodos, bordes dirigidos, y estados de aplicación, una interfaz de programa de aplicación y un editor de aplicación adicional pueden 5 incluirse en el sistema. Las palabras clave y las definiciones asociadas de las librerías de código escritas previamente permiten a los desarrolladores de aplicaciones definir manualmente una aplicación de software, etapas de tratamiento, así como la representación visual de una aplicación de software, proporcionando representaciones gráficas, en un editor, de un gráfico aplicación que se correlaciona estrechamente con la estructura de la aplicación real. Un usuario define una nueva aplicación a través de un "asistente de definición de aplicaciones", después de que ciertas cuestiones preliminares se hayan cumplido, muestra la nueva aplicación como un componente gráfico en el espacio de trabajo del editor. Un usuario también interactúa con una aplicación haciendo selecciones de las listas que se muestran de los componentes creados previamente de posibles aplicaciones y arrastrando y soltando componentes en el espacio de trabajo a través del ratón de un PC y el clavedo. Un usuario puede seleccionar los componentes y "arrastrarlos" sobre los componentes existentes. Cuando un nuevo componente se "cae" sobre un
15 componente existente, el nuevo componente se convierte en un menor del componente existente en un gráfico de la aplicación. Las relaciones de los componentes dentro de la aplicación de forma se definen manualmente mediante las selecciones del usuario en el editor. Así, se genera una estructura de árbol que representa una aplicación por parte del usuario. A medida que la aplicación es creada, el usuario puede seleccionar un visor de navegador de la aplicación para mostrar una vista de árbol de la solicitud de construcción, de manera que es posible seleccionar y editar cualquier componente de la aplicación. La interfaz del editor procesa las entradas del usuario y las selecciones, incluyendo la creación o la eliminación de los elementos de la aplicación, la actualización de los atributos de los componentes, y la actualización de las propiedades de la pantalla de una aplicación.
El sistema descrito anteriormente, mientras utiliza las representaciones visuales de las aplicaciones de software,
25 también puede utilizarse como una herramienta de programación visual para definir y actualizar las bases de datos relacionales. El sistema utiliza las descripciones XML de la representación visual de las aplicaciones de software. Una herramienta analiza e interpreta las descripciones XML para producir esquemas relacionales equivalentes en el listado de bases de datos, así como sus cambios. Cuando los datos se cambian dentro de una representación visual de una aplicación de software, una descripción del cambio se almacena junto con otros cambios en un archivo de diario y luego se procesan como un grupo. Un programa intermedio (una aplicación Java que opera en su propio hilo) realiza las transacciones entre la representación visual de la aplicación de software y la base de datos relacional. La aplicación de Java (por ejemplo, comprobaciones) revisa el diario de los cambios en los nodos de la representación visual (es decir, los datos de la base de datos), y si hay cambios, hace los cambios en la base de datos. Así, mediante la alteración de los datos dentro de la representación visual, el sistema actualiza una base de
35 datos. Una aplicación similar se encuentra entre la representación visual de la aplicación de software y la base de datos maneja las peticiones de los datos de la base de datos.
Otro sistema para el análisis de software se llama un Analizador de árbol 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 desde el código fuente estático. Utilizando la tabla de símbolos, el CTA genera un diagrama de clases. Asimismo, utilizando el árbol de llamadas, el CTA genera un diagrama de secuencias. El diagrama de clases ilustra la relació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 que diferentes procedimientos son llamados. Utilizando el diagrama de clases y el diagrama de secuencias, el CTA genera un representante de los artefactos de
45 diseño del código fuente estático. Cuando el usuario modifica el artefacto de diseño, el CTA identifica las partes afectadas del código fuente mediante el diagrama de secuencia. El artefacto de diseño se utiliza para el mantenimiento del código y/o ingeniería inversa del código fuente estático.
El documento US 5.966.072 describe el uso de un gráfico para invocar los cálculos directamente. La obtención de información dentro y fuera de los procesos individuales representados en la gráfica, moviendo la información entre los procesos, y definiendo un orden de ejecución de los procesos, se discuten. La disposición descrita añade "procesos del adaptador", si es necesario, para ayudar en la obtención de información de entrada y salida o procesos.
55 El Capítulo 8 "Modelo de Vinculación" del libro "Inside the Java Virtual Machine" (segunda edición) de Bill Venners describe el modelo de enlace dinámico de la máquina virtual de Java. El modelo de vinculación de Java permite a uno el diseño definido por el usuario de cargadores de clases que se extienden a una solicitud de manera personalizada en tiempo de ejecución. A través de los cargadores de clases definidos por el usuario, una aplicación puede cargar y enlazar dinámicamente con las clases e interfaces que eran desconocidas o que ni siquiera existían cuando la aplicación se compiló. Cuando se ejecuta un programa, la máquina virtual Java construye una red interna de las clases e interfaces interconectadas. Además de los simples tipos de vinculación en tiempo de ejecución, las aplicaciones Java pueden decidir en tiempo de ejecución de los tipos de enlace. La arquitectura de Java permite a los programas ser dinámicamente extendidos, el proceso de decidir en tiempo de ejecución otros tipos de uso, cargarlos, y usarlos. Esto permite que una aplicación en ejecución cargue los tipos cuyos nombres no se mencionan
65 en el código fuente de la aplicación, sino que están determinadas por la aplicación cuando se ejecuta.
La invención proporciona un aparato para la ejecución de código orientado a objetos tal como se establece en la reivindicación 1, y un procedimiento para la ejecución de código orientado a objetos tal como se establece en la 5 reivindicación 36.
Se describen un procedimiento y un aparato para la programación y la ejecución orientada a gráficos del productor. De acuerdo con un aspecto, se prevé un tiempo de ejecución que interpreta las declaraciones de dependencia de productores de procedimientos. Las declaraciones de dependencia de productores identifican el tiempo de ejecución 10 de un conjunto de cero o más productores, cuando un productor es una construcción de tiempo de ejecución de una instancia que identifica al menos una instancia y un procedimiento asociado con esa instancia. El tiempo de ejecución se genera de forma automática y se ejecuta, en respuesta a la recepción de una designación de un productor de interés para crear una instancia cuyo procedimiento tiene una declaración de dependencia del productor, un gráfico del productor. El gráfico del productor incluye inicialmente el productor de interés y se genera,
15 desde el productor de interés a los productores de origen, a través de instancias de los productores basados en las declaraciones de dependencia de los productores de los procedimientos de los productores que ya están en el gráfico del productor. El tiempo de ejecución secuencia la ejecución de los productores en el gráfico del productor, tal como se indica en el gráfico del productor.
La invención puede entenderse mejor haciendo referencia a la siguiente descripción y a los dibujos adjuntos que se utilizan para ilustrar las realizaciones de la invención. En los dibujos:
25 La figura 1A es un diagrama de bloques que ilustra la relación de una declaración de dependencia del productor de un procedimiento de una clase en un código fuente orientado a objetos de un productor que incluye la clase, un ejemplo dado de esa clase, y un procedimiento de esa clase, de acuerdo con una realización de la invención;
La figura 1B ilustra las relaciones de ejemplo entre el productor 110A y el productor padre 114A.1 de acuerdo con 30 una realización de la invención;
La figura 1C ilustra las relaciones de ejemplo entre el productor 110A y el productor descendiente 112A.1 de acuerdo con una realización de la invención;
35 La figura 1D ilustra algunas combinaciones adicionales de ejemplo de las relaciones de los productores padre 114 y los productores descendientes 112 al productor 110A de acuerdo con una realización de la invención;
La figura 1E ilustra esas instancias diferentes de la misma clase que pueden tener los productores basadas en los mismos y/o diferentes procedimientos de acuerdo con una realización de la invención;
40 La figura 2 es un diagrama de bloques que ilustra la capacidad de reutilización de un tiempo de ejecución con un gráfico de productor de soporte de programación orientado de acuerdo con una realización de la invención;
La figura 3A es un diagrama de bloques que ilustra un tiempo de ejecución con el soporte de programación 45 orientada al gráfico del productor de acuerdo con una realización de la invención;
La figura 3B es un diagrama de bloques que ilustra un tiempo de ejecución con el soporte de programación orientada al gráfico del productor que también soporta la ejecución incremental y las salidas reemplazadas de los productores de acuerdo con una realización de la invención;
50 La figura 4A es un diagrama de bloques que ilustra el descubrimiento y la construcción de un gráfico del productor 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 del productor de la figura 4A según 55 una realización de la invención;
La figura 4C es un diagrama de bloques que ilustra la ejecución incremental del gráfico del productor de la figura 4B de acuerdo con una realización de la invención;
60 La figura 4D es un diagrama de bloques que ilustra la ejecución incremental del gráfico del productor de la figura 4B después de que el productor dependiente 2 haya sido 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 del productor de la figura 4B después de que el productor dependiente 2 se haya anulado y el productor fuente independiente 3 se haya 65 modificado de acuerdo con una realización de la invención;
La figura 5A es un diagrama de bloques que ilustra el descubrimiento y la construcción de un gráfico del productor de ejemplo que incluye una dependencia no resuelta 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 del productor de la figura 5A y la 5 resolución de la dependencia no resuelta 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 del productor de la figura 5A y/o la ejecución adicional del gráfico del productor de la figura 5B de acuerdo con una realización de la invención;
10 La figura 5D es un diagrama de bloques que ilustra la ejecución inicial del gráfico del productor de la figura 5A y/o la ejecución adicional del gráfico del productor de las figuras 5B y 5C de acuerdo con una realización de la invención;
La figura 6 es un diagrama de flujo que ilustra un flujo de ejecución lógica de un cliente de ejecución y su relación con un tiempo de ejecución con el soporte de programación orientado al gráfico del productor según una realización 15 de la invención;
La figura 7A ilustra un pseudo código de una declaración de dependencia del productor de un procedimiento que utiliza dependencias de acceso directo declaradas de acuerdo con una realización de la invención;
20 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 un pseudo código de una declaración de dependencia del productor de un procedimiento que utiliza un acceso directo de dependencia no declarada, e ilustra un diagrama de bloques de productores de ejemplo de acuerdo con una realización de la invención;
25 La figura 7D ilustra un pseudo código de una declaración de dependencia del productor de un procedimiento que utiliza un acceso directo de dependencia no declarada 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;
30 La figura 7F es un diagrama de bloques de unas dependencias de ejemplo mediante el uso de una dependencia ascendente con un productor de determinación de dependencia 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 dependencia 35 débilmente restringida con un productor de determinación de dependencia de acuerdo con una realización de la invención;
La figura 7H ilustra gráficos de productores de ejemplo de productores estándar de acuerdo con una realización de la invención;
40 La figura 7I ilustra un ejemplo de las dependencias de productores y los productores de determinación de dependencia para descubrir, para resolver, y construir la gráfica del productor de la figura 7H.
La figura 8A es un diagrama de bloques que ilustra un primer marco de ejemplo en el que las aplicaciones se 45 proporcionan a los usuarios finales de acuerdo con una realización de la invención;
La figura 8B es un diagrama de bloques que ilustra un segundo ejemplo de marco en el que las aplicaciones se proporcionan a los usuarios finales de acuerdo con una realización de la invención;
50 La figura 8C ilustra una pantalla y de ejemplo y el uso de selección de celdas libres con el módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención;
La figura 8D ilustra otra pantalla de ejemplo y el uso de selección de celdas libres con el módulo de interfaz de 55 usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención;
La figura 8E muestra un ejemplo de pantalla y del uso de creación de la tabla con el módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la 60 invención;
La figura 8F ilustra otra pantalla de ejemplo y el uso de creación de la tabla con el módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención;
65 La figura 9A es un diagrama de bloques que ilustra un primer esquema de la distribución de un tiempo de ejecución con el soporte de programación orientada al gráfico del productor de acuerdo con una realización de la invención;
La figura 9B es un diagrama de bloques que ilustra un segundo esquema para la distribución de un tiempo de 5 ejecución con el soporte de programación orientada al gráfico del productor de acuerdo con una realización de la invención;
La figura 9C es un diagrama de bloques que ilustra un tercer esquema de la distribución de un tiempo de ejecución con el soporte de programación orientada al gráfico del productor de acuerdo con una realización de la invención;
La figura 10 es un diagrama de bloques de una ejecució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 clase 1092 de la figura 15 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 ejemplo 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 del gráfico(s) productor de la estructura 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 del procedimiento de seguimiento de la estructura 1058 de la figura 10 de acuerdo con una realización de la invención;
25 La figura 12 es un diagrama de bloques que ilustra detalles adicionales de la figura 10 para apoyar las dependencias de tipo contingente y suscripción dinámicas de productores de acuerdo con una realización de la invención;
La figura 13A ilustra un pseudo código de declaraciones de dependencia de productores de los procedimientos que utilizan un dependencia no declarada, no dinámica, sin acceso directo (no contingente, sin suscripción) de acuerdo con una realización de la invención;
La figura 13B es un diagrama de bloques productores que ilustran un ejemplo de dependencia de productor sin acceso directo no declarada, no dinámica (no contingente, sin suscripción) de acuerdo con una realización de la
35 invención;
La figura 13C ilustra un pseudo código de declaraciones de dependencia de productores de los procedimientos que utilizan una dependencia de productor sin acceso directo no declarada, contingente, sin 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 dependencia del productor sin acceso directo declarada, contingente, sin suscripción de acuerdo con una realización de la invención;
La figura 13E muestra un pseudo-código de las declaraciones de dependencia de productores de los procedimientos
45 que utilizan tanto una dependencia del productor sin acceso directo no declarada, contingente, sin suscripción y una dependencia del productor con acceso directo declarada, contingente, sin suscripción de acuerdo con una realización de la invención;
La figura 13F es un diagrama de bloques de productores que ilustran una dependencia de productor sin acceso directo no declarada, contingente, sin suscripción y una dependencia de productor de acceso directo declarado, contingente, sin suscripción de acuerdo con una realización de la invención;
La figura 13G ilustra un pseudo código de declaraciones de dependencia de productores de los procedimientos que utilizan una dependencia del productor de acceso directo declarado, contingente, sin suscripción y una dependencia
55 del productor de acceso directo, no contingente, sin suscripción de acuerdo con una realización de la invención;
La figura 13H es un diagrama de bloques de productores que ilustran un ejemplo de dependencia del productor con acceso directo declarado, contingente, sin suscripción y una dependencia del productor con acceso directo declarado, no contingente, sin suscripción de acuerdo con una realización de la invención;
La figura 13I ilustra un pseudo código de declaraciones de dependencia de productores de los procedimientos que utilizan una dependencia del productor con acceso directo declarado, no dinámico (no contingente, sin suscripción) de acuerdo con una realización de la invención;
65 La figura 13J es un diagrama de bloques de productores que ilustran un ejemplo de dependencia del productor con acceso directo declarado, no dinámico 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 de 5 suscripción no contingente, 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 de suscripción no contingente, adherente de acuerdo con una realización de la invención;
La figura 14D ilustra la elección de un productor padre basada en un productor de determinación de dependencia padre creado 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 basada en un productor determinación de dependencia padre creada por un productor de determinación de dependencia descendiente, cuyo productor de determinación de
15 dependencia descendiente está vinculado 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 la instanciación de nuevas instancias de acuerdo con una realización de la invención;
La figura 16 es un diagrama de flujo de instanciación de nuevos productores y productores sin anulación 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 25 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;
35 La figura 21 es un diagrama de flujo para reemplazar los productores de acuerdo con una realización de la invención;
La figura 22A es una parte de un diagrama de flujo para la ejecución de los gráfico(s) productores de corriente de acuerdo con una realización de la invención;
La figura 22B es otra parte de un diagrama de flujo para la ejecución de los gráfico(s) productores de corriente de acuerdo con una realización de la invención;
45 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; y
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.
55 En la siguiente descripción, numerosos detalles específicos, tales como implementaciones lógicas, códigos de operación, medios para especificar los operandos, implementaciones de reparto/compartición/duplicación de recursos, los tipos e interrelaciones de los componentes del sistema y opciones de partición/integración lógica que se establecen con el fin de proporcionar una mayor comprensión completa de la invención. Se apreciará, sin embargo, por parte de un experto en la materia, que la invención puede ser practicada sin estos detalles específicos. En otros casos, las estructuras de control, las estructuras de datos completos y las secuencias de instrucciones de software no se han mostrado en detalle para no oscurecer la invención. Los expertos en la materia, con las descripciones incluidas, serán capaces de aplicar la funcionalidad adecuada, sin experimentación indebida.
65 A menos que se especifique lo contrario, las líneas de trazos en las figuras (con la excepción de las líneas de trazos divisorias) se utilizan para representar elementos opcionales en las figuras. Sin embargo, no se debe suponer que todos los elementos opcionales se muestran mediante líneas de trazos, sino que los que se muestran en líneas de trazos fueron elegidos para una variedad de razones (por ejemplo, se podrían mostrar fácilmente, para proporcionar mayor claridad, etc.)
5 Las referencias en la memoria a "una realización", "un ejemplo de realización", etc., indican que la realización descrita puede incluir una característica, o estructura particular, pero no necesariamente todas las realizaciones pueden incluir la característica, o estructura particular. Además, estas frases no necesariamente hacen referencia a la misma realización. Además, cuando una característica o estructura particular que se describe en conexión con una realización, se afirma que está dentro del conocimiento de un experto en la técnica para afectar a esta característica o estructura en relación con otras realizaciones si está o no descrita explícitamente.
En la siguiente descripción y en las reivindicaciones, los términos "acoplado" y "conectado", junto con sus derivados, pueden ser utilizados. Debe entenderse que estos términos no están pensados como sinónimos entre sí. Por el contrario, en realizaciones particulares, "conectado" puede ser utilizado para indicar que dos o más elementos están
15 en contacto directo entre sí. "Acoplado" puede significar que dos o más elementos están en contacto directo. Sin embargo, "acoplado" también puede significar que dos o más elementos no están en contacto directo entre sí, pero aún así cooperar o interactuar entre sí.
En algunos casos, las operaciones de diagramas de flujo se describen con referencia a las realizaciones de ejemplo de los otros diagramas de bloques. Sin embargo, debe entenderse que las operaciones de los diagramas de flujo pueden realizarse por realizaciones de la invención distintas de las descritas con referencia a estos otros diagramas de bloques, y que las realizaciones de la invención descritas con referencia a estos otros diagramas de bloques pueden realizar operaciones diferentes a las descritas con referencia a los diagramas de flujo.
25 Las técnicas que se muestran en las figuras se pueden implementar utilizando códigos y datos almacenados y ejecutados en uno o más ordenadores. Estos ordenadores almacenan y comunican (internamente y con otros equipos a través de una red) códigos y datos utilizando medios legibles por máquina, tal como medios de almacenamiento de 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 la máquina (por ejemplo, eléctricos, ópticos, acústicos u otras formas de señales reproducidas, tal como ondas portadoras, señales infrarrojas, señales digitales, etc.). Además, estos ordenadores incluyen típicamente un conjunto de uno o más procesadores acoplados a uno o más de otros componentes, tales como un dispositivo de almacenamiento, una serie de dispositivos de entrada/salida de usuario (por ejemplo, un clavedo y una pantalla), y una conexión de red. El acoplamiento del conjunto de procesadores y otros componentes es normalmente a través de uno o más buses y
35 puentes (también denominados como controladores de bus). El dispositivo de almacenamiento y el tráfico de la red representan, respectivamente, uno o más medios de almacenamiento de la máquina y los medios de comunicación de la máquina. Así, el dispositivo de almacenamiento de un sistema informático dado típicamente almacena códigos y los datos para su ejecución en el conjunto de uno o más procesadores de dicho equipo. Por supuesto, una o más partes de una realización de la invención pueden ser implementadas utilizando distintas combinaciones de software, firmware y/o hardware.
Información general
De acuerdo con un aspecto de la invención, un productor es al menos un ejemplo específico (u objeto) y un
45 procedimiento específico, de tal manera que si el productor se ejecuta durante el tiempo de ejecución, el procedimiento específico se ejecuta en la instancia específica. Por lo tanto, un productor determinado se instancia a partir de una instancia dada y un procedimiento dado asociado a esa instancia. Al igual que las clases, instancias y procedimientos, los productores son elementos básicos o construcciones manipuladas por el tiempo de ejecución. Por lo tanto, la instanciación de un productor es interpretada y seguida por el tiempo de ejecución, y por lo tanto, el tiempo de ejecución sigue la combinación de instancias y procedimientos representados por los productores. En otras palabras, un productor es una construcción que se puede instanciar del tiempo de ejecución que se sigue por el tiempo de ejecución, que es ejecutado por el tiempo de ejecución, y que incluye al menos una instancia y un procedimiento asociado a esa instancia, tal que la ejecución de los tiempos de ejecución del productor resulta en el procedimiento del productor que se ejecuta en la instancia del productor. Además, el procedimiento de un productor
55 tiene asociado con el mismo una declaración de la dependencia del productor que identifica, con un conjunto de cero
o más dependencias de productores, un conjunto de cero o más productores para un productor determinado. En concreto, las dependencias de los productores se declaran para los procedimientos que utilizan las declaraciones de dependencia de los productores, la declaración de la dependencia del productor de un determinado procedimiento puede incluir cero o más dependencias de productores, y cada dependencia del productor identifica un conjunto de cero o más productores. Por lo tanto, las declaraciones de dependencia de los productores y las dependencias de los productores que se definen se interpretan y son seguidos por el tiempo de ejecución, y por lo tanto, el tiempo de ejecución realiza un seguimiento de las relaciones entre los productores indicados por las declaraciones de dependencia de los productores.
65 Cuando un productor dado depende de un conjunto de uno o más de otros productores, el tiempo de ejecución asegurará la ejecución del conjunto de los otros productores antes de que el productor dado. Por lo tanto, las declaraciones de dependencia de los productores representan las relaciones de ejecución entre los productores, mientras que los productores representan las operaciones a realizar (procedimientos) e instancias. Aunque en algunas realizaciones de la invención se permiten las dependencias de los productores padre sobre los productores descendientes para ser declaradas en la declaración de dependencia del productor asociado con el procedimiento
5 del productor padre (la declaración de la dependencia del productor del productor padre se identifica con cualquiera de los productores descendientes – indicado aquí como declarado descendente), otras realizaciones de la invención también permiten dependencias para ser declaradas en la declaración de dependencia del productor asociado al procedimiento(s) del productor(es) descendiente(s) (la declaración de dependencia del productor del productor descendiente se identifica uno o más productores padre -indicado aquí como declarado ascendente).
En diferentes realizaciones de la invención, un productor identifica cosas adicionales. Por ejemplo, mientras que en algunas realizaciones de la invención, un productor es al menos una instancia y un procedimiento asociado con esa instancia, en otras realizaciones de la invención, un productor es una clase, una instancia de esa clase, y un procedimiento asociado con esa instancia (por ejemplo, un productor directamente puede incluir una clase, instancia, 15 y un procedimiento; un productor directamente puede incluir una instancia y un procedimiento, mientras que indirectamente la identificación de una clase de esa instancia a través de una referencia (por ejemplo, una referencia en la instancia)). Aunque la invención se puede utilizar en el contexto del código escrito en diferentes lenguajes de programación (por ejemplo, código orientado a objetos escrito en un lenguaje reflexivo orientado a objetos; código orientado a objetos escrito en un lenguaje reflexivo basado en objetos, el código escrito en un lenguaje de procedimiento no reflexivo orientado a objetos no reflexivos y transformado en código de lenguaje reflexivo orientado a objetos), las realizaciones de la invención se describirán, a modo de ejemplo y no de limitación, con referencia a lenguajes de programación reflexivos orientados a objetos y con referencia a los productores que directamente incluyen clases, instancias y procedimientos. Además, aunque en una realización de la invención el procedimiento de un productor es un procedimiento de instancia (un procedimiento que puede utilizar campos de instancia además
25 de cualquier entrada recibida como argumentos), realizaciones alternativas de la invención también pueden o alternativamente, soportar el procedimiento de un productor que es un procedimiento de clase (procedimientos que reciben todas las entradas como argumentos y/o utiliza las variables de instancia independientes) (donde el procedimiento de un productor es un procedimiento de instancia, la instancia del productor es una instancia de una clase, mientras que en el procedimiento de un productor es un procedimiento 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 relación de una declaración de dependencia del productor para un procedimiento de una clase en un código fuente orientado a objetos de un productor que incluye la clase, una instancia dada de esa clase, y un procedimiento de esa clase, de acuerdo con una realización de la invención.
35 En la figura 1A, se muestra un código fuente orientado a objetos 100 que incluye una clase 102, que a su vez incluye un procedimiento 104 y una declaración de dependencia del productor 106 para el procedimiento 104. Por supuesto, la clase 102 normalmente incluye uno o más campos (no mostrados) y procedimientos adicionales (no mostrados). Además, el código fuente orientado a objetos 100 típicamente incluye clases adicionales.
Durante el tiempo de ejecución, una instancia 108 de la clase 102 se instancia. La instancia 108 incluye los datos de los campos de la clase 102. Además, un productor 110 se instancia, cuando el productor 110 identifica la clase 102, la instancia 108 de la clase 102 (que tiene asociado con la misma el procedimiento 104 de la clase 102), y el procedimiento 104 de la clase 102. La declaración de dependencia del productor 106 identifica al tiempo de ejecución de un conjunto de cero o más productores 112 (en adelante, los productores descendientes del productor
45 110) que debe ser ejecutado 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 las salidas de consumo 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, cuya salida puede ser interna a la instancia 108 (y por lo tanto, modificar los datos del ejemplo 108) y/o puede ser externa, de cualquier manera, la salida del productor 110 puede ser consumida por un conjunto o cero o más de otros productores 114 (referidos como productores padre del productor 110)). Tal como se ha indicado anteriormente, y como se describe con más detalle más adelante en este documento, la declaración de dependencia del productor 106, en algunas realizaciones de la invención, también puede identificar el tiempo de ejecución cero o más de los productores 114.
55 Se debe entender que las entradas y las salidas de los productores se basan en las entradas y las salidas de los procedimientos en los que se basan los productores. Como tal, estas entradas y salidas pueden representar varios parámetros que tienen una variedad de estructuras de datos.
La declaración de dependencia del productor para un determinado procedimiento identifica en el tiempo de ejecución del conjunto de cero o más productores para instanciarse y ejecutarse. A modo de ejemplo, cuando una declaración dependencia del productor (por ejemplo, la declaración de dependencia del productor 106) para un procedimiento dado (por ejemplo, el procedimiento 104) identifica una dependencia del productor en un productor determinado (cuyo productor dado identifica una primera clase, una primera instancia de esa clase, y un primer procedimiento de esa primera clase) (por ejemplo, uno del conjunto de los productores 112), a continuación, la declaración de 65 dependencia del productor del procedimiento dado identifica el tiempo de ejecución que la primera instancia debe instanciarse (si no está ya) y que el primer procedimiento utiliza para crear una instancia del productor dado para la
primera instancia (en estos ejemplos, primero no significa ubicación u orden).
En funcionamiento, cuando, durante el tiempo de ejecución, un conjunto de uno o más productores son designados como de interés y tienen las dependencias de los productores declaradas por los mismos, el tiempo de ejecución: 1)
5 genera de forma automática (descubre, desarrolla, y, opcionalmente, resuelve) un conjunto de uno o más gráficos, que pueden ser de múltiples niveles y pueden ser de una variedad de formas (por ejemplo, cadena, árbol), desde el conjunto dado de productores designados como de interés hacia abajo a los productores de origen basados en las declaraciones de dependencia de los productores, y 2) la ejecución de las secuencias de los productores de la serie de gráficos para generar la(s) salida(s) del conjunto dado de productores designados como de interés. Por lo tanto, el tiempo de ejecución utiliza las declaraciones de dependencia de los productores para determinar qué procedimientos con qué argumentos se ejecutan en qué instancias, y cuándo para fines de sincronización.
Por lo tanto, las dependencias de los productores representan la secuencia de ejecución de los productores en el tiempo de ejecución. Sin embargo, además de indicar la secuencia de ejecución, las dependencias de los
15 productores pueden representar diferentes relaciones de entrada y de salida en diferentes realizaciones de la invención. Por ejemplo, diferentes realizaciones de la invención pueden soportar una o más de las dependencias del productor de argumentos, dependencias del productor de campo y dependencias del productor sólo de secuenciación (dependencias de los productores solamente de secuenciación a las que se refiere el presente documento con la abreviatura dependencias de productores de secuenciación). Aunque cada una de las dependencias del productor de argumentos, las dependencias del productor de campo y dependencias del productor de secuenciación representan las relaciones de secuenciación de ejecución entre los productores, el argumento y las dependencias del productor de campo, además, representan los datos de los cuales el tiempo de ejecución es consciente. En concreto, una dependencia del productor de argumento hace que el tiempo de ejecución para asignar la salida de un productor descendiente como parámetro de entrada a un productor padre, mientras que una
25 dependencia del productor de campo indica el uso de un campo de una instancia. Independientemente de la entrada en relación con la salida representada por una dependencia del productor, asegurando el uso apropiado de las dependencias del productor que los productores que acceden a la información que se secuencia después de que los productores que impactan la información.
Las dependencias de secuenciación pueden ser usadas para una variedad de propósitos, incluyendo asegurar el orden de ejecución entre los productores que modifican los datos en una manera en la que el tiempo de ejecución no es consciente y productores que consumen los datos (un productor descendiente puede escribir sus salidas de una manera que requiera el procedimiento del productor padre para incluir código para acceder a la salida (por ejemplo, un procedimiento que impacta en el ambiente al afectar a una salida que no es la salida del productor regular y,
35 como tal, que no es detectado por el tiempo de ejecución -tal como un procedimiento que establece una variable global, que define un campo en una instancia que no es la salida del productor, que afecta a un origen de datos externo, etc.)). Así, una dependencia de secuenciación refleja una dependencia de un productor padre en un productor descendiente, pero requiere salidas que necesitan ser proporcionadas, si las hubiere, entre sí que se producen a través de la escritura del código (por ejemplo, código en el procedimiento del productor descendiente para escribir una salida a un mecanismo dado (tal como establecer una variable global, el impacto de una fuente de datos externa, establecer un campo de un ejemplo que no es la salida del productor, etc.) y un código en el procedimiento del productor padre para leer la salida del mecanismo dado). De esta manera, las dependencias de secuenciación permiten que el tiempo de ejecución sincronice la ejecución de los productores padre que se basan en una salida que el tiempo de ejecución no puede detectar.
45 En una realización de la invención, la declaración de dependencia del productor de un determinado procedimiento identifica solamente las dependencias directas en los productores (por ejemplo, descendientes directos (hijos), en contraste con los descendientes indirectos (nietos, bisnietos, etc.)). En esta realización, cada declaración de dependencia del productor proporciona sólo un único nivel o capa de productores cuyas salidas pueden ser utilizadas directamente por un productor instanciado a partir del procedimiento dado, dejando el descubrimiento/construcción/resolución de capas adicionales del gráfico(s) del productor para procesamiento del tiempo de ejecución de otras declaraciones de dependencia de los productores.
Claves de ejemplo
55 Un productor puede ser visto como un conjunto de identificadores múltiples, un identificador para cada nivel adicional de granularidad especificado (clase, instancia, procedimiento, etc.). Además, algunas realizaciones de la invención aplican cada identificador como una clave separada, mientras que otras realizaciones tienen determinados identificadores que comparten una clave. A modo de ejemplo, algunas realizaciones de la invención implementan un productor como un triplete de clase, instancia, y procedimiento e implementan las claves, de tal manera que cada parte del triplete se identifica por una clave separada (una clave de clase, una clave de instancia, y una clave de procedimiento) y el productor se identifica por la combinación de la clave de clase, la clave de instancia, y la clave de procedimiento (la clave del productor).
65 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 clave de clase es única, cada clave de instancia es única en todos los casos de todas las clases, y cada clave de procedimiento es única en todos los procedimientos de todas las clases. Como otro ejemplo, en otras realizaciones de la invención, cada clase tiene una clave única, cada instancia de una clase determinada tiene una clave única (a través de las instancias de la clase), y cada procedimiento de una clase tiene una única clave (a través de los procedimientos de la clase), pero instancias de clases diferentes pueden tener la
5 misma clave de instancia, y procedimientos de clases diferentes pueden tener la misma clave de procedimiento; este enfoque más adelante se utilizará en el resto del documento a modo de ejemplo y no de limitación. Por ejemplo, supongamos que una de primera clase incluye procedimientos y tiene una clave para cada uno de estos procedimientos que es único dentro de la primera clase, a continuación, las instancias de esta clase (que cada una tiene una clave única entre sí) tiene las mismas claves de procedimiento asociadas con las mismas. Como otro ejemplo, supongamos que una segunda clase diferente incluye procedimientos (alguno, todos, o ninguno del mismo que los procedimientos de la primera clase) que tienen las mismas claves del procedimiento que las utilizadas para la primera clase, como tal, un ejemplo de esta clase diferente se puede asociar con las mismas claves del procedimiento que se asocian con una instancia de la primera clase.
15 El uso de las claves permite una gran variedad de características, incluyendo: 1) el seguimiento de cada entidad identificada por los identificadores de un productor (por ejemplo, el seguimiento de cada clase, instancia, y procedimiento), 2) varios productores padre (sin darse cuenta de su existencia mutua) para conectar con el productor de un mismo descendiente en base a sus declaraciones de dependencia de los productores (que especifican las dependencias de los productores con las claves de productores), etc. En una realización de la invención, la clave de instancia es una instancia de una clase (Clave de Instancia) que soporta dos elementos: una naturaleza de clave de instancia que indica si el identificador de la clave es una referencia a la instancia o de otro objeto (como una cadena), y un identificador de clave que puede ser una referencia a la instancia, o a otro objeto (como una cadena). El almacenamiento de una referencia a la instancia en la clave de la instancia ahorra al programador inventar un nombre para identificar estos casos.
25 Relaciones de ejemplo
En el contexto de la discusión anterior en relación con un productor que se está viendo como un conjunto de múltiples identificadores (con un identificador para cada nivel adicional de granularidad especificada), en una realización de la invención, las diversas relaciones entre el soporte de un productor y sus hijos y los padres son aquellos en los que al menos un identificador es diferente entre un productor y su conjunto de cero o más productores padre y un identificador es diferente entre un productor y cada uno de su conjunto de cero o más productores descendientes. A modo de proporcionar algunas relaciones de ejemplo, supongamos que un primer productor se instancia, donde el primer productor es una primera instancia de una de primera clase y un primer
35 procedimiento de esa primera clase, y se supone que la declaración de dependencia del productor para ese primer procedimiento identifica el tiempo de ejecución de un segundo productor como descendiente, entonces el segundo productor puede ser: 1) la primera instancia de la primera clase y un segundo procedimiento de esa primera clase, 2) una segunda instancia de la primera clase y un segundo procedimiento de esa primera clase , 3) una segunda instancia de la primera clase y el primer procedimiento de la primera clase, o 4) una instancia de una segunda clase y un procedimiento de esa segunda clase. En tal caso, el primer productor depende del segundo productor -por lo tanto, representa una entrada en la relación de salida del primer productor al segundo productor. Diversas relaciones y combinaciones de estas relaciones se describen a continuación para una realización de la invención que utiliza un lenguaje orientado a objetos y en el que un productor identifica al menos una clase, instancia, y procedimiento.
45 Las figuras 1A-1D ilustran relaciones de ejemplo entre un productor dado, su conjunto de productores padre, y su conjunto de productores descendientes de acuerdo con una realización de la invención. Las figuras 1B-1D muestran cada una lo siguiente: 1) una definición de clase 102A, incluyendo los procedimientos 104A-C y las declaraciones de los productores de dependencia 106A-C para cada uno de estos procedimientos, respectivamente, 2) una definición de clase 102B incluyendo los procedimientos 104D-E y las declaraciones de dependencia del productor 106D-E para cada uno de esos procedimientos, respectivamente, y 3) una definición de clase 102C, incluyendo el procedimiento 104F y la declaración de dependencia del productor 106F para ese procedimiento; 4) una instancia 108A de la clase 102A, 5) un productor 110A que identifica la clase102A, la instancia 108A, y el procedimiento 104A, y 6) un productor 112A.1 y un productor 114A.1 que representan respectivamente uno del conjunto de productores 112 y
114. Las líneas de trazos con letras en caja en las mismas se utilizan en las figuras 1B-1D para ilustrar las
55 relaciones de ejemplo. De este modo, la colección de las líneas de trazos con una caja A en las mismas representa una relación. Las relaciones en la figura 1B se pueden combinar con las relaciones en la figura 1C, como tal, estas combinaciones representan las combinaciones de las relaciones entre los productores padre 114A y los productores descendiente 112A al productor 110A. Además, la figura 1D ilustra algunas combinaciones adicionales de ejemplo de las relaciones entre los productores padre 114A y los productores descendientes 112A y el productor 110A.
La figura 1B ilustra las relaciones 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 los productores del procedimiento(s) diferente(s) de la misma clase, diferentes instancias de la misma clase, y/o procedimiento(s) de una clase diferente, y por lo tanto, 65 cada uno de la serie de productores 114 puede ser: 1) de la misma instancia que el productor 110A (instancia 108A de la clase 102A) y un procedimiento diferente asociado con ese ejemplo (ilustrado por la caja A en las líneas de trazos de la instancia 108A para el productor 114A.1 y desde el procedimiento 104B al productor 114A.1), 2) de una instancia diferente de la clase 102A y un procedimiento diferente asociado con ese ejemplo (ilustrado por la caja B en las líneas de trazos de la clase 102A a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el procedimiento 104B al productor 114A.1), 3) de una instancia de una clase diferente y un procedimiento asociado 5 con esa instancia (ilustrado por la caja C en las líneas de trazos a partir de la clase 102B a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el procedimiento 104D al productor 114A.1), o 4) de una instancia diferente de la clase 102A (instancia 108A) y el mismo procedimiento (procedimiento 104A) de esa instancia (por ejemplo, con una dependencia contingente -descrita más adelante en este documento) (ilustrada por la caja D en las líneas de trazos de la clase 102A a la instancia 108B, desde la instancia 108B para el productor 114A.1 , y desde
10 el procedimiento 104A para el productor 114A.1); además, cuando hay múltiples productores en el conjunto de los productores 114, los productores 114 pueden formar 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 los anteriores.
La figura 1C ilustra las relaciones de ejemplo entre el productor 110A y el productor descendiente 112A.1 de
15 acuerdo con una realización de la invención. La figura 1C incluye adicionalmente una instancia 108C. Cada uno del conjunto de productores 112A puede ser: 1) de la misma instancia que el productor 110A (instancia 108A de la clase 102A) y un procedimiento diferente asociado con esa instancia (ilustrado por la caja E en las líneas de trazos de la instancia 108A al productor 112A.1 y desde el procedimiento 104C para el productor 112A.1), 2) de una instancia diferente de la clase 102A y un procedimiento diferente asociado con esa instancia (ilustrada por la caja F en las
20 líneas de trazos de la clase 102A en la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el procedimiento 104C al productor 112A.1), 3) de una instancia de una clase diferente y un procedimiento asociado con esa instancia (ilustrada por la caja G en las líneas de trazos de la clase 102C a la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el procedimiento 104F al productor 112A.1), o 4) de una instancia diferente de la clase 102A (instancia 108) y el mismo procedimiento (procedimiento 104A) de esa instancia (por
25 ejemplo, con una dependencia contingente que se describe más adelante en este documento) (ilustrada por la caja H en las líneas de trazos de la clase 102A a la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el procedimiento 104A al productor 112A.1). Así, cada uno de los conjunto de productores 112A puede ser de la misma instancia que el productor 110A, de una instancia diferente de la clase 102A, o un ejemplo de una clase diferente; además, donde hay múltiples productores en el conjunto de los productores 112A, los productores 112A
30 pueden formar parte de la misma instancia de la clase 102A, instancias diferentes de la clase 102A, la misma instancia de una clase diferente, diferentes instancias de una clase diferente, y/o una mezcla de los anteriores.
La figura 1D ilustra algunas combinaciones adicionales de ejemplo de las relaciones de los productores padre 114 y los productores descendientes 112 al productor 110A de acuerdo con una realización de la invención. La figura 1D,
35 además, incluye la instancia 108B y la instancia 108C. Las combinaciones de la figura 1D se muestran en la Tabla 1 a continuación: TABLA 1
- Letra en caja
- Líneas de trazos para el productor padre 114A.1 desde Líneas de trazos para el productor descendiente 112A.1 desde
- I
- Desde la instancia 108A al productor 114A.1 y desde el procedimiento 104B al productor 114A.1 Desde la instancia 108A al productor 112A.1 y desde el procedimiento 104B al productor 112A.1
- J
- Desde la instancia 108A al productor 114A.1 y desde el procedimiento 104B al productor 114A.1 Desde la clase 102A a la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el procedimiento 104B al productor 112A.1
- K
- Desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el procedimiento 104B al productor 114A.1 Desde la instancia 108A al productor 112A.1 y desde el procedimiento 104B al productor 112A.1
- L
- Desde la clase 102B a la instancia 108B, desde la instancia 108B al productor 114A.1 y desde el procedimiento 104E al productor 114A.1 Desde la clase 102B a la instancia 108B, desde la instancia 108B al productor 112A.1, y desde el procedimiento 104E al productor 112A.1
- M
- Desde 102B 108B de la clase a la instancia, de instancia para 108B 114A.1 de productores, y de 104E procedimiento de producción 114A.1 Desde 102B de la clase a 108C ejemplo, de 108C instancia para 112A.1 de productores, y de 104E procedimiento de producción 112A.1
- N
- Desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el procedimiento 104A al productor 114A.1 Desde la clase 102A a la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el procedimiento 104A al productor 112A.1
- O
- Desde la clase 102A a la instancia 108B, desde la instancia 108B al productores 114A.1, y desde el procedimiento 104A al productor 114A.1 Desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 112A.1, y desde el procedimiento 104A al productor 112A.1
- P
- Desde la instancia 108A al productor 114A.1 y desde el procedimiento 104B al productor 114A.1 Desde la clase 102A a la instancia 108C, desde la instancia 108C al productor 112A.1, y desde el procedimiento 104A al productor 112A.1
- Letra en caja
- Líneas de trazos para el productor padre 114A.1 desde Líneas de trazos para el productor descendiente 112A.1 desde
- Q
- Desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el procedimiento 104A al productor 114A.1 Desde la clase 102A a la instancia 108B, desde la instancia 108B al productor 112A.1, y desde el procedimiento 104B al productor 112A.1
- R
- Desde la clase 102B a la instancia 108B, desde la instancia 108B al productor 114A.1, y desde el procedimiento 104D al productor 114A.1 Desde la clase 102B a la instancia 108B, desde la instancia 108B al productor 112A.1, y desde el procedimiento 104E al productor 112A.1
La figura 1E ilustra que diferentes instancias de la misma clase pueden tener productores basado en los mismos procedimientos y/o diferentes de acuerdo con una realización de la invención. La figura 1E muestra: 1) la definición 5 de clase 102A, que incluye los procedimientos 104A-C y la declaración de dependencia de los productores 106A-C para cada uno de estos procedimientos, respectivamente, 2) la instancia 108A y la instancia 108B, pertenecientes a la clase 102A, 3) un productor 110A es el procedimiento 104A de la instancia 108A de la clase 102A, 4) un productor 110B es el procedimiento 104B de la instancia 108A de la clase 102A, 5) un productor 110C es el procedimiento 104A de la instancia 108B de la clase 102A; y 6 ) un productor 110D es el procedimiento 104C de la instancia 108B 10 de la clase 102A. Además, la figura 1D muestra que: 1) la declaración de dependencia del productor 106A para el procedimiento 104A identifica un tiempo de ejecución de los productores descendientes del productor 110A y del productor 110C, 2) la declaración de dependencia del productor 106B para el procedimiento 104B identifica el tiempo de ejecución del productor descendiente del productor 110B, y 3) la declaración de dependencia del productor 106C del procedimiento 104C identifica el tiempo de ejecución del productor descendente del productor
Tiempos de ejecución de ejemplo
La figura 2 es un diagrama de bloques que ilustra la capacidad de reutilización de un tiempo de ejecución con el
20 soporte de programación orientada al gráfico del productor de acuerdo con una realización de la invención. En la figura 2, varios programas de aplicaciones orientados a objetos (código de aplicación orientado a objetos con las declaraciones de dependencia de los productores 210A-I) son ejecutados mediante el mismo tiempo de ejecución con la ayuda del soporte de programación orientado a gráficos productor 220.
25 La figura 3A es un diagrama de bloques que ilustra un tiempo de ejecución con el soporte de programación orientado al gráfico del productor de acuerdo con una realización de la invención. En la figura 3A, un tiempo de ejecución con soporte de programación orientado al gráfico del productor 335 incluye un módulo de generación de gráficos del productor automatizado 340 y un módulo de ejecución del gráfico del productor 345. Además, el tiempo de ejecución 335 es para ejecutar el código fuente orientado a objetos, y por lo tanto, incluye módulos adicionales
30 que no se muestran.
Además, la figura 3A muestra declaraciones de dependencia de los productores para procedimientos de 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 denominados aquí como los productores seleccionados actualmente de interés), y las salidas de los
35 productores de origen 330 (descritos más adelante en este documento). El módulo de generación de gráficos del productor automatizado 340 recibe las declaraciones de dependencia de los productores 320 y el conjunto actual de los productores de interés 325.
El módulo de generación de gráficos del productor automatizado 340 intenta descubrir, a partir de las declaraciones
40 de dependencia de los productores, los productores descendientes con salidas que contribuyen directa e indirectamente a la entrada de los productores de interés seleccionados (y en algunas realizaciones de la invención que soportan dependencias declaradas ascendentes, productores padre), y construye un conjunto de uno o más gráficos actuales de productores que representan la dependencia de estos productores entre sí de los productores seleccionados actualmente de interés, a través de cualquier productor descubierto que son productores sin origen, a
45 los que los productores descubiertos son productores de origen. El gráfico(s) de los productores actuales se almacena(n) en la estructura del gráfico(s) del productor 380. Si bien las realizaciones de la invención pueden almacenar y manipular el gráfico(s) del productor como una colección de gráficos, otras realizaciones de la invención almacenan y manipulan el gráfico(s) del productor como una colección de productores que están vinculados entre sí para formar gráfico(s) (en oposición a una colección de gráficos) para facilitar la fusión y la escisión de los gráficos
50 del productor. A modo de ejemplo y no de limitación, se describen aquí las realizaciones de la invención que almacenan y manipulan el gráfico(s) del productor como una colección de productores.
El módulo de ejecución del gráfico del productor 345 recibe el gráfico(s) del productor actual desde el módulo de generación del gráfico del productor automatizado 340 y las salidas de los productores de origen 330, y ejecuta los 55 productores del gráfico(s) del productor actual para determinar la salida actual de los productores actualmente seleccionados de interés. El módulo de ejecución del gráfico del productor 345 almacena en caché las salidas actuales de los productores en la estructura de del gráfico(s) del productor 380 tal como se ilustra mediante el
almacenamiento en caché de la salida del productor 384.
El almacenamiento en caché de las salidas de los productores del gráfico del productor durante la ejecución permite la sincronización. Por ejemplo, el tiempo apropiado para ejecutar un productor padre que depende de los múltiples 5 productores descendientes es después que todos los productores descendientes múltiples hayan sido ejecutados, en otras palabras, sería un desperdicio (y, en algunos casos, no posible) ejecutar el productor padre cada vez que uno de sus productores descendientes haya finalizado su ejecución. El almacenamiento en caché de las salidas de los productores permite la ejecución del productor padre no sólo para ser aplazado hasta que todos sus productores descendientes se hayan ejecutado, sino que también permite una determinación del tiempo apropiado para la ejecución del productor padre -cuando todos los productores descendientes han sido ejecutados y sus resultados se han almacenado. Así, el tiempo de ejecución hace que esta decisión de sincronización para el programador comprobando el estado de ejecución de sus productores descendientes, en otras palabras, dicha sincronización está automatizada (el programador no necesita incluir el código fuente independiente que determina el tiempo apropiado para identificar una instancia y ejecuta una procedimiento dado asociado con esa instancia en esa instancia). A
15 modo de otro ejemplo, donde varios productores padre dependen del mismo productor descendiente, así como de otros productores distintos de los descendientes, el momento adecuado para ejecutar cada uno de los varios productores padre suele ser diferente, el tiempo de ejecución determina automáticamente el momento adecuado para ejecutar cada uno de los varios productores padre dependiendo de la disponibilidad de las salidas de su conjunto de productores secundarios.
Tal como se describirá en detalle más adelante en este documento, ya que algunas partes de un gráfico del productor pueden no ser detectables en la actualidad debido a las dependencias de productores dinámicos, el módulo de generación del gráfico del productor automatizado 340 "intenta" descubrir y construir el gráfico del productor entero, pero no puede inicialmente ser capaz de completar todo el gráfico del productor hasta que algunos
25 productores se ejecutan. Como tal, el módulo de ejecución del gráfico del productor 345 puede invocar el módulo de generación del gráfico del productor automatizado 340 con las salidas de los productores necesarias durante la ejecución del gráfico del productor actual para completar cualquier resto no resuelto del gráfico del productor actual (esto se ilustra en la figura 3A mediante una línea con flecha discontinua del módulo de ejecución de gráficos del productor 345 al módulo de generación de gráficos del productor automatizado 340, y se utiliza una línea discontinua con flecha porque este soporte es opcional).
La figura 4A es un diagrama de bloques que ilustra el descubrimiento y la construcción de un gráfico del productor de ejemplo de acuerdo con una realización de la invención. La figura 4A muestra que el conjunto actual de los productores de interés consiste en el productor 1. Sobre la base del productor 1 y su declaración de dependencia del
35 productor, se descubren el productor 2 y el productor 3. En otras palabras, la declaración de dependencia del productor 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 de productores). La figura 4A también muestra que mientras que el productor 3 es un productor independiente (un productor que no tiene ninguna dependencia de productores, y por lo tanto, es un productor de origen), el productor 2 no lo es. Como resultado, en base a la declaración de dependencia del productor 2, se descubren el productor 4 y el productor 5. En la figura 2A, el productor 4 y el productor 5 son los productores independientes (y por lo tanto, los productores de origen).
La figura 4B es un diagrama de bloques que ilustra la ejecución inicial del gráfico del productor de la figura 4A según
45 una realización de la invención. En la figura 4B, las líneas curvadas con flecha ilustran la ejecución de uno de los productores para generar una salida que se proporciona como la entrada a otro productor. Tal como se muestra en la figura 3A, la salida de los productores de origen 330 se proporcionan al módulo ejecución del gráfico del productor 345; en contraste, las salidas de los productores dependientes 1-2 se determinan mediante la ejecución de dichos productores, tal como se muestra en la figura 4B. Por lo tanto, en la figura 4B, ocurre lo siguiente: 1) la salida del productor de origen 4 y el productor de origen 5 se proporciona al productor dependiente 2, 2) el productor dependiente 2 se ejecuta, y 3) las salidas del productor dependiente 2 y el productor de origen 3 se proporcionan al productor 1; y 4) el productor 1 se ejecuta y su salida se proporciona como la salida actual de interés. Debe indicarse que el gráfico del productor de la figura 4B son los datos que circulan en el sentido de que los datos fluyen desde un productor a otro productor del gráfico.
55 Así, las declaraciones de dependencia del productor 320 unido los posibles gráficos de productores que pueden ser generados, mientras que el conjunto actualmente seleccionado de los productores de interés 325 identifican el nodo(s) inicial(es) del gráfico del productor actual que se genera. De estos dos, el módulo de generación de gráfico del productor automatizado 340 descubre y construye el gráfico del productor. El descubrimiento y la construcción está automatizada porque el módulo de generación de gráfico del productor automatizado 340 no proporciona el gráfico del productor (por ejemplo, no necesita ser identificado manualmente por un programador) o incluso una lista de los productores que estará en el gráfico del productor. Por el contrario, el módulo de generación del gráfico del productor automatizado 340 analiza la(s) declaración(es) de dependencia del productor del conjunto actual de productores seleccionados de interés para descubrir sus productores descendientes (y en algunas realizaciones de
65 la invención que soportar dependencias ascendentes declaradas, productores padre), a continuación, analiza las declaraciones de dependencia de productores de dichos productores descubiertos, y así sucesivamente hacia abajo a los productores de origen (en algunas realizaciones de la invención que se describen más adelante en este documento, esto se puede hacer con la ayuda del módulo de ejecución del gráfico del productor 345). En el caso de que el gráfico del productor sea un árbol, un productor actualmente seleccionado de interés será el nodo raíz, y las declaraciones de dependencia de productor se analizarán hasta que se descubren los nodos de hoja (los
5 productores de origen).
Productores de anulación y ejecución incremental
La figura 3B es un diagrama de bloques que ilustra un tiempo de ejecución con el soporte de programación orientada a gráfico del productor a que también soporta la ejecución incremental y las salidas de anulación del productor de acuerdo con una realización de la invención. Se debe entender que la ejecución incremental y salidas de anulación del productor son, cada una, características opcionales independientes, y por lo tanto, diferentes realizaciones de la invención pueden aplicar una o ambas.
15 En la figura 3B, un tiempo de ejecución con un soporte de programación orientada al gráfico del productor 360 incluye un módulo de generación de gráfico del productor automatizado 365, un módulo de ejecución de gráfico del productor 370, y un módulo de salida del productor de anulación 390. El tiempo de ejecución 360 es la ejecución del código fuente orientado a objetos y, por tanto, así incluye módulos adicionales que mostrados.
Además, la figura 3B muestra las declaraciones de dependencia de productores para procedimientos en código fuente orientada a objetos 320, el conjunto actual de uno o más productores cuyas salidas son de interés 325 (también denominados aquí como los productores seleccionados actualmente de interés), y la salida de los productores de origen 350. La salida de los productores de origen 350 incluye los resultados de los productores independientes establecidos en el código fuente 352 (por ejemplo, las constantes, los valores por defecto, etc.) y las
25 salidas de los productores actualmente anulados 354 (las salidas de los productores independientes y/o los productores dependientes cuyas salidas se anulan actualmente).
En algunas realizaciones de la invención, las salidas de los productores puede ser anuladas 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 los productores independientes de un gráfico del productor, los productores de origen de un gráfico del productor son los productores actualmente anulados.
El módulo de salida del productor de anulación 390 recibe las salidas del productor de anulación 354 (que identifica
35 los productores están siendo anulados y cuyos valores de salida están siendo anulados). En una realización de la invención, los productores pueden ser clasificados como productores de propiedad o productores de procedimiento. Los productores de propiedad son los que se basan en los procedimientos de propiedad (por ejemplo, obtener y establecer). Los productores de procedimiento son los basados en procedimientos no de propiedad. El módulo de salida del productor de anulación 390 incluye un módulo de salida de propiedad del productor de anulación 392 para los productores de propiedad anulados y un módulo de salida del productor de procedimiento de anulación 394 para los productores de procedimiento anulados. El módulo de salida del productor de propiedad de anulación 392 hace que el valor anulado se almacene en el caché del productor de salida 384 y en los datos de la instancia, mientras que el módulo de salida del procedimiento del productor anulado 394 hace que el valor anulado sea almacenado en el caché de salida del productor 384. Dependiendo de la realización de la invención, esta relación causal puede ser
45 directa o indirecta. La figura 3B ilustra una relación causal indirecta a través del uso de un registro de anulación 396 que recoge la salida del módulo de salida del productor de anulación 390 y que es consumida por el módulo de ejecución del gráfico del productor 370. Para propósitos de optimización, el registro de anulación 396 permite el retraso de las anulaciones para recoger las anulaciones múltiples de procesamiento por lotes.
Al igual que en el módulo de generación automática del gráfico del productor 340, el módulo de generación automatizada del gráfico del productor 365: 1) recibe las declaraciones de dependencia del productor 320 y el conjunto actual de los productores de interés 325, y 2) intenta descubrir, sobre la base de las declaraciones de dependencia de los productores, productores descendientes con salidas que contribuyen directa e indirectamente a la entrada de los productores seleccionados actualmente de interés (y en algunas realizaciones de la invención que
55 soportan las dependencias declaradas ascendentes, productores padre), y construye un conjunto de uno o más gráficos actuales de productor que representan la dependencia de entrada de estos productores entre sí de los productores seleccionados de interés, a través de cualquier productor descubierto no de origen, a los productores descubiertos que son productores de origen (productores independientes y productores actualmente anulados). El gráfico(s) productor se almacena(n) en el gráfico(s) productor de la estructura 380.
Similar al módulo de ejecución del gráfico del productor 345, el módulo de ejecución del gráfico del productor 370 recibe el gráfico del productor actual desde el módulo gráfico automatizado 365 y las salidas de los productores de origen 350, y ejecuta los productores del gráfico del productor actual para determinar la salida actual del productores seleccionados de interés. El módulo de ejecución del gráfico del productor 370 almacena en caché los resultados
65 actuales de los productores de la estructura del gráfica productor 380 tal como se ilustra en el almacenamiento caché de salida del productor 384.
Tal como se describió previamente, el caché de las salidas de productores durante la ejecución permite la sincronización (por ejemplo, el código fuente separada no necesita ser escrito para determinar cuándo debe ser ejecutado el productor 2 de la figura 4B, sino más bien el tiempo de ejecución hace que esta decisión de sincronización para el programador comprobando el disponibilidad de las salidas necesarias en el caché de salida 5 del productor 384, en otras palabras, dicha sincronización es automatizada). Además, esta memoria caché de salida del productor 384 se utiliza para la ejecución incremental. Más concretamente, después de que un gráfico del productor haya sido generado inicialmente y ejecutado, la anulación de un productor en el gráfico del productor actual requiere un cierto nivel de una ejecución adicional. Si bien algunas realizaciones de la invención simplemente vuelven a ejecutar todo el gráfico, realizaciones alternativas de la invención soportan la ejecución incremental (volver a ejecutar sólo aquellas partes del gráfico del productor que se ven afectadas por la anulación). Algunos ejemplos de realización que soportan la ejecución incremental utilizan la ejecución incremental marcando 382 en la estructura del gráfico(s) productor 380 para ayudar a determinar qué productores requieren la ejecución adicional. Por lo tanto, el mantenimiento del gráfico(s) del productor se refiere a la modificación de los enlaces del gráfico(s) productor según sea necesario a través de ejecuciones múltiples para mantenerlos actualizados (al día), mientras que la ejecución
15 incremental se refiere tanto a mantener el gráfico(s) del productor y usar el gráfico(s) del productor actuales (al día) para volver a ejecutar sólo aquellas partes del gráfico(s) del productor que se ven afectados por una anulación.
Similar a la figura 3A, hay una línea de trazos con flecha desde el módulo de ejecución del gráfico del productor 370 al módulo de ejecución automatizada del gráfico del productor 365 para representar un soporte opcional para las dependencias dinámicas. Cabe señalar que las dependencias dinámicas pueden cambiar durante la ejecución adicional de un gráfico del productor.
La figura 4C es un diagrama de bloques que ilustra la ejecución incremental del gráfico del productor de la figura 4B de acuerdo con una realización de la invención. En la figura 4C, la salida del productor 5 ha sido modificada de 25 forma explícita, pero las salidas del productor 3 y del productor 4 no. Basándose en el seguimiento de las dependencias de la salida a la entrada en el gráfico del productor y que sólo la salida del productor 5 ha sido modificada de forma explícita, se determina que sólo el productor 2 y el productor 1 se ven afectados por esta modificación. Como resultado, la determinación de una salida actualizada del productor 1 requiere solamente la ejecución adicional del productor 2 y del productor 1 con la nueva salida del productor 5 y las salidas anteriores del productor 4 y del productor 3. Esta ejecución adicional parcial del gráfico del productor se ilustra en la figura 4C mediante líneas curvas con flecha desde el productor 5 al productor 2 y del productor 2 al productor 1, pero no desde el productor 4 al productor 2 o del productor 3 al productor 1. La falta de líneas curvas con flechas del productor 4 al productor 2 y del productor 3 al productor 1 no son para indicar que las salidas del productor 3 al productor 4 no son necesarias, sino que en su lugar, el productor 3 y el productor 4 no se necesitan volver a ejecutar
35 si su salida se encuentra antes disponible. (Por ejemplo, almacenada en caché desde la ejecución previa del gráfico del productor).
El ejemplo relativamente simple de la figura 4C ilustra que no puede haber un ahorro en los recursos de procesamiento como resultado de la ejecución incremental. Estos ahorros dependerán de una serie de factores (por ejemplo, del número de productores que no necesitan volverse a ejecutar, de la cantidad de procesamiento de dichos productores habrían requerido, etc.). Aunque una realización de la invención se ilustra que realiza la ejecución incremental, realizaciones alternativas puede implementarse de forma diferente (por ejemplo, una realización alternativa puede volver a ejecutar para que todos los productores respondan a una modificación).
45 La figura 4D es un diagrama de bloques que ilustra la ejecución incremental del gráfico del productor de la figura 4B después de que el productor dependiente 2 haya sido anulado de acuerdo con una realización de la invención. En la figura 4D, la salida del productor 2 ha sido modificada de forma explícita, pero la salida del productor 3 no. Basado en el gráfico del productor y que sólo la salida del productor 2 ha sido modificada de forma explícita, se determina que sólo el productor 1 se ve afectado por esta modificación. Como resultado, la determinación de una salida actualizada del productor 1 requiere solamente la ejecución adicional del productor 1 que se anula con la salida del productor 2 y la salida modificada del productor 3. Esta ejecución adicional parcial del gráfico del productor se ilustra en la figura 4D mediante una línea curva con flecha desde el productor 2 al productor 1, pero no desde el productor 4 al productor 5 o del productor 3 al productor 1.
55 La figura 4E es un diagrama de bloques que ilustra la ejecución incremental del gráfico del productor de la figura 4B después de que el productor dependiente 2 se haya anulado y el productor fuente independiente 3 se haya modificado de acuerdo con una realización de la invención. Basado en el gráfico del productor y en que sólo las salidas del productor 2 y del productor 3 se han modificado, se determina que sólo el productor 1 se ve afectado por esta modificación. Como resultado, la determinación de una salida actualizada del productor 1 requiere solamente la ejecución adicional del productor 1 que se reemplaza con la salida del productor 2 y la salida modificada del productor 3. Esta ejecución adicional parcial del gráfico del productor se ilustra en la figura 4E mediante una 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 las salidas del productor de anulación también soporta las
65 salidas del productor de anulación, realizaciones alternativas de la invención no lo hacen. Aunque una realización de la invención que soporta los productores de anulación deja un productor de anulación anulado hasta que esté específicamente anulado, realizaciones alternativas de la invención pueden implementarse de forma diferente (por ejemplo, anulando un productor anulado cuando uno de su progenie se anula).
Construcción y ejecución del gráfico del productor
5 Diferentes realizaciones de la invención pueden ser implementadas para descubrir y construir un gráfico del productor en diferentes grados (por ejemplo, construir el gráfico del productor hasta que todos los caminos desde el extremo del nodo de raíz en los productores independientes (en cuyo caso, los nodos de extremo de un gráfico del productor son productores independientes, con la posibilidad de que cualesquiera productores anulados sean nodos intermedios); construir el gráfico del productor hasta que cada camino desde el nodo de raíz termine en un productor anulado o un productor independiente, el que se alcance primero (en cuyo caso, cada nodo de extremo de un gráfico del productor sea un productor independiente o un productor anulado)).
"Productores de ejecución de inicio" se refiere a los productores de un gráfico del productor a partir de los cuales
15 comienza una ejecución dada del gráfico del productor. Para una ejecución inicial de un gráfico del productor, diferentes realizaciones pueden comenzar a partir de diferentes productores (por ejemplo, en las realizaciones de la invención que construyen el gráfico del productor hasta que todos los caminos desde el extremo del nodo de raíz en productores independientes, la ejecución puede comenzar a partir de los nodos de extremo (que serían los productores independientes), a partir de los productores de origen (que incluirían los nodos de productores independientes y los nodos de productores anulados), a partir de un subconjunto de productores de origen que consisten en la combinación de cualesquiera productores independientes con al menos un camino entre los mismos y el productor raíz que no incluye un productor anulado y cualesquiera productores anulados, o a partir de un subconjunto de productores de origen que consiste en la combinación de cualesquiera productores anulados sin ningún tipo de descendientes que se anulan y cualesquiera productores independientes con al menos un camino
25 entre los mismos y el productor raíz que no incluye un productor anulado; en realizaciones de la invención donde el gráfico del productor bajo productores anulados no se construye si y hasta que a un productor se le retira la anulación, la ejecución puede comenzar desde los nodos de extremo (que pueden ser productores independientes y/o productores anulados), etc.).
Para ejecuciones posteriores de un gráfico del productor, diferentes realizaciones puede comenzar a partir de diferentes productores (por ejemplo, a partir de los productores independientes del gráfico del productor (por ejemplo, en las realizaciones de la invención que no soportan la ejecución incremental), a partir de los productores de origen del gráfico de productores (por ejemplo, en las realizaciones de la invención que no soportan la ejecución incremental); a partir de un subconjunto de los productores de origen que consiste en los productores de origen que 35 se han anulado y/o agregado desde la última ejecución (por ejemplo, en las realizaciones de la invención que se hacen compatible con la ejecución incremental), a partir de los productores de origen que se han anulado y/o agregado desde la última ejecución, a partir de la combinación de los productores anulados sin descendientes que se anulen y cualesquiera productores añadidos, con al menos un camino entre los mismos y el productor raíz que no incluye un productor anulado (por ejemplo, en las realizaciones de la invención que soportan la ejecución incremental); etc.). A modo de ejemplo y no de limitación, las realizaciones de la invención que realizan lo siguiente se describen a continuación: 1) no construir el gráfico del productor bajo productores anulados si y hasta que este productor no que ha retirado la anulación; 2) para una ejecución inicial de un gráfico del productor, iniciar la ejecución de los nodos de extremo (que pueden ser productores independientes y/o productores anulados), 3) implementar la ejecución gradual, y 4) para las ejecuciones posteriores de un gráfico del productor, iniciar la
45 ejecución de un subconjunto de los productores de origen que consiste en esos productores de origen que se han anulado y/o agregado desde la última ejecución.
Respecto al concepto anterior de los productores de inicio de la ejecución, el flujo de procesamiento de la ejecución del gráfico del productor también difiere entre las diferentes realizaciones. Por ejemplo, en una realización de la invención, la ascendencia de los productores de ejecución de inicio se determina y se coloca en una colección, los productores de inicio de ejecución se ejecutan, y la colección se analiza de manera iterativa en busca de productores para los cuales todas las dependencias han sido ejecutadas -eventualmente, los nodos de raíz son alcanzados. Como otro ejemplo, en una realización de la invención, los productores de inicio de la ejecución se ejecutan, los padres de los productores de ejecución de inicio se identifican, los padres se ejecutan, y sus padres se
55 identifican y se ejecutan, y así sucesivamente. Esta última realización de la invención se utiliza a continuación a modo de ejemplo, y no de limitación.
Tipos de de ejemplo de las dependencias
Dependencias dinámicas de productores de ejemplo
Una dependencia del productor dinámica es una dependencia del productor que puede cambiar durante la ejecución. Se debe entender que los criterios para resolver la dependencia del productor están presentes en el código fuente, y por lo tanto, los productores a los que la dependencia del productor puede ser resuelta son 65 limitados. Con referencia a la figura 3A, la línea discontinua con flecha desde el módulo de ejecución del gráfico del productor 345 al módulo de generación automatizada del gráfico del productor 340 representa un soporte para la ejecución de uno o más productores en el gráfico del productor actual que son necesarios para descubrir y construir toda el gráfico del productor actual. En otras palabras, una realización de la invención que soporta las dependencias dinámicas de productores puede iterar entre el módulo de generación automatizada del gráfico del productor 340 y el módulo de ejecución del gráfico del productor 345 hasta que el todo gráfico del productor se descubre, se construye, 5 y se ejecuta, es decir, iterar entre: 1) la invocación del módulo de generación automatizada del gráfico del productor para descubrir y construir las partes del gráfico del productor actual que se pueden resolver en ese momento, y 2) la invocación del módulo de ejecución del gráfico del productor para ejecutar los productores del gráfico del productor 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 se identifican; la creación se refiere a instancias de los productores y su
10 adición al gráfico del productor, y la resolución se refiere a la determinación de las dependencias dinámicas de los productores actualmente no resueltas.
La figura 5A es un diagrama de bloques que ilustra el descubrimiento y la construcción de un gráfico del productor de ejemplo que incluye una dependencia no resuelta de acuerdo con una realización de la invención. La figura 5 15 muestra el conjunto actual de los productores de interés que consisten en el productor 1. Sobre la base del productor 1 y su declaración de dependencia del productor, el productor 2 y el productor 3 se descubren. En otras palabras, la declaración de dependencia para el productor 1 identifica que el productor 1 requiere como entradas la salida del productor 2 y del productor 3. La figura 5A también muestra que mientras el productor 3 es un productor independiente (y por lo tanto, un productor de origen), el productor 2 no lo es. Como resultado, en base a la
20 declaración de dependencia del productor 2, el productor 4 y el productor 5 se descubren. Además, la figura 5A muestra que mientras que el productor 4 es un productor independiente (y por lo tanto, un productor de origen), el productor 5 no lo es. Como resultado, en base a la declaración de dependencia del productor 5, el productor 6 y la dependencia actualmente no resuelta se descubren. La figura 5A muestra también que la dependencia actualmente no resuelta puede ser el productor 7A y/o el productor 7B.
25 La figura 5B es un diagrama de bloques que ilustra la ejecución inicial del gráfico del productor de la figura 5A y la resolución de la dependencia no resuelta de acuerdo con una realización de la invención. La figura 5B muestra el gráfico del productor de la figura 5A, con líneas curvas con flechas que muestran la ejecución de los productores y la provisión de sus salidas a los productores padre dependientes. Además, la figura 5B muestra que la dependencia no
30 resuelta del productor 5 se resuelve como una dependencia en 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 del productor de la figura 5A y/o la ejecución adicional del gráfico del productor de la figura 5B de acuerdo con una realización de la invención. La figura 35 5C muestra el gráfico del productor de la figura 5A, con líneas curvas con flechas que muestran la ejecución de los productores y el suministro 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 del productor 7B y que el productor 7B es un productor dependiente. Como resultado, en base a la declaración de dependencia del productor 7B, el productor 8 es descubierto. El productor 8 es un productor independiente (y por lo tanto, es un productor de origen). 40 Suponiendo que la figura 5C representa la ejecución inicial del gráfico del productor de la figura 5A, se emplearían todas las líneas curvas con flecha en la figura 5C. Sin embargo, suponiendo que la figura 5C representa la ejecución adicional del gráfico del productor de la figura 5B, la ejecución adicional resulta en la dependencia dinámica que se resuelve de forma diferente (un interruptor desde el productor 5 que es dependiente del productor 7A al productor 7B). Además, si el ejecución adicional se realiza sin ejecución incremental, a continuación, se emplean todas las 45 líneas curvadas con flecha en la figura 5C, sin embargo, si se utilizó la ejecución incremental, sólo se emplearían las líneas curvadas con flecha no discontinuas (del productor 8 al productor 7B, del productor 7B al productor 5, del productor 5 al productor 2, y del productor 2 al productor 1). También debe entenderse que el cambio dinámico en la dependencia que se ilustra en la figura 5C es de ejemplo, y por lo tanto, cualquier número de diferentes situaciones podrían surgir (por ejemplo, el cambio dinámico puede no producirse nunca; el productor 5 podría haber sido primero
50 el productor 7B dependiente y luego cambiar al productor 7A, el productor 5 podría haber sido primero dependiente del productor 7B y no siempre se produce un cambio dinámico, el productor 5 se puede encontrar que es dependiente del productor 7A y del productor 7B como se ilustra en la figura 5D, etc.). Aunque diferentes realizaciones pueden resolver las dependencias dinámicas de productores de diferentes maneras, algunos ejemplos se proporcionan más adelante en este documento.
55 Así, la ejecución adicional automatizada de un gráfico del productor no se limita al productor que se modifica y a su padre directo que se vuelve a ejecutar, más bien un cambio es automáticamente ondulado a través del gráfico del productor durante el tiempo de ejecución, que afecta a los productores apropiados y sus dependencias, porque los gráficos del productor se mantienen (y la ejecución incremental se utiliza si se soporta). Como tales, los cambios
60 provocan cualquier descubrimiento adicional necesario, creación, resolución y ejecución. Así, la ejecución adicional de un gráfico del productor está automatizada en el sentido de que un usuario/programador no necesita determinar qué productores del gráfico del productor se ven afectados, y posiblemente corregir manualmente el gráfico.
Dependencias estáticas del productor
Una dependencia estática es aquella que no se puede cambiar durante la ejecución. Así, en una realización de la invención que soporta dependencias dinámicas contingentes y de suscripción (descritas más adelante en este 5 documento), una dependencia no contingente sin suscripción es una dependencia estática. El gráfico del productor de ejemplo de la figura 4A ilustra un gráfico del productor de dependencias estáticas.
Formas del gráfico del productor
Dado que un productor es al menos una instancia y un procedimiento asociado con esa instancia, un gráfico del productor es un gráfico que representa las instancias y los procedimientos asociados con las instancias -y por lo tanto, los gráficos del productor son por lo menos instancia y procedimiento céntrico. En las realizaciones de la invención en las que un productor es por lo menos una clase, instancia, y procedimiento, los gráficos del productor son al menos clase, instancia y procedimiento céntrico.
15 Se debe entender que un gráfico del productor puede tomar una variedad de formas diferentes (por ejemplo, una sola cadena de productores, un árbol, etc.). El gráfico del productor de ejemplo de la figura 5B es un árbol con un nodo de raíz del productor 1, desde el cual hay dos ramas -una para cada uno del productor 2 y el productor 3. Cuando el productor 3 es un nodo de hoja, el productor 2 tiene dos ramas que se extienden desde la misma -una a 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 del productor de ejemplo de la figura 5B se dice que es multinivel, con el nivel 1 incluyendo el productor del nodo de raíz 1, con el nivel 2 incluyendo el productor 2 y el productor 3, con 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
25 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 muestra un gráfico del productor en el que el conjunto actual de productores de interés incluyen un solo productor, las realizaciones de la invención que soportan más de un productor de interés actual descubrirían y construirían gráficos de productores para cada uno. Se debe entender que, cuando simultáneamente hay productores múltiples de interés, los gráficos de productores resultantes pueden ser independientes o pueden cruzarse. Cuando los gráficos de productores se cruzan, las realizaciones de la invención pueden implementarse en: 1) duplicar los productores para mantener separados los gráficos del productor, o 2) evitar la duplicación y mantener dicha intersección de los gráficos del productor. También debe entenderse que estos gráficos del productor que se 35 cruzan pueden incluir un gráfico del productor que es un subconjunto de otro gráfico del productor. Por ejemplo, si el productor 5 se incluyó con el productor 1 en el conjunto actual de los productores de interés, entonces habría un primer gráfico del productor con un nodo de raíz del productor 5 y un segundo gráfico del productor con un nodo de raíz del productor 1, donde el segundo gráfico del productor incluye el primer gráfico del productor. Si, por ejemplo, el productor 7B se incluyó con el productor 1 y el productor 5 en el conjunto actual de los productores de interés, habría un tercer gráfico del productor, separado del primer y segundo gráficos del productor, con un nodo de raíz del productor 7B en la figura 5B. Además, si la dependencia dinámica de productor 5 cambia desde el productor 7A al productor 7B (figura 5C), entonces el cambio se traduciría en que el tercer gráfico del productor se convierte en un subconjunto del segundo gráfico del productor restante, y el segundo gráfico del productor se convierte en un subconjunto del primer gráfico del productor. Tal como se ha indicado anteriormente, aunque las realizaciones de la
45 invención pueden almacenar y manipular el gráfico(s) del productor como una colección de gráficos, otras realizaciones de la invención almacenan y manipulan el gráfico(s) del productor como una colección de productores que están vinculados entre sí para formar el gráfico(s) (en oposición a una colección de gráficos) para facilitar la fusión y la escisión de los gráficos del productor. A modo de ejemplo y no de limitación, las realizaciones de la invención que almacenan y manipulan el gráfico(s) del productor como una colección de los productores se describen aquí.
Flujo de ejecución de ejemplo
La figura 6 es un diagrama de flujo de un flujo de ejecución lógica de un cliente de tiempo de ejecución y su relación
55 con un tiempo de ejecución con el soporte de programación orientado al gráfico del productor de acuerdo con una realización de la invención. En la figura 6, la línea divisoria de trazos 600 separa el flujo de ejecución lógica de un cliente de tiempo de ejecución 610 del tiempo de ejecución con el soporte de programación orientada al gráfico del productor 640.
El flujo de ejecución lógica del cliente de tiempo de ejecución 610 incluye los bloques 615, 620, 625, y 630, mientras que el tiempo de ejecución con el soporte orientado al gráfico del productor 640 incluye los bloques 645, 650, 660, y, opcionalmente, 655. Una línea sólida con flecha representa una relación causal directa desde el bloque 630 al bloque 660. En contraste, las líneas de trazos con flecha ilustran una relación causal desde los bloques 615 y 625 en el flujo de ejecución lógica del cliente del tiempo de ejecución 610 a los bloques 645 y 650 en el tiempo de ejecución 65 con el soporte orientado al gráfico del productor 640, respectivamente, dependiendo de la realización de la invención, esta relación causal puede ser directa o indirecta. Por ejemplo, la figura 6 ilustra una relación causal
opcional indirecta a través del uso de un registro de comandos 665 en un óvalo discontinuo en el tiempo de ejecución con lado del gráfico orientado al soporte del productor 640 de la línea de trazos 600. El registro de comandos 665 recoge los comandos que resultan de los bloques 615 y 625 del flujo de ejecución lógico del cliente de tiempo de ejecución 610, y el registro de comandos 655 que se consume, que responde al bloque 630, mediante
5 el procesamiento del bloque 660. Por lo tanto, el registro de comandos 665 permite el retraso de los comandos con el fin de recopilar los múltiples juntos y procesarlos por lotes con fines de optimización. Así, el registro de comandos 665 es similar al registro de anulación 396 de la figura 3B, y en realidad se incluye el registro de anulación 396 en algunas realizaciones de la invención.
10 En el bloque 615, el conjunto de uno o más productores de interés se determina como el conjunto actual de los productores de interés y el control pasa al bloque 620. En respuesta a la relación causal entre el bloque 615 y el bloque 645, el bloque 645 muestra que el conjunto actual de los productores de interés se instancia y que se hace un intento por descubrir, construir, y resolver (si las dependencias dinámicas son compatibles y una o más se descubren en el gráfico del productor) el gráfico(s) del productor para cada uno, incluyendo instancias de todas las
15 instancias y los productores de las mismas, según sea necesario, basándose en las declaraciones de dependencia de los productores en el cliente de tiempo de ejecución 610. Con referencia a las figuras 3A y 3B, el módulo de generación automatizada de gráficos del productor 340 y 365 se invocan, respectivamente.
En el bloque 620, se determina si hay alguna anulación de salida del productor. Si es así, el control pasa al bloque 20 625, de lo contrario, el control pasa al bloque 630.
En el bloque 625, una o más anulaciones de salida del productor son recibidas por un conjunto de uno o más productores y el control pasa al bloque 630. En respuesta a la relación causal entre el bloque 625 y el bloque 650, el bloque 650 muestra que el conjunto actual de los productores anulados son instanciados (si no están ya 25 instanciados en el bloque 645), sus salidas se modifican, y se realiza su seguimiento. Un productor anulado puede ya haberse instanciado, ya que ya fue descubierto para formar parte del gráfico(s) del productor en el bloque 645. Sin embargo, un productor anulado no puede ya ser descubierto en el bloque 645 debido a una dependencia dinámica sin resolver. Como tal, este productor anulado se instancia y se anula con la expectativa de que se pueda añadir al gráfico(s) del productor cuando se resuelven las dependencias dinámicas. También, tal como se ha 30 indicado anteriormente, el registro de anulación 396 de la figura 3B, si se aplica, existe entre el bloque 625 y el bloque 650, y forma parte del registro de comando 665. Además, el conjunto de los productores anulados se rastrea en algunas realizaciones de la invención que soportan la ejecución incremental. Aunque en las realizaciones de la invención que soportan el registro de anulación 396/el registro de comandos 665, el seguimiento es parte del registro, en realizaciones alternativas de la invención el seguimiento se realiza por separado en el bloque 650 con un
35 mecanismo diferente.
En el bloque 630, el módulo de ejecución del gráfico del productor se invoca y el control vuelve opcionalmente al bloque 615 y/o al bloque 625. En respuesta a la relación causal entre el bloque 630 y el bloque 660, el bloque 660 muestra que el gráfico(s) del productor ha seguido y los productores que requieran la ejecución se ejecutan 40 basándose en el seguimiento. Diversas técnicas se han discutido previamente para la ejecución de los productores del gráfico del productor y son aplicables aquí. Con referencia a las figuras 3A y 3B, el módulo de ejecución del gráfico del productor 345 y 370 se invocan, respectivamente. Además, en realizaciones de la invención en las que se lleva a cabo el registro de comandos 665, la relación causal incluye consume el registro de comandos 665 y la realización de los bloques de procesamiento 645 y 650 antes del bloque 660. Además, en realizaciones de la
45 invención que soportan la posibilidad de dependencias no resueltas, el control fluye desde el bloque 660 al bloque 655 cuando sea necesario.
En el bloque 655, se realiza un intento de resolver las dependencias no resueltas y descubrir y construir el resto del gráfico(s) de productor, incluyendo instanciar todas las instancias y los productores de las mismas. Desde el bloque
50 655, el control fluye de vuelta al bloque 660.
Formas de ejemplo de las declaraciones de dependencia de los productores
Las figuras 7A-F ilustra algunas formas de ejemplo para las declaraciones de dependencia de productores de
55 acuerdo con las realizaciones de la invención. Aunque las figuras 7A-F ilustran realizaciones que soportan dependencias de argumento, campo, y secuenciación, se debe entender que diferentes realizaciones pueden soportar sólo una o dos de las tres formas de dependencia. En las realizaciones de la invención mostradas en las figuras 7A-F, una declaración de dependencia del productor se compone de una declaración de dependencia del productor y el código de declaración de dependencia del productor opcionalmente explícito. Un acceso directo de la
60 dependencia no declarada del productor es uno cuyo código de declaración de dependencia explícita del productor se utiliza, mientras que un acceso directo de declaración de dependencia del productor es uno cuyo código de declaración dependencia no explícita del productor se utiliza (mejor dicho, el tiempo de ejecución no utiliza el código de declaración de dependencia del productor y/o lo implementa sobre la marcha sobre la base de la información en la declaración de dependencia del productor).
65 Diferentes realizaciones de la invención pueden utilizar diferentes sintaxis para declarar dependencias de los productores. Por ejemplo, diferentes realizaciones de la invención pueden incluir sintaxis diferentes para su uso en las declaraciones de dependencia de los productores que limitan fuertemente, limitan débilmente, y/o no limitan el tipo de dependencia del productor que puede ser creada. Una dependencia del productor fuertemente limitada es
5 aquella para la cual se utiliza una sintaxis en la declaración de dependencia del productor que limita sustancialmente el tipo de dependencia del productor que puede ser creado, una dependencia del productor débilmente limitada es aquella para la cual se utiliza una sintaxis en la declaración de dependencia del productor que es menos limitativa del tipo de dependencia del productor que puede ser creado, y una dependencia del productor sin restricciones es aquella para la cual se utiliza una sintaxis en la declaración de dependencia del productor que no limita el tipo de dependencia del productor que puede crearse.
A modo de ejemplo, y no de limitación, las realizaciones de la invención que se describen a continuación incluyen lo siguiente: 1) una sintaxis para una dependencia del productor fuertemente limitada para los argumentos (Dependencia de Argumentos = dependencia de argumentos declarada de manera descendente fuertemente 15 limitado [estático o dinámico, y si es dinámico, suscripción contingente y/o de absorción]), 2) una sintaxis para una dependencia del productor fuertemente limitadas para los campos (Dependencia del campo = dependencia de campo declarada muy limitada [estática o dinámica, y si es dinámica, suscripción contingente y/o de absorción]), 3) una sintaxis para una dependencia de productores muy limitada para las dependencias de la secuencia (Dependencia de la secuencia = dependencia de secuencia declarada muy limitada de manera descendente [estática o dinámica, y si es dinámica, suscripción contingente y/o adherente]), 4) una sintaxis para una dependencia declarada del productor débilmente limitada para argumento, campo, o secuencia de las dependencias (Dependencia ascendente = dependencia débilmente limitada declarada ascendente de campo, argumento, o secuencia [estática o dinámica, y si es dinámica, contingente]), y 5) una sintaxis para una dependencia del productor débilmente limitada (Dependencia débilmente limitada = o bien a) dependencia de secuencia declarada de manera 25 descendente [estática o dinámica, y si es dinámica, suscripción contingente y/o adherente], o b) dependencia declarada de manera ascendente [argumento, campo, o secuencia] [estática o dinámica, y si es dinámica, contingente]). Se debe entender que, si bien algunas realizaciones de la invención admiten una sintaxis para la declaración de dependencia del productor que distingue las dependencias de argumento declaradas de manera descendente, las dependencias de campo declaradas de manera descendente, las dependencias declaradas de manera ascendente (que pueden devolver las dependencias declaradas de manera ascendente de argumento, campo, o secuencia), y dependencias débilmente limitadas (que se puede devolver las dependencias declaradas de secuencia de manera descendente, las dependencias de argumento, campo, o secuencia de manera ascendente), realizaciones alternativas de la invención pueden adoptar una sintaxis diferente (por ejemplo, tienen una sintaxis que tiene todas las dependencias sin restricciones con la determinación de la dependencia los productores que pueden
35 devolver cualquier dependencia soportada (dependencias de manera descendente y ascendente declaradas de argumento, campo, y secuencia), que tienen una sintaxis que distingue todas las dependencias soportadas, que tienen una sintaxis que distingue de manera descendente y ascendente las dependencias declaradas de argumento y de campo, y que distingue una dependencia débilmente restringida que sólo puede devolver las dependencias de secuencia declaradas de manera ascendente y descendente, una sintaxis que distingue las dependencias declaradas de manera descendente de argumento y de campo, y que distingue las dependencias ascendentes declaradas que sólo pueden devolver de manera ascendente las dependencias declaradas de secuencia, una sintaxis que distingue las dependencias declaradas de manera descendente de argumento, campo, y secuencia (suscripciones adherentes y dependencias declaradas de manera ascendente no están soportadas), etc.).
45 Debe entenderse que la sintaxis de la sentencia la declaración de dependencia del productor no equivale necesariamente a la dependencia del productor (por ejemplo, el enlace), creado en el gráfico del productor (por ejemplo, ArgumentDependency crea una dependencia del argumento, pero una UpwardDependency puede crear una dependencia del argumento, campo, o secuencia). Como tal, en su caso para la comprensión, un espacio entre un calificador (por ejemplo, argumento, campo, o secuencia) y la palabra "dependencia" se usa para referirse a la dependencia creada por el tiempo de ejecución, mientras que la falta de un espacio se utiliza para referirse a la sintaxis.
La figura 7A ilustra el pseudo código de una declaración de dependencia del productor para un procedimiento que utiliza dependencias declaradas de acceso directo de acuerdo con una realización de la invención, mientras que la 55 figura 7B es un diagrama de bloques de productores ejemplares de acuerdo con una realización de la invención. La Figura 7A muestra: 1) una declaración de dependencia del productor 705 que incluye ArgumentDependencies 1-N, FieldDependencies 1-H, SequencingDependencies 1-L, UpwardDependencies 1-P, y WeaklyConstrainedDependencies 1-Q, y 2) un procedimiento alfa 710 que tiene argumentos 1-N de la declaración de dependencia del productor 705. En una realización de la invención, los argumentos de una declaración de dependencia del productor están contados para proporcionar un ID de argumento para cada uno con propósitos de seguimiento la figura 7B muestra un productor 720 que tiene las siguientes dependencias de los descendientes: 1) productor 725 para ID argumento 1, 2) productor 730 para ID del argumento N, 3) productores 740-745 para FieldDependencies 1-M, 4) productores 746-747 para SequencingDependencies 1-L, y 5) productor 748-749 para UpwardDependencies 1-P (nota, WeaklyConstrainedDependencies 1..Q no se muestran, pero se describirá en 65 mayor detalle con referencia a la figura 7G). Por lo tanto, los argumentos de la declaración de dependencia del productor 705 corresponden a los argumentos del procedimiento alfa 710, y a las IDs de los argumentos en la
declaración de dependencia del productor 705 se les realiza un seguimiento con respecto a los descendientes de los productores que identifican.
La Figura 7C ilustra el pseudo código de una declaración de dependencia del productor de un procedimiento que
5 utiliza una declaración de dependencia sin acceso directo, e ilustra un diagrama de bloques de los productores ejemplares de acuerdo con una realización de la invención. La figura 7C muestra la declaración de dependencia del productor 705 y el procedimiento alfa 710 de la figura 7A, así como los productores 720 y 725 de la figura 7B. Además, la figura 7C incluye código de declaración de dependencia del productor 715 asociado con ArgumentDependency 1. Durante el tiempo de ejecución, el tiempo de ejecución tiene acceso y ejecuta el código de declaración de dependencia del productor 715 que responde a ArgumentDependency 1 de la declaración de dependencia del productor 705. La ejecución del código declaración de dependencia del productor 715 devuelve el productor 725 como la dependencia del productor de ArgumentDependency 1. Así, la figura 7C ilustra realizaciones de la invención en las que el código de declaración de dependencia del productor 715 puede ser parte de un procedimiento (distinto del procedimiento alfa 710), pero no es parte de un productor.
15 La figura 7D ilustra pseudo código de una declaración de dependencia del productor de un procedimiento que utiliza un no acceso directo de dependencia declarada de acuerdo con una realización de la invención, mientras que 7E figura es un diagrama de bloques de productores ejemplares de acuerdo con una realización de la invención. La figura 7D muestra la declaración de dependencia del productor 705 y el procedimiento 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) una declaración de dependencia del productor 750, y 2) un procedimiento beta 755 incluyendo el código de declaración de dependencia del productor 760. La Figura 7D también muestra que la dependencia del argumento 1 de la declaración de dependencia del productor 705 identifica un productor (mostrado en la figura 7E como productor 765) basado en el procedimiento beta 755 que devolverá la dependencia para el argumento de dependencia 1. Durante el
25 tiempo de ejecución, el tiempo de ejecución, que responde a la dependencia del argumento 1 de una declaración de dependencia del productor 705, ejecuta el productor 765 para regresar de identificación que la dependencia del productor del argumento de dependencia 1 es el productor 725. Como tal, el productor 765 es referido como un productor de determinación de dependencia (su salida es una dependencia del productor -y por lo tanto, se devuelve utilizando una clase/ejemplo que es controlado para un tratamiento especial (manipulación de la gráfica(s) del productor) por el tiempo de ejecución con el gráfico del productor orientado al soporte de programación), mientras que el productor 725 es referido como un productor estándar (su salida, en su caso, no está directamente procesada por el tiempo de ejecución para manipular un gráfico del productor, pero su salida, en su caso, puede ser consumido por un productor ascendente (ya sea un productor de la determinación de dependencia o de otro productor estándar) y/o según lo disponga la salida de la gráfica del productor (si el productor estándar es un
35 productor de interés, y por lo tanto un nodo raíz).
Así, las figuras 7D-E ilustran realizaciones de la invención en la que las que código de declaración de dependencia del productor 715 es parte de otro productor, referido como un productor de determinación de dependencia. Mientras que en las figuras 7D-E el código fuente orientado a objetos incluye el código de declaración de dependencia del productor explícito en los procedimientos a partir de los cuales la determinación de los productores de dependencia se crean en el tiempo de ejecución mediante el tiempo de ejecución de las dependencias declaradas de no acceso directo, realizaciones alternativas de la invención, adicionalmente o en lugar de aplicar el tiempo de ejecución para incluir el código de declaración productor de dependencia genérico que invoca cuando uno o más productores de determinación de dependencia genéricos sobre la marcha para dependencias declaradas de acceso directo.
45 También, mientras que las figuras 7C-E ilustran con referencia a ArgumentDependencies, las técnicas ilustradas son aplicables a los otros tipos de dependencias declaradas de manera descendente. Además, las figuras 7F-G ilustran el uso de un productor de determinación de dependencia para una UpwardDependency y una WeaklyConstrainedDependency.
La figura 7F es un diagrama de bloques de una dependencia de ejemplo mediante el uso de una UpwardDependency con un productor de determinación de dependencia de acuerdo con una realización de la invención. La Figura 7F muestra el productor 720 que tiene dependencia de productor de secuenciación a un productor de determinación de la dependencia 772. El productor de la determinación de la dependencia puede devolver un argumento, campo, o dependencia de la secuenciación declarado de manera ascendente de no
55 suscripción, del productor ascendiente 748 en el productor 720. Además, dicho productor de determinación de la dependencia puede aplicar una dependencia dinámico (por ejemplo, una dependencia contingente que selecciona entre las anteriores dependiendo de los valores de datos, incluyendo entre diferentes IDs de argumento, como se describe aquí más adelante). Si bien algunas realizaciones de la invención soportan todas estas posibilidades, realizaciones alternativas de la invención soportan sólo un subconjunto (por ejemplo, sólo dependencias de secuenciación declaradas de manera ascendente de no suscripción).
La figura 7G es un diagrama de bloques de posibles dependencias de ejemplo mediante el uso de un WeaklyConstrainedDependency con un productor de determinación de dependencia de acuerdo con una realización de la invención. La figura 7G muestra el productor 720 que tiene un productor de dependencia secuenciador a un 65 productor de determinación de dependencia 775. En algunas realizaciones de la invención, el productor de determinación de dependencia puede devolver cualquiera de los siguientes: 1) una dependencia de secuenciación
declarada de manera descendente de no suscripción en un productor descendiente 780, 2) una dependencia de secuenciado, campo o argumento declarado en sentido ascendente de no suscripción un productor padre 785 en el productor 720, y 3) una suscripción adherente (descrita más adelante en este documento). Además, dicho productor de determinación de dependencia puede aplicar una dependencia dinámica (por ejemplo, una dependencia
5 contingente que selecciona entre los anteriores dependiendo de los valores de datos, incluyendo entre IDs de argumento diferente, como se describe aquí más adelante). Si bien algunas realizaciones de la invención soportan todas estas posibilidades, realizaciones alternativas de la invención soportan sólo un subconjunto (por ejemplo, sólo dependencias de secuenciación declarada en sentido ascendente de no suscripción).
Como se indicó anteriormente, las dependencias de secuenciación pueden ser usadas para una variedad de propósitos, incluyendo asegurar el orden de ejecución entre los productores que modifican los datos de una manera en que el tiempo de ejecución no es consciente y los productores que consumen esos datos (un productor descendiente puede escribir sus salidas de una manera que requiere el procedimiento del productor padre para incluir código para acceder a esa salida (por ejemplo, un procedimiento que impacta el medio ambiente al afectar a
15 una salida que no es la salida del productor regular y, como tal, que no es detectada por el tiempo de ejecución dicho procedimiento que establece una variable global, que define un campo en una instancia que no es la salida del productor, que afecta a un origen de datos externo, etc.)), etc.
Diferentes formas de realización pueden soportar una o más formas para la declaración de las dependencias del productor con respecto a los productores de bienes. En concreto, en algunas realizaciones de la invención, los productores que leen un campo deben ser dependientes del productor de propiedad obtener, mientras que el productor de propiedad obtener debería depender de cualquiera de los productores que establecen el campo en el que es responsable el procedimiento de propiedad obtener. Se proporciona una técnica de manipulación de esta situación que puede ser utilizada en las realizaciones de la invención que soportan dependencias de productores de 25 secuenciación, para un procedimiento de propiedad obtener, una declaración de dependencia del productor que crea dependencias de productores de secuencia en cada procedimiento que establece el campo del cual el procedimiento de propiedad obtener es responsable (por ejemplo, con respecto a la figura 7G, donde el productor 780 es un productor que establece un campo y el productor 720 es el productor de propiedad obtener responsable de ese campo, el productor de determinación de dependencia 775 se escribiría para devolver una dependencia de secuenciación declarada de manera descendente del productor 720 en el productor 780). Una segunda técnica para manejar esta situación que puede ser utilizada en las realizaciones de la invención que soportan tanto las dependencias de productor de secuenciado y las dependencias de productor declaradas de manera ascendente es incluir en la declaración/código de la dependencia del productor para cualquier procedimiento que establece un campo, una la dependencia del productor de secuenciado declarada de manera ascendente (por ejemplo, usando un
35 UpwardDependency o WeaklyConstrainedDependency) en el procedimiento obtener responsable de ese campo (por ejemplo, con respecto a la figura 7G, donde el productor 720 es un productor que establece un campo y el productor 785 es el productor de propiedad get responsable para ese campo, el productor de determinación de la dependencia 775 se escribiría para devolver una dependencia de secuenciación declarada de manera ascendente del productor padre 785 en el productor 720). Esta segunda técnica permite que el programador del procedimiento que establece el campo para ser responsable de proporcionar una dependencia del productor al procedimiento get apropiado, en lugar de requerir que el programador vaya al procedimiento get y modifica su declaración/código de declaración de dependencia del productor.
Cuando se utiliza dependencias de secuenciación, cuando un productor dado se basa en una variable dada, esa
45 variable no debe ser modificada por más de uno de los productores descendientes de productor en una ejecución dada de la gráfica(s) productor (Hay que señalar que a través de las dependencias contingentes (descritas más adelante en este documento), los diferentes productores descendientes pueden modificar esa variable durante diferentes ejecuciones de la gráfica(s) del productor actual). Por ejemplo, un productor de propiedad get debería depender sólo de un productor de otro tipo que establece el presentado para el cual el productor de propiedad get es responsable en una ejecución dada de la gráfica(s) del productor actual.
Se debe entender que diferentes realizaciones de la invención pueden aplicar una o más de las realizaciones de la invención mostrada en las figuras 7A-F. Por ejemplo, una forma de realización de la invención soporta dependencias declaradas de acceso directo y sin acceso directo, tanto utilizando los productores de determinación
55 de dependencia, en concreto, en esta realización de la invención: 1) el código fuente orientado a objetos incluye código de declaración de dependencia de productor explícito en los procedimientos a partir de los que los cuales productores de determinación de dependencia son de una instancia en el tiempo de ejecución por el tiempo de ejecución por dependencias declaradas de no acceso directo, 2) el tiempo de ejecución incluye el código de declaración de dependencia de productor genérico que lo invoca como uno o más productores de determinación de dependencia genéricos sobre la marcha para el acceso directo declarado, dependencias contingentes (descritas más adelante en este documento), y 3) el tiempo de ejecución incluye el soporte para enlazar directamente acceso directo declarado, dependencias de productores no contingentes (descritas más adelante en este documento).
Como otro ejemplo, una forma de realización de la invención soporta dependencias de productores declaradas de no
65 acceso directo y de acceso directo que utilizan 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 código de declaración de dependencia de productor explícito en los procedimientos a partir de los que el productor de determinación de la dependencia se instancia en el tiempo de ejecución por el tiempo de ejecución para las dependencias declaradas de no acceso directo, y 2) el tiempo de ejecución incluye el código de determinación de dependencia genérico que lo invoca como uno o más productores de determinación de dependencia genéricos sobre la marcha para
5 dependencias de declaración de acceso directo (independientemente del tipo). Esta última realización permite el tratamiento coherente de las dependencias de productores, y por lo tanto, simplifica el tiempo de ejecución.
Además, mientras que en una realización de la invención, la declaración de dependencia del productor de un procedimiento está situada justo por encima de dicho procedimiento en el código fuente orientado a objetos, en realizaciones alternativas de la invención se encuentra en otro lugar (por ejemplo, las declaraciones de dependencia de productores para todos los procedimientos para una clase se agrupan juntos dentro de la clase, las declaraciones de dependencia de productores de todos los procedimientos en todas las clases se agrupan en una tabla de datos separada, etc.) Además, mientras que en una realización de la invención del código de declaración de dependencia del productor está separada de las declaraciones de dependencia de productores, en realizaciones alternativas de la
15 invención se combinan (por ejemplo, el código de declaración de dependencia del productor se encuentra dentro de los paréntesis de la declaración de dependencia del productor, el código de declaración de dependencia del productor se coloca directamente por debajo de la declaración de dependencia de productor y es tratado por el tiempo de ejecución como una sola unidad, etc.)
Las Figuras 7H-I ilustran la distinción entre subgráficos diferentes que pueden existir en un gráfico de productores debido a los productores de determinación de dependencia. La Figura 7H ilustra gráficas de productores de ejemplo de los productores estándar de acuerdo con una realización de la invención. Específicamente, la figura 7H muestra un gráfico productor con nodo raíz S 1, un gráfico productor con nodo raíz S5, y un gráfico productor con nodo raíz S
11. El productor estándar S 1 tiene como productores estándar descendientes S2, S3 y S4; productores estándar S2
25 y S3 tienen como productores estándar descendientes S7 y S8; el productor estándar S5 tiene como productores estándar descendientes S4 y S6; y el productor estándar S11 tiene como productores estándar descendientes S6 y S10. Los gráficos de productores de ejemplo de la figura 7H se pueden descubrir, construir, y girar con cualquier número de dependencias de productores y los productores de determinación de dependencia. La Figura 7I ilustra un ejemplo de dependencias de productores y los productores de determinación de dependencia para descubrir, resolver, y construir el gráfico del productor de la figura 7H. En concreto, la figura 7I muestra los gráficos de la figura 7H como subgráficos de un conjunto más amplio de gráficos de los productores. En otras palabras, los gráficos de productores de la figura 7I incluyen los gráficos de la figura 7H (en adelante, los "subgráficos objetivo" y se ilustra con líneas de flecha sólidas y óvalos sólidos) y gráficos que ayudan en el descubrimiento, resolución, y creación de los subgráficos objetivo (referidos como "subgráficos de decisión e ilustrados utilizando líneas de flecha de trazos y
35 óvalos de trazos). Los subgráficos de decisiones en la figura 7H incluyen los productores de determinación de dependencia (DDPs) 1-11 y los productores estándar S9-10. En la figura 7H, S1 se presenta como dependiente de DDPs 1-3, que, respectivamente, devuelven dependencias de productores declaradas de manera descendente de S1 S2, S3 y S4, S4 se muestra como dependiente de DDP4, que devuelve una dependencia del productor declarada de manera ascendente S5 en S4; S5 se muestra como dependiente de DDP5, que devuelve una dependencia de productor declarada de manera descendente S5 en S6; S3 se muestra como dependiente de DDP6, que a su vez depende de DDP8, que devuelve una dependencia del productor declarada de manera descendente de DDP6 en S9 y S10, lo que hace que DDP6 devuelva una dependencia declarada de manera descendente S3 en S7; S3 se muestra como dependiente de DDP7, que devuelve una dependencia de productor declarada de manera descendente S3 en S8, S8 se muestra como dependiente de DDP9, que devuelve una suscripción adherente para la
45 que S6 es un productor de activación y S11 es el padre creado (por lo tanto, la dependencia de productor de S11 en S6); S2 se muestra como dependiente de DDP10, que devuelve una colección de dependencia de productor declarado de manera descendente S2 en S7 y S8, y S11 se muestra como dependiente de DDP 11, que devuelve una dependencia del productor declarada de manera descendente S11 en S10. Se debe entender que un productor estándar puede ser tanto parte de un subgráfico objetivo y un subgráfico de decisión (por ejemplo, véase S10). Vale la pena señalar que los subgráficos objetivos son los datos que circulan en el sentido de que los datos fluyen de un productor a otro productor estándar de la gráfica.
Programación y marco de ejecución de ejemplo
55 La figura 8A es un diagrama de bloques que ilustra un primer marco de ejemplo en el que las aplicaciones se proporcionan a los usuarios finales de acuerdo con una realización de la invención. El marco que se muestra en la figura 8A incluye tres divisiones básicas. La primera división incluye la creación del tiempo de ejecución con el soporte de la programación orientada a gráfico del productor 810. Esta primera división es llevada a cabo por los programadores con conocimientos de programación muy avanzados. Cuando se trabaja en esta división, a los programadores se les conoce como los programadores de tiempo de ejecución. Cuando se crea un tiempo de ejecución con soporte de programación orientado a gráfico del productor, los programadores de tiempo de ejecución incluyen soporte para gráficos de producto, así como el soporte para la ejecución de los distintos tipos de comandos que se utilizan en el código de la transformación, el código de instancias, y el código de preparación de datos.
65 La segunda división incluye la creación de código fuente de aplicaciones orientado a objetos 820 para ser ejecutado por el tiempo de ejecución. El código fuente de aplicación orientado a objetos 820 incluye dos divisiones básicas: 1) las definiciones de clase que incluyen la lógica de negocio expresada en procedimientos con declaraciones de dependencia de productores 822 (este puede incluir opcionalmente otras funcionalidades, tales como una interfaz gráfica de usuario -en cuyo caso, la interfaz gráfica de usuario se escribe utilizando productores y declaraciones de dependencia de productores), y 2) definiciones de clase que incluyen el código de cliente expresado en los
5 procedimientos 824, incluyendo el código de instancias (clase, instancias, y productor(es) de interés, para provocar la generación de la gráfica(s) de productores) 824A, código de preparación de datos 824B (por ejemplo, los comandos del sistema, tales como comandos de ajuste que desencadenan la principal de las salidas de producción), comandos de ejecución global 824C para provocar la ejecución de la gráfica(s) de productor (por ejemplo, comandos ejecutar y obtener), y cualquier interfaz gráfica de usuario necesaria 824d (no incluidas en 822). Las declaraciones de dependencia de productores se utilizan para definir los lazos entre los productores durante la definición de las clases que incluyen la lógica de negocio, antes que las instancias posteriores de esas clases se crean. El código fuente orientado a objetos 820 es de clase hard codificado, instancia y los procedimientos que se compilan y ejecutan.
15 Mientras que en una realización de la invención se aplica un comando de ejecución global, la ejecución del cual hace que el intento de ejecución de todos los gráfico(s) de productor actualmente en la estructura del gráfico(s) del productor 380, realizaciones alternativas de la invención o, alternativamente, también aplican un comandos de ejecución específico de gráfico que requiere la identificación de un gráfico dado de la gráfica(s) de productor actual que se va a ejecutar. Además, el comando de ejecución global puede ser explícito (por ejemplo, ajuste, ajuste, ajuste, ejecutar, obtener, obtener) o implícito en función de la implementación del tiempo de ejecución. Por ejemplo, un comando de ejecución global implícito podría ser: 1) provocado por el primer comando obtener en un productor de interés (por ejemplo, ajuste, ajuste, ajuste, obtener (ejecución implícita), obtener), 2) provocado por cada manipulación de datos (ajuste (ejecución implícita), ajuste (ejecución implícita), ajuste (ejecución implícita), obtener, obtener), etc.
25 La segunda división se realiza de nuevo por los programadores con conocimientos de programación avanzados, así como la comprensión de los objetivos de negocio de la aplicación. Cuando se trabaja en esta división, los programadores son conocidos 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 por lo tanto, también se les conoce como diseñadores de aplicaciones.
La tercera división incluye el uso de programas de aplicación que se ejecutan durante el tiempo de ejecución. La tercera división es llevada a cabo por los usuarios finales que no necesitan tener conocimientos de programación. El programa de aplicación puede ser distribuido en una variedad de formas (por ejemplo, como el código fuente; una
35 transformación de código fuente, tales como código de bytes; como binario, etc.) Además, el programa de aplicación puede ser distribuido para su utilización independiente 830 (en cuyo caso, el programa de aplicación completo (y el tiempo de ejecución si no está ya presente) se proporciona a un sistema informático) y/o uso del cliente/servidor. En una realización de la invención, una distribución de cliente/servidor incluye la difusión de las definiciones de clase que incluyen la lógica de negocio expresada en procedimientos con declaraciones de dependencia de productores 822 (y el tiempo de ejecución si no está ya presente) para el uso del servidor 832 y las definiciones de clase que incluyen el código de cliente expresado en los procedimientos 824 (y el tiempo de ejecución si no está ya presente) para uso del cliente 834, donde el uso del cliente 834 en un sistema informático hace que la comunicación con el uso del servidor 832 en un sistema servidor.
45 La figura 8A muestra también un módulo de interfaz de usuario gráfica de diseño de salida de productor interactivo configurable opcional 840 que se proporciona para el uso independiente 830 y el uso del cliente 834. El código fuente orientado a objetos 820 sería dirigido por el tiempo de ejecución para generar el gráfico(s) de productor, y módulo de interfaz de usuario gráfica de diseño de salida de productor interactivo configurable 840 permite mostrar gráficamente las salidas de e interactuar con los gráficos del productor. En concreto, el módulo de interfaz de usuario gráfica de diseño de salida de productor interactivo configurable 840 incluye: 1) una configuración y el módulo de interfaz de usuario gráfico de asignado 844 para permitir la configuración de la diseño y asignado de las salidas de productor seleccionadas (por ejemplo, las áreas de la pantalla a ser utilizadas, cómo se van a mostrar los datos, etc.), y 2) una representación y módulo de interfaz de usuario gráfica de la interacción 846 para hacer la disposición configurada y para permitir la predominancia de salidas de productores (que resulta en la actualización
55 de los gráficos de productores a través un comando de ejecución global). Se debe entender que el módulo de interfaz de usuario gráfica de diseño de salida de productor interactivo configurable 840 puede o no puede ser creado por la misma entidad que escribe el tiempo de ejecución 810.
La figura 8B es un diagrama de bloques que ilustra un segundo ejemplo de marco en el que las aplicaciones se proporcionan a los usuarios finales de acuerdo con una realización de la invención. La Figura 8B es idéntica a la figura 8A, con las siguientes excepciones: 1) el uso independiente 830 no está presente, 2) el código fuente orientado al objeto 820 se proporciona para el uso del servidor 832, mientras que el código de cliente 824 no está previsto para uso del cliente 834, 3) el módulo de interfaz de usuario gráfica de diseño de salida de productor interactivo configurable 840 se proporciona para el uso del servidor 832 y no el uso del cliente 834, y 4) se 65 proporciona una interfaz de cliente de diseño de salida de productor de interactivo configurable 885 para el uso del cliente 834. La interfaz de cliente de diseño de salida de productor de interactivo configurable 885 se utiliza para
conectar con el módulo de interfaz de usuario gráfica de diseño de salida de productor interactivo configurable 840.
Independientemente del marco utilizado, en una realización de la invención, el marco de programación orientado al gráfico del productor ofrece la posibilidad de interfaz con los programas no escritos con declaraciones de 5 dependencia de productores. Esta capacidad para interactuar con los programas que no estén escritos con las declaraciones de la dependencia de productores incluye: 1) una parte que llama (por ejemplo, una interfaz gráfica de usuario no escrita de acuerdo a la programación orientada a gráfico de productor), y 2) una parte llamada (tal como una fuente de datos externa no escrita de acuerdo a la programación orientada a gráfico de productor). La parte que llama puede, a través de código de cliente, emitir comandos de programación orientados a productores de gráficos. 10 La parte llamada se implementa como parte de los productores que envuelven la parte llamada (referidos como "productores envueltos"). Ejecutar la parte llamada (tal como la lectura de los datos desde una fuente de datos o suscribirse a los cambios de datos en una fuente de datos externa) puede a su vez disparar modificaciones de instancia. Estos cambios pueden ocurrir llamando a los procedimientos establecidos de propiedad en el código de los productores envueltos. Los productores de propiedad obtener (captadores) son obligados a tener dependencias 15 en estos productores envueltos, con el fin de asegurarse de que las modificaciones de instancia provocadas por los cambios que ocurren en una fuente de datos externa son debidamente propagadas a través de la gráfica de productor. Como se describió anteriormente, las diferentes realizaciones pueden soportar una o más formas para la declaración de las dependencias de productores con respecto a los productores de propiedad. Por ejemplo, en algunas realizaciones de la invención que soportan dependencias de productores de secuenciación, puede ser 20 utilizadas SequencingDependencies para declarar dependencias de productores de secuenciación declaradas de manera descendente de no suscripción en los productores envueltos. Como otro ejemplo, en algunas realizaciones de la invención que soportan dependencias de productores de secuenciación y dependencias de productores declaradas de manera ascendente de no suscripción, UpwardDependencies y/o WeaklyConstrainedDependencies pueden ser colocadas en la declaración de dependencia del productor de los productores envueltos para crear
25 dependencias de productores de secuenciación declaradas de manera ascendente de no suscripción para los productores de propiedad.
Las Figuras 8C-F ilustran imágenes de ejemplo y el uso del módulo de interfaz de usuario gráfico de diseño de salida del productor interactivo configurable 840 de acuerdo con una realización de la invención. Si bien las 30 realizaciones de la invención se describirán con referencia al módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 proporcionado para la configuración, la asignación, y la interacción con las salidas seleccionadas de la gráfica(s) de productores actual en la forma de una hoja de cálculo, realizaciones alternativas de la invención pueden ser implementadas para proporcionar soporte adicional o alternativamente para otra forma. Además, aunque formas de ejemplo de realización de la configuración, la asignación, y la interacción en
35 la forma de una hoja de cálculo se describe de acuerdo con algunas realizaciones, otras realizaciones de la invención pueden realizar estas operaciones de otra manera, con interfaz diferente, 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 barra/pie/línea, tablas dinámicas, guardar los diseños, cargar diseños, etc.)
40 Las Figuras 8C-D ilustran imágenes y el uso ejemplares de la selección de celdas libres de acuerdo con una realización de la invención, mientras que las figuras 8E-F ilustran imágenes y el uso ejemplares de creación de la tabla de acuerdo con una realización de la invención. Cada una de las figuras 8C-F incluyen una barra de menú 850 a lo largo de la parte superior de la pantalla, una lista de las clases (con sus procedimientos de propiedad obtener)
45 852 de los productores en el gráfico del productor actual y sus salidas sobre el lado izquierdo de la pantalla, y un visor de configuración y la asignación 854 llenando el resto de la pantalla con un diseño a modo de hoja de cálculo. Además, las figuras 8C-F también muestran la lista siguiente de ejemplos de clases con sus procedimientos de propiedad obtener en la lista 852: 1) la clase PERSONA, 2) los procedimientos de propiedad obtener de la persona de la clase, incluyendo NOMBRE (por ejemplo, cadena) y APELLIDO (por ejemplo, cadena), GÉNERO (por ejemplo,
50 cadena), DIRECCIÓN PERSONAL (instancia de la clase DIRECCIÓN), DIRECCIÓN PROFESIONAL (instancia de la clase DIRECCIÓN), FECHA DE NACIMIENTO (por ejemplo, fecha) y EDAD (por ejemplo, entero), 3) la clase DIRECCIÓN, y 4) los procedimientos de propiedad obtener de la clase DIRECCIÓN incluyendo CIUDAD (por ejemplo, cadena), ESTADO (por ejemplo, cadena), CÓDIGO POSTAL (por ejemplo, cadena). Por lo tanto, la gráficade productor actual incluye a los productores de las clases PERSONA y DIRECCIÓN, así como los productores
55 cuyas salidas son de las clases PERSONA y DIRECCIÓN. También es destacable que el procedimiento de propiedad obtener EDAD calcula una edad basada en la salida del procedimiento de propiedad obtener FECHA DE NACIMIENTO, como tal, un productor de una instancia del procedimiento de la propiedad obtener EDAD dependerá de un productor de una instancia del procedimiento de la propiedad obtener FECHA DE NACIMIENTO.
60 Las Figuras 8C-D muestran el siguiente texto libre introducido en las celdas consecutivas de la primera columna del espectador: CLIENTE, NOMBRE, APELLIDO, FECHA DE NACIMIENTO, y EDAD, mientras que las figuras 8E-F muestran lo siguiente: 1) texto libre introducido en la primera fila del visor –LISTA DE CLIENTES, y 2) texto libre introducido en las celdas consecutivas de la segunda fila del visor NOMBRE, APELLIDO, FECHA DE NACIMIENTO y EDAD.
La Figura 8C ilustra una pantalla y el uso de ejemplo de selección libre de celdas con el módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención. La Figura 8C muestra un conjunto de mapeos 856 de la clase PERSONA y una selección de los procedimientos de la propiedad obtener de la clase PERSONA a las distintas celdas del visor. En concreto, la clase 5 PERSONA se asigna a la celda a la derecha del texto libre CLIENTE. Como parte de esta acción, algunas realizaciones de la invención indicará al usuario que seleccione uno de una serie de filtros soportados (mostrar como la selección de filtro 858) (por ejemplo, abrir lista desplegable, flechas de desplazamiento del formulario, etc.) Estos filtros permiten la selección de una o más claves de instancia de los productores de la clase seleccionada, o una o más claves de instancia de los productores cuya clase de salida es la clase seleccionada. Si bien algunas realizaciones de la invención soportan una serie de filtros, otras realizaciones de la invención predeterminan a uno (y permite al usuario elegir si selecciona uno diferente) o soportar sólo uno y no necesita realizar la selección del filtro
858. Las asignaciones 856 también muestran que los procedimientos de la propiedad obtener NOMBRE, APELLIDO, FECHA DE NACIMIENTO, y EDAD de la clase PERSONA son, respectivamente, asignadas a las celdas adyacentes a las celdas con texto libre correspondiente. Tal asignación se puede realizar con cualquier número de
15 técnicas bien conocidas, incluyendo arrastrar y soltar, al escribir en un campo GUI, etc.
La Figura 8D ilustra otra pantalla y el uso de ejemplo de selección libre de celdas con el módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención. La Figura 8D muestra que la celda a la que se ha asignado la clase PERSONA para permitir por ejemplo la selección 854. En concreto, basado en el filtro que se utiliza para esta celda, el usuario tiene la oportunidad de seleccionar una instancia de la clase PERSONA a partir de una lista que incluye la clave(s) de instancia de los productores de la clase PERSONA, y las claves de instancia de los productores que producen la clase PERSONA. La selección de una instancia de la clase PERSONA (o la existencia de una sola instancia) da como resultado de la población automática de las celdas, a las que los procedimientos de propiedad obtener de la clase PERSONA fueron
25 asignados, con las salidas de los procedimientos de propiedad obtener correspondientes de esa instancia. Este poblamiento de la tabla sobre la base de las instancias de la clase PERSONA es etiquetada 858. En el ejemplo de la figura 8D, las celdas en las que los procedimientos de propiedad obtener NOMBRE, APELLIDO, FECHA DE NACIMIENTO, y EDAD de la clase PERSONA fueron asignados, respectivamente, que se puebla con JOHN, SMITH, 7/20/1990, y 16.
La Figura 8D también muestra que las celdas del visor a las que los procedimientos de propiedad obtener se han asignado pueden ser anuladas. A modo de ejemplo, la figura 8D muestra que si la celda a la que se asigna EL procedimiento de propiedad obtener FECHA DE NACIMIENTO se reemplaza, a continuación, causará que el predominio de la salida del productor, cuya salida está actualmente poblando dicha celda, la invocación de un
35 comando de ejecución global (que se traduciría en una reejecución del productor, cuya salida está actualmente poblando la celda a la que se asigna el procedimiento de la propiedad obtener EDAD), y cualquier actualización necesaria de la pantalla.
La Figura 8E muestra un de ejemplo de pantalla y el uso de creación de la tabla con el módulo de interfaz de usuario gráfica de disposición de salida del productor interactivo configurable 840 de acuerdo con una realización de la invención. La Figura 8E muestra una zona y la operación orientación de la selección 864 se realiza para identificar una tabla de tres filas verticales directamente en las celdas con el texto libre NOMBRE, APELLIDO, FECHA DE NACIMIENTO y EDAD (ilustradas con una línea gruesa discontinua en torno a estas celdas). Diferentes formas de realización de la invención pueden soportar que el usuario realice esta operación de muchas maneras, entre ellas: 1) 45 selección de una zona con un dispositivo de entrada como un ratón, y 2) selección entre una tabla vertical, horizontal
o dinámica con una interfaz como un menú emergente – asumiendo que múltiples orientaciones son soportadas). La Figura 8E también muestra un conjunto de asignaciones 866 de procedimientos de propiedad obtener seleccionados de la clase PERSONA a celdas diferentes del visor. En concreto, las asignaciones de 866 muestran que los procedimientos de propiedad obtener NOMBRE, APELLIDO, FECHA DE NACIMIENTO, y EDAD de la clase PERSONA son, respectivamente, asignados a las celdas directamente debajo de las celdas con texto libre correspondiente.
La figura 8F ilustra otra pantalla y uso de ejemplo de creación de la tabla con el módulo de interfaz de usuario gráfico de diseño de la salida del productor interactivo configurable 840 de acuerdo con una realización de la invención. Las
55 asignaciones 866 resulta en la población automática de las columnas de la tabla, a las que los procedimientos de propiedad obtener de la clase PERSONA fueron asignados, con las salidas de los procedimientos de propiedad obtener correspondientes de las instancias de esa clase Este poblamiento de la tabla sobre la base de las instancias de la clase PERSONA es etiquetada 868. En el ejemplo de la figura 8D, las columnas a las que los procedimientos de propiedad obtener NOMBRE, APELLIDO, FECHA DE NACIMIENTO, y EDAD de la clase PERSONA fueron asignados se rellenan con las siguientes filas de datos: 1) STEVE, COLLINS, 7/20/1990, y 16, 2) JENNIFER, ADAMS, 7/20/1990, y 16, y 3) JOHN, SMITH, 7/20/1985, y 21.
Como en la figura 8D, la figura 8F muestra que las celdas del visor a las que los procedimientos de propiedad obtener han sido asignados pueden ser anulados. A modo de ejemplo, la figura 8F muestra que si la celda de la 65 segunda fila de la columna a la que se asigna el procedimiento de propiedad obtener FECHA DE NACIMIENTO se reemplaza, a continuación, hará que el predominio de la salida del productor, cuya salida está actualmente
rellenando dicha celda, invoque un comando de ejecución global (que daría lugar a una ejecución adicional del productor, cuya salida está actualmente poblando la celda a la que el procedimiento de propiedad obtener EDAD se asigna), y cualquier actualización necesaria de la pantalla.
5 Las Figuras 8C-F ilustran pantallas de ejemplo generadas por la configuración y la asignación del módulo de interfaz de usuario gráfica 842. Las pantallas generadas por la prestación y el módulo de interfaz de usuario gráfica interactivo 846 son los mismos, con la excepción de que la lista de las clases (con sus procedimientos de propiedad get) 852 la configuración y el visor asignado 854 se sustituyen por un visor de representación e interactivo (que no se muestra) que contiene la misma imagen que el visor de configuración y de asignación 854 mostrado (siendo la
10 diferencia que la función de asignación ya no está disponible).
Ejemplos de esquemas de distribución de tiempo de ejecución
Las figuras 9A-C ilustran varios esquemas para la distribución de un tiempo de ejecución con el soporte del de
15 programación orientado a gráfico del productor. Se debe entender que estos esquemas de distribución son ejemplares, y por lo tanto, 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 la distribución de un tiempo de ejecución con el soporte de programación orientada al gráfico del productor de acuerdo con una realización de la 20 invención. En la figura 9A, el código fuente orientado a objeto 905 (que incluiría las declaraciones de dependencia de los productores) se muestra en la parte superior de un tiempo de ejecución con el soporte de programación orientado a gráfico del productor 910, que es en la parte superior de un tiempo de ejecución con la carga de clases, creación de instancias de clases dinámicas, invocación del procedimiento de única dinámica, y la introspección de la clase/procedimiento 915, que es en la parte superior de un sistema operativo 920. En la figura 9A, el tiempo de 25 ejecución 910 trabaja con el tiempo de ejecución 915. Aunque cualquier número de mecanismos pueden ser utilizados para permitir al tiempo de ejecución 910 trabajar con el tiempo de ejecución 915, se describe a modo de ejemplo una instalación de metadatos. Una instalación de metadatos permite que la información adicional se añada al código fuente, cuya información es utilizada por las herramientas de desarrollo. Por ejemplo, la instalación de metadatos para especificación Java define una API para los campos de anotación, los procedimientos y clases de 30 que tienen atributos particulares que indican que deben ser tratados de manera especial por las herramientas de desarrollo, herramientas de implementación, o en las librerías en tiempo de ejecución (Java Specification Request 175). En este ejemplo, un programador que programa el código fuente orientado a objetos 905 añadiría anotaciones a los procedimientos en forma de las declaraciones de dependencia de los productores. Dado que estas anotaciones se entregan por el tiempo de ejecución 915 al tiempo de ejecución 910, el tiempo de ejecución 910 dicta la sintaxis
35 de las declaraciones de dependencia de los productores. En la figura 9A, los tiempos de ejecución de 910 y 915 pueden ser desarrollados y/o distribuidos por diferentes organizaciones.
La figura 9B es un diagrama de bloques que ilustra un segundo esquema para la distribución de un tiempo de ejecución con el soporte de programación orientado al gráfico del productor de acuerdo con una realización de la 40 invención. En la figura 9B, el código fuente orientado a objetos 925 (que incluiría las declaraciones de dependencia de los productores) se muestra en la parte superior de un tiempo de ejecución (con la carga de clases, creación de instancias de clases dinámicas, invocación de procedimiento único dinámico, y la introspección clase/procedimiento, así como el soporte de programación orientado a gráfico del productor 930, que está en la parte superior de un sistema operativo 935. En comparación con la figura 9A, el tiempo de ejecución 910 y el 915 se han combinado en
45 un solo tiempo de ejecución 930. Como resultado de esta combinación, el tiempo de ejecución 930 dicta la sintaxis de las declaraciones de dependencia de los productores. Por lo tanto, un programador de la programación del código fuente orientado a objetos 925 añadiría las declaraciones de dependencia de productores en la sintaxis necesaria.
50 La figura 9C es un diagrama de bloques que ilustra un tercer esquema de la distribución de un tiempo de ejecución con el soporte de programación orientado al gráfico del productor de acuerdo con una realización de la invención. En la figura 9C, el código fuente orientado a objetos 940 (que incluiría las declaraciones de dependencia de los productores) se muestra en la parte superior de un tiempo de ejecución del sistema operativo (con la carga de clases, creación de instancias de clases dinámicas, la invocación de procedimiento único dinámico, y la
55 introspección clase/procedimiento, así como el soporte de programación orientado a gráfico del productor) 945. En comparación con la figura 9B, el tiempo de ejecución 920 y el sistema operativo 935 se han combinado en una sola entidad. Como resultado de esta combinación, el sistema operativo en el tiempo de ejecución 945 dicta la sintaxis de las declaraciones de dependencia de los productores. Por lo tanto, un programador de la programación de código fuente orientado a objetos 940 añadiría las declaraciones de dependencia de productores en la sintaxis necesaria.
60 Aunque se describen las realizaciones en el que el tiempo de ejecución tiene la carga de clases, creación de instancias de clases dinámicas, la invocación de procedimiento único dinámico, y la introspección, la clase/procedimiento, realizaciones alternativas pueden incluir más o menos características (por ejemplo, la clonación de instancias, proxies dinámicos, conversiones de tipos primitivos, etc.)
Ventajas de ejemplo
En una realización de la invención, las dependencias de los productores se declaran para los procedimientos como una manera de especificar la secuencia de invocación de procedimiento con las instancias correspondientes (en los 5 casos apropiados incluyen los casos para utilizar como argumentos, las instancias para ser utilizadas por los procedimientos de instancia, y la meta instancias de la clase utilizadas por los procedimientos de clase) sin necesidad de utilizar el código de la secuencia de invocación manual. En efecto, el trabajo de generar parte o la totalidad de la invocación manual del código de secuencia se sustituye por: 1) el trabajo realizado por el programador de la aplicación para escribir las declaraciones de dependencia de productores, y 2) el trabajo realizado por el tiempo de ejecución para descubrir y construir el gráfico(s) de productor y ejecutar los productores de los gráfico(s) de productor. En otras palabras, la lógica que figuraba anteriormente en el código de la secuencia de invocación manual es detectable por el tiempo de ejecución durante el tiempo de ejecución sobre la base de las declaraciones de dependencia de los productores. Por lo tanto, las declaraciones de dependencia de productor informan al tiempo de ejecución qué los procedimientos de qué instancias con qué los argumentos ejecutar, y
15 cuándo para fines de sincronización. Aunque el esfuerzo de escribir el tiempo de ejecución es relativamente grande, sólo necesita ser escrito una vez en que puede utilizarse para ejecutar cualquiera de las aplicaciones orientadas a objetos escritas para el tiempo de ejecución, en cambio, para una aplicación típica, el esfuerzo de escribir las declaraciones de dependencia del productor es relativamente bajo en comparación con la escritura manual del código de secuenciación de invocación.
Reducción de errores de programación
La programación orientada a gráficos del productor generalmente reduce los costos asociados con la depuración y/o la optimización del rendimiento del código de secuenciación de invocación manual. Esto es cierto para al menos la 25 razón de que la infraestructura de un programa de aplicación es conceptualmente un conjunto de gráficos no formalizados de procedimientos de transformación de objetos (la salida de un procedimiento asociado con un objeto es la entrada a otro, y así sucesivamente) que opera sobre entradas específicas. Las declaraciones de dependencia de productores y el tiempo de ejecución con el soporte de programación orientado a gráficos del productor formalizan estos gráficos en forma de gráficos de productores. Por lo tanto, para cada oportunidad para que los datos cambien, el programador de la aplicación no tiene por qué considerar su efecto y escribir la invocación manual de código de la secuencia para provocar los procedimientos de transformación adecuados de las instancias apropiadas para ser invocadas en el orden apropiado, con las entradas correspondientes. En otras palabras, para cada oportunidad en que cambien los datos, no es necesario que un programador de la aplicación considere que los gráficos se ven afectados, así como qué procedimientos de transformación de instancias dentro de los gráficos se 35 ven afectados. Por el contrario, el módulo de generación de gráfico de productor automatizado descubre y construye los gráficos de productores y el módulo de ejecución del gráfico de productor vuelve a ejecutar las gráficas del productor, según sea necesario para reflejar los cambios en los datos. Esta automatización ayuda a los programadores de aplicaciones a evitar errores tales como: 1) invocar los procedimientos de transformación adecuados de las instancias apropiadas en el orden incorrecto, 2) olvidarse de incluir comandos para hacer que uno
o más procedimientos necesarios de transformación de las instancias de un gráfico sean invocados en respuesta a algunos datos que se cambian, y 3) incluir comandos para realicen que los procedimientos de transformación innecesarios de instancias que deben invocarse que respondan a algunos datos que se cambian (por ejemplo, incluyendo comandos para invocar procedimientos de transformación de las instancias que no forman parte de un gráfico afectado por el cambio en los datos; incluyendo comandos para invocar procedimientos de transformación de
45 instancias que forman parte de un gráfico afectado por el cambio en los datos, pero no se ven afectados en sí mismos, etc.).
Sincronización
Tal como se describió previamente, el cambio de las salidas de productores durante la ejecución permite la sincronización. Así, en términos de comparación con el patrón de observador, las declaraciones de dependencia de productores notifican un tiempo de ejecución con el soporte de programación orientado a gráfico del productor a las dependencias, y el tiempo de ejecución determina qué productores y cuándo volver a llamar.
55 Capacidad para explicar totalmente cualquier resultado
En una realización de la invención, un módulo de perforación/visualización (no mostrado) está incluido como parte del tiempo de ejecución. El módulo de perforación/visualización proporciona una interfaz gráfica de usuario que, a través de la interacción de un usuario final, permite perforar en el gráfico de productor (caminando por una gráfica del productor desde el nodo raíz) para ver las salidas de los diferentes productores de la gráfica de productores. Esto permite que un usuario final vea los distintos resultados que contribuyeron a la salida del productor de interés, incluyendo los valores de los datos y las dependencias (devueltos por los productores de la determinación de dependencia). Además, en una realización de la invención, este módulo de perforación/visualización proporciona la habilidad para el usuario final para ver el código dentro de los procedimientos de los productores, los valores de los
65 casos de los productores, y/o el contenido de las clases de los productores.
Así, el módulo de perforación/visualización ofrece una variedad de actividades de transformación posteriores, incluida la depuración, la explicación de las salidas, etc.
Aplicación práctica / Efecto técnico /Aplicabilidad industrial ejemplares
5 Hay una variedad de aplicaciones prácticas de ejemplo de los diferentes aspectos y realizaciones de la invención. Por ejemplo, el tiempo de ejecución, como parte de los programas de aplicación que se ejecuta, hace que la recuperación de la información de un medio de almacenamiento de la máquina (por ejemplo, el acceso al código fuente orientado a objetos, incluidas las declaraciones de dependencia de los productores), el almacenamiento de la información a un medio de almacenamiento de la máquina (por ejemplo, el almacenamiento de las estructuras de datos como la estructura de gráfico(s) de productor, etc.), la operación de recursos de procesamiento del hardware, el suministro de salidas de productor(es) de interés (por ejemplo, a través de una interfaz gráfica de usuario, almacenamiento en medios de almacenamiento de la máquina, transmisión, etc.), etc. En cierto sentido, la actividad de pre-procesamiento incluye la escritura de este tipo de programa de aplicación y/o el suministro de datos (dichos
15 datos pueden representar cualquier número de elementos físicos y/o prácticos, como valores financieros, valores geográficos, valores meteorológicos, valores actuariales, valores estadísticos, medidas físicas, valores de estado de la máquina, etc.), mientras que la actividad post-procesamiento incluye la provisión de los resultados (dichos resultados pueden representar cualquier número de elementos físicos y/o prácticos, tales como análisis financiero, análisis geográfico, análisis meteorológico, análisis actuarial, análisis estadístico, medidas industriales, información de control de la máquina, etc. A modo de ejemplo específico, la actividad de procesamiento posterior puede ser proporcionada por: 1) el módulo visor de gráfico de productor 1062 de la figura 10 para mostrar gráficamente una representación del gráfico(s) de productor actual generado por el tiempo de ejecución, y/o 2) el módulo de interfaz de usuario gráfico de diseño de salida de productor interactivo configurable 840 (véase también, módulo de interfaz de usuario gráfico de diseño de salida de productor interactivo configurable 1085 de la figura 10) para mostrar
25 gráficamente las salidas de e interactuar con los gráficos de los productores.
Como otro ejemplo, el programa de aplicación con las declaraciones de dependencia de productores en sí, cuando se ejecuta mediante el tiempo de ejecución, representa los elementos físicos/prácticos y provoca las operaciones descritas anteriormente. A modo de ejemplo específico, estas declaraciones de dependencia de productores hacen que se formen estructuras de datos en los medios de almacenamiento de la máquina que responden a su ejecución por el tiempo de ejecución. Además, las declaraciones de dependencia de productores se almacenan y se recuperan a partir de los medios de almacenamiento de la máquina junto con el programa de aplicación. Además, estas declaraciones de dependencia de productores representan las relaciones entre los productores, mientras que los productores representan las operaciones a realizar (procedimientos) e instancias. Las instancias en programación
35 orientada a objetos se pueden utilizar para representar los elementos físicos y/o prácticos, mientras que los productores representan las operaciones que se realizan en estas representaciones.
A modo de otro ejemplo, un conjunto de uno o más programas de aplicación y tiempo de ejecución de la aplicación transversal de activos de software de gestión de riesgos que incluye cambio de divisas, equidad, tasa de interés, el crédito, inflación, materias primas y productos compuestos de activos cruzados. Estos productos van desde dinero en efectivo y productos físicos vainilla planos a los productos derivados exóticos y complejos. También se incluye un conjunto de modelos matemáticos para estos productos, y sus datos de mercado correspondientes, pago y rutinas de generación de asientos contables y sus observables asociados, modelos de calibración y sus entradas en crudo asociadas.
45 A modo de otro ejemplo, un conjunto de uno o más programas de aplicación y tiempo de ejecución puede implementar un procesador de textos, una hoja de cálculo, un software de comunicación/ correo electrónico, un software de visualización de fotos, un software de detección de virus, un reproductor multimedia, un servidor de base de datos, un juego, una aplicación industrial, una aplicación de herramientas de diseño asistida por ordenador y/o un sistema operativo. Por supuesto, los programas de aplicación se pueden implementar para realizar una variedad de otras tareas.
Implementaciones de ejemplo
55 A modo de ilustración, se describirán las realizaciones de ejemplo de la invención que soportan las dependencias, dependencias dinámicas (incluyendo dependencias contingentes y dependencias de suscripción), productores determinación de dependencia explícitos para dependencias declaradas de acceso directo y para dependencias declaradas de no acceso directo, productores de determinación de dependencia sobre la marcha para dependencias declaradas de acceso directo, las claves de clase, claves de instancia, claves de procedimiento, comandos de anulación/anulación inversa productores (que son los tipos de comandos set), y comandos de ejecución globales. Además, las realizaciones de ejemplo opcionalmente soportan un módulo gráfico visualizador interactivo del productor y ejecución incremental. Por supuesto, las realizaciones alternativas de la invención pueden aplicar más, menos, y/o diferentes características.
65 La figura 10 es un diagrama de bloques de una ejecución de ejemplo de acuerdo con una realización de la invención. En la figura 10, la línea divisoria de trazos 1000 separa de un cliente de tiempo de ejecución 1002 de un
tiempo de ejecución con el soporte de programación orientado a gráfico de productor 1004.
El flujo de ejecución lógico del cliente en tiempo de ejecución 1002 incluye bloques 1010, 1020, 1025, 1030 y 1035, y el tiempo de ejecución con el soporte de programación orientado a gráfico de productor 1004 incluye, 5 respectivamente, bloques correspondientes, 1095, 1098, 1040, 1045 y 1070, mientras que una línea de flecha sólida representa una relación causal directa desde el bloque 1035 del flujo de ejecución lógica del cliente de tiempo de ejecución 1002 con el bloque 1070 del tiempo de ejecución con el soporte orientado a gráfico del productor 1004, líneas de flecha de puntos muestran una relación causal a partir de los bloques 1010, 1020, 1025 y 1030 del cliente en tiempo de ejecución 1002 de los bloques 1095, 1098, 1040 y 1045 del tiempo de ejecución con el soporte orientado a gráfico del productor 1004. Dependiendo de la realización de la invención, estas relaciones últimas causales pueden ser directas o indirectas. Por ejemplo, similar a la figura 6, una relación causal opcional indirecta a través del uso de un registro de comandos (no mostrado) y/o registro de anulación 1047 puede ser utilizada. Otros bloques 1095 y 1098 son discontinuos porque opcionalmente pueden ser 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
15 puede ser parte del bloque 1040; los bloques 1095 y 1098 pueden formar parte del bloque 1040). De manera similar, el bloque 1045 es discontinuo, ya que puede ser opcionalmente 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, el tiempo de ejecución 1002 incluye las definiciones de clase que incluyen la lógica de negocio 1010 con datos 1012, los procedimientos 1014, las declaraciones de los productores de dependencia 1016, y opcionalmente las claves de la clase 1090. Las definiciones de la clase 1010 son las clases en un lenguaje de programación orientado a objetos, y por lo tanto se incluyen definiciones de los datos 1012 y los procedimientos 1014. Además, estas definiciones de clase 1010 incluyen declaraciones de dependencia de los productores 1016 para el procedimiento 1014 como se describió previamente. Además, en una realización de la invención, cada clase
25 tiene una clave de clase 1090 para fines de rastreo.
El nuevo módulo de clase 1095 del tiempo de ejecución de 1004 carga y hace la introspección sobre las definiciones de clase 1010 (por ejemplo, que responda a los comandos de la nueva clase). Esta carga y la introspección se pueden hacer utilizando cualquier número de técnicas desarrolladas conocidas o por conocer, incluidas las de cargar las clases de forma selectiva con fines de optimización. La carga de las clases por el nuevo módulo de clase 1095 se ilustra en las clases 1054 del tiempo de ejecución 1004. Como parte de la carga y la introspección de las clases 1054, el nuevo módulo de clase 1095 también carga e inspecciona las declaraciones de dependencia de productores 1016, como se ilustra por los procedimientos y las declaraciones de dependencia de los productores 1056 en las clases 1054. El nuevo módulo de clase 1095 también mantiene una estructura de
35 seguimiento de la clase 1092 que se utiliza para el seguimiento de las clases con las claves de clase. Así, la estructura de seguimiento de clase 1092 mantiene una correspondencia entre las claves de clase y referencias en las clases 1054. Además, el nuevo módulo de clase 1095 también mantiene una estructura de seguimiento de procedimiento 1058 que se utiliza para los procedimientos de rastreo utilizando las claves de procedimiento. Por lo tanto, la estructura de sistema de seguimiento 1058 mantiene una correspondencia entre las claves de procedimiento y las referencias a los procedimientos, así como información sobre las declaraciones de dependencia de los productores.
El cliente de tiempo de ejecución 1002 también incluye los comandos de instancias con las claves de instancia 1020. El nuevo módulo de instancia 1098 del tiempo de ejecución 1004 crea una instancia de las instancias designadas 45 por los comandos de instancias con las claves de ejemplo 1020 (por ejemplo, que responda a los nuevos comandos de instancia). Este instanciado se puede hacer utilizando cualquier número de técnicas desarrolladas también conocida o por conocer, incluidas aquellas instancias instanciadas de forma selectiva con fines de optimización. Como parte de este instanciado, el nuevo módulo de instancia 1098 accede a la estructura de seguimiento de la clase 1092 mediante una clave de clase para acceder a la clase apropiada de las clases 1054. La instancia de instancias por parte del nuevo módulo de instancia 1098 se ilustra con las instancias 1052 del tiempo de ejecución 1004. El nuevo módulo de instancia 1095 también mantiene una estructura de seguimiento de instancia 1065 que se utiliza para el seguimiento de las instancias con las claves de instancia. Así, la estructura de seguimiento de instancia 1065 mantiene una correspondencia entre las claves de instancia y referencias en las instancias 1052. Como se indicó anteriormente, el nuevo módulo de clase 1095 puede ser parte del nuevo módulo de instancia 1098
55 en que las clases 1054 puede ser instanciada en respuesta a los comandos de instanciación de instancia 1020, en contraposición a separar nuevos comandos de clase.
El cliente de tiempo de ejecución 1002 también incluye comandos de productores de instancias con las claves de producción 1025. El módulo de generación de gráfico de productor automatizado 1040 del tiempo de ejecución 1004 crea una instancia de productores designada por los comandos de instancias de productores con claves de productores 1025 (por ejemplo, que responda a los nuevos comandos de productores que designan el conjunto actual de los productores de interés). Además, módulo de generación de gráfico de productores automatizado 1040 también descubre, construye, y, opcionalmente, resuelve el gráfico(s) de productor en respuesta a la serie actual de los productores de interés, como se ha descrito anteriormente. En una realización de la invención, una clave 65 productor se compone de una clave de clase, clave de instancia, y clave de procedimiento. Como parte de esta instancia de los productores, el módulo de generación de gráfico de productor automatizado 1040: 1) accede a la
estructura de seguimiento de la clase 1092 con la clave de clase para acceder a la clase apropiada de las clases 1054, 2) accede a la estructura de seguimiento de instancia 1065 con la clave de instancia para acceder a la instancia adecuada de las instancias 1052, y 3) accede a la estructura de seguimiento de procedimiento que utiliza la clave de procedimiento para acceder a la declaración de dependencia de productor apropiada. La instancia de los
5 productores designados por los comandos de productores de instancias con las claves de producción 1025 y la instancia de cualquiera los productores descubiertos y la construcción de la gráfica de productor están ilustradas por la estructura del gráfico(s) del productor 1060 del tiempo de ejecución 1004. Así, en una realización de la invención, las claves de productores identificadas por los comandos de productores de instancias con claves de productores 1025 y las descubiertas a través de la generación de gráfico de productor se almacenan en la estructura de gráfico(s) del productor 1060, junto con información adicional para representar el gráfico(s) de productor actual.
Tal como se describió anteriormente, el bloque 1095 y 1098 pueden ser parte del bloque 1040, y por lo tanto, la decisión sobre qué clases, instancias, y productores para cargar/crear una instancia es impulsada por qué productores están en la gráfica(s) de productor actual. En tal realización de la invención, la carga/instancia de clase,
15 de instancias, y productores está optimizada y es centrada en el productor.
El cliente de tiempo de ejecución 1002 también incluye comandos de preparación de datos, incluyendo comandos anulación/anulación inversa de salida del productor 1030. Los comandos de anulación/anulación inversa incluyen la clave del productor del productor al ser anulado/inversamente anulados, así como los valores de anulación cuando se anulan. El módulo de salida del productor anulado 1045 del tiempo de ejecución 1004 hace que los productores designados por los comandos de anulación/anulación inversa de los productores sean anulados/inversamente anulados. Esta relación de causalidad puede ser indirecta o directa.
En el caso de la relación de causalidad indirecta, el módulo de salida del productor de anulación 1045 rellena el
25 registro de anulación 1047 para el consumo por el módulo de ejecución gráfica del productor 1070. En el caso de relación causal directa, el módulo de salida del productor de anulación 1045 accede al caché de salida del productor 1097 de la estructura de gráfico(s) del productor 1060 y las instancias 1052. Específicamente, como se ha descrito con referencia al módulo de salida del productor de anulación 390, en una realización, los productores pueden ser clasificados como productores de propiedad o productores de procedimiento, por lo que el módulo de salida del productor de anulación 1045 puede incluir una característica del módulo de salida del productor de propiedad de anulación (no mostrado) para productores de propiedad anulados y un módulo de salida del productor de procedimiento de anulación (no mostrado) para los productores de procedimiento anulados; la anulación de un procedimiento de propiedad hace que el valor anulado sea almacenado en la memoria caché de salida del productor 1097 de la estructura de gráfico(s) del productor 1060 y ser almacenada en los datos de la instancia adecuada de
35 las instancias 1052, mientras que la anulación de un procedimiento del productor hace que el valor anulado sea almacenado en la memoria caché de salida del productor 1097.
En una forma de realización de la invención los productores no pueden ser anulados antes de que un gráfico del productor del que serán parte haya sido ejecutado inicialmente (por lo tanto, el productor ya se habrá instanciado como resultado de haber sido designado como un productor de interés o como resultado de ser descubierto por el módulo de generación de gráfico de productor automático 1040). Sin embargo, en la realización mostrada en la figura 10, los productores pueden ser anulados antes de la ejecución inicial al ser instanciado y anulados con un comando de anulación del productor. Este productor anulado normalmente con el tiempo formará parte de un gráfico de productor a través del proceso de descubrimiento (por ejemplo, cuando se resuelve una dependencia dinámica).
45 En algunas realizaciones de la invención, esta preparación de datos también puede incluir otros tipos de comandos set. El módulo de salida de productor de anulación 1045 se muestra como un cuadro de líneas de trazos, ya que puede no estar presente en realizaciones alternativas de la invención.
La estructura del gráfico(s) del productor 1060 también incluye opcionalmente marcado de ejecución incremental 1080 para algunas realizaciones de la invención que soportan la ejecución incremental. Como se ha descrito anteriormente con referencia al marcado de ejecución incremental 382 de la figura 3B, el marcado de ejecución incremental 1080 se utiliza para ayudar con la ejecución incremental de la gráfica(s) de productor en la ejecución más allá de la ejecución inicial. Diferentes realizaciones de la invención que utilizan marcado de ejecución incremental 382, lo utilizan de diferentes maneras. Por ejemplo, en una de tales realizaciones de la invención que 55 tiene un registro de comandos, el registro se utiliza para realizar un seguimiento de que productores se han añadido y/o modificado, y el marcado de ejecución incremental 382 se utiliza para marcar los productores que se ven afectados (antepasados de los productores modificados o añadidos, y por lo tanto dependientes de ellos). Como otro ejemplo, en una realización de la invención tal que no tiene un registro de comandos, el marcado de ejecución incremental 382 se utiliza para marcar los productores que se añaden o modifican, así como aquellos que son antepasados de los productores modificados o añadidos (y por lo tanto dependen de ellos). Como otro ejemplo, en una realización de la invención tal que no tiene un registro de comandos, las modificaciones y adiciones de los productores se hace inmediatamente y el marcado de ejecución incremental 382 se utiliza para marcar los productores que son antepasados de los productores modificados o añadidos (y por lo tanto dependen de ellos). Si bien se han descrito realizaciones de la invención que soportan la ejecución incremental y utilizan el marcado de 65 ejecución incremental, otras realizaciones de la invención soportan la ejecución incremental que no utilizan marcado de ejecución incremental (por ejemplo, se utiliza un registro de comandos para rastrear los productores que se han
añadido o modificado, y una lista de productores de inicio de ejecución se mantiene en un registro de inicio de ejecución, donde el módulo de ejecución de gráfico del productor 1070 comienza desde los productores de inicio de ejecución y se abre camino hasta los antepasados de la gráfica(s) de productor 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
5 respecto a las figuras 15-25.
El cliente de tiempo de ejecución 1002 también incluye comandos globales de ejecución 1035. El módulo de ejecución gráfico del productor 1070 del tiempo de ejecución 1004 ejecuta el gráfico(s) de productor. Como tal, el módulo de ejecución de gráfico del productor 1070 modifica el caché de salida del productor 1097 (en el caso de los productores de propiedad y productores de procedimiento), utiliza el marcado de ejecución incremental 1080 (si está presente), y modifica los datos de las instancias 1052 (en el caso de los procedimientos de propiedad). Diversas técnicas se han discutido previamente para la ejecución de los productores de la gráfica de productor y son aplicables aquí. Por ejemplo, en las realizaciones en las que se implementa un registro de comandos, el registro de comandos se consume y, a continuación se ejecuta el gráfico(s) de productor. Además, en realizaciones de la
15 invención que soportan la posibilidad de dependencias sin resolver, el módulo de ejecución de gráfico del productor 1070 incluye el módulo de dependencia dinámica 1075, que puede invocar el módulo de generación de gráfico del productor automatizado 1040.
La Figura 10 también muestra un módulo de visor gráfico del productor opcional 1062 que proporciona un mecanismo (por ejemplo, una interfaz gráfica de usuario) mediante el cual un programador/usuario puede ver el gráfico(s) de productor y salidas de los productores de la estructura de gráfico(s) de productor. Además, la figura 10 muestra un módulo de interface de usuario gráfico de diseño de salida de productor interactivo configurable opcional 1085 para proporcionar una interfaz gráfica de usuario (incluyendo la invocación dinámica de los bloques 1030 y 1035) que representa el módulo de interfaz de usuario gráfico de diseño de salida de productor configurable
25 interactiva 840.
En las realizaciones de la invención que utilizan un registro de comandos, activadores diferentes pueden utilizarse para activar acciones diferentes. Por ejemplo, los comandos de creación de instancias de productores pueden ser registrados y procesados por lotes en respuesta a un comando explícito (iniciar el registro y terminar registro), un comando ejecutar explícito global (el registro se inicia automáticamente en el arranque y después de cada comando ejecutar explícito global, y cada registro se procesa en respuesta al siguiente comando ejecutar explícito global ejecución), un comando de preparación de datos explícito, etc. Del mismo modo, los comandos de preparación de datos pueden ser registrados y procesados por lotes en respuesta a un comando ejecutar explícito global, un primer comando obtener, cada comando obtener, etc.
35 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. Mientras que las figuras 11A-D ilustran estas estructuras de datos como tablas, se debe entender que cualquier estructura de datos adecuada puede ser utilizada (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 clase 1092 de la figura 10 de acuerdo con una realización de la invención. En la figura 11A, una columna de clave de clase 1110 y una
45 columna de referencia de clase 1115 se muestran para almacenar, respectivamente, las claves de clase y las referencias correspondientes a las clases cargadas.
La figura 11B es un diagrama de bloques de un ejemplo de la estructura de seguimiento de instancia 1065 de la figura 10 de acuerdo con una realización de la invención. En la figura 11B, una columna clave de instancia 1120 y una columna de referencia de instancia 1125 se muestran para almacenar, respectivamente, las claves de instancia y las referencias correspondientes a los casos. En las realizaciones de la invención en la que las claves de instancia no tienen que ser únicas en todas las clases, la estructura de ejemplo de seguimiento también incluye la clave de clase o de referencia para la clase de la instancia.
55 La figura 11C es un diagrama de bloques de un ejemplo de la estructura de gráfico(s) de productor 1060 de la figura 10 de acuerdo con una realización de la invención. En la figura 11C, una columna de referencia de la clase 1135, una columna de referencia de instancia 1140, y una columna de referencia de procedimiento 1145 se muestran para almacenar respectivamente referencias que componen los productores actuales de los gráfico(s) de productor actuales. Estas referencias pueden tomar una variedad de formas. Por ejemplo, estas columnas, respectivamente, pueden almacenar referencias en las clases 1054 (o, alternativamente, 1092), instancias 1052 (o, alternativamente, 1065), y procedimientos 1056 (o, alternativamente, 1058). Mientras que en una realización de la invención estas columnas almacenan referencias, en una forma de realización alternativa de la invención una o más de estas columnas almacena claves.
65 Además, la figura 11C incluye una columna de enlace(s) de productor(es) padre 1150 (incluyendo para cada enlace una referencia de productor de padre, y una referencia del productor de determinación de la dependencia) y una
columna de enlace(s) de productor(es) de descendiente 1160 (incluyendo para cada enlace, la referencia(s) de productor de descendiente, una referencia del productor de determinación de la dependencia, un modo de enlace, y un indicador de enlace adherente). Cada productor puede tener cero o más enlaces de productores del descendiente en la columna 1160. Cada enlace de productor de descendiente en la columna 1160 incluye: 1) de 5 referencia(s) del productor de descendiente que se son referencias a otras líneas de la estructura de gráfico(s) de productor para representar de una dependencia del productor de acuerdo con la declaración de la dependencia del productor, 2) una referencia del productor de determinación de la dependencia que es una referencia a otra fila de la estructura de gráfico(s) del productor y representa el productor de determinación de dependencia que ha creado el enlace descendiente, y 3) un modo de enlace con un tipo de dependencia de 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 un argumento, la ID de argumento de la dependencia del productor, y 4) un indicador adherente para indicar que el modo de enlace es el resultado de una dependencia declarada de manera ascendente (en las realizaciones de la invención que soporten, dependencias declaradas de manera ascendente) o el resultado de una suscripción adherente (en las realizaciones de la invención que soportan 15 suscripciones adherentes) y no debe ser modificado a través de la declaración de dependencia de argumento del productor de este productor (es decir, el productor almacenado en la fila de la columna que contiene el indicador adherente). Cada productor puede tener cero o más enlaces de productores padres en la columna 1150. Cada enlace productor padre en la columna 1150 incluye: 1) una referencia productor padre que almacena de nuevo una referencia de acuerdo con un productor de referencia descendiente de otro productor (es decir, una referencia a otra fila de la estructura de gráfico(s) de productor para representar un padre productor dependiente del productor), y 2) una referencia de productor de determinación de la dependencia que es una referencia a otra fila de la estructura de gráfico(s) del productor y representa el productor de determinación de dependencia que ha creado el enlace padre. Por lo tanto, cuando se crea un vínculo, la columna de enlace de productor padre de la fila del productor del descendiente y la columna de enlace del productor descendiente de la fila del productor padre se han modificado
25 para representar el enlace (y la determinación de la dependencia de referencia del productor es la misma en ambos). En una realización de la invención, ya que rutas múltiples en un gráfico del productor o gráficos productores diferentes pueden incluir un productor determinado, puede haber múltiples enlaces de productor padre para un productor determinado.
Además, la figura 11C incluye una memoria caché de salida y columna de modificación de la salida del productor de anulación 1170 para almacenar las salidas del productor actuales, así como una indicación de si el productor se anula y el valor de salida anulado. Además, la figura 11C incluye una columna de marca de ejecución incremental 1180 para almacenar las marcas incrementales de ejecución tal como se ha descrito anteriormente.
35 La figura 11D es un diagrama de bloques de un ejemplo de la estructura de seguimiento del procedimiento 1058 de la figura 10 de acuerdo con una realización de la invención. En la figura 11D, una columna de claves del procedimiento 1190 y una columna de referencia del procedimiento 1192 que se muestran para almacenar, respectivamente, las claves de procedimiento y las referencias correspondientes a los procedimientos de las clases cargadas. Además, la figura 11D también incluye una columna ArgumentDependencies 1194, una columna FieldDependencies 1196, una columna SequencingDependencies 1195, una columna UpwardDependencies 1193, una columna WeaklyConstrainedDependencies 1199, una columna de la clase de salida 1197, y una columna de anotaciones opcionales adicional 1198. La columna ArgumentDependencies 1194, la columna SequencingDependencies 1195, la columna UpwardDependencies 1193, la columna WeaklyConstrainedDependencies 1199, y la columna FieldDependencies 1196 almacenan información de la
45 dependencia del productor analizada a partir de la declaración de dependencia del productor del procedimiento (por ejemplo, ver 705 de la figura 7A), mientras que la columna de la clase de salida 1197 almacena información relativa a la clase de salida de la salida del procedimiento (determinable por la firma del procedimiento -por ejemplo, véase 710 de la figura 7A). Ejemplos de contenido de la columna ArgumentDependencies 1194, la columna FieldDependencies 1196, la columna SequencingDependencies 1195, la columna UpwardDependency 1193, y la columna WeaklyConstrainedDependencies 1199, que se utilizan en algunas realizaciones de la invención se proporcionan más adelante en este documento.
Dependencias del productor dinámico
55 Tal como se ha descrito anteriormente, una realización de la invención soporta dependencias de productores no dinámicos y dinámicos. Aunque diferentes realizaciones pueden soportar diferentes tipos de dependencias de productores dinámicos, una realización de la invención soporta contingentes y tipos de suscripción de las dependencias de los productores dinámicos. Por lo tanto, una dependencia no contingente, sin 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 las dependencias de tipo contingente y de suscripción de productores dinámicos de acuerdo con una realización de la invención. La figura 12 incluye en la figura 10 la línea divisoria discontinua 1000, las definiciones de clase que incluyen la lógica de negocio 1010 (que incluyen los datos 1012, los procedimientos 1014, y las declaraciones de 65 dependencia de los productores 1016), el nuevo módulo de clase 1095, las clases 1054 (incluyendo los procedimientos y declaraciones de dependencia de los productores 1056), el nuevo módulo de instancia 1098, las
instancias 1052, la estructura de ejemplo de seguimiento 1065, el módulo de generación automatizada del gráfico del productor 1040, la estructura del gráfico(s) del productor 1060, y el módulo de ejecución del gráfico del productor 1070 (incluida el módulo de dependencia dinámica 1075).
5 La figura 12 muestra que las declaraciones de dependencia de los productores 1016 incluyen opcionalmente dependencias contingentes 1210, dependencias de suscripción 1220, y productores múltiples 1215. Aquí, productores múltiples 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 del gráfico del productor 1040 para procesar las dependencias contingentes 1210 y las dependencias de suscripción 1220. La figura 12 muestra también que el módulo de suscripción 1240 accede a un registro de suscripción 1250. Además, el módulo de dependencia dinámica 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.
15 La siguiente descripción de las dependencias contingentes y de suscripción se realiza en el contexto de una realización de la invención que utiliza una DEP de clase (una abreviatura para la dependencia), del que una instancia es devuelta por los productores de determinación de la dependencia y es analizada por el tiempo de ejecución con el soporte de la programación orientada al gráfico del productor. La DEP de clase incluye los siguientes campos: 1) TIPO que se puede ajustar a la suscripción, sin suscripción descendente declarada (productores descendientes que no son suscripciones), o sin suscripción ascendente declarada (los productores padre que no son suscripciones), 2) PROD que se utiliza para dependencias sin suscripción descendentes declaradas y una colección de los productores descendientes (como tal, puede almacenar cero o más productores), 3) TIPO SUB que se utiliza para las dependencias de suscripción y se establece para indicar el tipo de dependencia de suscripción (utilizada en las realizaciones de la invención que soportan múltiples tipos de suscripción, mientras
25 que la realización de la invención que se describe aquí es compatible con dos tipos: adherente y absorbente, realizaciones alternativas pueden soportar más, menos, y/o diferentes tipos de suscripción, 4) CRIT SUB, que se utiliza para las dependencias de suscripción y se establece para indicar los criterios de suscripción, 5) MODO DE ENLACE PAR que se utiliza para las dependencias de suscripción y dependencias sin suscripción adherentes declaradas y se establece para indicar cuál es el modo de enlace que debe ser el productor padre; 6) CLASE PAR que se utiliza para las dependencias de suscripción y las dependencias sin suscripción adherentes ascendentes declaradas y se establece para indicar cual debe ser la clase del productor padre (por ejemplo, la clave de clase); 7) PROCEDIMIENTO PAR que se utiliza para las dependencias de suscripción adherentes y las dependencias sin suscripción ascendentes declaradas y se establece para indicar cuál debe ser el procedimiento del productor padre (por ejemplo, la clave de procedimiento), y 8) INSTANCIA PAR que se utiliza para las dependencias adherentes de
35 suscripción y las dependencias sin suscripción ascendentes declaradas establecidas para indicar cuál debe ser la instancia del productor padre (por ejemplo, la clave de instancia) (si la instancia PAR se deja en blanco, la clave de instancia del productor descendiente se utiliza para el productor padre). Una realización alternativa podría utilizar una colección de productores padre (cada elemento de la colección soporta un PAR_CLASS, PAR_INSTANCE, PAR_METHOD, PAR_LINK MODE) en el caso de las dependencias de suscripción adherente y/o dependencias sin suscripción ascendentes declaradas. Por supuesto, otras realizaciones alternativas de la invención podrían utilizar una estructura diferente para devolver dependencias.
Dependencias contingentes
45 En una realización de la invención, ambas dependencias de productores no contingentes y contingentes son compatibles. Un productor de dependencia no contingente es uno que es independiente de la salida de los otros productores, mientras que una dependencia del productor contingente es una que es dependiente de la salida de otros productores. Si bien una realización de la invención soporta dependencias de productores no contingentes y contingentes, realizaciones alternativas sólo admiten no contingente o contingente (cuyas dependencias contingentes de los productores pueden ser inicialmente impulsadas por los valores por defecto).
Tal como se discutió previamente, un productor puede ser visto como un conjunto de identificadores múltiples, un identificador para cada nivel adicional de granularidad especificada. En una realización de la invención, una dependencia del productor contingente puede ser contingente en el sentido de que cualquiera o la totalidad del
55 conjunto de identificadores puede ser condicionalmente determinado en base a los valores de los datos actuales. Por ejemplo, una primera dependencia del productor contingente puede tener sólo el identificador de la instancia que se determinó de forma condicional (los identificadores de clase y el procedimiento son fijos), mientras que una segunda dependencia del productor contingente pueden tener la clase, la instancia y el procedimiento de identificación que se determinó de forma condicional. Aunque en una realización de la invención toda la pluralidad de los identificadores de una dependencia del productor contingente pueden ser condicionales, realizaciones alternativas de la invención pueden implementarse de forma diferente (por ejemplo, sólo permiten un subconjunto de la pluralidad de identificadores para ser condicional).
Las figuras 13A-J son diagramas de bloques que ilustran el pseudo código y los productores de ejemplo de acuerdo
65 con una realización de la invención. Además, las realizaciones mostradas en las figuras 13A-J utilizan el mismo mecanismo de determinación de la dependencia para dependencias tanto contingentes como no contingentes.
Como tal, con fines explicativos, algunos de los ejemplos de las figuras 13A-J son ejemplos de las dependencias de los productores no contingentes, mientras que los otros son ejemplos de las dependencias de productores contingentes. Además, una dependencia del productor no contingente es una en la que la dependencia es un productor de determinación de la dependencia que es un productor independiente (por ejemplo, en una realización
5 de la invención, el tipo de dependencia es identificable porque su declaración de dependencia del productor está vacía), mientras que una dependencia del productor contingente es una en la que la dependencia es un productor de determinación de la dependencia 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 dependencia del productor no está vacío).
Además, en números y las letras en círculos se utilizan en las figuras 13A-J para ilustrar el orden en el que las operaciones se realizan de acuerdo con una realización de la invención. Además, una notación X::Y::Z se utiliza en las figuras 13A-J para representar una clave del productor que se compone de una clave de clase (X), una clave de instancia (Y), y una clave de procedimiento (Z). Además círculos de trazos y líneas con flechas representan las operaciones que no se realizan en algunas realizaciones de la invención. En particular, cuando la ejecución de un
15 productor de determinación de la dependencia independiente para una dependencia determinada siempre devolverá la misma dependencia (por ejemplo, un productor de determinación de la dependencia independiente), se ejecuta este productor de determinación de la dependencia en algunas realizaciones de la invención, pero no se instancia y se vinculadas en el gráfico(s) del productor.
Productores de determinación de dependencia explícita
La figura 13A ilustra pseudo código de declaraciones de dependencia de los productores para los procedimientos que utilizan una dependencia de acceso directo no declarada no dinámica (no contingente, sin suscripción) de acuerdo con una realización de la invención, mientras que la figura 13B es un diagrama de bloques de productores
25 que ilustran una dependencia del productor de ejemplo no contextual declarada, no dinámica (no contingente, sin suscripción) de acuerdo con una realización de la invención. La figura 13A muestra: 1) una declaración de dependencia del productor 1300 de un procedimiento alfa 1305, donde la declaración de dependencia del productor 1300 incluye una dependencia del productor con el productor CW::IY::BETA, y 2) una declaración de dependencia del productor 1310 para un procedimiento beta 1315, donde la declaración de dependencia del productor 1310 está vacía, y donde el procedimiento beta 1315 regresa como un argumento de una instancia de la clase DEP. El procedimiento beta 1315 incluye el código de declaración de la dependencia del productor 1320 que establece DEP.TYPE en no suscripción declarada descendente, establece DEP.PROD en el productor 13, y regresa DEP.
En la figura 13A, un círculo 1 indica que la declaración de dependencia del productor 1300 es accedida (por ejemplo,
35 como resultado de la designación de un productor basado en el procedimiento alfa 1305 como un productor de interés, como resultado de la detección automatizada de un productor basado en el procedimiento alfa 1305, como una progenie de un productor de interés, etc.). Un círculo 2 en la figura 13B muestra que un productor C0::I0::ALFA se instancia basado en el procedimiento alfa 1305. Un círculo 3 en la figura 13A indica que la dependencia del productor CW::IY::BETA se procesa para determinar la dependencia del productor, y como resultado, un círculo 4 indica que la declaración de dependencia del productor 1310 es accedida. Un círculo de trazos 5 en la figura 13B muestra que un productor CW::IY::BETA se instancia como un productor de determinación de la dependencia 1380. Un círculo de trazos 6 en la figura 13 indica que el productor C0::I0::ALFA está vinculado con el gráfico del productor para indicar que el productor CW::IY::BETA es un productor descendiente. Un círculo 7 en la figura 13B indica que el productor CW::IY::BETA se ejecuta y devuelve DEP para identificar al productor 13. Un círculo 8 indica que el
45 productor 13 se instancias 13, mientras que un círculo 9 indica que el productor 13 está vinculado como productor descendiente en el gráfico del productor con el productor C0::I0::ALPHA. En la figura 13B, el productor C0::I0::ALFA y el productor 13 son productores estándar 1385 (que no son productores de determinación de la dependencia).
La figura 13C ilustra un pseudo código de declaraciones de dependencia de los productores de los procedimientos que utilizan una dependencia del productor de acceso directo no declarado contingente sin 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 ilustran un ejemplo de dependencia del productor sin acceso directo declarado, contingente, sin suscripción de acuerdo con una realización de la invención. Además, la figura 13D se refiere a los productores 5, 7A, 7B y la figura 5A y la resolución de la dependencia dinámica de productor 5 al productor 7A.
55 La figura 13C muestra: 1) una declaración de dependencia del productor 1300 para un procedimiento alfa 1305, donde la declaración de dependencia del productor 1300 incluye una dependencia del productor con el productor CW::IY::BETA, 2) una declaración de dependencia del productor 1325 para un procedimiento beta 1315, donde la declaración de dependencia del productor 1325 incluye una dependencia del productor con el productor CU::IV::DELTA, y donde el procedimiento beta 1315 regresa como un argumento una instancia de la clase DEP; 3) una declaración de dependencia del productor 1332 para un procedimiento delta 1334, donde la declaración de dependencia del productor 1332 está vacía, y donde el procedimiento delta 1334 regresa como un argumento de una instancia de clase DEP, y 4) una declaración de dependencia del productor 1338 para un procedimiento gamma 1340, donde la declaración de dependencia del productor 1338 está vacía, y donde el procedimiento gamma 1340
65 regresa a la variable X (donde X es una fuente externa, un valor por defecto (explícito o constante en la clase)). El procedimiento beta 1315 incluye el código de declaración de dependencia del productor 1330 que establece DEP.TYPE en no suscripción descendente declarada, establece DEP.PROD al productor 7A o 7B en función de la salida del productor CX::IZ::GAMMA, y devuelve DEP. El procedimiento delta 1332 incluye el código de declaración de dependencia del productor 1336 que establece DEP.TYPE a no suscripción descendente declarada, establece DEP.PROD en el productor CX::IZ::GAMMA, y devuelve DEP.PROD.
5 En la figura 13C, un círculo 1 indica que la declaración de dependencia del productor 1300 es accedida (por ejemplo, como resultado de la designación de un productor basado en el procedimiento alfa 1305 como un productor de interés, como resultado de la detección automatizada de un productor basado en el procedimiento Alfa 1305 como una progenie de un productor de interés, etc.). Un círculo 2 en la figura 13D muestra que el productor 5 se instancia
10 basado en el procedimiento alfa 1305. Un círculo 3 en la figura 13C indica que la dependencia del productor CW::IY::BETA se procesa para determinar la dependencia del productor, y como resultado, un círculo 4 indica que la declaración de dependencia del productor 1325 es accedida. Un círculo 5 en la figura 13D muestra que un productor CW::IY::BETA se instancia como un productor de determinación de la dependencia 1380. Un círculo 6 en la figura 13D indica que el productor 5 está ligado al gráfico del productor para indicar que el productor CW::IY::BETA es un
15 productor descendiente.
Un círculo 7 en la figura 13C indica que la dependencia del productor en el productor CU::IV::DELTA se procesa para determinar la dependencia del productor, y como resultado, un círculo 8 indica que la declaración de dependencia del productor 1332 es accedida. Un círculo de trazos 9 en la figura 13D muestra que un productor 20 CU::IV::DELTA se instancia como un productor de determinación de la dependencia 1380. Un círculo de trazos 10 en la figura 13D indica que el productor CW::IY::BETA está vinculado con el gráfico del productor para indicar que el productor CU::IV::DELTA es un productor descendiente. Un círculo 11 en la figura 13D indica que el productor CU::IV::DELTA se ejecuta y devuelve DEP para identificar CX::IZ::GAMMA. Un círculo 12 indica que el productor CX::IZ::GAMMA se instancia, mientras que un círculo 13 indica que el productor CX::IZ::GAMMA está vinculado
25 como productor descendiente en el gráfico del productor en el productor CW::IY::BETA.
En la figura 13D, un círculo A indica que el productor CX::IZ::GAMMA se ejecuta y devuelve X para el productor CW::IY::BETA, mientras que un círculo B indica que el productor CW::IY::BETA devuelve DEP para identificar el productor 7A; un círculo C indica que el resto no resuelto (procedimiento beta) 1390 se ha resuelto ahora y el
30 productor 7A se instancia, mientras que un círculo D indica la vinculación del productor 5 con el productor 7A. En la figura 13D, los productores CX::IZ::GAMMA, 5 y 7A son productores estándar 1385.
Productores de determinación de la dependencia al vuelo
35 La figura 13E muestra el pseudo código de las declaraciones de dependencia de los productores de los procedimientos que utilizan una dependencia del productor de acceso directo declarado, contingente, sin suscripción y una dependencia del productor declarada de acceso directo, contingente, sin suscripción de acuerdo con una realización de la invención, mientras que la figura 13F es un diagrama de bloques de productores que ilustran una dependencia del productor de acceso directo no declarada, contingente, sin suscripción y una dependencia del
40 productor de acceso directo declarada, contingente, sin suscripción de acuerdo con una realización de la invención. Similar a la figura 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 figuras 13E-F son las mismas que las figuras 13C-D, con las excepciones: 1) una declaración de dependencia
45 del productor 1342 sustituye a la declaración de dependencia del productor 1325; 2) un procedimiento fly 1344 reemplaza el procedimiento delta 1334, y 3) un productor CW::IY::FLY reemplaza el productor CU::IV::DELTA. La declaración de dependencia del productor 1342 incluye una dependencia de acceso directo declarada del productor CX::IZ::GAMMA. Así, el círculo 4 en la figura 13E ahora indica que la declaración de la dependencia del productor 1342 es accedida. El círculo 7 en la figura 13E indica ahora que la dependencia de acceso directo declarada del
50 productor CX::IZ::GAMMA se procesa para determinar la dependencia del productor, y como resultado, el tiempo de ejecución invoca el productor de determinación de la dependencia CW::IY::FLY sobre la marcha basado en el procedimiento fly 1344. El círculo 8 ahora indica que la declaración de dependencia del productor 1332 es accedida. El círculo de trazos 9 en la figura 13F muestra ahora que el productor CW::IY::FLY se instancia. El círculo de trazos 10 en la figura 13F indica que el productor CW::IY::BETA está vinculado con el gráfico del productor para indicar que
55 el productor CW::IY::FLY es un productor descendiente. El círculo 11 en la figura 13F indica que el productor CW::IY::FLY se ejecuta y devuelve DEP para identificar CX::IZ::GAMMA. El resto de las figuras 13E-F son las mismas que las figuras 13C-D.
La generación al vuelo mediante el tiempo de ejecución del productor de determinación de la dependencia
60 CW::IY::FLY alivia al programador de la aplicación de tener que escribir el código de declaración de la dependencia explícita del productor y crear instancias de una determinación basada en la dependencia respecto al productor. Además, permite al programador de aplicaciones especificar directamente la dependencia del productor CX::IZ::GAMMA en la declaración de dependencia del productor para el procedimiento beta 1315, en lugar de especificar el productor de determinación de la dependencia CU::IV::DELTA.
65 La técnica de acceso directo puede ser utilizada en una variedad de situaciones, y adicionalmente pueden tener una variedad de formatos. Por ejemplo, aunque en las figuras 13E-F la dependencia declarada del acceso directo es una dependencia no contingente (que identifica directamente el productor descendiente) y se encuentra en un estado declaración de dependencia del productor para un procedimiento en el que se basa un productor de determinación
5 de la dependencia, otras situaciones y formatos se muestran como sigue: 1) las figuras 13G-H ilustran el uso de dos accesos directos, donde uno es contingente y es parte de una declaración de dependencia del productor de un procedimiento en el que se basa un productor estándar y el otro es no contingente y es parte de una declaración de dependencia del productor de un procedimiento en el que se basa un productor de determinación de la dependencia, y 2) las figuras I-J ilustran el uso de un acceso directo que no es contingente y que está en un estado declaración de dependencia del productor de un procedimiento en que se basa un productor estándar.
La figura 13G ilustra el pseudo código de las declaraciones de dependencia de los productores para los procedimientos que utilizan una dependencia del productor de acceso directo declarado contingente sin suscripción y una dependencia del productor de acceso directo declarada no contingente sin suscripción de acuerdo con una 15 realización de la invención, mientras que la figura 13H es un diagrama de bloques de productores que ilustran un procedimiento abreviado de una dependencia del productor de ejemplo declarada, contingente, sin suscripción y una dependencia del productor de acceso directo declarado no contingente sin suscripción de acuerdo con una realización de la invención. La figura 13G muestra: 1) una declaración de dependencia del productor 1345 para el procedimiento alfa 1305, donde la declaración de dependencia del productor 1345 incluye una dependencia del productor de acceso directo declarado contingente con un productor <P>GETC1::I1::M1; 2) una declaración de dependencia del productor 1350 en un procedimiento fly1 1355, donde la declaración de dependencia del productor 1350 incluye una dependencia del productor de acceso directo declarado no contingente en el productor C0::I0: GETC1, y donde el procedimiento fly1 1355 regresa como un argumento de una instancia de DEP, 3) la declaración de dependencia del productor 1332 de un procedimiento fly2 1362, donde el procedimiento fly2 1362 regresa como
25 un argumento de una instancia de DEP, y 4) la declaración de dependencia del productor 1365 para un procedimiento getc1 1370, donde el procedimiento getc1 1370 vuelve a C1 con un valor de CX o CY.
El procedimiento FLY1 1355 y su declaración de dependencia del productor 1350 son proporcionados por el tiempo de ejecución en respuesta a la dependencia declarada en el acceso directo <P>GETC1::I1::M1 (lo que indica que el acceso directo está siendo utilizado para la clave de clase). El procedimiento fly1 1355 incluye el código de la declaración de dependencia del productor 1360 que establece DEP.TYPE a conjuntos declarados descendentes sin suscripción DEP.PROD al productor CX::I1::M1 o CY::I1::M1 en función del valor de la salida C1 por el productor de C0::I0::GETC1, y vuelve DEP. Aunque en el ejemplo de la figura 13H, un <P> se utiliza para designar que es la clave de clase del productor que es contingente, realizaciones alternativas de la invención podrían utilizar otras
35 sintaxis. Además, aunque en el ejemplo de la figura 13H, un <P> se utiliza para designar que es la clave de clase del productor que es contingente, una realización de la invención soporta que tenga más y/o diferentes de los identificadores que componen la clave del productor que se indicará como contingente de esta manera.
En la figura 13G, un círculo 1 indica que la declaración de dependencia del productor 1345 es accedida (por ejemplo, como resultado de la designación de un productor basado en el procedimiento alfa 1305 como un productor de interés, como resultado de la detección automatizada de un productor basado en el procedimiento alfa 1305 como una progenie de un productor de interés, etc.). Un círculo 2 en la figura 13H muestra que el productor C0::I0::ALFA se instancia basado en el procedimiento alfa 1305. Un círculo 3 en la figura 13G indica que la dependencia del productor de acceso directo declarado se procesa para determinar la dependencia del productor y
45 el tiempo de ejecución que proporciona el procedimiento fly1 1355, y como resultado, un círculo 4 indica que la declaración de dependencia del productor 1350 es accedida.
Un círculo con una 5 en la figura 13H muestra que un productor C0::I0::FLY1 se instancia como un productor de determinación de la dependencia 1380. Un círculo 6 en la figura 13H indica que el productor C0::IO::ALFA está vinculado en el gráfico del productor para indicar que el productor C0::I0::FLY1 es un productor descendiente. Un círculo 7 en la figura 13G indica que la dependencia del productor del acceso directo declarado en C0::I0::GETC1 se procesa para determinar la dependencia del productor y el tiempo de ejecución que proporciona el procedimiento fly2 1362, y como resultado, un círculo 8 indica que la declaración de dependencia del productor 1332 es accedida. Un círculo de trazos 9 en la figura 13H muestra que un productor C0::I0::FLY2 se instancia. Un círculo de trazos 10
55 en la figura 13H indica que el productor C0::I0::FLY1 está vinculado en el gráfico del productor para indicar que el productor C0::I0::FLY2 es un productor descendiente.
Un círculo 11 en la figura 13H indica que el productor C0::I0::FLY2 se ejecuta y se devuelve DEP para identificar el productor C0::I0::GETC1. Un círculo 12 indica que el productor C0::I0::GETC1 se instancia, mientras que un círculo 13 indica que el productor C0::I0::GETC1 está vinculado en el gráfico del productor en el productor C0::I0::FLY1 como productor descendiente.
En la figura 13H, un círculo A indica que el productor C0::I0::GETC1 se ejecuta y vuelve C1 = CX al productor C0::I0::FLY1, mientras que un círculo B indica que el productor C0::I0::FLY1 se ejecuta y devuelve DEP para 65 identificar el productor CX::I1::M1, un círculo C indica que el resto no resuelto (procedimiento fly1) 1390 se ha resuelto ahora, y un círculo D indica la vinculación 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 los productores estándar 1385.
La generación fly mediante el tiempo de ejecución del productor de determinación de la dependencia C0::I0::FLY1 y C0::I0::FLY2 alivia al programador de la aplicación de tener que escribir el código de declaración de dependencia
5 explícita del productor y de crear instancias de los productores de la determinación de la dependencia basados en el mismo. Además, permite que el programador de la aplicación especifique directamente la dependencia contingente en un productor **::I1::M1 a través del procedimiento getC1 en la declaración de dependencia del productor del procedimiento alfa 1305, en oposición a la especificación del productor de determinación de la dependencia CW::IY::BETA.
La figura 13I ilustra el pseudo código de las declaraciones de dependencia de los productores de los procedimientos que utilizan una dependencia del productor de acceso directo declarado no dinámico (no contingente, sin 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 una dependencia del productor de ejemplo contextual declarada no dinámica de acuerdo
15 con una realización de la invención. La figura 13I muestra: 1) una declaración de dependencia del productor 1372 de un procedimiento alfa 1305, donde la declaración de dependencia del productor de instrucción 1372 incluye una dependencia declarada del productor de acceso directo a un productor 10, y 2) una declaración de dependencia del productor 1374 para un procedimiento fly 1376, donde la declaración de dependencia del productor 1374 está vacía, y donde el procedimiento fly 1376 vuelve como argumento de una instancia de DEP. El procedimiento fly 1776 y su declaración de dependencia del productor 1374 son proporcionados por el tiempo de ejecución en respuesta a la dependencia de acceso directo declarada. El procedimiento fly 1376 incluye el código de declaración de dependencia del productor 1378 que establece DEP.TYPE sin suscripción declarado, establece DEP.PROD al productor 10, y devuelve DEP.
25 En la figura 13I, un círculo 1 indica que la declaración de dependencia del productor 1372 es accedida (por ejemplo, como resultado de la designación de un productor basado en el procedimiento alfa 1305 como un productor de interés, como resultado de la detección automatizada de un productor basado en el procedimiento Alfa 1305 como una progenie de un productor de interés, etc.). Un círculo 2 en la figura 13J muestra que un productor C0::I0::ALFA se instancia basado en el procedimiento alfa 1305. Un círculo 3 en la figura 13I indica que una dependencia del productor de acceso directo declarado se procesa para determinar la dependencia del productor y el tiempo de ejecución proporcionada al procedimiento fly 1376, y como resultado, un círculo 4 indica que la declaración de dependencia del productor 1374 es accedida. Un círculo de trazos 5 en la figura 13J muestra que un productor C0::I0::FLY se instancia como un productor de determinación de la dependencia 1380. Un círculo de trazos 6 en la figura 13J indica que el productor C0::I0::ALFA está vinculado con el gráfico del productor para indicar que el
35 productor C0::I0::FLY es un productor descendiente.
Un círculo 7 en la figura 13J indica que el productor C0::I0::FLY se ejecuta y devuelve DEP para identificar el productor 10. Un círculo 8 indica que el productor 10 se instancia, mientras que un círculo 9 indica que el productor C0::I0::ALFA está vinculado en el gráfico del productor con el productor 10, indicando que es un productor descendiente. En la figura 13J, el productor C0::I0::ALFA y el productor 10 son productores estándar 1385.
Se debe entender que el programador del tiempo de ejecución, en una realización de la invención, escribe un solo procedimiento fly para interpretar todas las sintaxis y las combinaciones soportadas (por ejemplo, el procedimiento fly 1334, el procedimiento fly1 1355, el procedimiento fly2 1362, el procedimiento fly 1376) y lo incluye en el tiempo
45 de ejecución. Esto no sólo permite a los programadores de aplicaciones evitar la escritura de código para los productores de determinación de la dependencia donde un procedimiento fly puede ser utilizado, el programador del tiempo de ejecución sólo necesita escribir el procedimiento fly genérico (el fly único para todas las situaciones soportadas) una sola vez. Además, se debe entender que las dependencias de acceso directo declaradas para permitir un tiempo de ejecución que utiliza los productores de determinación de la dependencia, mientras que al mismo tiempo permite que un programador de la aplicación indique los productores estándar en las declaraciones de dependencia de los productores (por ejemplo, las figuras 13G-J).
Estructura de seguimiento del procedimiento
55 Con referencia de nuevo a la estructura de seguimiento del procedimiento de la figura 11D, contenidos de ejemplo de la columna ArgumentDependencies 1194, columna FieldDependencies 1196, columna SequencingDependencies 1195, la columna UpwardDependencies 1193, y la columna WeaklyConstrainedDependencies 1199 utilizadas en algunas realizaciones de la invención se describirán ahora. En concreto, la columna ArgumentDependencies 1194 almacena una colección de artículos, uno por cada ArgumentDependency. En una realización de la invención, cada artículo incluye lo siguiente: 1) el argumento de Identificación, 2) un identificador de la naturaleza de la clave de clase, siendo uno de clase explícita, la misma clase y la clase contingente, 3) un identificador de la clave de clase explícita de población, cuando el identificador de la clave de clase indica la naturaleza explícita de la clase, 4) el identificador de clave del procedimiento de determinación de la clase contingente poblada, cuando el identificador de la clave de clase indica la naturaleza de la clase contingente, 5) un identificador de la naturaleza de la clave de la
65 instancia, siendo uno de de instancia explícita, la misma instancia y la instancia contingente; 6) un identificador de la clave de la instancia explícita poblada, cuando el identificador de la instancia clave indica la naturaleza de la instancia explícita; 7) el identificador de la clave del procedimiento de determinación de la instancia contingentes poblada, cuando el identificador de la naturaleza de la clave de la instancia indica instancia contingente, 8) un identificador de la naturaleza de la clave del procedimiento, siendo uno del procedimiento explícito, el mismo procedimiento, y el procedimiento contingente; 9) un identificador de clave del procedimiento explícito lleno cuando
5 el identificador de clave de la naturaleza del procedimiento indica que procedimiento explícito; 10) el identificador de clave de determinación del procedimiento contingente poblado, cuando el identificador de la naturaleza de la clave del procedimiento indica que procedimiento contingente; y 11) un identificador de acceso directo que indica si la declaración de la dependencia del productor para el argumento en la declaración de dependencia del productor contenía una indicación de acceso directo (es decir, la declaración de dependencia del productor identifica directamente un productor descendiente estándar en lugar de un productor de determinación de la dependencia).
La indicación “… explícita” de los varios identificadores de la naturaleza de la clave se utiliza cuando la clave explícita se proporciona para la dependencia del productor en la declaración de dependencia del productor. A modo de ejemplo, la dependencia del productor "CW:: IY::BETA" de la declaración de dependencia del productor 1300 de
15 la figura 13A proporciona una clave de clase explícita, de ejemplo, y de procedimiento.
En algunas realizaciones de la invención, una técnica de enlace directo es compatible con las declaraciones de dependencia de los productores de tal manera que: 1) si una clase no está prevista para una dependencia de un productor determinado, entonces se utiliza la misma clase que el productor padre, y 2) si una clase e instancia no se prevén para una dependencia de un productor determinado, entonces se utiliza la misma clase e instancia que el productor padre. En otras realizaciones de la invención, una sintaxis se utiliza para permitir cualquier combinación de clase, instancia, y procedimiento, para ser el mismo que el padre (con la excepción de que todos sean iguales) (por ejemplo, un separador se utiliza para designar cada clase, instancia, y procedimiento, y una ausencia de este separador indica el mismo como padre -a título de ejemplo específico, la sintaxis puede ser "# C:", "# I:", y "# M:", tal
25 que una dependencia del productor en una declaración de dependencia del productor puede ser # C: "clave de clase"::# I: "clave de instancia"::# M: "clave de procedimiento") (donde cuotas indican un marcador de posición para un valor o una variable). La indicación “... mismo” de la naturaleza de los distintos identificadores clave se utiliza en esta técnica de acceso directo se utiliza en el estado de declaración de la dependencia del productor.
Tal como se indicó anteriormente, en algunas realizaciones de la invención una indicación de una dependencia del productor contingente se soporte a través de una sintaxis (por ejemplo, <P>) utilizada en la propia declaración de dependencia del productor (véase 1345 de la figura 13G), y esta sintaxis se puede utilizar en una o más de la clase, la instancia, y el procedimiento de una dependencia del productor. La indicación "… contingente" de los varios identificadores de la naturaleza de la clave se utiliza para identificar cuándo se produce una dependencia del
35 productor contingente, mientras que "identificador de la clave de procedimiento de determinación … contingente" indica la clave del procedimiento del productor descendiente (la clase y la instancia son los mismos que el del productor padre). A modo de ejemplo, la dependencia del productor "<P> GETC1::I1::M1" para la declaración de dependencia del productor 1345 de la figura 13G proporciona una clase contingente (donde la clave del procedimiento de determinación de la clase contingente es GETC1), una clave de instancia explícita, y una clave de procedimiento explícito.
La columna SequencingDependencies 1195, la columna UpwardDependencies 1193, y la columna WeaklyConstrainedDependencies 1195 almacenan, cada una, una colección de elementos, uno para cada SequencingDependency, UpwardDependency y WeaklyConstrainedDependency. En una realización de la invención, 45 cada elemento tiene la misma estructura que un elemento de la colección de ArgumentDependencies, excepto que no incluye un identificador de argumento. Además, aunque las figuras 13A-J ilustran dependencias sin suscripción declaradas descendentes procedentes de los productores de determinación de la dependencia, se debe entender que en el caso de una dependencia declarada ascendente o dependencia débilmente limitada, el productor de determinación de la dependencia puede devolver las otras dependencias discutidas con referencia a las figuras 7F-
G.
La columna FieldDependencies 1196 almacena una colección de elementos, uno para cada FieldDependency. Aunque en una realización de la invención, cada elemento incluye la clave del procedimiento de propiedad, en realizaciones alternativas de la invención pueden tener la misma estructura que un elemento de la colección de
55 SequencingDependencies.
Dependencias de Suscripción
En una realización de la invención, ambas dependencias de productores de suscripción y sin suscripción son compatibles. Cuando una dependencia del productor de suscripción se declara para un procedimiento determinado y un productor se instancia desde ese procedimiento dado, el tiempo 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. Si bien una realización de la invención es compatible con los productores de dependencia de suscripción y dependencia sin suscripción, realizaciones alternativas sólo soportan sin suscripción. Además, 65 aunque en una realización de la invención dos tipos de dependencias de suscripción son compatibles (absorbentes y adherentes), las realizaciones alternativas de la invención soportan más, menos, y/o diferentes tipos de
dependencias de productores de suscripción.
Las figuras 14A-C son diagramas de bloques que ilustran 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 del registro de suscripción
5 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, se debe entender que cualquier estructura de datos adecuada puede ser utilizada (por ejemplo, un mapa hash). La figura 14B es un diagrama de bloques de productores de ejemplo que ilustran una dependencia absorbente del productor de suscripción 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 ilustran una dependencia adherente del productor de suscripción no contingente de acuerdo con una realización de la invención. Dos filas se muestran en la tabla de la figura 14A llenas con contenido utilizado en los ejemplos de las figuras 14B-C. Los números rodeados con un círculo se utilizan en las figuras 14B-C para ilustrar el orden en que las operaciones se realizan de acuerdo con una realización de la invención.
15 En la figura 14A, una columna de claves del productor del suscriptor 1400, una columna del tipo de suscripción 1405, y un criterio de suscripción para la columna de los productores de activación 1410 se muestran para almacenar, respectivamente, el contenido correspondiente al nombre de la columna. Además, la figura 14A muestra un columna de modo de enlace 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 respecto a las figuras 14B-C.
La figura 14A muestra también una columna de productores coincidentes 1415 y una columna completada 1420 utilizada para las suscripciones de absorción. La columna de productores coincidentes 1415 se utiliza para almacenar las claves de producción de los productores de activación que cumplen los criterios de suscripción de la suscripción de absorción, mientras que la columna completa 1420 se utiliza para controlar si la suscripción de
25 absorción se ha completado durante la ejecución dada de un conjunto actual de los gráficos de los productores. Los productores coinciden con las columnas 1415 y la columna completa 1420 proporciona una optimización adicional opcional que permite el trabajo de exploración de los productores instanciados que se dividen entre la generación automatizada del gráfico del productor y la ejecución del gráfico del productor tal como se describe más adelante.
La figura 14A muestra también una columna de clase padre 1430, una columna del procedimiento padre 1435, y una columna de instancia padre 1437 utilizada para suscripciones adherentes. La columna de clase padre 1430, la columna del procedimiento padre 1435, y la columna de instancia padre 1437, respectivamente, almacenar la clave de clase, la clave de procedimiento, y la clave de instancia del productor padre que se creará para la suscripción adherente. Además, la figura 14A muestra una columna de referencia del productor de determinación de la
35 dependencia 1421 que almacena una referencia para el productor de determinación de la dependencia que crea la suscripción.
Suscripción de Absorción
En una dependencia del productor de suscripción de absorción, la dependencia es la colección de todos los productores de la estructura del gráfico(s) actual del productor que cumple con los criterios de suscripción de absorción. Con referencia a la figura 14B, un círculo 1 indica un productor 1450 que se instancia (por ejemplo, como resultado de la designación del productor 1450 como un productor de interés, como resultado del descubrimiento automatizado del productor 1450 como una progenie de un productor de interés, etc.). El productor 1450 se basa en
45 un procedimiento para el que la declaración de dependencia del productor incluye una dependencia del productor (por ejemplo, con ID de argumento X). Un círculo 2 indica la dependencia del productor del productor 1450 que se procesa para identificar un productor 1455.
Un círculo 3 indica que el productor 1450 está ligado (en el ejemplo anterior, a través del argumento ID X) en el gráfico del productor 1455 como un productor descendiente. Un círculo 4 indica la ejecución del productor 1455. El productor 1455 es un productor de determinación de la dependencia que incluye el código de declaración de dependencia del productor que indica una dependencia del productor de suscripción de absorción y que indique los criterios de suscripción de absorción. Como tal, la ejecución del productor 1455 resulta en rellenar el registro de suscripción. Respecto al ejemplo en la primera fila de la figura 14A, la columna de claves del productor del suscriptor
55 1400, la columna del tipo de suscripción 1405, el criterio de suscripción para la columna de los productores de activación 1410, la columna del modo de enlace padre 1425, y la columna de referencia de determinación de la dependencia del productor 1421 están, respectivamente, llenas con la clave de productor del productor 1450, una indicación de que la suscripción es del tipo de absorción, los criterios de suscripción de absorción contenidos en el productor 1455, el modo de enlace del productor 1450 vinculado al productor 1455 (que, en el caso de una suscripción absorbente será una dependencia de argumento e incluyen un ID de argumento, pero cuyo indicador de adherencia se indicará como no adherente -en el ejemplo anterior, Identificación del argumento de X), y una referencia al productor 1455 (el productor de determinación de la dependencia que crea la suscripción).
Los círculos 5A-N indican la instanciación de los productores 1460A-N. En este ejemplo, los productores 1460A-N
65 cumplen los criterios de suscripción absorbentes, y por lo tanto son productores de activación. Como tal, un círculo 6A-N indica la vinculación del productor 1450 con los productores 1460A-N (en el ejemplo anterior, a través del ID del argumento X). Un círculo 7 indica que la dependencia de la suscripción absorbente se completa para la ejecución actual del gráfico(s) del productor, y el productor 1450 se ejecuta a continuación.
En una realización de la invención, los criterios de suscripción absorbentes pueden ser una o más de cualquiera de
5 las claves que constituyen una clave del productor. Así, en realizaciones de la invención donde una clave del productor comprende una clave de clase, una clave de ejemplo, y una clave de procedimiento, los criterios de suscripción podrían ser una o más claves de este tipo. A modo de ejemplo con referencia a la figura 11C, una exploración a través de los productores instanciados para aquellos que cumplen los criterios de suscripción es una exploración a través de una o más de las tres primeras columnas del gráfico(s) del productor de la estructura para determinar si las claves de los productores instanciados coinciden con las claves de los criterios de suscripción de absorción. Aunque en una realización de la invención, los criterios de suscripción absorbentes pueden ser uno o más de cualquiera de las claves que constituyen una clave del productor, en realizaciones alternativas de la invención, los criterios de suscripción absorbentes se limitan a un subconjunto de las claves que constituyen una clave del productor.
15 Suscripción adherente
En una dependencia de la suscripción del productor adherente, la dependencia hace que un productor padre a instanciar para cada productor que cumpla con los criterios de suscripción adherentes. Con referencia a la figura 14C, un círculo 1 indica un productor 1470 que se instancia (por ejemplo, como resultado de la designación del productor 1470 como un productor de interés, como resultado del descubrimiento automatizado del productor 1470 como una progenie de un productor de interés a través de una dependencia de secuenciación (por ejemplo, como resultado de un SequencingDependency o WeaklyConstrainedDependency, etc.). El productor 1470 es un productor de determinación de la dependencia que incluye la dependencia del código de declaración del productor que indica
25 una suscripción adherente, los criterios de suscripción adherentes para los productores de activación, y las características de suscripción adhesivas para el productor padre que se va a crear.
La ejecución del productor 1470 resulta en poblar el registro de suscripción. Respecto al ejemplo en la segunda fila de la figura 14A, la columna de claves del productor del suscriptor 1400, la columna del tipo de suscripción 1405, y la columna de los productores de los criterios para la suscripción de activación 1410, respectivamente, se llenan con la clave de productor del productor 1470, una indicación de que la suscripción es del tipo adherente, y los criterios de suscripción adherentes para los productores de activación contenidos dentro del productor 1470. Además, la columna de la clase padre 1430, la columna del procedimiento padre 1435, la columna de instancia padre 1437, y la columna del modo de enlace 1425 del productor padre que a está vinculado al productor de activación se llenan con
35 las características de suscripción adherentes para el productor padre que se puede crear -en esta realización de la presente invención, respectivamente, la clase del productor padre a instanciar, el procedimiento del productor padre a instanciar, el productor padre de ejemplo a instanciar (si se deja en blanco, sería igual a la clave de instancia del productor de activación), el modo de enlace (que, en el caso de la suscripción adherente, puede ser: 1) dependencia de argumento, campo, o secuenciación, 2) el argumento de identidad si una dependencia de argumento -el ID de argumento del productor padre está relacionada con el productor de activación (por ejemplo, el argumento de Identificación Y). Además, la columna de referencia del productor de determinación de dependencia 1421 se llena con una referencia para el productor de determinación de la dependencia que creó la suscripción (en la figura 14C, el productor 1470).
45 Con referencia a la figura 14C, un círculo 2 indica un productor 1475 que se instancia (por ejemplo, como resultado de la designación del productor 1475 como un productor de interés, como resultado del descubrimiento automatizado del productor 1475 como una progenie de un productor de de interés, etc.). Además, se determina si el productor 1475 cumple los criterios de suscripción adherentes para un productor de activación. Un círculo 3 indica que responde al productor de activación 1475, un productor 1480 se instancia basado en las características de suscripción adherentes 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 procedimiento, la clave de ejemplo, y el modo enlace se accede desde la columna de clase padre 1430, la columna del procedimiento padre 1435, la columna de ejemplo 1437, y la columna del modo de enlace padre 1425, respectivamente. El productor padre tiene una clave del productor que comprende la clave de clase visitada, la clave de instancia visitada (si se deja en blanco, la clave de instancia del productor de activación
55 (en la figura 14C, el productor 1475)), y la clave del procedimiento accedido -en el ejemplo de la figura 14C, este es el primer productor 1480. Un círculo 4 indica que el productor padre instanciado 1480 está vinculado con el gráfico de productor al productor de activación descendiente 1475 a través del modo de enlace accedido (en el ejemplo anterior, el tipo del modo de enlace = dependencia del argumento, el argumento del modo de enlace ID = Y). También en el círculo 4, en el caso de una dependencia del argumento, el indicador adherente se establece para indicar adherente -cuya dependencia del productor en esa posición de la declaración de dependencia del productor para el procedimiento en que se basa el productor padre instanciado 1480 debería ser ignorado por el productor 1480 -esto evita que el enlace creado por la dependencia del productor de suscripción adherente que se sobrescriben mediante las operaciones posteriores de generación automatizada de gráficos del productor.
65 En una realización de la invención, los criterios de suscripción adherente para los productores de activación pueden ser una o más de las claves que constituyen una clave del productor. Así, en realizaciones en las que una clave del productor comprende una clave de clase, una clave de instancia, y una clave de procedimiento, los criterios de suscripción adherentes de activación pueden ser una o más de las claves de clase, instancia, y procedimiento. A modo de ejemplo con referencia a la figura 11C, una exploración a través de los productores instanciados para aquellos que cumplen los criterios de suscripción adherentes para los productores de activación es una exploración
5 a través de una o más de las columnas primera a tercera del gráfico(s) del productor de la estructura para determinar si las claves de los productores instanciados coinciden con las claves de los criterios de suscripción adherentes para los productores de activación. Aunque en una realización de la invención, los criterios de suscripción adherentes para los productores de activación pueden ser una o más de las claves que constituyen una clave del productor, en realizaciones alternativas de la invención, los criterios de suscripción absorbentes puede ser un número más limitado de las claves que constituyen una clave del productor.
Las figuras 14D-E ilustran la elección de un productor padre basado en un productor padre de determinación de la dependencia de acuerdo con una realización de la invención. Aunque las figuras 14D-E se describen con referencia a las dependencias de argumento, realizaciones de la invención pueden soportar el uso de las dependencias de
15 secuenciación y de campo.
La figura 14D ilustra la elección de un productor padre basada en un productor padre de determinación de la dependencia creada 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 activación 1475, sin embargo, más que el productor 1480, la figura 14D muestra un productor de determinación de la dependencia 1480 creada mediante la suscripción adherente de un 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, el argumento ID = X, y indicador adherente = adherente. Tal como se ilustra por la línea discontinua curvada desde el productor 1475 al productor de determinación de la dependencia 1480, el DEP devuelto por el productor de determinación de la
25 dependencia puede estar basado en la propia salida del productor 1475 (el argumento del ID de argumento = X). En la figura 14D, el productor de determinación de la dependencia 1480 devuelve una productor de dependencia sin suscripción ascendente declarado en un productor 1482, con el modo de enlace indicando la dependencia de argumento y el argumento ID = Y. Aunque los identificadores de argumento X e Y se utilizan en la figura 14D para demostrar que pueden variar, debe entenderse que pueden ser iguales.
La figura 14E ilustra la elección de un productor padre basada en un productor padre de determinación de la dependencia creada por un productor descendiente de determinación de la dependencia, que está vinculado al productor de determinación de la dependencia descendiente mediante 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, en concreto, el
35 productor 1475, 1480, y 1482 se sustituyen con los productores 1486, 1496 y 1498. Sin embargo, más que el productor de suscripción adherente 1470 que crea el vínculo entre los productores 1480 y 1475, el productor 1486 tiene una dependencia de secuenciación de un productor de determinación de la dependencia 1494 (por ejemplo, creado a través de UpwardDependency o WeaklyConstrainedDependency a), que crea el productor de determinación de la dependencia 1496 a través de una dependencia sin suscripción ascendente declarada.
Es destacable que las suscripciones adherentes y las dependencias declaradas sin suscripción ascendentes (por ejemplo, creadas a través de UpwardDependencies y/o WeaklyConstrainedDependencies) causan una construcción inferior de un gráfico del productor (en oposición a la construcción superior hacia abajo que se ha descrito anteriormente en este documento). Además, esta construcción de abajo hacia arriba no se limita a la construcción
45 de un solo nivel, sino que puede ser de varios niveles (por ejemplo, si debido a una suscripción adherente o sin suscripción ascendente de dependencia declarada, un productor padre se instancia, que el mismo productor padre también puede ser un productor de activación para una suscripción adherente o puede incluir una dependencia sin suscripción ascendente declarada y hacer que la instanciación de otro productor padre, y así sucesivamente). En este sentido, las suscripciones adherentes, así como las dependencias sin suscripción ascendentes declaradas, inversa a la construcción del gráfico del productor.
Aunque en algunas realizaciones de la invención, los productores padre identificados por las características de suscripción adherentes son productores estándar (ver la figura 14C), realizaciones alternativas pueden implementarse para soportar la identificación de otros tipos de productores. Por ejemplo, en las realizaciones de la 55 invención que permiten las características de suscripción adherentes para identificar un productor de determinación de la dependencia (véase la figura 14D), este productor de determinación de la dependencia puede acceder a la salida del productor de activación y puede, sobre la base de esa salida, desencadenar la creación de un productor particular como productor padre que hay que adherir al descendiente (este productor padre ya podría existir o no, y si ya existe, simplemente está vinculado, y el productor descendiente se agrega a su argumento; si no existe todavía, se crea). El caso en el que el productor de determinación de la dependencia devuelve un productor constante imita una suscripción absorbente. El caso en el que el productor de determinación de la dependencia devuelve un productor cuyo ejemplo clave es único para cada productor de activación (por ejemplo, devuelve un productor cuya clave de instancia es la clave del productor del productor de activación) se traduce en un productor padre separado del productor descendiente y se le conoce como una suscripción adherente pura. El caso en el que 65 el productor de determinación de la dependencia devuelve una clave de instancia que no es ni constante ni única para cada productor de activación, se pueden mezclar los comportamientos de las suscripciones adherentes puras y
las suscripciones de absorción y se conoce como una suscripción adherente no pura.
Ventajas de ejemplo
5 Tal como se describió previamente, en una realización de la invención, las dependencias de los productores se declaran para procedimientos como una forma de especificar la invocación de secuenciación del procedimiento utilizando las instancias apropiadas (donde las instancias apropiadas incluyen las instancias a utilizar como argumentos, las instancias a utilizar por los procedimientos de instancia , y las instancias de la clase meta utilizadas por los procedimientos de clase) sin necesidad de utilizar la invocación manual del código de secuenciación, efectivamente, el trabajo de generar parte o la totalidad del manual de invocación del código de la secuencia se sustituye por: 1) el trabajo realizado por el programador de la aplicación para escribir las declaraciones de dependencia de los productores y 2) el trabajo realizado por el tiempo de ejecución para descubrir y construir el gráfico(s) del productor y ejecutar los productores de ese gráfico(s) del productor. Aunque el esfuerzo de escribir el tiempo de ejecución es relativamente grande, se necesita sólo ser escrito una vez porque puede utilizarse para
15 ejecutar todas las aplicaciones orientadas a objetos escritos para el tiempo de ejecución, en cambio, para una aplicación típica, el esfuerzo de escribir las declaraciones de dependencia del productor es relativamente bajo en comparación con la escritura manual del código de invocación de la secuenciación.
[0297]No dinámicos dependencias productores prevén una manera de especificar la invocación de procedimientos de secuenciación incondicional de código, y así evitar la necesidad de escribir la invocación incondicional de secuenciación manual del código. Dependencias de contingentes de productores prevén una forma de especificar el procesamiento condicional, y por lo tanto elimina la necesidad de escribir código de invocación condicional manual de secuenciación. Soporte a las dependencias de productores que permitan una colección de los productores para 25 ser devueltos prevé una forma de especificar el relleno de una colección antes de que se pasa como un parámetro, y así evitar la necesidad de escribir varias llamadas en la invocación manual de código de secuencia para rellenar una colección antes de que se pasa como un parámetro. Soporte a las suscripciones proporciona un entorno en el que un programador no tiene que escribir código específico de escucha para cada tipo de objeto a ser escuchado (por ejemplo, en una hoja de cálculo gráfico de programación orientado a productores, una suscripción a la absorción puede ser utilizado para calcular un promedio de un rango de celdas (cada célula es un productor) haciendo que los criterios de suscripción de absorción identificar las células dentro de la gama, y volver a calcular el promedio cada vez que un nuevo productor se agrega a la suscripción de la absorción, en una hoja de cálculo gráfico de programación orientado a productores, una suscripción adherente puede ser utilizado como un conversor de divisas por tener los criterios de suscripción adherentes identificar las células mantiene el contenido de la moneda y las
35 características adhesivas de suscripción del productor adherente (s) para crear una instancia que realizar la conversión de moneda (los productores (la celebración de los importes convertidos) creados por las suscripciones adherentes sería entonces disponible para su visualización en otras células).
Operación
Nuevos comandos de instancia
La figura 15 es un diagrama de flujo para instanciar nuevas instancias de acuerdo con una realización de la invención. Tal como se ha descrito anteriormente con referencia a la figura 10, el nuevo módulo de clase 1095 de la
45 figura 10 puede ser implementado como parte del nuevo módulo de instancia 1098. El diagrama de flujo de la figura 15 asume esta realización y se lleva a cabo por el nuevo módulo de instancia 1098; la parte del diagrama de flujo de la figura 15 que representa el nuevo módulo de clase 1095 se muestra como el bloque de trazos 1580, que incluye los bloques 1540 y 1550.
En respuesta a un comando de nueva instancia (bloque 1510), el control pasa al bloque 1520. En el bloque 1520, se determina si la instancia ya existe. Si no es así, el control pasa al bloque 1530, de lo contrario, no es necesario crear una instancia y el control pasa al bloque 1570, en el que se termina el diagrama de flujo. En una realización que soporta claves de instancia, el bloque 1520 se realiza mediante el acceso a la estructura de seguimiento de instancia 1065 de la figura 10 para la clave de instancia (y la clave de clase si las claves de instancia no tienen que ser únicas
55 a través de las clases) proporcionada como parte del nuevo comando de instancia.
En el bloque 1530, se determina si la definición de clase de la instancia ya está cargada. Si no es así, el control pasa al bloque 1540, de lo contrario, el control pasa al bloque 1560. En una realización que admite claves de clase, el bloque 1540 se realiza mediante el acceso a la estructura de seguimiento de clase 1092 de la figura 10 para la clave de clase proporcionada como parte del nuevo comando de instancia.
En el bloque 1540, la clase se carga y el control pasa al bloque 1550. En el bloque 1550, la definición de clase se almacena de acuerdo con la clave de clase y se realiza introspección, incluyendo cualquier declaración de dependencia de los productores (almacenada por la clave del procedimiento dentro de la clase -ver la figura 11D). 65 Desde el bloque 1550, el control pasa al bloque 1560. Con referencia a la figura 10, lo siguiente se realiza en bloques 1540 y 1550: 1) la clase se carga a partir de las definiciones de clase que incluyen la lógica de negocio 1010
en las clases 1054 (esta carga resulta carga en los procedimientos y las declaraciones de dependencia de los productores de la clase se almacenan en el procedimiento y las declaraciones de dependencia de los productores 1056), 2) la clase se añade a la estructura de seguimiento de la clase 1092, y 3) los procedimientos se añaden a la estructura del procedimiento de seguimiento 1058. Además, las clases de salida de los procedimientos se cargan.
5 En el bloque 1560, una instancia de la clase se instancia y se almacena de acuerdo con la clave de instancia. Con referencia a la figura 10, la instancia se instancia en las instancias 1052, y el ejemplo se añade a la estructura de seguimiento de instancias 1065. Desde el bloque 1550, el control pasa al bloque 1570 en el que el diagrama de flujo termina. En algunas realizaciones de la invención en las que se utiliza una técnica de asignación de objetos
10 relacional, los datos pueden ser cargados desde un origen de datos externo para llenar el campo de la instancia como parte del bloque 1560.
En algunas realizaciones de la invención, las clases y las instancias se pueden cargar/ejecutar en un modo en que el tiempo de ejecución con el soporte de programación orientado al gráfico del productor no es consciente (por 15 ejemplo, en la figura 9A, si el tiempo de ejecución 915 carga/instancia sin que el tiempo de ejecución 910 sea consciente). En tales casos, las realizaciones de la invención que también soportan la clave de instancia son un ejemplo de la clase InstanceKey (que tiene dos elementos: una naturaleza de clave de instancia indicando si el identificador de clave es una referencia a la instancia u otro objeto (tal como una cadena), y un identificador de clave que puede ser una referencia a la instancia, o a otro objeto (tal como una cadena)), los bloques 1520 y 1530 20 preguntarán a si la instancia y la clase se instancian/cargan de una manera en la que el tiempo de ejecución con el soporte de programación orientado al gráfico del productor es consciente. En los casos en los que el tiempo de ejecución con el soporte de programación orientada al gráfico del productor no tiene conocimiento de una clase ya cargada, la clase no se puede cargar, pero la clase se añade a la estructura de seguimiento de la clase 1092 y los procedimientos se añaden a la estructura de seguimiento del procedimiento 1058. En los casos en los que el tiempo
25 de ejecución con el soporte de programación orientado al gráfico del productor no tiene conocimiento de una instancia ya creada, la instancia no se instancia, pero la instancia se agrega a la estructura de seguimiento de la instancia 1065.
Nuevo productor y Comandos Anulados
30 La figura 16 es un diagrama de flujo para instanciar nuevos productores y anular 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 mediante el módulo de generación del gráfico del productor automatizado 1040 y el módulo del productor de anulación 1045 (o, tal como se ha descrito con referencia a realizaciones alternativas respecto a la figura 10, el módulo que se encarga de la
35 anulación y la inversión de la anulación).
En respuesta a un nuevo comando del productor (bloque 1600), el control pasa al bloque 1605. En una realización de la invención, un nuevo comando del productor puede ejecutarse en respuesta a una variedad de situaciones. La tabla 2 a continuación identifica las diversas situaciones y los parámetros pasados de acuerdo con una realización
40 de la invención.
TABLA 2
- Situaciones
- Productor que llama Productor llamado (a ser creado si no existe) Tipo de llamada Modo de enlace Referencia del productor de determinación de la dependencia
- Productor de interés
- N/A Productor de interés que se crea De interés N/A N/A
- No suscripción declarada descendente
- Padre Descendiente No suscripción declarada descendente Modo de enlace del productor padre que llama Productor de determinación de la dependencia que proporciona la dependencia
- Situaciones
- Productor que llama Productor llamado (a ser creado si no existe) Tipo de llamada Modo de enlace Referencia del productor de determinación de la dependencia
- Suscripción adherente
- Descendiente Padre (clase padre, procedimiento y clave de instancia a partir de las características de suscripción adherentes para el productor padre a crear, si clave de instancia está en blanco, la clave de instancia del productor descendiente que llama existente) Adherente Modo de enlace del productor padre llamado a partir de las características de suscripción adherentes para el productor padre a crear Productor de determinación de la dependencia que proporciona la dependencia
- Anulación
- N/A Productor a anular Anulado N/A N/A
- No suscripción ascendente declarada
- Descendiente Padre No suscripción ascendente declarada Modo de enlace del productor padre llamado Productor de determinación de la dependencia que proporciona la dependencia
En el bloque 1605, se determina si el productor ya existe. Si no, el control pasa al bloque 1610, de lo contrario, el control pasa al bloque 1670. El bloque 1605 se lleva a cabo mediante el acceso a una clase, instancia, y al
5 procedimiento identificado (por ejemplo, por la clave y/o la referencia) como parte del nuevo comando del productor. En una realización que soporta las claves de los productores, el bloque 1605 se realiza mediante el acceso al gráfico(s) del productor de la estructura 1060 de la figura 10 para la clave del productor proporcionada como parte del nuevo comando del productor (la clave del productor en la columna del productor llamado de la Tabla 2).
10 En el bloque 1610, el nuevo módulo de instancia se llama con un nuevo comando de instancia y el control pasa al bloque 1615. En una realización de la invención, el bloque 1610 se realiza mediante una llamada al diagrama de flujo de la figura 15 utilizando la clave de instancia de la clave del productor en la columna del productor llamado de la Tabla 2.
15 En el bloque 1615, se accede a la definición de clase de la instancia del productor y el control pasa al bloque 1620. Con referencia a la figura 10, el bloque 1615 se realiza mediante el uso de la clave de clase de la clave del productor en la columna del productor llamado de la Tabla 2 para acceder a la apropiada de las clases 1054 de acuerdo con la estructura de seguimiento de la clase 1092.
20 En el bloque 1620, el procedimiento y la declaración de dependencia del productor del productor se acceden y el control pasa al bloque 1625. Con referencia a la figura 10, el bloque 1620 se realiza usando la clave del productor de la clave del procedimiento en la columna del productor llamado de la Tabla 2 para acceder al apropiado de los procedimientos y las declaraciones de dependencia de los productores 1056 de la clase situada en el bloque 1615.
25 En el bloque 1625, el productor se añade al gráfico del productor 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 suscripción registrada, el criterio de filtrado de la 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
30 se considera registrada cuando se añade al registro de suscripción. Ejemplos de operaciones para registrar la suscripción se describen más adelante en este documento. El bloque 1630 es opcional, que permite la optimización de la labor de la exploración de los productores de instancias que se divide entre la generación automatizada del gráfico del productor y la ejecución del gráfico del productor. Como tal, una realización alternativa de la invención puede no realizar el bloque 1630.
35 En el bloque 1635, el productor está vinculado al gráfico(s) del productor si es llamado debido a una dependencia. Desde el bloque 1635, el control pasa al bloque 1640. La manera de llevar a cabo el bloque 1635 depende de la situación que se tradujo en el nuevo comando del productor que se está ejecutando (ver la figura 20). Por ejemplo, si la situación es que este es un productor de interés o un productor de suplantación, entonces no se llama debido a la
40 dependencia y no se hace nada. En contraste, si la situación es sin suscripción declarada descendente, entonces se llama debido a una dependencia sin suscripción declarada descendente; y con referencia a la realización de la invención en la figura 11C, se realiza lo siguiente: 1) el productor(es) padre se enlaza en la columna 1150 del productor descendiente llamado (columna del productor llamado de la tabla 2) se modifica con una referencia del productor padre en la fila del productor padre que llama (la columna del productor que llama de la tabla 2) y la referencia de determinación de la dependencia del productor (columna de referencia de determinación de la dependencia del productor de la Tabla 2), y 2) la columna de enlace(s) del productor(es) descendiente 1160 de la fila del productor padre que llama (columna del productor que llama de la tabla 2) se modifica con una referencia al productor descendiente en la fila del productor descendiente llamado (la columna del productor llamado de la Tabla
5 2), una referencia del productor de determinación de la dependencia (la columna de referencia del productor de determinación de la dependencia de la Tabla 2), y un modo de enlace (establecido de acuerdo con la columna del modo de enlace de la Tabla 2).
En contraste, si la situación es una suscripción adherente, entonces se llama debido a un productor de activación
10 que se identifica, y con referencia a la realización de la invención en la figura 11C, se realiza lo siguiente: 1) la columna de enlace(s) del productor padre 1150 del productor descendiente que llama (la columna del productor que llama de la tabla 2) se modifica con una referencia del productor padre en la fila del productor padre que llama (la columna del productor llamado de la tabla 2) y la referencia del productor de determinación de la dependencia (la columna de referencia de determinación de la dependencia del productor de la Tabla 2), y 2) el enlace(s) del
15 productor(es) descendiente 1160 de la fila del productor padre que llama (columna del productor que llama de la tabla 2) se modifica con una referencia al productor descendiente en la fila del productora descendiente que llama (columna del productor que llama de la Tabla 2), una referencia del productor de determinación de la dependencia (columna de referencia de la determinación de la dependencia del productor de la Tabla 2), un modo de enlace (establecido de acuerdo con la columna del modo de enlace de la Tabla 2) y un indicador adherente establecido
20 para indicar la adherencia. En este respecto, la situación de una no suscripción declarada ascendente que se maneja es una manera similar a la suscripción adherente.
En el bloque 1640, el productor está marcado como no ejecutado y el control pasa al bloque 1645. Con referencia a la realización de la invención en la figura 11C, la columna de marcado de la ejecución incremental 1180 de la fila
25 correspondiente se rellena con una indicación no ejecutada.
En el bloque 1645, se determina si el productor tiene alguna dependencia y no está anulada. Si es así, el control pasa al bloque 1650, de lo contrario, el control pasa al bloque 1665. El bloque 1645 se lleva a cabo mediante la comprobación de la declaración de dependencia en el bloque productor de acceso 1620 y la columna del tipo de
30 llamada de la Tabla 2.
En el bloque 1650, para cada dependencia en la declaración de la dependencia del productor que se va a resolver ahora, se determina el número de productores y un nuevo comando del productor se invoca para cada uno. Desde el bloque 1650, el control pasa al bloque 1655. Diferentes realizaciones de la invención determinan los diferentes tipos
35 de dependencia en diferentes momentos, la realización del bloque 1650 es una realización de ejemplo de la invención que se describirá más adelante en este documento.
En el bloque 1655, el productor se añade en el registro de inicio de ejecución si todos los productores que dependen existen y han sido ejecutados. Desde el bloque 1655, el control pasa al bloque 1660. Cuando, por un productor dado 40 instanciado como parte de la iteración actual de este flujo, el bloque 1655 se realiza, a continuación, la invocación de otra iteración de este flujo para un productor, el productor dado dependiente devolverá el estado de ejecución de ese productor (véase el bloque 1660) (por ejemplo, respecto a la realización de la invención de la figura 11C, el estado de la columna de marcado de la ejecución incremental 1180 de la(s) fila(s) correspondiente (s)). Si todos los productores dependientes existen y el estado de ejecución de todos los productores dependientes se ejecuta, a
45 continuación, el productor de la iteración actual se añade al registro de inicio de ejecución.
En el bloque 1660, el estado de ejecución del productor se devuelve como un parámetro.
En el bloque 1670, similar al bloque 1635, el productor está vinculado al gráfico(s) del productor si es llamado por
50 una dependencia. Desde el bloque 1670, el control pasa al bloque 1675. El bloque 1670 puede ser alcanzado por una variedad de razones. Por ejemplo, el bloque 1670 se puede alcanzar debido a que el productor crea una instancia que anteriormente responde a un comando de anulación del productor, pero no vinculado en el gráfico del productor. Como otro ejemplo, el bloque 1670 se puede alcanzar porque el productor ya es parte de un gráfico del productor y se añade a otro (por ejemplo, en respuesta con anterioridad a la instancia que es un productor de
55 interés, una progenie de un productor de interés, etc.)
En el bloque 1675, se determina si el nuevo flujo del productor se llama debido a una anulación, a una dependencia de suscripción adherente, o una dependencia declarada ascendente sin suscripción. Si es así, el control pasa al bloque 1680, de lo contrario, el control pasa al bloque 1660. El bloque 1675 lleva a cabo el control de la columna de
60 tipo de llamada de la Tabla 2 para ver si es una llamada para un productor de anulación, una dependencia de suscripción adherente, o una dependencia sin suscripción declarada ascendente.
En el bloque 1680, similar al bloque 1640, el productor está marcado como no ejecutado y el control pasa al bloque 1665. El bloque 1680 puede ser alcanzado por una variedad de razones.
65 En el bloque 1665, el productor se añade al registro de inicio de la ejecución, si no está ya presente, y el control pasa al bloque 1660.
En respuesta a un comando de anulación del productor (bloque 1690), el control pasa al bloque 1695. En el bloque
5 1695, el productor está marcado como no anulado y el control pasa al bloque 1640. Con referencia a la realización de la invención de la figura 11C, el caché del productor de salida y la columna de indicaciones de salida del productor de anulación 1170 de la fila del productor son accedidos y alterados para indicar que el productor ya no está anulado. Continuando con este flujo, el bloque 1640 daría lugar al bloque 1645, y si el productor tenía cualquier dependencia, al bloque 1650, lo que provocaría que el gráfico del productor bajo el productor que fuera descubierto y construido, si no lo estaba ya. Si el gráfico del productor bajo el productor ya está descubierto y construido, a continuación, la invocación del nuevo comando del productor dará lugar a flujos que van de 1600 a 1605, a 1670, y así sucesivamente, además, el regreso del estado de ejecución de los productores del gráfico en el marco del productor en el bloque 1660 determinará si el productor se añade en el registro de inicio de ejecución en el bloque 1655. Sin embargo, si el gráfico del productor bajo el productor no se descubre y se construye, a continuación, la
15 invocación del nuevo comando del productor se traducirá en que se descubren y construyen los flujos que van de 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. Por lo tanto, los flujos de control del bloque 1645 al bloque 1700 en el bloque 1650. En 1700, por categorías, para cada dependencia en la declaración de dependencia del productor (uno por cada ArgumentDependency, FieldDependency, SequencingDependency, UpwardDependency y WeaklyConstrainedDependency), los siguientes bloques 1705-1745 se llevan a cabo. Con referencia a las figuras 10 y 11D, la estructura de seguimiento del procedimiento es accedida para determinar la información relativa a la dependencia del productor. También debe entenderse que los bloques 1715, 1725, 1730, 1740, 1745 y 1750 son
25 una optimización cuando se realizan antes de la ejecución del gráfico del productor.
En el bloque 1705, se determina si la dependencia es un argumento de dependencia vinculado ya debido a una dependencia adherente. Si es así, el control pasa al bloque 1710 donde el flujo se completa para esta dependencia, de lo contrario, el control pasa al bloque 1715. Respecto a la realización de la invención que se muestra en la figura 11C, el indicador adherente se comprueba para determinar si el ID del argumento de esta dependencia está sujeto a una dependencia de argumento de suscripción adherente o a una dependencia de argumento declarado ascendente.
En el bloque 1715, se determina si la dependencia es una dependencia contingente. Si es así, el control pasa al
35 bloque 1720, de lo contrario, el control pasa al bloque 1725. El bloque 1715 se lleva a cabo mediante la comprobación de la declaración de dependencia del productor del productor descendiente identificado por la dependencia para determinar si está vacío (el productor descendiente es un productor independiente). Respecto a las figuras 13A-J, esto sería cierto para los productores con números rodeados con líneas de trazos (por ejemplo, en la figura 13D, el productor CU::IV::DELTA), pero no es cierto para los otros productores (por ejemplo, en la figura 13D, el productor CW::IY::BETA). Así, con referencia a la figura 13D, el bloque 1715 está representado por un círculo 1, 4, y 8. El bloque 1715 y el flujo desde el mismo a través de los bloques 1725-1750 es una optimización que evita la adición/vinculación con los productores de los números rodeados con líneas de trazos del gráfico del productor, así como dividir el trabajo de los productores de ejecución entre la generación del gráfico del productor automatizado y la ejecución del gráfico del productor.
45 En el bloque 1720, un nuevo comando del productor para el productor de determinación de la dependencia se invoca y termina el flujo. Por ejemplo, con referencia a la figura 13D, el bloque 1720 causa lo que está representado por un círculo 5, 6, y 7.
En el bloque 1725, el productor de determinación de la dependencia se ejecuta y el control pasa al bloque 1730. Por ejemplo, con referencia a la figura 13D, el bloque 1725 está representado por un círculo 11 (por lo tanto, el flujo de la figura 17 ilustra la realización que se ha descrito previamente, en el que un círculo 9 y 10 de la figura 13D no se realizan).
55 En el bloque 1730, se determina si la dependencia es una dependencia sin 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, el código de determinación de la dependencia del productor en el procedimiento del productor de determinación de la dependencia, que es parte de la declaración de dependencia del productor del productor padre, es ejecutado. Una vez ejecutada este código de declaración de la dependencia del productor, cuyo código sería identificar si se determina que esta dependencia es una dependencia de suscripción, el tipo de dependencia del productor del productor padre. Respecto al ejemplo en la figura 13D, el círculo 11 se traduciría en el flujo de la figura 17 que pasa 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
65 determinación de la dependencia en el bloque 1725 y un nuevo comando del productor se invoca para cada uno, utilizando los argumentos descritos en la Tabla 2, incluyendo la referencia del productor de determinación de la dependencia ejecutado en 1725. Por ejemplo, con referencia a la figura 13D, el bloque 1750 causaría los círculos 12 y 13 y los círculos C y D.
Con referencia al ejemplo de suscripción absorbente de la figura 14B, el bloque 1725 representa un círculo 4; que 5 hace que el flujo pase a través del bloque 1730 al bloque 1740.
En el bloque 1740, la suscripción se agrega al registro de suscripción, y si la suscripción se absorbe, se marcará como incompleta. Desde el bloque 1740, el control pasa al bloque 1745. Con referencia a la realización de la invención que se muestra en la figura 14A, el registro de suscripción se rellena con la suscripción tal como se describió previamente.
En el bloque 1745, todas las instancias de los productores se analizan para ver si coinciden con los criterios de la suscripción (y por lo tanto, es un productor de activación), y las coincidencias son procesadas.
15 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. Por lo tanto, el control fluye desde el bloque 1740 al bloque 1800 al bloque 1745. En el bloque 1800, para cada productor instanciado, los siguientes bloques 1810-1830 se llevan a cabo.
En el bloque 1810, se determina si el productor cumple con los criterios de la 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. Con referencia a las realizaciones de la invención que se muestran en las figuras 11C y 14A, el gráfico(s) del productor se accede a determinar si se incluyen los productores que cumplen los criterios de la suscripción.
25 La forma de procesar 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 de absorción, el control pasa al bloque 1825, de lo contrario, el control pasa al bloque 1820. El bloque 1815 se realiza sensible al tipo de suscripción añadida en el bloque 1740 ó 2235.
En el bloque 1825, el productor coincidente se añade en el registro de suscripción y el productor con la suscripción de la absorción está relacionado con el productor correspondiente. 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) los criterios de suscripción a partir de los criterios de suscripción para la columna de los productores de activación 1410 se utiliza en el bloque 1810 y un productor coincidente fue localizado (por ejemplo, uno de los
35 productores 1460A-N), 2) el productor coincidente se agrega a la columna del productor coincidente 1415 en la fila de la suscripción, y 3) el productor con la suscripción de absorción (por ejemplo, el productor 1450) está vinculado al productor coincidente (por ejemplo, uno de los productores 1460A-N) en la estructura del gráfico(s) de productor de la figura 11C (utilizando 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 dada).
En el bloque 1820, un nuevo comando del productor se invoca para el productor padre que se va a crear. Desde el bloque 1820, el control pasa al bloque 1830 donde el diagrama de flujo termina para el productor actual seleccionado en el bloque 1800. Con referencia a las realizaciones de la invención que se muestran en las figuras 45 14A y 14C, se realiza lo siguiente: 1) los criterios de suscripción de los criterios de suscripción para la columna de los productores de activación 1410 se utilizó en el bloque 1810 y un productor coincidente fue localizado (por ejemplo, el productor 1475), y 2) un nuevo comando del productor se invoca con los parámetros de la tabla 2 ajustados como los siguientes: a) tipo de llamada es la suscripción adherente, b) el productor de llamada es la clave del productor del productor descendiente de llamada (por ejemplo, el productor 1475); c) productor llamado es la clave del productor del productor padre llamado a crear (por ejemplo, el productor 1480), estando formada la clave del productor usando la clase padre, la instancia, y la clave del procedimiento a partir de las características de suscripción adherentes para el productor padre a crear (figura 14A, columnas 1430, 1435 y 1437) (si la clave de la instancia está vacía, se utiliza la clave de instancia del productor hijo de llamada), d) el modo de enlace para el productor padre llamado (figura 14A, columna del modo de enlace 1425); y e) la referencia del productor de
55 determinación de la dependencia se extrae de la columna de la referencia del productor de determinación de la dependencia 1421 del registro de suscripción 14A para la suscripción determinada adherente.
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. Por lo tanto, el control fluye del bloque 1625 al bloque 1900 al bloque 1630. La figura 19 es muy similar a la figura 18. En concreto, los bloques 1910, 1915, 1920 y 1930 de la figura 19 son idénticos a los bloques 1810, 1815, 1820 y 1830, mientras que los bloques 1900 y 1925 difieren de los bloques 1800 y 1825. Como tal, sólo la diferencia se describirá aquí.
El bloque 1900 indica que el flujo se realiza para cada suscripción registrada, mientras que el bloque 1800 indica
65 que el flujo se realiza para cada productor de instancia. Así pues, cuando el flujo de la figura 18 se centra en una sola suscripción y escanea todos los productores, el flujo de la figura 19 se centra en un solo productor y escanea
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 correspondiente se actualiza para indicar que es incompleta.
5 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. Por lo tanto, el control fluye del 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 invoca debido a una dependencia (por ejemplo, desde el bloque 1630 (bloque 1920) o 1650 (bloques 1720, 1750 ó 1745/1820) de una iteración anterior). Si no, el control pasa al bloque 1640 ó 1675 dependiendo de dónde el flujo se ha introducido (desde el bloque 1630 ó 1605).
En el bloque 2010, se determina si el flujo fue llamado, debido a una suscripción adherente o situación declarada ascendente sin suscripción. Si no es así, el control pasa al bloque 2015, de lo contrario, el control pasa al bloque
15 2020. El bloque 2010 se realiza mediante la verificación del parámetro del tipo de llamada de la Tabla 2 (es decir, si el tipo de llamada es de suscripción adherente o sin suscripción ascendente declarada o no). Con referencia a las realizaciones de la invención que se muestran en las figuras 18 y 19, si el nuevo comando del productor se invoca desde los bloques 1820 ó 1920.
En el bloque 2020, el productor padre actual está vinculado al productor descendiente 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á relacionado en el gráfico(s) del productor de la estructura de la figura 11C al productor descendiente que llama (por ejemplo, el productor 1475) identificado por el parámetro de la columna del productor llamado de la tabla 2, utilizando el modo
25 de enlace y la determinación de la dependencia de referencia del productor identificado por el parámetro del modo de enlace y las columnas de referencia de los productores de determinación de la dependencia de la tabla 2. Si el padre existía anteriormente, el comportamiento del bloque 2020 imita el comportamiento de una dependencia de la suscripción de absorción en el sentido de que un solo argumento se puede asignar a cero o más productores descendientes.
En el bloque 2015, el productor padre llamante está relacionado con el productor descendiente 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 de la columna del productor llamante de la tabla 2 está relacionado en el gráfico(s) del productor de la estructura de la figura 11C para el productor descendiente llamado identificado por el parámetro de la columna del
35 productor llamado de la tabla 2, utilizando la referencia del productor de determinación de la dependencia identificada por la columna del productor de referencia de determinación la dependencia de la tabla 2. Desde los bloques 2015 y 2020, el control pasa al bloque 1640 ó 1675 dependiendo de dónde se ha introducido el flujo (desde el bloque 1605 ó 1630).
La figura 21 es un diagrama de flujo para anular los productores de acuerdo con una realización de la invención. Con referencia a la figura 10, el flujo de la figura 21 se lleva a cabo por el módulo del productor anulado 1045 (o, tal como se ha descrito con referencia a realizaciones alternativas respecto a la figura 10, el módulo maneja la anulación y la anulación inversa).
45 En respuesta a un comando de anulación del productor (bloque 2110), el control pasa al bloque 2120. En el bloque 2120, un nuevo comando del productor se invoca para el productor identificado por el comando del productor de anulación y pasa el control al bloque 2130. El bloque 2120 se lleva a cabo en una realización de la invención en caso de que el productor sea anulado aún no haya creado una instancia, así como para marcar el productor como no ejecutado (bloque 1640 ó 1680) y registrarlo en el registro de inicio de ejecución (bloque 1665). Una realización alternativa de la invención que no permite la anulación de un productor que aún no está instanciado sería realizar una comprobación adicional entre los bloques 1605 y 1610 para determinar si este nuevo comando del productor llamado responde a un comando del productor de anulación, e indica un error si este nuevo comando del productor llamado responde a una orden del productor de anulación.
55 En el bloque 2130, la salida en el caché de salida del productor (como en la instancia, si un campo) se establece y el productor está marcado como anulado.
Comandos de ejecución globales
La figura 22A es una parte de un diagrama de flujo para la ejecución del gráfico(s) del productor actual de acuerdo con una realización de la invención, mientras que la figura 22B es otra parte de un diagrama de flujo para la ejecución del gráfico(s) del productor actual de acuerdo con una realización de la invención. Con referencia a la figura 10, el flujo de la figura 22 se lleva a cabo mediante el módulo de ejecución del gráfico del productor 1070.
65 En respuesta a un comando de ejecución global, el bloque 2200 muestra que un conjunto de productores candidatos se selecciona para ser ejecutados sobre la base de los productores en el registro de inicio de ejecución y el control pasa al bloque 2205. En una realización de la invención, los productores anulados están marcados como no ejecutados y su ejecución devuelve su resultado anulado (en oposición a causar que su procedimiento sea ejecutado), el conjunto actual de los productores candidatos son los productores en el registro de inicio de ejecución. Aunque una realización de la invención se ha descrito anteriormente en la que los productores anulados están
5 marcados como no ejecutados y su ejecución devuelve su resultado anulado (en oposición a causar que su procedimiento sea ejecutado), realizaciones alternativas pueden operar de forma diferente (por ejemplo, marcar los productores reemplazados como ejecutados y a la hora de seleccionar el conjunto actual de los productores candidatos, se seleccionan los productores independientes del registro de inicio de ejecución y los padres de los productores anulados en el registro de inicio de ejecución).
En el bloque 2205, un subconjunto de productores listos para su ejecución se selecciona del conjunto de los productores candidatos y el control pasa al bloque 2210. Una forma de ejemplo de realización del bloque 2205 se describe más adelante en este documento.
15 En el bloque 2210, los productores del conjunto actual de los productores listos se ordenan por tipo -productores estándar van el bloque 2215 y los productores de determinación de la 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, se accede a la estructura de seguimiento del procedimiento para determinar si la clase de salida del productor es DEP, y por lo tanto, este productor es un productor de determinación de la dependencia.
En el bloque 2215, los productores estándar en el conjunto actual de los productores listos se ejecutan y el control pasa al bloque 2220. En una realización de la invención, el bloque 2215 se realiza llamando al procedimiento con cualquiera de los parámetros de entrada asignados desde las salidas de los productores descendientes que resultan en las dependencias de argumento (para los argumentos, el argumento ID del modo de enlace se utiliza para
25 asignar la salida del productor adecuado del descendiente con el argumento de entrada adecuado del procedimiento que se está ejecutando). En algunas realizaciones de la invención, esta ejecución puede resultar en la ejecución de código en el procedimiento de un productor descendiente que escribe una salida en un mecanismo dado (tal como establecer una variable global, establecer un campo en una instancia que no es la salida del productor, impactar una fuente de datos externa, etc.) o código en el procedimiento del productor padre que lee esa salida desde el mecanismo dado). En el bloque 2220, para esos padres, si los hay, que tienen una suscripción absorbente en cualquiera de estos productores ejecutados estándar, 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 correspondiente de la columna completada 1420 se establece para indicar incompleta.
35 En el bloque 2225, los productores de determinación de la dependencia en el conjunto actual de los productores listos están preparados para su ejecución y el control pasa al bloque 2230. Una forma de ejemplo de realización del bloque 2225 se describe más adelante en este documento.
En el bloque 2230, cualquiera de los productores de determinación de la dependencia en el conjunto actual de los productores de listas se ejecuta y el control pasa al bloque 2235. En una realización de la invención, el bloque 2230 se realiza de manera similar al bloque 2215.
En el bloque 2235, un nuevo comando del productor es ejecutado por los productores descubiertos, y el registro de inscripción y se realiza el procesamiento de las suscripciones. La parte de comando del nuevo productor del bloque
45 2235 se realiza de forma similar al bloque 1750, mientras que el registro de suscripción y el procesamiento se realiza de manera similar a los bloques 1740 y 1745.
En el bloque 2240, se añade el conjunto de los productores de candidatos añadidos de nuevo en el registro de inicio de ejecución. Desde el bloque 2240, el control pasa al bloque 2245. El bloque 2240 se realiza de manera similar al bloque 2200, excepto los únicos productores recién añadidos en el registro de inicio de ejecución como resultado de que los bloques 2230 y 2235 se añaden al conjunto de los productores candidatos.
En el bloque 2245, los productores que se han ejecutado se marcan como ejecutados, el caché de resultados de producción (y el almacenamiento en caché de instancia) se actualizan cuando sea necesario, cualquiera de los
55 productores padre de los productores que se han ejecutado se añaden al conjunto actual de los productores candidatos, y los productores que fueron ejecutados se retiran del conjunto actual de candidatos y los productores listos. Desde el bloque 2245, el control pasa al bloque 2250.
En el bloque 2250, se determina si el conjunto de los productores candidatos está vacío. Si no, el control retorna al bloque 2205, de lo contrario, el control pasa al bloque 2255.
En el bloque 2255, se determina que todas las suscripciones se han completado. Si es así, el control pasa al bloque 2265 donde el diagrama de flujo termina, 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 completa 1420 se
65 escanean para cualquier suscripción absorbente que no está terminada.
En el bloque 2260, las suscripciones incompletas absorbentes son procesadas y el control pasa de nuevo al bloque 2205. Una forma de ejemplo de realización del 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 5 invención. Por lo tanto, el control fluye del bloque 2200 al bloque 2305 en el bloque 2205. En el bloque 2305, para cada productor en el conjunto de los productores candidatos, los siguientes bloques 2310-2325 se llevan a cabo.
En el bloque 2310, se determina si el productor tiene ninguna dependencia de suscripción absorbente que es 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, la columna de la clave del productor del suscriptor 1400 y la columna del tipo de suscripción 1405 se analizan para una coincidencia para el productor actualmente seleccionado y el tipo de suscripción de absorción, y si se encuentra una coincidencia, la columna completada 1420 en la fila correspondiente se comprueba para determinar el estado de esa dependencia de suscripción absorbente.
15 En el bloque 2315, se determina si se ejecutan los productores en los que depende el productor seleccionado. Si no es así, el control pasa al bloque 2325, de lo contrario, el control pasa al bloque 2320. Respecto a la realización de la invención que se muestra en la figura 11C, la columna de marcas de ejecución incrementales 1180 para las filas de las dependencias descendientes se comprueban para determinar el estado de ejecución de los descendientes del productor seleccionado actualmente.
En el bloque 2320, el productor candidato actualmente seleccionado se añade al conjunto actual de los productores listos y el control pasa al bloque 2325.
En el bloque 2325, el flujo termina para la corriente producida seleccionada en el bloque 2305.
25 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. Así, 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 la dependencia, se realizan los siguientes bloques 2410-2430.
En el bloque 2410, se determina el tipo de las dependencias anteriores generadas por el productor de determinación de la dependencia seleccionado actualmente. Si el tipo de dependencia es sin suscripción, entonces el control pasa al bloque 2420, si el tipo es suscripción de absorción, entonces el control pasa al bloque 2415, mientras que, si el tipo es suscripción adherente, entonces el control pasa al bloque 2425. El bloque 2410 se determina comprobando la salida actual del productor almacenada en la memoria caché de salida del productor. Con referencia a la clase
35 DEP, la salida se indicaría sin suscripción, suscripción de absorción, y suscripción adherente.
En ambos bloques 2415 y 2425, la entrada se elimina del 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 la dependencia (por ejemplo, el productor 1455) se utiliza para determinar su productor padre (por ejemplo, el productor 1450) en el gráfico(s) del productor, y luego el productor padres se busca en el registro de inscripción y se retira su entrada, y 2) para las suscripciones adherentes (bloque 2425), el productor de determinación de la dependencia (por ejemplo, el productor 1470) se busca en el registro de suscripción y su entrada es eliminada. Desde el bloque 2415, el control pasa al bloque 2420; desde el bloque 2425, el control pasa al bloque 2420.
45 En el bloque 2420, los vínculos seleccionados actualmente ya creados por el productor de determinación de la dependencia se borran del gráfico(s) del productor 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. Primero se determina si el productor de determinación de la dependencia se ha "adherido" en un productor existente. Esto se hace mediante la exploración de la columna de enlaces del productor del productor descendiente de determinación de la dependencia en la figura 11C, y comprueba si uno de los enlaces tiene el indicador adherente que indica la adherencia.
Si el productor de determinación de la dependencia no se ha adherido en un productor existente, entonces: 1) para un productor de determinación de la dependencia que se ha producido de las dependencias declaradas
55 descendentes sin suscripción (argumento, campo, o dependencias de la secuencia), el padre del productor de determinación de la dependencia se accede en el gráfico de productor a través de la columna de referencia(s) del productor padre 1150 en la fila del productor de determinación de la dependencia actualmente seleccionado, y en esta entrada del productor padre, la columna de enlace(s) del productor descendiente 1160 se accede para coincidir con la referencia de determinación de la dependencia del productor, y todas las referencias de los productores que tienen los descendientes que la referencia del productor de determinación de la dependencia se borran, 2) para un productor de determinación de la dependencia que se ha producido dependencias declaradas sin suscripción ascendentes, el padre del productor de determinación de la dependencia se accede en el gráfico del productor a través de la columna de enlace(s) del productor padre 1150 en la fila del productor de determinación de la dependencia seleccionado en ese momento, y en esta entrada del productor padre, la columna de enlace(s) del
65 productor padre 1150 se accede para que coincida con la determinación de la dependencia de referencia del productor, y todas las referencias de los productores que tienen los padres que la determinación de la dependencia de referencia del productor se borran, y 3) para un productor de determinación de la dependencia que ha producido una suscripción de absorción, se realiza el mismo comportamiento de dependencias declaradas sin suscripción descendentes, y 4) para un productor de determinación de la dependencia que se ha producido una suscripción adherente, la determinación de la dependencia de referencia del productor se extrae de la columna 1421 del registro
5 de suscripción 14A antes de que la eliminación de la suscripción se busque en la estructura del gráfico del productor en la columna de enlace(s) del productor padre 1150, y todas las referencias de los productores padre que tienen esa referencia de determinación de la dependencia del productor se borran.
Si el productor de determinación de la dependencia se ha adherido a un productor existente, como resultado de una dependencia declarada ascendente sin suscripción o una suscripción adherente, a continuación, se accede al productor descendiente al que el productor de determinación de la dependencia se ha adherido (el productor descendiente en la columna 1160 con un indicador de adherencia que indica la adherencia), y en esta entrada del productor descendiente, la columna de enlace(s) del productor padre 1150 se accede para coincidir con la referencia del productor de determinación de la dependencia, y todas las referencias de los productores padre que tienen esa
15 referencia del productor de determinación de la dependencia se borran.
En el bloque 2430, el flujo termina para el productor de determinación de la dependencia 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. Así, el control fluye desde el bloque 2255 al bloque 2505 en el bloque 2260. En el bloque 2505, para cada productor con una dependencia de absorción de suscripción incompleta, los siguientes bloques 2510-2525 se realizan.
25 En el bloque 2510, se determina si todos los productores coincidentes han sido ejecutados. 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 14A, se accede a la columna de productores coincidente 1415 en la fila correspondiente para determinar los productores de comparación, y la columna de ejecución incremental 1180 en las filas apropiadas se comprueba para cada uno de los productores coincidentes.
En el bloque 2515, la suscripción absorbente está marcada como completa y el control pasa al bloque 2520. Con referencia a las realizaciones de la figura 14A, la columna completa 1420 en la fila correspondiente se establece para indicar completa.
35 En el bloque 2520, el productor seleccionado en el bloque 2505 se añade al conjunto actual de los productores candidatos y el control pasa al bloque 2525.
En el bloque 2525, el flujo termina para el productor seleccionado en el bloque 2505.
Lenguajes de procedimiento
Tal como se indicó anteriormente, el lenguaje de procedimiento correctamente escrito, el lenguaje orientado a objetos no reflexivo, y el código de lenguaje no reflexivo basado en objetos, pueden ser transformados en código de lenguaje reflexivo orientado a objetos. A modo de ejemplo, una clase puede ser emulada a través de una estructura 45 de datos y un conjunto de funciones estáticas que tengan como primer parámetro un puntero a una instancia de la estructura de datos. Entre estas funciones están el constructor y el destructor. Los constructores son invocados por el tiempo de ejecución después de la asignación de un puntero a una estructura de datos y proporcionar valores predeterminados para los elementos de la estructura de datos, y los destructores son invocados por el tiempo de ejecución antes del lanzamiento 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 su código (para los lenguajes orientados a objetos no reflexivos y lenguajes basados en objetos no reflexivos, el código de las funciones estáticas se generan de forma automática mediante la exploración de procedimientos de la clase real, y crear para cada procedimiento una función estática que realiza la invocación efectiva del procedimiento relacionado), y 4) 55 anotaciones en la parte superior de cada función (declaraciones de dependencia del productor que soportan comentarios), junto con su tipo (constructor, destructor, propiedad, etc.). Además de esta definición de una clase en el lenguaje del procedimiento, no reflexivo orientado a objetos, o no reflexivo basado en objetos, la invocación dinámica también se implementa. En concreto, un compilador genera el código de inicialización para cada clase, código que se llama una vez (por el nuevo módulo de clase) para: 1) instanciar la estructura que describe la clase, llenar los punteros en funciones con las funciones estáticas efectivas, 2) registrar la instancia de esta estructura con un mapa de clases (la estructura de seguimiento de la clase) con una clave que corresponde al nombre de clase, y 3) registrar todos los punteros con funciones en un mapa de funciones (la estructura de seguimiento del procedimiento), con una clave correspondiente a la nombre de la función (junto con ArgumentDependencies, SequencingDependencies, FieldDependencies, UpwardDependencies, WeaklyConstrainedDependencies, clave de 65 salida de clase y anotaciones adicionales). La asignación permite implementos en el tiempo de ejecución de las funciones de invocación genérica capaces de: 1) instanciar una instancia de una clase por su nombre (por ejemplo,
el nuevo módulo de instancia) (en concreto, el tiempo de ejecución: a) asigna la memoria en función del tamaño de la estructura de datos, y añade un encabezado al puntero para almacenar un puntero a la estructura que describe la clase, y por lo tanto, implementa punteros inteligentes (por ejemplo, punteros que puedan consultar sus tipos), y b) invoca las funciones constructoras apropiadas después de la recuperación del correspondiente puntero en la función
5 estática del mapa), y 2) invoca un procedimiento por el nombre previendo que todos los parámetros se pasan correctamente después de la recuperación del puntero correspondiente a la función estática del mapa. El paso correcto de los parámetros de las funciones señaladas por los punteros a las funciones se realiza a través del lenguaje ensamblador, empujando y haciendo estallar los elementos en/desde la pila de los parámetros de entrada y de salida. El procedimiento descrito anteriormente asume la existencia de la noción de las estructuras de datos y la existencia de la noción de punteros en funciones en el lenguaje del procedimiento, basado en objetos no reflexivo u orientado a objetos no reflexivo.
Sintaxis Código Fuente orientada a objetos de ejemplo
15 A. Código de cliente
En una realización de la invención, el código de cliente toma la siguiente sintaxis (que se muestra en forma de encabezado):
ProducerKey
New (String ClassKey, InstanceKey InstanceKey, String MethodKey); Runtime
New ()
AddProducerOfInterest (ProducerKey ProducerOfInterestKey);
SetProducerOutput (ProducerKey ProducerToOverndeKey, Object
25 ProducerOutputInstance); Execute (); ProducerKey y Runtime son clases, mientras que New, AddProducerOfInterest, SetProducerOutput, y Execute son procedimientos. AddProducerOfInterest provoca 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. ProducerOutputInstance es una instancia de la clase de salida del productor anulado. Así pues, se instancia a través del constructor de la clase de salida del productor correspondiente.
B. Declaraciones
35 1. Sintaxis de la Declaración de Dependencia
argumentDependency = "Argument1Dependency; Argument2Dependency;
...";
fieldDependency = "FieldDependency1; FieldDependency2; ..."; sequencingDependency =
"SequencingDependencyl; SequencingDependency2; ...";
upwardDependency =
"UpwardDependencyl; UpwardDependency2; ...";
weeklyConstrainedDependency =
"WeeklyConstrainedDependency 1; WeeklyConstrainedDependency2; ..."; 45 unConstrainedDependency = "unConstrainedDependency 1; unConstrainedDependency2; ...";
2. Sintaxis de Dependencia
- a.
- Sintaxis fieldDependencyX, sequencingDependencyX, upwardDependencyX, weeklyConstrainedDependencyX, unconstrainedDependencyX: # C: 'ClassKey'::# I: 'InstanceKey'::# M: 'MethodKey'
- b.
- Sintaxis argumentXDependency: ArgumentID::# C: 'ClassKey'::# I: 'InstanceKey'::# M: 'MethodKey'
55 En una realización de la invención, el ArgumentID se omite en la sintaxis, y el orden en que los argumentDependencies han declarado representa el ArgumentID. El ArgumentID se añade así para mejorar la legibilidad.
3. Acceso directo y no acceso directo
La sintaxis es la misma que para un no acceso directo, pero el uso de # S:: antes de la clave del productor indica un acceso directo.
65 a. Sintaxis fieldDependencyX, sequencingDependencyX, upwardDependencyX, weeklyConstrainedDependencyX, la unConstrainedDependencyX: # S::# C: 'ClassKey'::# I: 'InstanceKey'::# M: 'MethodKey'
b. Sintaxis argumentXDependency:
ArgumentID::# S::# C: 'ClassKey'::# I: 'InstanceKey'::# M: 'MethodKey'
5 En este caso, la clave del productor indicada por la dependencia no es un productor determinación de dependencia. Otras implementaciones de sintaxis pueden suponer que el acceso directo es la dependencia predeterminada para un tipo determinado de dependencia (tal como campo), y omitir el #S:: En ese caso, un # DDP puede utilizarse para indicar la presencia de un DDP.
4. Contingentes y no contingentes
Tal como ya se ha descrito, un <P> puede colocarse antes de un elemento contingente.
a. Ejemplo de clase y procedimiento contingente:
15 1) Sintaxis fieldDependencyX, sequencingDependencyX, upwardDependencyX, weeklyConstrainedDependencyX, unConstrainedDependencyX: # C: <P> 'ClassDeterminationMethodKey'::# I: 'InstanceKey'::# M:
<P> 'MethodDeterminationMethodKey'
2) Sintaxis argumentXDependency
ArgumentID::# C: <P> 'ClassDeterminationMethodKey'::# I: 'InstanceKey'::#
M: <P> 'MethodDeterminationMethodKey'
b. Ejemplo de procedimiento contingente
25 1) Sintaxis fieldDependencyX, sequencingDependencyX, upwardDependencyX, weeklyConstrainedDependencyX, unConstrainedDependencyX: # C: 'ClassKey'::# I: 'InstanceKey'::# M:
- <P>
- 'MethodDeterminationMethodKey' 2) Sintaxis argumentXDependency: ArgumentID::# C: 'ClassKey'::# I: 'InstanceKey'::# M:
- <P>
- 'MethodDeterminationMethodKey'
c. Ejemplo de instancia contingentes
35 1) Sintaxis fieldDependencyX, sequencingDependencyX, upwardDependencyX, weeklyConstrainedDependencyX, unConstrainedDependencyX: # C: 'ClassKey'::# I: <P> 'InstanceDeterminationMethodKey'::# M: 'MethodKey' 2) Sintaxis argumentXDependency ArgumentID::# C: 'ClassKey'::# I:
<P> 'InstanceDeterminationMethodKey'::# M: 'MethodKey'
5. Técnica de abreviación
45 Los elementos tales como la clase, la instancia, o el procedimiento que se consideran que son idénticos a los elementos de los productores padre se omiten. Esto es típicamente el caso de los campos de acceso directo. Los ejemplos que figuran a continuación combinan la técnica de abreviación y una declaración de abreviación (el acceso directo se ilustra con un # S::)
a. Ejemplo en el que se omiten la clase y la instancia
1) Sintaxis de fieldDependencyX, sequencingDependencyX, upwardDependencyX, weeklyConstrainedDependencyX, unConstrainedDependencyX:
55 # S::# M: 'MethodKey' 2) Sintaxis de arpumentXDependency: ArgumentID::# S::# M: 'MethodKey'
b. Ejemplo en el que la clase se omite
1) Sintaxis de fieldDependencyX, sequencingDependencyX, upwardDependencyX,
weeklyConstrainedDependencyX, unConstrainedDependencyX:
# S::# I: 'InstanceKey'::# M: 'MethodKey'
2) Sintaxis de argumentXDependency:
65 ArgumentID::# S::# I: 'InstanceKey'::# M: 'MethodKey' Realizaciones alternativas
Aunque los diagramas de flujo en las figuras muestran un orden particular de las operaciones realizadas por ciertas realizaciones de la invención, debe entenderse que tal orden es de ejemplo (por ejemplo, realizaciones alternativas 5 pueden realizar las operaciones en un orden diferente, combinar ciertas operaciones, superponer ciertas operaciones, etc.).
Aunque la invención ha sido descrita en términos de varias realizaciones, los expertos en la materia reconocerán que la invención no se limita a las realizaciones descritas, ya se puede practicar con modificaciones y alteraciones 10 dentro del alcance de las reivindicaciones adjuntas. La descripción, por lo tanto, debe ser considerada como ilustrativa en lugar de limitativa.
Claims (58)
- REIVINDICACIONES1. Aparato para la ejecución de un código orientado a objetos, comprendiendo dicho aparato un tiempo de ejecución (355, 360, 1004) que interpreta las declaraciones de dependencia de los productores (320, 1016) en el código5 orientado a objetos para procedimientos en el código orientado a objetos, identificando dichas declaraciones de dependencia de los productores en un tiempo de ejecución un conjunto de cero o más productores, donde un productor (110) es una construcción instanciada de un tiempo de ejecución, en el que cada productor se instancia a partir de una combinación respectiva de una instancia particular (108) de una clase y un procedimiento particular(104) de esa clase e identifica dicha instancia particular (108) y dicho procedimiento particular (104), en el que la ejecución de un productor resulta en el procedimiento identificado por ese productor que se está ejecutando en la instancia identificada por ese productor, incluyendo el tiempo de ejecución:un módulo de generación automatizada de gráficos del productor (340, 365, 1040) para recibir una designación de un productor de interés (325, 1025), para añadir el productor de interés como parte de un15 gráfico del productor, y para generar automáticamente un resto del gráfico del productor a través de la vinculación, e instanciación si es necesario, de otros productores sobre la base de las declaraciones de dependencia de los productores de los procedimientos identificados por los productores que ya están en el gráfico del productor; y un módulo de ejecución del gráfico del productor (345, 370, 1070) para ejecutar los productores en el gráfico del productor en el orden indicado por el gráfico del productor.
- 2. Aparato según la reivindicación 1, en el que dicho módulo de generación automatizada del gráfico del productor inicialmente puede no ser capaz de completar la generación del gráfico del productor hasta que algunos productores del gráfico del productor se ejecutan, y en el que dicho módulo de ejecución del gráfico del productor puede invocar25 el módulo de generación automatizada del gráfico del productor con las salidas de los productores necesarias durante la ejecución del gráfico del productor para completar el resto no resuelto del gráfico del productor.
-
- 3.
- Aparato según la reivindicación 1, en el que el conjunto de productores que serán identificados en el tiempo de ejecución mediante por lo menos una de dichas declaraciones de dependencia de los productores (106) incluye al menos un productor que se ejecuta antes de la ejecución del productor (112) que identifica el procedimiento de esa declaración de dependencia de los productores.
-
- 4.
- Aparato según la reivindicación 1, en el que dicho gráfico del productor representa una secuencia adecuada de
ejecución identificada por las declaraciones de dependencia de los productores de los procedimientos identificados 35 por los productores en el gráfico del productor. -
- 5.
- Aparato según la reivindicación 1, en el que el conjunto de productores que serán identificados en el tiempo de ejecución mediante por lo menos una de dichas declaraciones de dependencia de los productores (106) para un determinado procedimiento incluye al menos un productor (112) con una salida que es una entrada directa para el procedimiento dado.
-
- 6.
- Aparato según la reivindicación 1, en el que el gráfico del productor representa la entrada directa a las dependencias de salida de los productores entre sí desde el productor de interés a aquellos de los productores que son nodos de extremo del gráfico del productor.
- 7. Aparato según la reivindicación 1, en el que el tiempo de ejecución también comprende:un módulo de salida del productor de anulación (390, 1045) para recibir las modificaciones actuales a la salida de una o más de los productores de una versión actual del gráfico del productor; una estructura del gráfico del productor (380, 1060), acoplada al módulo de generación automática del gráfico del productor, para almacenar la versión actual del gráfico del productor y la salida actual de cada uno de los productores en el gráfico del productor actual; y dicho módulo de ejecución del gráfico del productor, acoplado al módulo de salida del productor de anulación y la estructura del gráfico del productor, para realizar las modificaciones actuales, para realizar el seguimiento55 de los productores en la versión actual del gráfico del productor necesita ejecutarse porque están afectados indirectamente por cualquiera de las modificaciones actuales, y para ejecutar sólo los productores de la versión actual del gráfico del productor que actualmente deben ser ejecutados para mantener la consistencia de la versión actual del gráfico del productor.
- 8. Aparato según la reivindicación 7, en el que la estructura del gráfico del productor también comprende:una estructura de marcado de ejecución incremental (382, 1080) para ayudar al módulo de ejecución del gráfico del productor con el seguimiento de los productores de la versión actual del gráfico del productor que deben volverse a ejecutar, debido a cualquier modificación actual.
- 9. Aparato según la reivindicación 7, que también comprende: un registro de anulación (396, 1047), acoplado al módulo de salida del productor de anulación y al módulo de ejecución del gráfico del productor, para recoger múltiples de las modificaciones actuales a la salida de uno o más de los productores en la versión actual del gráfico del productor para el procesamiento por lotes.5 10. Aparato según la reivindicación 7, en el que el módulo de salida del productor de anulación es también para recibir indicaciones de que una o más salidas anuladas deben dejar de estar anuladas (1030).
-
- 11.
- Aparato según la reivindicación 1, en el que el tiempo de ejecución también comprende:
un registro de comandos (665), acoplado al módulo de generación automática del gráfico del productor, para recoger múltiples comandos juntos para el procesamiento por lotes. -
- 12.
- Aparato según la reivindicación 1, en el que las declaraciones de dependencia de los productores (106) son
parte de las definiciones de clase (102) para las clases en el código orientado a objetos (100). 15 -
- 13.
- Aparato según la reivindicación 1, en el que cualquier procedimiento puede tener una de dichas declaraciones de dependencia de los productores.
-
- 14.
- Aparato según la reivindicación 1, en el que el tiempo de ejecución reemplaza la necesidad de un código de secuenciación de invocación manual, y en el que el procedimiento identificado por cada uno de los productores es un procedimiento de transformación y el tiempo de ejecución descubre la secuenciación de estos procedimientos de transformación a partir de las declaraciones de dependencia de los productores.
- 15. Aparato según la reivindicación 1, en el que los nodos de extremo del gráfico del productor son productores 25 independientes (Productor 3).
- 16. Aparato según la reivindicación 1, en el que el tiempo de ejecución también comprende:una estructura de seguimiento de instancias (1065), acoplada al módulo de generación automática del gráfico del productor y el módulo de ejecución del gráfico del productor, para almacenar las referencias a las instancias identificadas por los productores; y una estructura de seguimiento del procedimiento (1058), acoplada al módulo de generación automática del gráfico del productor y al módulo de ejecución del gráfico del productor, para almacenar las referencias a los procedimientos identificados por los productores e información respecto a sus declaraciones de dependencia35 de los productores.
- 17. Aparato según la reivindicación 16, en el que el tiempo de ejecución también comprende:un nuevo módulo de instancias (1098), acoplado a dicha estructura de seguimiento de instancias, para recibir la designación de y para instanciar, si es necesario, el productor seleccionado actualmente de interés; una estructura de seguimiento de clases (1092) para seguir las referencias a las clases; y un nuevo módulo de clases (1095), acoplado a la estructura de seguimiento de las clases, para cargar y para la introspección de las definiciones de clase de las clases.45 18. Aparato según la reivindicación 1, en el que el tiempo de ejecución también comprende: un módulo de visualización del gráfico del productor (1062) para mostrar gráficamente una representación del gráfico del productor actual.
- 19. Aparato según la reivindicación 1, en el que el tiempo de ejecución también comprende:un módulo de interfaz de usuario gráfica de disposición de salida del productor interactivo configurable (1085) para mostrar gráficamente las salidas desde y permitir la interacción con el gráfico del productor.
- 20. Aparato según cualquiera de las reivindicaciones 1, 4, 5, 7 a 11 y 12 a 19, en el que el módulo de ejecución del 55 gráfico del productor incluye:una módulo de dependencias dinámicas (1075) para resolver cualquier dependencia dinámica de los productores, en el que cada una de las declaraciones de dependencia de los productores puede incluir una dependencia dinámica del productor, en el que las dependencias dinámicas de los productores hacen que el tiempo de ejecución seleccione dinámicamente el conjunto de cero o más productores que la declaración de dependencia del productor identifica durante el tiempo de ejecución, y en el que la selección dinámica puede causar la selección de diferentes productores para el conjunto durante diferentes ejecuciones del gráfico del productor.65 21. Aparato según la reivindicación 20, en el que las dependencias dinámicas de los productores incluyen dependencias contingentes de los productores, en el que las dependencias contingentes de los productores son dependencias de los productores de determinación de la dependencia (DDP6) que son en sí mismos dependientes de la salida de uno o más de los otros productores (S9).
-
- 22.
- Aparato según la reivindicación 20, en el que las dependencias dinámicas de los productores incluyen suscripciones, en el que las suscripciones identifican criterios (1410) mediante los cuales los productores se comparan para determinar si son productores de activación, en el que las suscripciones identifican dependencias en los productores de activación.
-
- 23.
- Aparato según la reivindicación 22, en el que algunas de dichas suscripciones son suscripciones absorbentes, en el que las suscripciones absorbentes hacen que el tiempo de ejecución incluya dinámicamente alguno de los productores de activación (1460) en el conjunto de cero o más productores que la declaración de dependencia del productor identifica durante el tiempo de ejecución.
-
- 24.
- Aparato según la reivindicación 22, en el que algunas de dichas suscripciones son suscripciones adherentes, en el que las suscripciones adherentes también identifican las características (1425, 1430, 1435) para los productores padre, y en el que las suscripciones adherentes hacen que el tiempo de ejecución, para cada uno de los productores de activación (1475 ) localizados, instancien un productor padre (1480) que cumple con las características identificadas y lo incluye en el gráfico del productor que tiene una dependencia del productor en ese productor de activación.
-
- 25.
- Aparato según la reivindicación 1, en el que alguno de los cero o más productores son productores de determinación de dependencia (765) cuya ejecución devuelve las identificaciones de las dependencias de uno o más de los productores en uno o más de los otros productores.
-
- 26.
- Aparato según la reivindicación 25, en el que la ejecución de algunos de los productores de determinación de la dependencia (772) devuelven las dependencias declaradas ascendentes.
-
- 27.
- Aparato según cualquiera de las reivindicaciones 1 y 20 a 26, en el que al menos algunas de las dependencias representadas por el gráfico del productor se designan como dependencias de argumento y dependencias de campo (705), en el que las dependencias de argumento hacen que el tiempo de ejecución asigne las salidas de los productores descendientes (725) como parámetros de entrada a los productores padre (720), y en el que las dependencias de campo indican usos de los campos de instancias.
-
- 28.
- Aparato según cualquiera de las reivindicaciones 1 y 20 a 27, en el que al menos algunas de las dependencias representadas por el gráfico del productor se designan como dependencias sólo de secuenciación (705), en el que las dependencias sólo de secuenciación requieren salidas que necesitan proporcionarse, en su caso, a partir de los productores descendientes (746) a los productores padre (720) se producen a través del código en el procedimiento identificado por el productor descendiente para escribir la salida en un mecanismo dado y el código en el procedimiento identificado por el productor padre para leer esa salida a partir del mecanismo dado.
-
- 29.
- Aparato según cualquiera de las reivindicaciones 1 y 20 a 28, en el que las claves del procedimiento (1190) se utilizan para distinguir los procedimientos, las claves de instancia (1120) se utilizan para distinguir las instancias, y las claves de los productores se utilizan para distinguir los productores, en el que la clave de los productores para cada uno de los productores se basa en al menos la clave de instancia y la clave del procedimiento de la instancia y el procedimiento identificado por ese productor.
-
- 30.
- Aparato según la reivindicación 29, en el que las instancias son instancias de una pluralidad de dichas clases, en el que las claves de clase (1090, 1110) se utilizan para distinguir dicha pluralidad de clases, y en el que la clave del productor para cada uno de los productores se basa también en la clave de clase de la clase de la instancia identificada por ese productor.
-
- 31.
- Aparato según la reivindicación 29, en el que la clave de instancia de al menos algunos productores contiene una referencia a la instancia identificada por el productor.
-
- 32.
- Aparato según la reivindicación 1, en el que al menos algunas de dichas declaraciones de dependencia de los productores incluyen dependencias declaradas ascendentes (705).
-
- 33.
- Aparato según la reivindicación 1, en el que al menos algunas de dichas declaraciones de dependencia de los productores incluyen dependencias declaradas descendentes (705).
-
- 34.
- Aparato según la reivindicación 1, en el que al menos algunas de dichas declaraciones de dependencia de los productores incluyen dependencias declaradas ascendentes y descendentes (705).
-
- 35.
- Aparato según la reivindicación 1, en el que dicho módulo de generación automatizada del gráfico del productor es sensible a los nuevos comandos de los productores (1025), y en el que dicho módulo de ejecución del gráfico del productor es sensible a ejecutar comandos (1035).
-
- 36.
- Procedimiento para la ejecución de código orientado a objetos, comprendiendo dicho procedimiento:
instanciar un productor con una salida que es actualmente de interés (645), en el que el código orientado a objetos incluye procedimientos (104) y declaraciones de dependencia de los productores (106), en el que la declaración de dependencia del productor de un determinado procedimiento identifica un conjunto de cero o más productores, en el que un productor (110) es una construcción de tiempo de ejecución instanciada, en el que cada productor se instancia a partir de una combinación respectiva de una instancia particular (108) de una clase y un procedimiento particular (104) de esa clase e identifica dicha instancia particular (108) y dicho procedimiento particular, en el que la ejecución de un productor resulta en el procedimiento identificado por ese productor que se está ejecutando en la instancia que se identifica por ese productor; sensible a dicha instancia, añadir el productor de interés como parte de un gráfico del productor actual (645); tratar de generar automáticamente un resto del gráfico actual del productor a través de la vinculación y la instanciación como sea necesario, de otros productores sobre la base de las declaraciones de dependencia de los productores de los procedimientos identificados por los productores que ya están en el gráfico actual del productor; y ejecutar los productores en el gráfico actual del productor para determinar la salida actual para dicho productor de interés (660). -
- 37.
- Procedimiento según la reivindicación 36, en el que dicho intento de generación automática también comprende:
tratar de descubrir y construir de forma automática, a partir de declaraciones de dependencia de los productores en dicho código orientado a objetos, el gráfica actual del productor que representa las relaciones de la entrada a la salida directa de los productores necesarios para generar un valor actual del conjunto de una o más entradas al productor de interés, en el que una salida actual de cada uno de los productores en el gráfico del productor actual es una entrada directa a otro o más de los productores en el gráfico del productor actual y/o el productor de interés. -
- 38.
- Procedimiento según la reivindicación 36, en el que dicha ejecución de los productores en el gráfico del del productor actual también comprende:
generar automáticamente partes adicionales del gráfico del productor actual a través de la ejecución de algunos de los productores del gráfico del productor actual que devuelven las identificaciones de las dependencias de otros productores en cada uno para ser añadido al gráfica del productor actual. -
- 39.
- Procedimiento según la reivindicación 36, en el que dicha ejecución incluye:
resolver una o más dependencias dinámicas de los productores (665), en el que cada una de las declaraciones de dependencia de los productores puede incluir una dependencia dinámica del productor, en el que las dependencias dinámicas de los productores hacen que el tiempo de ejecución seleccione dinámicamente el conjunto de cero o más productores que la declaración de dependencia del productor identifica durante el tiempo de ejecución. -
- 40.
- Procedimiento según la reivindicación 39, en el que las dependencias dinámicas de los productores incluyen dependencias contingentes de los productores, en el que las dependencias contingentes de los productores son dependencias de los productores de determinación de la dependencia (DDP6) que por sí mismos son dependientes de la salida de uno o más de los otros productores (S9).
-
- 41.
- Procedimiento según la reivindicación 39 ó 40, en el que las dependencias de los productores dinámicos incluyen suscripciones, en el que las suscripciones identifican criterios (1410) mediante los cuales los productores se comparan para determinar si son productores de activación, en el que las suscripciones identifican las dependencias de los productores de activación.
-
- 42.
- Procedimiento según la reivindicación 41, en el que algunas de dichas suscripciones son suscripciones absorbentes, en el que las suscripciones absorbentes provocan la inclusión dinámica de cualquiera de los productores de activación (1460) en el conjunto de cero o más productores que identifica la declaración de dependencia del productor.
-
- 43.
- Procedimiento según la reivindicación 41 ó 42, en el que algunas de dichas suscripciones son suscripciones adherentes, en el que las suscripciones adherentes también identifican las características (1425, 1430, 1435) para los productores padre, y en el que las suscripciones adherentes provocan, para cada uno de los productores de activación (1475) localizados, la instanciación de un productor padre (1480) que cumple con las características identificadas y la inclusión del mismo en el gráfico actual del productor que tiene una dependencia del productor sobre ese productor de activación.
-
- 44.
- Procedimiento según cualquiera de las reivindicaciones 36 a 43, en el que dicho intento de generación automática también comprende:
instanciar cualquier instancia de los productores que aún no han sido instanciadas (645, 1560), e instanciar los productores que aún no han sido instanciados (645, 1625). -
- 45.
- Procedimiento según cualquiera de las reivindicaciones 36 a 44, en el que dicho intento de generación automática también comprende:
cargar cualquiera de las clases de las instancias identificadas por los productores que aún no han sido cargados (1540), y realizar la introspección de las definiciones de clase de las clases en las que aún no han sido realizada la introspección (1550), incluyendo las declaraciones de dependencia de los productores contenidas en la misma. -
- 46.
- Procedimiento según la reivindicación 45, en el que dicho intento de generación automática incluye:
descubrir y construir en el gráfico del productor actual uno de los productores para los que la clase de la instancia identificada por el productor ya se ha cargado y se ha realizado la introspección antes de dicho intento (1530), la instancia identificada por el productor ya se ha de instanciado antes de dicho intento (1520), y el productor ya fue instanciado antes de dicho intento (1605). -
- 47.
- Procedimiento según cualquiera de las reivindicaciones 36 a 46, que también comprende:
mostrar gráficamente una representación del gráfico del productor actual. -
- 48.
- Procedimiento según cualquiera de las reivindicaciones 36 a 47, que también comprende:
mostrar gráficamente las salidas desde y permitir la interacción con el gráfico del productor actual. -
- 49.
- Procedimiento según cualquiera de las reivindicaciones 36 a 48, que también comprende:
almacenar una salida actual de los productores del gráfico actual del productor; anular la salida actual de uno o más de los productores del gráfico del productor actual (625), y volver a ejecutar, de acuerdo con el gráfico actual del productor y la anulación y la salida almacenada actual de aquellos de los productores que no están directamente o indirectamente afectados por dicha anulación, sólo aquellos de dichos productores que se ven afectados, directa o indirectamente, por dicha anulación para determinar su salida actual (660). -
- 50.
- Procedimiento según la reivindicación 49, en el que aquellos de dichos productores que se ven afectados no son todos los productores en el gráfico actual del productor.
-
- 51.
- Procedimiento según la reivindicación 49 que también comprende:
invertir la anulación (1690); y volver a ejecutar, de acuerdo al gráfico actual del productor, y anulación inversa y la salida almacenada actual de aquellos de los productores que no están directamente o indirectamente afectados por dicha anulación inversa (660), sólo aquellos de los productores que se ven afectados, directa o indirectamente, por dicha anulación inversa para determinar su salida actual. -
- 52.
- Procedimiento según cualquiera de las reivindicaciones 36 a 51, en el que al menos algunas de las dependencias declaradas por las declaraciones de dependencia de los productores son designadas como dependencias de argumento y dependencias de campo (705), en el que las dependencias de argumento causan la asignación de las salidas de los productores descendientes (725) como parámetros de entrada a los productores padre (720), y en el que las dependencias de campo indican los usos de los campos de las instancias.
-
- 53.
- Procedimiento según cualquiera de las reivindicaciones 36 a 52, en el que al menos algunas de las dependencias declaradas por las declaraciones de dependencia de los productores son designadas como dependencias sólo de secuenciación (705), en el que las dependencias sólo de secuenciación requieren salidas que necesitan ser proporcionadas, en su caso, desde productores descendientes (746) a los productores padre (720) que se producen a través de código en el procedimiento identificado por el productor descendiente para escribir la salida a un mecanismo dado y el código en el procedimiento identificado por el productor padre para leer esa salida desde el mecanismo dado.
-
- 54.
- Procedimiento según cualquiera de las reivindicaciones 36 a 53, en el que las claves del procedimiento (1190) se utilizan para distinguir los procedimientos, las claves de instancia (1120) se utilizan para distinguir las instancias, y las claves de los productores se utilizan para distinguir los productores, en el que la clave del productor para un productor dado se basa en por lo menos la clave de la instancia y la clave del procedimiento de la instancia y el procedimiento identificado por ese productor.
-
- 55.
- Procedimiento según la reivindicación 54, en el que las instancias son instancias de una pluralidad de clases, en el que las claves de clase (1090, 1110) se utilizan para distinguir dicha pluralidad de clases, y en el que la clave del productor para cada productor se basa también en la clave de clase de la clase de la instancia identificada por ese productor.
-
- 56.
- Procedimiento según la reivindicación 54, en el que la clave de instancia de al menos algunos de los productores mantiene una referencia a la instancia identificada por el productor.
-
- 57.
- Procedimiento según la reivindicación 36, en el que al menos algunas de dichas declaraciones de dependencia de los productores incluyen dependencias declaradas ascendentes (705).
-
- 58.
- Procedimiento según cualquiera de las reivindicaciones 36 a 56, en el que al menos algunas de dichas declaraciones de dependencia de los productores incluyen dependencias declaradas descendentes (705).
-
- 59.
- Procedimiento según cualquiera de las reivindicaciones 36 a 56, en el que al menos algunas de dichas declaraciones de dependencia de los productores incluyen dependencias declaradas ascendentes y descendentes (705).
-
- 60.
- Procedimiento según cualquiera de las reivindicaciones 36 a 59, en el que dicha instancia se realiza sensible a un nuevo comando del productor (1025) y dicha ejecución se realiza sensible a un comando de ejecución global (1035).
-
- 61.
- Medio legible por ordenador que comprende el código de programa de ordenador dispuesto para llevar a cabo las etapas según cualquiera de las reivindicaciones 36 a 60 cuando se ejecuta en un aparato de ordenador adecuado.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US633098P | 2006-12-01 | ||
US11/633,098 US8191052B2 (en) | 2006-12-01 | 2006-12-01 | Producer graph oriented programming and execution |
Publications (1)
Publication Number | Publication Date |
---|---|
ES2381373T3 true ES2381373T3 (es) | 2012-05-25 |
Family
ID=39350968
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
ES11167913.0T Active ES2471394T3 (es) | 2006-12-01 | 2007-12-03 | Programación y ejecución orientadas por gráficos de productor |
ES11167918.9T Active ES2497573T3 (es) | 2006-12-01 | 2007-12-03 | Salidas de sustitución en un sistema de programación y ejecución orientado por grafos de productor |
ES07254672T Active ES2381373T3 (es) | 2006-12-01 | 2007-12-03 | Programación y ejecución orientadas por gráficos de productor |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
ES11167913.0T Active ES2471394T3 (es) | 2006-12-01 | 2007-12-03 | Programación y ejecución orientadas por gráficos de productor |
ES11167918.9T Active ES2497573T3 (es) | 2006-12-01 | 2007-12-03 | Salidas de sustitución en un sistema de programación y ejecución orientado por grafos de productor |
Country Status (10)
Country | Link |
---|---|
US (5) | US8191052B2 (es) |
EP (3) | EP2365435B1 (es) |
JP (1) | JP5354602B2 (es) |
CN (1) | CN101617292B (es) |
AT (1) | ATE546775T1 (es) |
BR (1) | BRPI0719730A2 (es) |
ES (3) | ES2471394T3 (es) |
HK (1) | HK1139216A1 (es) |
RU (1) | RU2445682C2 (es) |
WO (1) | WO2008064901A2 (es) |
Families Citing this family (104)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9715678B2 (en) | 2003-06-26 | 2017-07-25 | Microsoft Technology Licensing, Llc | Side-by-side shared calendars |
US8799808B2 (en) | 2003-07-01 | 2014-08-05 | Microsoft Corporation | Adaptive multi-line view user interface |
US7707255B2 (en) | 2003-07-01 | 2010-04-27 | Microsoft Corporation | Automatic grouping of electronic mail |
US7895531B2 (en) * | 2004-08-16 | 2011-02-22 | Microsoft Corporation | Floating command object |
US9015621B2 (en) | 2004-08-16 | 2015-04-21 | Microsoft Technology Licensing, Llc | Command user interface for displaying multiple sections of software functionality controls |
US8146016B2 (en) | 2004-08-16 | 2012-03-27 | Microsoft Corporation | User interface for displaying a gallery of formatting options applicable to a selected object |
US8117542B2 (en) | 2004-08-16 | 2012-02-14 | Microsoft Corporation | User interface for displaying selectable software functionality controls that are contextually relevant to a selected object |
US7703036B2 (en) | 2004-08-16 | 2010-04-20 | Microsoft Corporation | User interface for displaying selectable software functionality controls that are relevant to a selected object |
US8255828B2 (en) | 2004-08-16 | 2012-08-28 | Microsoft Corporation | Command user interface for displaying selectable software functionality controls |
US7747966B2 (en) | 2004-09-30 | 2010-06-29 | Microsoft Corporation | User interface for providing task management and calendar information |
US8239882B2 (en) | 2005-08-30 | 2012-08-07 | Microsoft Corporation | Markup based extensibility for user interfaces |
US8689137B2 (en) | 2005-09-07 | 2014-04-01 | Microsoft Corporation | Command user interface for displaying selectable functionality controls in a database application |
US9542667B2 (en) | 2005-09-09 | 2017-01-10 | Microsoft Technology Licensing, Llc | Navigating messages within a thread |
US8627222B2 (en) | 2005-09-12 | 2014-01-07 | Microsoft Corporation | Expanded search and find user interface |
US8605090B2 (en) | 2006-06-01 | 2013-12-10 | Microsoft Corporation | Modifying and formatting a chart using pictorially provided chart elements |
US9727989B2 (en) | 2006-06-01 | 2017-08-08 | Microsoft Technology Licensing, Llc | Modifying and formatting a chart using pictorially provided chart elements |
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 |
US8332827B2 (en) | 2006-12-01 | 2012-12-11 | Murex S.A.S. | Produce graph oriented programming framework with scenario support |
US8191052B2 (en) | 2006-12-01 | 2012-05-29 | Murex S.A.S. | Producer graph oriented programming and execution |
US9311082B2 (en) | 2006-12-29 | 2016-04-12 | Sap Se | System and method for processing graph objects |
US8640086B2 (en) * | 2006-12-29 | 2014-01-28 | Sap Ag | Graphical user interface system and method for presenting objects |
WO2008111048A2 (en) * | 2007-03-09 | 2008-09-18 | Ghost, Inc. | System and method for browser within a web site and proxy server |
US7865868B2 (en) * | 2007-03-28 | 2011-01-04 | Microsoft Corporation | .NET ribbon model for a ribbon user interface |
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 |
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 |
US8370812B2 (en) * | 2007-04-02 | 2013-02-05 | International Business Machines Corporation | Method and system for automatically assembling processing graphs in information processing systems |
EP2153322A1 (en) * | 2007-05-22 | 2010-02-17 | Philips Intellectual Property & Standards GmbH | Compiler and compiling method for a networked control system comprising a plurality of devices |
US8484578B2 (en) | 2007-06-29 | 2013-07-09 | Microsoft Corporation | Communication between a document editor in-space user interface and a document editor out-space user interface |
US8762880B2 (en) | 2007-06-29 | 2014-06-24 | Microsoft Corporation | Exposing non-authoring features through document status information in an out-space user interface |
US8201103B2 (en) | 2007-06-29 | 2012-06-12 | Microsoft Corporation | Accessing an out-space user interface for a document editor program |
US8381174B2 (en) * | 2007-10-31 | 2013-02-19 | National Instruments Corporation | Global variable structure in a graphical program |
US10248915B2 (en) * | 2008-03-07 | 2019-04-02 | International Business Machines Corporation | Risk profiling for enterprise risk management |
US9588781B2 (en) | 2008-03-31 | 2017-03-07 | Microsoft Technology Licensing, Llc | Associating command surfaces with multiple active components |
US9665850B2 (en) | 2008-06-20 | 2017-05-30 | Microsoft Technology Licensing, Llc | Synchronized conversation-centric message list and message reading pane |
US8402096B2 (en) | 2008-06-24 | 2013-03-19 | Microsoft Corporation | Automatic conversation techniques |
US8341608B2 (en) * | 2008-11-13 | 2012-12-25 | Visicom Media, Inc. | Cross-browser toolbar and method thereof for facilitating cross-browser interoperability |
AU2010213618B9 (en) | 2009-02-13 | 2015-07-30 | Ab Initio Technology Llc | Managing task execution |
WO2010107476A1 (en) * | 2009-03-19 | 2010-09-23 | Duke University | Inhibiting gsnor |
US9046983B2 (en) | 2009-05-12 | 2015-06-02 | Microsoft Technology Licensing, Llc | Hierarchically-organized control galleries |
CA2691306A1 (en) * | 2010-01-28 | 2011-07-28 | Ibm Canada Limited - Ibm Canada Limitee | Interdependent task management |
WO2011159759A1 (en) | 2010-06-15 | 2011-12-22 | Ab Initio Technology Llc | Dynamically loading graph-based computations |
US9003362B2 (en) * | 2011-09-02 | 2015-04-07 | Vu Lam | Systems and methods for processing software application metadata associated with a software application |
US9038033B1 (en) * | 2011-12-09 | 2015-05-19 | Sencha, Inc. | Techniques and mechanisms for web application minification |
US8918881B2 (en) * | 2012-02-24 | 2014-12-23 | Appthority, Inc. | Off-device anti-malware protection for mobile devices |
US8713684B2 (en) | 2012-02-24 | 2014-04-29 | Appthority, Inc. | Quantifying the risks of applications for mobile devices |
CN102796873B (zh) | 2012-03-05 | 2014-02-26 | 阳光凯迪新能源集团有限公司 | 从费托合成废催化剂Co-Ru/Al2O3中综合回收金属钴、钌和铝的方法 |
JP5273884B1 (ja) * | 2012-04-09 | 2013-08-28 | 伸一 石田 | 構造解析装置及びプログラム |
US10936591B2 (en) | 2012-05-15 | 2021-03-02 | Microsoft Technology Licensing, Llc | Idempotent command execution |
US9239868B2 (en) | 2012-06-19 | 2016-01-19 | Microsoft Technology Licensing, Llc | Virtual session management and reestablishment |
US8819772B2 (en) | 2012-06-25 | 2014-08-26 | Appthority, Inc. | In-line filtering of insecure or unwanted mobile device software components or communications |
US10002027B2 (en) * | 2012-07-11 | 2018-06-19 | Empire Technology Development Llc | Network congestion reduction |
US9251194B2 (en) | 2012-07-26 | 2016-02-02 | Microsoft Technology Licensing, Llc | Automatic data request recovery after session failure |
US8898109B2 (en) | 2012-07-27 | 2014-11-25 | Microsoft Corporation | Automatic transaction retry after session failure |
CN102831057B (zh) * | 2012-08-13 | 2015-02-11 | 于秀山 | 一种用功能图分析软件功能变更及其影响的方法 |
US9324033B2 (en) * | 2012-09-13 | 2016-04-26 | Nokia Technologies Oy | Method and apparatus for providing standard data processing model through machine learning |
US9235464B2 (en) | 2012-10-16 | 2016-01-12 | Microsoft Technology Licensing, Llc | Smart error recovery for database applications |
EP2731023B1 (en) * | 2012-11-12 | 2015-03-25 | Software AG | Method and system for processing graph queries |
US10108521B2 (en) | 2012-11-16 | 2018-10-23 | Ab Initio Technology Llc | Dynamic component performance monitoring |
US9507682B2 (en) | 2012-11-16 | 2016-11-29 | Ab Initio Technology Llc | Dynamic graph performance monitoring |
US8910134B2 (en) * | 2013-01-03 | 2014-12-09 | Oracle International Corporation | System for applying transformation to improve graph analysis |
US9785302B2 (en) * | 2013-03-14 | 2017-10-10 | Microsoft Technology Licensing, Llc | Inline display and preview of related information for elements in a document |
US9164740B2 (en) | 2013-05-16 | 2015-10-20 | Toshiba Global Commerce Solutions Holdings Corporation | System and method for replacing java beans |
US9146842B2 (en) * | 2013-08-15 | 2015-09-29 | Yahoo! Inc. | Testing computer-implementable instructions |
CA3114544A1 (en) | 2013-12-05 | 2015-06-11 | Ab Initio Technology Llc | Managing interfaces for dataflow composed of sub-graphs |
RU2586577C2 (ru) * | 2014-01-15 | 2016-06-10 | Общество с ограниченной ответственностью "Аби ИнфоПоиск" | Фильтрация дуг в синтаксическом графе |
US20150220310A1 (en) * | 2014-02-03 | 2015-08-06 | International Business Machines Corporation | Object field optimization |
US9864364B2 (en) * | 2014-11-07 | 2018-01-09 | Honeywell International Inc. | Method and apparatus for retrieving time-based event data into unified activity hierarchy across process clusters |
US9665849B2 (en) * | 2015-02-26 | 2017-05-30 | Red Hat, Inc. | Employing dependency graph in software build projects |
US9292315B1 (en) | 2015-03-16 | 2016-03-22 | International Business Machines Corporation | Sharing of classes for modular programs in a multi-tenant environment |
EP3086233B1 (en) * | 2015-04-23 | 2020-05-06 | CODESYS Holding GmbH | Method and system for measuring a runtime by means of watchpoints |
US10325014B2 (en) | 2015-04-30 | 2019-06-18 | Workiva Inc. | System and method for convergent document collaboration |
US10152488B2 (en) * | 2015-05-13 | 2018-12-11 | Samsung Electronics Co., Ltd. | Static-analysis-assisted dynamic application crawling architecture |
US9158832B1 (en) | 2015-05-18 | 2015-10-13 | Workiva Inc. | Method and computing device for maintaining dependencies among reference elements |
US10255263B2 (en) | 2015-05-18 | 2019-04-09 | Workiva Inc. | Data storage and retrieval system and method for storing cell coordinates in a computer memory |
US10657134B2 (en) | 2015-08-05 | 2020-05-19 | Ab Initio Technology Llc | Selecting queries for execution on a stream of real-time data |
US10496528B2 (en) | 2015-08-31 | 2019-12-03 | Microsoft Technology Licensing, Llc | User directed partial graph execution |
US9892029B2 (en) * | 2015-09-29 | 2018-02-13 | International Business Machines Corporation | Apparatus and method for expanding the scope of systems management applications by runtime independence |
US9355132B1 (en) * | 2015-09-30 | 2016-05-31 | Semmle Limited | Tiered arrays |
US9971570B2 (en) | 2015-12-15 | 2018-05-15 | Oracle International Corporation | Automated generation of memory consumption aware code |
EP3394739B1 (en) | 2015-12-21 | 2020-11-11 | AB Initio Technology LLC | Sub-graph interface generation |
US10127320B2 (en) | 2015-12-29 | 2018-11-13 | Samsung Electronics Co., Ltd. | Computerized identification of app search functionality for search engine access |
KR101886203B1 (ko) * | 2016-07-19 | 2018-09-06 | 주식회사 스패로우 | 프로그램 분석 장치 및 방법 |
US10769180B2 (en) * | 2017-02-02 | 2020-09-08 | International Business Machines Corporation | Efficient dataflow processing for objects |
US20180275976A1 (en) * | 2017-03-22 | 2018-09-27 | Qualcomm Innovation Center, Inc. | Link time optimization in presence of a linker script using path based rules |
JP6850907B2 (ja) | 2017-04-25 | 2021-03-31 | マーレックス ソシエテ パール アクシオン サンプリフィエ | テンポラル−リレーショナルデータベースを有するリレーショナルデータベース管理システムにおけるクエリプランの生成および実行 |
RU2681408C2 (ru) * | 2017-08-22 | 2019-03-06 | Александр Павлович Соколов | Способ и система графо-ориентированного создания масштабируемых и сопровождаемых программных реализаций сложных вычислительных методов |
US10303469B1 (en) * | 2017-12-28 | 2019-05-28 | Semmle Limited | Commit graph generation |
JP7031930B2 (ja) * | 2018-03-19 | 2022-03-08 | Necプラットフォームズ株式会社 | プログラム生成部、情報処理装置、プログラム生成方法、及びプログラム |
US10437572B1 (en) | 2018-08-03 | 2019-10-08 | King Fahd University Of Petroleum And Minerals | Methods, computer readable media, and systems for compiling concise expressive design pattern source code |
US10768904B2 (en) * | 2018-10-26 | 2020-09-08 | Fuji Xerox Co., Ltd. | System and method for a computational notebook interface |
US11755825B2 (en) | 2019-09-12 | 2023-09-12 | Workiva Inc. | Method, system, and computing device for facilitating private drafting |
US11741084B2 (en) * | 2019-09-27 | 2023-08-29 | Autodesk, Inc. | High frequency data management (HFDM) |
CN111104031B (zh) * | 2019-12-09 | 2022-08-30 | 宁波吉利汽车研究开发有限公司 | 一种面向用户的数据更新方法、装置、电子设备及存储介质 |
US11113048B1 (en) * | 2020-02-26 | 2021-09-07 | Accenture Global Solutions Limited | Utilizing artificial intelligence and machine learning models to reverse engineer an application from application artifacts |
CN111399713B (zh) * | 2020-03-11 | 2021-06-18 | 上海索辰信息科技股份有限公司 | 时序图处理系统及方法 |
US11443108B2 (en) | 2020-08-17 | 2022-09-13 | Workiva Inc. | System and method for document management using branching |
US11100281B1 (en) | 2020-08-17 | 2021-08-24 | Workiva Inc. | System and method for maintaining links and revisions |
US11100277B1 (en) | 2021-02-15 | 2021-08-24 | Workiva Inc. | Systems, methods, and computer-readable media for flow-through formatting for links |
US11354362B1 (en) | 2021-05-06 | 2022-06-07 | Workiva Inc. | System and method for copying linked documents |
US11640281B2 (en) * | 2021-05-17 | 2023-05-02 | International Business Machines Corporation | Tool for introspection in object-oriented source code |
US11640495B1 (en) | 2021-10-15 | 2023-05-02 | Workiva Inc. | Systems and methods for translation comments flowback |
CN114840265A (zh) * | 2022-03-23 | 2022-08-02 | 阿里巴巴(中国)有限公司 | 一种基于可执行图的数据处理方法 |
CN116048480B (zh) * | 2023-04-04 | 2023-06-09 | 青岛普瑞盛医药科技有限公司 | 一种基于代码工具自动生成图表的方法及装置 |
Family Cites Families (112)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4558413A (en) | 1983-11-21 | 1985-12-10 | Xerox Corporation | Software version management system |
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 |
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 |
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 |
EP0465018B1 (en) | 1990-06-29 | 1997-05-14 | Oracle Corporation | Method and apparatus for optimizing undo log usage |
EP0528631B1 (en) | 1991-08-13 | 1998-05-20 | Xerox Corporation | Electronic image generation |
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 |
US6219628B1 (en) * | 1997-08-18 | 2001-04-17 | National Instruments Corporation | System and method for configuring an instrument to perform measurement functions utilizing conversion of graphical programs into hardware implementations |
US6233733B1 (en) | 1997-09-30 | 2001-05-15 | Sun Microsystems, Inc. | Method for generating a Java bytecode data flow graph |
US6704927B1 (en) | 1998-03-24 | 2004-03-09 | Sun Microsystems, Inc. | Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading |
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 |
EP1290552A1 (en) * | 2000-04-21 | 2003-03-12 | 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 | Закрытое акционерное общество "МЦСТ" | Способ получения объектного кода |
US7047518B2 (en) | 2000-10-04 | 2006-05-16 | Bea Systems, Inc. | System for software application development and modeling |
AU2002243335A1 (en) | 2000-10-20 | 2002-06-18 | 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 |
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 |
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 |
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 |
JP3925857B2 (ja) * | 2002-11-07 | 2007-06-06 | インターナショナル・ビジネス・マシーンズ・コーポレーション | スケジュール作成方法、プログラム及びタスクスケジュール作成装置 |
US7272820B2 (en) | 2002-12-12 | 2007-09-18 | Extrapoles Pty Limited | Graphical development of fully executable transactional workflow applications with adaptive high-performance capacity |
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 |
KR100643268B1 (ko) * | 2004-01-17 | 2006-11-10 | 삼성전자주식회사 | 자바 가상 머신의 성능을 향상시키는 방법 및 상기 방법에의해 동작되는 시스템 |
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 |
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 |
CA2578385A1 (en) | 2004-09-10 | 2006-03-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 |
US7779043B2 (en) * | 2005-10-06 | 2010-08-17 | Microsoft Corporation | Extensible mechanism for object composition |
US8032885B2 (en) * | 2005-10-11 | 2011-10-04 | Oracle International Corporation | Method and medium for combining operation commands into database submission groups |
US7376758B2 (en) * | 2005-11-04 | 2008-05-20 | Sun Microsystems, Inc. | I/O dependency graphs |
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 |
US8191052B2 (en) | 2006-12-01 | 2012-05-29 | Murex S.A.S. | Producer graph oriented programming and execution |
US8307337B2 (en) | 2006-12-01 | 2012-11-06 | Murex S.A.S. | Parallelization and instrumentation in a producer graph oriented programming framework |
US8332827B2 (en) | 2006-12-01 | 2012-12-11 | Murex S.A.S. | Produce graph oriented programming framework with scenario support |
US7865872B2 (en) | 2006-12-01 | 2011-01-04 | Murex S.A.S. | Producer graph oriented programming framework with undo, redo, and abort execution support |
-
2006
- 2006-12-01 US US11/633,098 patent/US8191052B2/en active Active
-
2007
- 2007-11-30 JP JP2009538645A patent/JP5354602B2/ja active Active
- 2007-11-30 RU RU2009125013/08A patent/RU2445682C2/ru active
- 2007-11-30 WO PCT/EP2007/010409 patent/WO2008064901A2/en active Application Filing
- 2007-11-30 BR BRPI0719730-6A2A patent/BRPI0719730A2/pt not_active Application Discontinuation
- 2007-11-30 CN CN200780050659.6A patent/CN101617292B/zh active Active
- 2007-12-03 EP EP11167913.0A patent/EP2365435B1/en active Active
- 2007-12-03 EP EP11167918.9A patent/EP2365436B1/en active Active
- 2007-12-03 ES ES11167913.0T patent/ES2471394T3/es active Active
- 2007-12-03 EP EP07254672A patent/EP1942411B1/en active Active
- 2007-12-03 AT AT07254672T patent/ATE546775T1/de active
- 2007-12-03 ES ES11167918.9T patent/ES2497573T3/es active Active
- 2007-12-03 ES ES07254672T patent/ES2381373T3/es active Active
-
2010
- 2010-06-10 HK HK10105818.7A patent/HK1139216A1/xx unknown
-
2012
- 2012-04-25 US US13/455,756 patent/US8645929B2/en active Active
-
2013
- 2013-03-15 US US13/840,900 patent/US8607207B2/en active Active
-
2014
- 2014-01-21 US US14/160,271 patent/US10083013B2/en active Active
-
2018
- 2018-07-17 US US16/038,100 patent/US10481877B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
EP2365436A3 (en) | 2011-12-07 |
JP5354602B2 (ja) | 2013-11-27 |
ATE546775T1 (de) | 2012-03-15 |
US20080134138A1 (en) | 2008-06-05 |
US20130232475A1 (en) | 2013-09-05 |
ES2497573T3 (es) | 2014-09-23 |
EP2365436B1 (en) | 2014-07-30 |
EP2365435B1 (en) | 2014-04-02 |
JP2010511234A (ja) | 2010-04-08 |
WO2008064901A8 (en) | 2009-11-05 |
RU2445682C2 (ru) | 2012-03-20 |
EP1942411B1 (en) | 2012-02-22 |
WO2008064901A3 (en) | 2008-07-24 |
US8191052B2 (en) | 2012-05-29 |
RU2009125013A (ru) | 2011-01-10 |
US20120266146A1 (en) | 2012-10-18 |
US8607207B2 (en) | 2013-12-10 |
EP2365436A2 (en) | 2011-09-14 |
CN101617292A (zh) | 2009-12-30 |
EP1942411A3 (en) | 2008-07-16 |
US20140137086A1 (en) | 2014-05-15 |
HK1139216A1 (en) | 2010-09-10 |
US10083013B2 (en) | 2018-09-25 |
EP2365435A3 (en) | 2011-11-23 |
CN101617292B (zh) | 2014-09-24 |
US10481877B2 (en) | 2019-11-19 |
ES2471394T3 (es) | 2014-06-26 |
US8645929B2 (en) | 2014-02-04 |
EP1942411A2 (en) | 2008-07-09 |
WO2008064901A2 (en) | 2008-06-05 |
US20180321920A1 (en) | 2018-11-08 |
BRPI0719730A2 (pt) | 2014-03-04 |
EP2365435A2 (en) | 2011-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
ES2381373T3 (es) | Programación y ejecución orientadas por gráficos de productor | |
ES2473765T3 (es) | Paralelizaci�n e instrumentaci�n en un marco de programación orientado a grafos de productor | |
ES2327797T3 (es) | Soporte de programacion orientado a graficos de productores con soporte de escenario. | |
EP1952216B1 (en) | Producer graph oriented programming framework with undo, redo, and abort execution support | |
US7322025B2 (en) | Method and apparatus for versioning and configuration management of object models | |
Wingo | OME: A Framework for Running Spatially Explicit System Dynamics Models | |
Savinov | An approach to programming based on concepts |