Paradigma de la programación orientada a aspectos y desarrollo de un prototipo software. - Robalino Jácome, Mayra Raquel (2008)
La ingeniería del software ciertamente ha evolucionado desde sus comienzos. Al principio se tenía un código en el que no existía la separación de conceptos; datos y funcionalidad se mezclaban sin una línea que los dividiera claramente. A esta etapa se la conoce como código spaghetti, debido a que se tenía una maraña entre datos y funcionalidad similar a la que se forma al comer un plato de esta comida italiana. A medida que la ingeniería de software fue creciendo, se fueron introduciendo conceptos que llevaron a una programación de más alto nivel: la noción de tipos, bloques estructurados, agrupamientos de instrucciones a través de procedimientos y funciones como una forma primitiva de abstracción, unidades, módulos, tipos de datos abstractos, herencia. Como vemos los progresos más importantes se han obtenido aplicando tres principios, los cuales están estrechamente relacionados entre sí: abstracción, encapsulamiento, y modularidad. Esto último consiste en la noción de descomponer un sistema complejo en subsistemas más fáciles de manejar, siguiendo la antigua técnica de "dividir y conquistar". Un avance importante lo introdujo la Programación Orientada a Objetos (POO), donde se fuerza el encapsulamiento y la abstracción, a través de una unidad que captura tanto funcionalidad como comportamiento y estructura interna. A esta entidad se la conoce como clase. La clase hace énfasis tanto en los algoritmos como en los datos. La POO está basada en cuatro conceptos.