Since the first days of computing it is clear that nobody is able to conceive large unstructured software systems. As a consequence, software systems are generally structured into subsystems or modules of a certain kind. The question, however, is how such a decomposition into subsystems should take place, i.e. what structuring criteria should lead to a specific modularization. In this paper a particular software design methodology called object oriented programming is discussed. Object oriented programming is especially interesting not only because of the very pleasing programming scheme but also because of its impact on the entire life cycle of a software project.