classes with abstractions and interfaces