A Reverse Engineering Method for Identifying Reusable Abstract Data Types