data hiding vs abstraction