Categories for Object Oriented Programming