abstract protected attributes and create method