abstract object builder