According to its terminology,
“Materials are definitions of how a surface should be rendered, including references to textures, tiling, offset, color and more. The options of a material depend on which shader is being used”.
How can we translate the above definition to a practical level? Let’s think of a material as “the container of a shader”, this means that we have the program that is performing the surface calculations (shader) and the container (material) that is capable of reading these calculations.
A material alone cannot perform any operations. If it doesn’t have a shader it will not know how it should be rendered, likewise, a shader cannot be applied to an object if it is not through a material, therefore, the analogy between a material and a shader is a “graphical preview of mathematical calculations”.