uppg1 abstraction