title: Diseño por contrato
text: # Diseño por contrato
  
  El diseño por contrato es una metodología para el diseño e implementación de aplicaciones y componentes popularizada por el lenguaje de programación Eiffel. Consiste en considerar los elementos de diseño como participantes de una relación similar al contrato de negocios. Así, se pueden diseñar los componentes dando por supuesto que se cumplirán ciertas condiciones de entrada (precondiciones), mientras que se deberán garantizar ciertas condiciones de salida (postcondiciones), así como la invariante de clase (propiedades que se mantienen invariantes a pesar del procesamiento realizado por el componente).
  Esta metodología promete:
  * Una mejor comprensión de la programación orientada a objetos. Esto se debe a que el propio prototipo de un recurso de una clase es también parte del contrato que este ofrece. Mediante razonamientos de este tipo, por ejemplo, se justifica el comportamiento covariante de los tipos de retornos de los métodos en Eiffel.
  * Menos errores en el código gracias a una mejor representación de las especificaciones.
  * Un sistema efectivo para detectar errores.
  * Una forma práctica de documentar el código al mismo tiempo en que se programa.
  * Una imbricación eficaz con los mecanismos de herencia y reutilización.
  * Una forma efectiva de encapsulación evitando el acceso al resto de propiedades y métodos.
  * Una agrupación de operaciones para un mismo contexto. Si hablamos de una entidad A del cual, podemos instanciar dos objetos B y C que tienen distintos contextos relacionados con la entidad A, con el contrato no exponemos el negocio que tenga que ofrecer el objeto B con el del C. Un ejemplo A = Banco, B= Ingresos bancarios y C= pagos de facturas.