Separación de intereses

De Wikipedia, la enciclopedia libre
(Redirigido desde «Separación de conceptos»)
Saltar a: navegación, búsqueda

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.[1]​ 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.[2]​ 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).[3]

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.

Origen[editar]

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»).[4]

Let me try to explain to you, what to my taste is characteristic for all intelligent thinking. It is, that one is willing to study in depth an aspect of one's subject matter in isolation for the sake of its own consistency, all the time knowing that one is occupying oneself only with one of the aspects. We know that a program must be correct and we can study it from that viewpoint only; we also know that it should be efficient and we can study its efficiency on another day, so to speak. In another mood we may ask ourselves whether, and if so: why, the program is desirable. But nothing is gained —on the contrary!— by tackling these various aspects simultaneously. It is what I sometimes have called "the separation of concerns", which, even if not perfectly possible, is yet the only available technique for effective ordering of one's thoughts, that I know of. This is what I mean by "focusing one's attention upon some aspect": it does not mean ignoring the other aspects, it is just doing justice to the fact that from this aspect's point of view, the other is irrelevant. It is being one- and multiple-track minded simultaneously.

Déjenme explicarles qué es, a mi gusto, característico de todo pensamiento inteligente. Se trata de estar dispuesto a estudiar en profundidad un aspecto del sujeto de forma aislada por su propia consistencia, sabiendo siempre que solo se está enfocando uno de los aspectos. Sabemos que un programa debe ser correcto y podemos estudiarlo solo desde ese punto de vista; también sabemos que debe ser eficiente y podemos estudiar su eficiencia otro día, por así decirlo. De otra forma podemos preguntarnos si, y en tal caso por qué, el programa es deseable. Pero nada se gana —¡al contrario!— por abordar de forma simultánea estos aspectos. Esto es lo que en ocasiones he denominado «la separación de intereses», la cual, aunque no sea perfectamente posible, sigue siendo la única técnica disponible, que yo conozca, para ordenar de forma efectiva los propios pensamientos. Esto es lo que quiero decir por «prestar atención a determinado aspecto»: no quiere decir ignorar los demás aspectos, simplemente se trata de hacer justicia al hecho de que, desde el punto de vista de este aspecto, el otro es irrelevante. Es tener la mente enfocada en una cosa y en muchas de forma simultánea.

Ejemplos[editar]

Referencias[editar]

  1. Laplante, Phillip (2007). What Every Engineer Should Know About Software Engineering. CRC Press. ISBN 0849372283. 
  2. Mitchell, Dr. R. J. (1990). Managing Complexity in Software Engineering. IEE. p. 5. ISBN 0863411711. 
  3. Microsoft Application Architecture Guide. Microsoft Press. 2009. ISBN 0-7356-2710-X. 
  4. Dijkstra, Edsger W (1982). «On the role of scientific thought». Selected writings on Computing: A Personal Perspective. New York, NY, USA: Springer-Verlag. pp. 60-66. ISBN 0-387-90652-5.