Interface ISmartObject<SO extends ISmartObject<SO>>