Object-oriented programming is considered in the context of software communities -- groups of designers and developers sharing knowledge and experience. One way of fostering reuse of this experience is by establishing large collections of reusable object classes. Resulting problems include: Class packaging and class organization -- how can classes and their methods be represented to simplify reuse. Class selection and exploration -- what query and browsing facilities are needed by developers in order to facilitate software reuse. Class evolution -- how may the class hierarchy be reorganized as a result of changes introduced by developers. These issues are illustrated by examining prototype tools and systems intended to aid object-oriented ...