function) and provides a set of methods for implementing