Barbara Liskov, en el MIT, diseña en 1974 el lenguaje de programación CLU, que introduce de forma rigurosa el concepto de "tipo de dato abstracto": una forma de organizar el código en la que los detalles internos de cómo se implementa una estructura de datos quedan completamente ocultos para el resto del programa, que solo puede interactuar con ella a través de un conjunto definido de operaciones públicas. Esta separación entre la interfaz pública de un componente y los detalles internos de su implementación, hoy conocida como "encapsulación", se convierte en principio fundacional de la programación orientada a objetos, presente en lenguajes posteriores como C++, Java o Python. Liskov formula además en 1987, junto con Jeannette Wing, el "principio de sustitución de Liskov": una regla formal que establece exactamente bajo qué condiciones un tipo de dato puede sustituir a otro de forma segura dentro de un programa sin alterar su comportamiento correcto —por ejemplo, determinando con precisión matemática cuándo es seguro tratar un "cuadrado" como caso particular de "rectángulo" en un programa, y cuándo esa relación produce errores sutiles—. El principio se convierte en uno de los cinco principios fundamentales de diseño orientado a objetos (los principios SOLID), enseñados de forma estándar en cualquier formación moderna de ingeniería de software.