  Improving modularity and reusability are two key objectives in
object-oriented programming. These objectives are achieved by applying several
key concepts, such as data encapsulation and inheritance. A class in an
object-oriented system is the basic unit of design. Assessing the quality of an
object-oriented class may require flattening the class and representing it as
it really is, including all accessible inherited class members. Thus, class
flattening helps in exploring the impact of inheritance on improving code
quality. This paper explains how to flatten Java classes and discusses the
relationship between class flattening and some applications of interest to
software practitioners, such as refactoring and indicating external quality
attributes.
