1. Technical Field
This invention generally relates to the data processing field. More specifically, this invention relates to the field of object creation in object-oriented systems.
2. Related Art
The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, overall computer system technology has progressed through the evolution of computer programs, or the ability of computer systems to perform a variety of tasks in an efficient manner. The EDVAC system used what was called a "one address" computer programming language. This language (in combination with other factors, such as limited memory, lack of proper tools, etc.) allowed for only the most rudimentary computer programs. By the 1960s, improvements in computer programming languages led to computer programs that were so large and complex that it was difficult to manage and control their development and maintenance.
As the complexity of computer hardware and software increases, the need to efficiently and effectively develop new software becomes more acute. Software development costs have continued to rise because complex programs take more time, and hence more money, to produce. Object-oriented programming (OOP) is one way computer programmers have sought to reduce the time and costs associated with developing complex software. A single object in OOP represents an individual operation or a group of operations that are performed by a computer system upon information controlled by the object. Objects can be thought of as autonomous agents that work together to perform certain tasks. Sometimes entire computer programs are made up of groupings of objects and sometimes objects are simply accessed by more traditional computer programs to perform one specific task or subtask.
The goal of using object-oriented programming is to create small, reusable sections of program code known as objects that can be quickly and easily combined and re-used to create new programs. This is similar to the idea of using the same set of building blocks again and again to create many different structures. The modular and re-usable aspects of objects will typically speed development of new programs, thereby reducing the costs associated with the development cycle. In addition, by creating and re-using a group of well-tested objects, a more stable, uniform, and consistent approach to developing new computer programs can be achieved.
Although object-oriented programming offers significant improvements over other programming types, program development still requires significant amounts of time and effort, especially if no preexisting objects are available as a starting point. Consequently, one approach has been to provide a program developer with a set of pre-defined, interconnected classes that create a set of objects. Such pre-defined classes and libraries are typically called object frameworks. Frameworks essentially provide a prefabricated structure for a working program by defining certain classes, class relationships, and methods that a programmer may easily use by appropriate subclassing to generate a new object-oriented program.
A problem, though, that exists with any object-oriented program is the difficulty of modifying the configuration of a specific object (by modifying its class definition) to fit a specific need, improve the program, or alternate between two or more implementations of that program. Each object-oriented class is characterized by configuration data that defines attributes of the class. Changing the way objects that are members of a class behave requires changing the configuration data for that class. The most common way of changing an object-oriented (OO) program so that the program uses a different class implementation than the existing class, would require changing the source code wherever the code creates the objects, rebuilding the program, and installing the program on all the systems intended to use the new class. If there are many different sets of such classes that could be changed, or various physical locations for creation of the objects, the combinatorial explosion of different versions of the program becomes completely unmanageable. Without methods for easily changing configuration data in an object-oriented system to define new classes from existing classes, the computer industry will never fully take advantage of the reusability of portions of object-oriented programs.