Generalization is not Abstraction
In the field of computer science a lot of confusion comes from the wrong use of terminolgy. A typical example of this is the use of the term abstraction when dealing with generalization.
Say we have a piece of code that computes the power 2 of a variable a.
a = a ^ 2;We can replace that piece of code with a call of the function fa that upon execution (or compilation) is replaced with the piece of code. In the same manner the piece of code
b = b ^ 2;can be replaced with a call of the function fb.
The fa and fb are both abstractions. We have abstracted from the details of how the power of 2 for the variables a and b are computed.
We can generalize this construction by a parameterization. Instead of the functions fa and fb we can use the function f(x). The calls of the functions fa and fb are to be replaced with f(a) and f(b).
The generalization is clearly not an abstraction as it does not abstract from any details.
Most likely, the wrong use of the term abstraction for a generalization is the fact that with the introduction of a parameterized function both an abstraction AND a generalization have been used.
There are a lot of examples to be found on this mix-up of terminology. Some notable examples are with Software Design and with Lambda calculus (lambda abstraction), both on Wikipedia.