title: Separación de intereses
text: # Separación de intereses
  
  En informática, la separación de intereses, también denominada separación de preocupaciones o separación de conceptos (en inglés separation of concerns), es un principio de diseño para separar un programa informático en secciones distintas, tal que cada sección enfoca un interés delimitado. Un interés o una preocupación es un conjunto de información que afecta al código de un programa. Una preocupación puede ser algo tan general como los detalles del hardware para el que se va a optimizar el código, o tan concreto como el nombre de una clase que se pretende instanciar. Un programa que utiliza una buena separación de intereses es un programa modular. La modularidad, y por tanto la separación de intereses, se consigue a través de la encapsulación de información en una sección de código que tiene una interfaz bien definida. La encapsulación es una manera de ocultar información que consigue que cada capa no conozca el estado de las demás. Otro ejemplo de separación de intereses es la división de un sistema de información en capas (p. ej., capa de presentación, capa de lógica de negocio, capa de acceso a datos, capa de persistencia).
  El valor de la separación de intereses es simplificar el desarrollo y mantenimiento de programas informáticos. Cuando los intereses están bien separados, se pueden reutilizar, desarrollar y actualizar las distintas secciones individuales de forma independiente. La posibilidad de modificar una parte del código del programa sin tener que revisar y modificar las demás es de gran valor en el mantenimiento de software.
  
  # Separación de intereses
  ## Origen
  
  El término «separation of concerns» fue probablemente acuñado por Edsger W. Dijkstra en su trabajo de 1974 «On the role of scientific thought» («Sobre el papel del pensamiento científico»).
  
  # Separación de intereses
  ## Ejemplos
  
  * Separación de una aplicación informática en front-end y back-end, o en las capas de capa de presentación y de acceso a datos.
  * Patrones de arquitectura tales como modelo-vista-controlador, que separan una aplicación en varias partes interconectadas pero independientes.