Abstract base class for components