Diseño de programas: formalismo y abstracción