observer abstract object