initial abstract classes & their tests implementation