The essence of program logic: similar aspects of operation should be implemented in the same code, so that there is no code duplication. But parts with different behavior should be somehow get chosen from that common code. In procedural programming, the choosing is often based on StateVariables?; in ObjectOrientedProgramming, DifferentImplementations?; and in FunctionalProgramming, HigherOrderFunctions passed as parameters.