Алгоритм - это повторяемый процесс. Если оно повторяется, оно должно иметь атрибуты, которые не меняются при повторении. Это ваши инварианты. Инварианты объединяются и / или оперируют (потенциально) изменяющимися данными, которые будут вводиться в ваш алгоритм.
Таким образом, весь смысл программирования состоит в том, чтобы определить, что не меняется - это, по сути, ваша программа.
В объектно-ориентированной программе существует понятие, что каждый объект должен хорошо выполнять одну вещь. По сути это означает, что (для ООП на основе классов) класс определяет инварианты для одного алгоритма вместе с заполнителями (переменными) для любых вариантов данных, которые могут понадобиться его объектам. В идеале в ОО вы должны изолировать то, что варьируется в максимально возможной степени, чтобы каждый объект был в основном инвариантным.