object based design