Software development can be seen as a modeling activity. The first step in the software development is the modeling of the problem we are trying to solve and building the conceptual model of the problem domain. The next step is to convert this model to the solution domain model which represents the program that will actually solve our problem. In this perspective, programming languages define the solution domain model that can be converted to the running program by means of compilers. In summary, the software development process takes place in two different domains and at least two kinds of modeling techniques are required. Object Orientation narrows the gap between problem and solution models as it enables us to represent solution domain in terms of problem domain elements. The problem domain elements include real world objects that interact to accomplish a given task. For example, a library system deals with librarians, borrowers, books, and their interactions. While we model the problem, we model each problem domain element with their states and behaviors and identify their interactions. For example, any system to automate the operations in a library should deal with the objects in the problem domain. We can identify two merits of the object oriented approach in software development process: they can be used for any problem we face with and solution domain model actually resembles the problem domain model. Since the real world can be seen as a bunch of objects collaborating to achieve a task, shaping the solution domain in terms of objects and their interactions potentially gives us an opportunity to solve any problem using object oriented approach. Moreover, as solution domain model reflects the problem domain model, while you read your program, you are actually navigating through the problem domain. This, obviously, will contribute to reduction of complexity, ease of development and ease of maintenance of the programs.
ENCAPSULATİON