This description relates to creating and using a building block in a computer system.
Computer systems typically include one or more application programs that process data for a specific purpose. For example, a sales transaction application may be capable of receiving sales orders input by users and initiating product delivery to a named customer. In these operations, the application program will handle information regarding the product and the customer, to name just two examples. Particularly, a delivery address may be registered for shipping the goods. An address typically contains several distinct parts, such as a street name, a city name, and a zip (or postal) code. The system may handle these different parts collectively or individually.
Some existing systems include building blocks that correspond to information or data. In the above example, each of the street, city and zip code may correspond to one of several building blocks that are stored in a repository of the system. Each of the building blocks may include one or more methods that can be performed upon calling the particular block. For example, the method may involve reading or writing the particular data, or verifying its accuracy. Accordingly, the building block may include data that has been retrieved using its read method, such as a zip code or a street name. The decision to create such building blocks for particular data determines a granularity of the items that are stored in the repository. Building blocks typically are directly implemented in coding.
More sophisticated systems may include relationships between building blocks. This allows a caller to navigate from one building block to another. Typically, such relationships are created when two building blocks are associated with each other in the processing performed by the application program. For example, there may be a relationship between a city building block and a zip code building block, because these items typically are located close to each other in the shipping address. Accordingly, it may be said that such relationships expose the data model of the repository by allowing the caller to understand how the items are associated with each other.
However, these systems may have disadvantages. For example, the building blocks typically are made rather elementary to ensure that they are flexible enough to be used for a variety of purposes. On the other hand, such a fine granularity may be unsuitable to the demands of the caller. For example, in a given situation most callers may have to call many different building blocks to achieve the sought result. Moreover, the callers must deal with the data model, which may be relatively technical.
The invention relates to creating and using building blocks.
In a first general aspect, a method of creating a building block comprises receiving, in a computer system that includes a plurality of building blocks, a user input to create a composite building block that is associated with at least two of the building blocks. The method comprises creating the composite building block in response to the user input, the composite building block being self-similar to the plurality of building blocks.
In selected embodiments, creating the composite building block comprises associating with the composite building block a method of one of the at least two building blocks. Creating the composite building block may comprise associating a relationship of one of the at least two building blocks with the composite building block.
In selected embodiments, the composite building block is self-similar to the plurality of building blocks because the composite building block has a common behavior with the plurality of building blocks. The common behavior may include that the composite building block makes a method available for execution and makes a relationship available for navigation.
In selected embodiments, the user input specifies that one of the at least two building blocks is a root building block. The root building block may be associated with a first identifier, and the method may further comprise associating a second identifier with the composite building block, the second identifier beginning with the first identifier. When another of the at least two building blocks is associated with a third identifier, the method may further comprise extending the second identifier with the third identifier after the first identifier.
When the composite building block is associated with several of the building blocks including the at least two building blocks, and when each of the several building blocks includes a relationship to another of the several building blocks forming an order of the several building blocks, the method may further comprise extending the second identifier, after the first identifier, with identifiers of the several building blocks in the order of the several building blocks.
A composite building block may include another composite building block. For example, there may be created an additional composite building block that is associated with the composite building block and at least one other of the building blocks.
In a second general aspect, a method of using building blocks comprises receiving, in a computer system that includes building blocks, a call for a function available in a composite building block. The composite building block is self-similar to the building blocks. The method comprises performing the function in response to the call, which function the composite building block inherits from one of the building blocks.
In selected embodiments, the function is a method of one of the at least two building blocks. The function may be a relationship of one of the at least two building blocks.
Advantages of the systems and techniques described herein may include any or all of the following: Providing improved building blocks; providing an improved modeling of a building block that includes features of other blocks; providing building block modeling as defined and needed by business processes; providing building block modeling without the need for additional programming; providing that building block modeling can be done later in time than the definition of underlying building blocks; providing improved execution of a building block method; providing improved navigation according to a building block relationship; and providing building blocks of very different granularity.
The details of one or more embodiments of the invention are set forth in the accompanying drawings and the description below. Other features, objects, and advantages of the invention will be apparent from the description and drawings, and from the claims.
Like reference numerals in the various drawings indicate like elements.
The NBBs 102 can have relationships 106 with each other. For example, the NBB 102A has a relationship 106A that allows a caller to navigate from the NBB 102A to the NBB 102B. Similarly, the NBB 102B has a relationship 106B to the NBB 102C, and the NBB 102C has a relationship 106C to the NBB 102D. Accordingly, a caller can use any or all of the relationships 106 to navigate among the NBBs.
There has been created two composite building blocks (CBBs) 108 for the first system 100. The CBBs are self-similar to any and all of the NBBs 102, meaning that when a building block is called, the caller need not be aware whether the called block is an NBB or a CBB. Moreover, it may be impossible for the caller to distinguish an NBB from a CBB. As an example, the CBB may have a common behavior with the NBBs. Such a common behavior may include that the CBB makes a method of an underlying NBB available to the caller for execution. As another example, the common behavior may include that the CBB makes a relationship of an underlying NBB available to the caller for navigation. A CBB can be formed from one or more NBBs and/or CBBs.
Each of the CBBs is associated with two or more building blocks. Here, a first CBB 108A is associated with the NBB 102B and with the NBB 102C, as indicated by respective arrows 110A and 110B. A second CBB 108B is associated with the NBB 102C and with the NBB 102D, as indicated by respective arrows 110C and 110D. Accordingly, the CBB 108A and the CBB 108B are both associated with the NBB 102C.
Each of the CBBs may be created using a declarative mapping for its respective NBBs. An advantage of this is that no further coding may be necessary. That is, while the NBBs may be directly implemented in coding, the CBBs may be implemented by the declarative mapping without the need for further coding.
A CBB may inherit a method of an NBB with which it is associated. Upon creating the CBB, the system may associate a method of the NBB with the CBB. For example, the system may associate methods 104B and 104C with the CBB 108A upon creating it. Accordingly, the methods of the underlying NBBs may be aggregated in the created CBB.
The CBB makes the associated methods available to a caller for execution. Because the CBB is self-similar to the NBBs, the caller need not be aware that the executed methods are inherited from the NBBs. When the caller of the CBB requests method execution, the method may be executed in the NBB from which it is inherited. If, for example, the NBB 102B corresponds to a zip code, the method 104B may be a read method that reads a zip code, and after executing the method the CBB may include the zip code read with the method 104B.
Another specific example involves the CBB inheriting a relationship from the underlying NBB, and this will now be described with reference also to
There is created a CBB AB (
Finally, the relationship 200 remains useable by a caller of the NBB A for navigating to the NBB B. This relationship has less significance, though, to a caller of the CBB AB. The system may therefore determine, upon creating the CBB AB, whether any relationship of the two NBBs identifies another of the NBBs with which the CBB is to be associated. If so, the system may ignore that relationship in the creation. On the contrary, relationships that do identify NBBs (or other CBBs) that are not involved in the CBB should be included.
The created CBB AB can be identified in a relationship held by another building block, such as an exemplary NBB E as shown in
Referring again to
The CBB 116 has associated with it methods of the underlying NBB and CBB: the method 104A of the NBB 102A, and the methods 104B and 104C of the CBB 108A. Similarly, the CBB 116 has associated with it relationships of the underlying NBB and CBB: the relationship 106A of the NBB 102A and the relationship 106C of the CBB 108A. If the CBB 108A includes a relationship 122 to the CBB 108B, this relationship may be inherited by the CBB 116. The relationship 106B of the NBB 102B identifies the NBB 102C that is also included in the CBB 116. This kind of relationship may be ignored when creating the CBB 108A and it is possibly not inherited by the CBB 116.
The second system 112 can call the CBB 116 as schematically indicated by an arrow 124. For example, the second system can call the CBB 116 to execute any method available there, or to navigate to a building block according to any relationship available there. The second system can call the CBB 108B as indicated by an arrow 126. That is, the second system can directly call a building block stored in the first system also without a specific building block having been created in the second system. The second system also can call any NBB directly, for example the NBB 102D as indicated by an arrow 128.
There will now be described, with reference also to
Receiving, in step 310 and in a computer system that includes a plurality of building blocks, a user input to create a composite building block that is associated with at least two of the building blocks. For example, a user may make an input in the system 100 to create the CBB 108A. The user input may specify that the CBB 108A be associated with the NBBs 102B and 102C.
Creating, in step 320, the composite building block in response to the user input. The composite building block is self-similar to the plurality of building blocks. For example, the system 100 may create the CBB 108A, which is self-similar to the NBBs, in response to the received user input.
Receiving, in step 410 and in a computer system that includes building blocks, a call for a function available in a composite building block. The composite building block is self-similar to the building blocks. For example, there may be received in system 100, from an application program, a call for the CBB 108A. As other examples, the second system 112 may call the CBB 108A using the CBB 116 (as indicated by the arrow 118), or the second system may call the CBB 108B (as indicated by the arrow 126).
Performing, in step 420, the function in response to the call, which function the composite building block inherits from one of the building blocks. For example, the function may be an executable method or a relationship for navigation. That is, the first system 100 may execute the method, or perform the navigation, in response to the received call. The method may be performed on the underlying building block.
Some systems can use root building blocks. For example, the user input that triggers creation of a composite building block may specify that one building block is a root building block for the composite building block. That is, it may be specified upon creating the CBB 108A that the NBB 102B is the root building block. The CBB may be given an identifier that is based on identifiers of the NBBs, including the root building block. For example, the CBB identifier may begin with the root building block identifier. Moreover, the CBB identifier may be extended with identifier(s) of the other underlying building blocks.
Particularly, when the CBB is associated with several building blocks that include relationships to each other so that they form an order of the building blocks, the order may be taken into account when constructing the CBB identifier. For example, the relationships 106 between the NBBs 102 may define an order thus: NBB 102A to NBB 102B to NBB 102C to NBB 102D. The CBB identifier may begin with the root building block identifier and may be extended with the identifiers of the remaining building blocks in the order that the relationships specify.
The processor 510 is capable of processing instructions for execution within the system 500. In one embodiment, the processor 510 is a single-threaded processor. In another embodiment, the processor 510 is a multi-threaded processor. The processor 510 is capable of processing instructions stored in the memory 520 or on the storage device 530 to display graphical information for a user interface on the input/output device 540. Particularly, the processor 510 can execute suitable instructions for the above-described creation or use of building blocks.
The memory 520 stores information within the system 500. In one embodiment, the memory 520 is a computer-readable medium. In one embodiment, the memory 520 is a volatile memory unit. In another embodiment, the memory 520 is a non-volatile memory unit.
The storage device 530 is capable of providing mass storage for the system 500. In one embodiment, the storage device 530 is a computer-readable medium. In various different embodiments, the storage device 530 may be a floppy disk device, a hard disk device, an optical disk device, or a tape device.
The memory 520, the storage device 530, or both, may hold the building blocks described herein. As another example, any or both of them may hold an application program that makes a call as described herein.
The input/output device 540 provides input/output operations for the system 500. In one embodiment, the input/output device 540 includes a keyboard and/or pointing device. In some embodiments, the input/output device 540 includes a display unit for displaying graphical user interfaces. Particularly, the input/output device 540 may include interface(s) for making input(s) to create a composite building block.
The invention can be implemented in digital electronic circuitry, or in computer hardware, firmware, software, or in combinations of them. Apparatus of the invention can be implemented in a computer program product tangibly embodied in an information carrier, e.g., in a machine-readable storage device or in a propagated signal, for execution by a programmable processor; and method steps of the invention can be performed by a programmable processor executing a program of instructions to perform functions of the invention by operating on input data and generating output. The invention can be implemented advantageously in one or more computer programs that are executable on a programmable system including at least one programmable processor coupled to receive data and instructions from, and to transmit data and instructions to, a data storage system, at least one input device, and at least one output device. A computer program is a set of instructions that can be used, directly or indirectly, in a computer to perform a certain activity or bring about a certain result. A computer program can be written in any form of programming language, including compiled or interpreted languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other unit suitable for use in a computing environment.
Suitable processors for the execution of a program of instructions include, by way of example, both general and special purpose microprocessors, and the sole processor or one of multiple processors of any kind of computer. Generally, a processor will receive instructions and data from a read-only memory or a random access memory or both. The essential elements of a computer are a processor for executing instructions and one or more memories for storing instructions and data. Generally, a computer will also include, or be operatively coupled to communicate with, one or more mass storage devices for storing data files; such devices include magnetic disks, such as internal hard disks and removable disks; magneto-optical disks; and optical disks. Storage devices suitable for tangibly embodying computer program instructions and data include all forms of non-volatile memory, including by way of example semiconductor memory devices, such as EPROM, EEPROM, and flash memory devices; magnetic disks such as internal hard disks and removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The processor and the memory can be supplemented by, or incorporated in, ASICs (application-specific integrated circuits).
To provide for interaction with a user, the invention can be implemented on a computer having a display device such as a CRT (cathode ray tube) or LCD (liquid crystal display) monitor for displaying information to the user and a keyboard and a pointing device such as a mouse or a trackball by which the user can provide input to the computer.
The invention can be implemented in a computer system that includes a back-end component, such as a data server, or that includes a middleware component, such as an application server or an Internet server, or that includes a front-end component, such as a client computer having a graphical user interface or an Internet browser, or any combination of them. The components of the system can be connected by any form or medium of digital data communication such as a communication network. Examples of communication networks include, e.g., a LAN, a WAN, and the computers and networks forming the Internet.
The computer system can include clients and servers. A client and server are generally remote from each other and typically interact through a network, such as the described one. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other.
A number of embodiments of the invention have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of the invention. For example, building blocks can correspond not only to address portions but to any type of information, such as a product name or a type of product. Accordingly, other embodiments are within the scope of the following claims.