Funcitonal Programming + Inheritence and Abstraction