Describir: Automatic restructuring of object-oriented programs