The ABCs of abstract base classes