Object-oriented programmers usually have to struggle to design a flexible and general base class hierarchy. In contrast, HCL developers were handed a concise and abstract hierarchy on a silver platter: vector algebra. HCL implements abstract mathematical concepts, such as vectors, vector spaces, and operators. Every HCL class corresponds to a standard item in an algebra or numerical analysis textbook.
The designer of a new software package needs to accommodate present requirements and to anticipate the problems of the future. In object-oriented programming particularly, the design of your base classes can severely limit one's software's abilities later. By implementing abstract mathematical concepts such as abstract base classes, the HCL classes are guaranteed to be devoid of any application specific details, and are poised to embrace new developments in the field of numerical analysis. Because of its reliance on broad mathematical concepts, the class library supports flexibly even intricate interactions between applications and solvers in a consistent and expandable fashion Schroeder and Schwab (1996). Furthermore, HCL's underlying, well-known mathematical concepts should foster the communication and intuitive understanding among HCL users independent of their field of expertise. The ease of communication is especially important since HCL attempts to bridge the gap between applied mathematics and various applied sciences.
For practical reasons, HCL only includes mathematical entities that are needed by its current users to estimate solutions to applied inversion problems. As a design principle, HCL does not provide an all-encompassing framework, but is expected to grow as users require additional classes.