We begin this chapter with a discussion outlining the importance of structuring no only the data pertaining to the solution of a problem, but also the programs that operate on the data. The task of formulating a solution to a problem is made simpler if the problem can be analyzed in terms of subproblems.