Abstraction in programming languages