Program to abstraction rather than implementation