Let us return to the issue of design. How to you begin the design process? In the past, there have been a number of different techniques that people have proposed. Throughout the 1970's and 80's people taked about structured programming. There, the idea was to first develop the data structures necessary for your task and (it was claimed) everything else would follow. Other design techniques concentrated on defining a few essential functions, and building the application around that.
Many previous software design techniques focused on the creation of a formal specification, a document that would communicate in a succient and precise manner the requirements for an application. The problem was that most applications are developed by a team of programmers for a client, and oftentimes the specification language would unintelligible to both groups, and yet was intended to be their medium of communication.
In recent years, object-oriented software development has grown hand in hand with a software development technique that is based on behavior. The reason is that behavior is something easily explained, and easily understood by everybody, programmers and clients alike. Behavior, the ``what it does'', is the first attribute identified for a software system. Thus, a design technique based on behavior can be applied from the very beginning of a problem, whereas techniques based on more structural properties of a program necessarily require more preliminary analysis before they can be meaningfully discussed.