abstract base module class