Decoupling interfaces from implementations