Best practises for reusable, customizable component design

Object oriented programming.