abstraction exercise