Modularization along the boundaries of data structures and algorithms is a commonly-used software decomposition technique
in computer science research and practice. When applied, however, it results in incomplete segregation of data structure handling
and algorithm code into separate modules. The resulting tight coupling between modules makes it difficult to develop these
modules independently, difficult to understand them independently, and difficult to change them independently. Object-oriented
computing has maintained the traditional dichotomy between data structures and algorithms by encapsulating only data structures
as objects, leaving algorithms to be encapsulated as single procedures whose parameters are such objects. For the full software
engineering benefits of the information hiding principle to be realized, data abstractions that encapsulate data structures
and algorithms together are essential.