The purpose of computer software is the automation of work. Automated procedures are more cost-effective than manual work, which is the main driving force for the creation of software. If you want to be effective, you have to exercise a good deal of technique, organization, and discipline. In the domain of software engineering, it has been well known for several years how to apply the concept of abstraction, which is the base of every programming technique, to the construction of software. Strangely enough, the implementation of the theoretical concepts developed by computer scientists in industrial practice often seems to be unsatisfactory and insufficient. If you take a close look at the conditions of software development that still predominate the reality in the last years of this millennium, you might sometimes wonder how any products are completed at all. And you might be tempted to apply some of the simple concepts and methods known to everyone to the process and organization of software development, in order to make it more effective.
This is what ComPact is about. You do not need to be impressed by the notion software configuration management, or by expressions like version control backend. On the contrary, you will realize that Elego ComPact is based on very simple and easy-to-understand ideas and methods. The remainder of this chapter is dedicated to the explanation of some of these concepts.
If you build a complex system, you cannot expect to have a detailed view of it as a whole. Rather you need several levels of abstraction, and at each level you deal with one aspect of the problem. In the field of programming, the topmost level supported by tools is often the level of modules and interfaces, which are mapped to kinds of files. Modules and interfaces are based on the famous principle of information hiding (as are many other similar concepts and notions, like class definition and class implementation etc.).
Projects often consist of several hundreds or thousands of modules. There is no reason why the same concept of separation should not be applied again at a higher level. So we divide the mass of modules of the system into subsystems, and we divide each subsystem into a visible and a hidden part (the exported interface and the private implementation). This way we can have a look at the dependencies of our subsystems while ignoring their implementation, and understand each subsystem while ignoring the complex relations to other parts of the system. In Elego ComPact, these subsystems are called software packages or just packages.
The concept of software packages pervades the use of ComPact. The purpose of ComPact can be described as the organization and maintenance of software packages and their relations, the transformation of packages into different states, and the methodical organization of their development. Some of the uses of software packages are described in more detail in Chapter 5.