Aside: Refactoring
What we did in taking two existing classes and removing their common functionality to a new class from which they inherit is one form of refactoring. Refactoring refers to processes by which we modify a program without affecting its behaviour, i.e. we clean up its internal structure without affecting its external behaviour. Until the 1990s programmers just thought of it as cleaning up code, but with the development of agile development processes, and their emphasis on iterative development, refactoring became a key programming activity. Agile developers have refined many rules and techniques for successful refactoring.