When looking at an object or process to code, it is important to think of as general a solution as possible and consider all the functionality that may be required. The process in which we consider properties and functionality of objects into classes is known as ___________________.