in addition to abstraction and encapsulationa fundamental principle of object oriented design is modularity modern software systems typically consist of several different components that must interact correctly in order for the entire system to work properly keeping these interactions straight requires that these different components be well organized in object-oriented designthis code structuring approach centers around the concept of modularity modularity refers to an organizing principle for code in which different components of software system are divided into separate functional units hierarchical organization the structure imposed by modularity helps to enable software reusability if software modules are written in an abstract way to solve general problemsthen modules can be reused when instances of these same general problems arise in other contexts for examplethe structural definition of wall is the same from house to housetypically being defined in terms of by -inch studsspaced certain distance apartetc thusan organized architect can reuse his or her wall definitions from one house to another in reusing such definitionsome parts may require redefinitionfor examplea wall in commercial building may be similar to that of housebut the electrical system and stud material might be different natural way to organize various structural components of software package is in hierarchical fashionwhich groups similar abstract definitions together in level-by-level manner that goes from specific to more general as one traverses up the hierarchy common use of such hierarchies is in an organizational chartwhere each link going up can be read as "is ,as in " ranch is house is building this kind of hierarchy is useful in software designfor it groups together common functionality at the most general leveland views specialized behavior as an extension of the general one figure an example of an "is ahierarchy involving architectural buildings