Este documento describe diferentes niveles de abstracción en el diseño de software, incluyendo niveles altos y bajos de abstracción, refinamiento, modularidad, jerarquía de control, arquitectura de software, y estructura de datos. El objetivo principal es lograr un diseño manejable intelectualmente que represente la organización y relación lógica entre los componentes de un sistema de software.