posted 23 years ago
While refactoring and factoring have a lot in common, the reduction of code size and complexity by applying "once and only once" is only one aspect of refactoring, albeit one that's easy to grasp. Other major aspects of refactoring include ensuring that each method is associated with the appropriate object, and that each class in the class hierarchy has the right set of responsibilities.
The essence of refactoring, compared to other forms of software design is that it can be done in a series of very small, carefully chosen steps, each of which only affects the dsign of the software, not its functionality. Example refactorings might be moving a method from one class to another or creating a new base class for two classes which share some concepts. Both of these affect the design of the software, and thus its understandability, and thus its maintenance cost, but they have no effect on the function of the software.