Un algoritmo es un proceso repetible. Si es repetible, tiene que tener atributos que no cambien con la repetición. Estas son tus invariantes. Los invariantes se combinan con y / o operan en los datos (potencialmente) variables que se incorporarán a su algoritmo.
Por lo tanto, el objetivo principal de la programación es identificar lo que no varía: ese es esencialmente su programa.
En el programa orientado a objetos, hay una noción de que cada objeto debe hacer una sola cosa bien. Básicamente, esto significa que (para la POO basada en la clase) una clase define los invariantes para un solo algoritmo, junto con los marcadores de posición (variables) para cualquier variante de datos que puedan necesitar sus objetos. Idealmente, en OO, aislarías lo que varía tanto como sea posible, de modo que cada objeto sea prácticamente invariable.