Synthesizing Object-Oriented and Functional Design to Promote Re-Use