abstract base class for task