made Rule an abstract class