El diseño del por el contrato, el DBC o el que programa por el contrato es un acercamiento a diseñar los programas informáticos . Prescribe que los diseñadores del software deben definir las especificaciones de interfaz comprobables exactas para los componentes de software basados sobre la teoría de los tipos de datos abstractos y la metáfora conceptual de un contrato del negocio.
Porque " Diseño de Contract" es una marca registrada del software de Eiffel, los sostenes Eiffel, muchos reveladores le referirán solamente como que programa por el contrato o desarrollo el contrato-primer.
El diseño por el contrato tiene su raíz en trabajo sobre la verificación formal, la especificación formal y la lógica de Hoare. Las contribuciones originales incluyen:
Una metáfora clara para dirigir el proceso de diseño.
El uso a la herencia, particularmente un formalismo para la redefinición y el atascamiento dinámico .
El uso a la dirección de excepción .
La conexión con la documentación de software automática .
el surtidor debe proporcionar cierto producto (obligación) y se da derecho para contar con que el cliente pague su honorario (ventaja).
El cliente debe pagar el honorario (obligación) y se da derecho para conseguir el producto (ventaja).
Ambas partes deben satisfacer ciertas obligaciones, tales como leyes y regulaciones, aplicándose a todos los contratos.
Semejantemente, si una rutina de una clase en la programación orientada al objeto proporciona cierta funcionalidad, puede:
impone cierta obligación de ser garantizado en entrada por cualquier módulo del cliente que las llamadas él: la condición previa - una obligación del de la rutina para el cliente, y una ventaja para el surtidor (la rutina sí mismo), como la libera de tener que manejar casos fuera de la condición previa.
Garantizar cierta característica en la salida: el postcondition - una obligación del de la rutina para el surtidor, y obviamente una ventaja (la ventaja principal de llamar la rutina) para el cliente.
Mantener cierta característica, presunta en entrada y garantizada en la salida: la clase invariante.
El contrato es la formalización de estas obligaciones y ventajas. Uno podía resumir diseño por el contrato por el " questions" tres; que el diseñador debe pedir en varias ocasiones:
¿Qué espera?
¿Qué garantiza?
¿Qué mantiene?
Muchas idiomas tienen instalaciones para hacer las aserciones como éstos. Sin embargo, DBC es nuevo en el reconocimiento de que estos contratos son tan cruciales a la corrección del software que deben ser parte del proceso de diseño. En efecto, DBC aboga la escritura de las aserciones primero.
La noción de un contrato extiende abajo al nivel del método/de procedimiento; el contrato para cada método contendrá normalmente los fragmentos de información siguientes:
Valores del
tipos aceptables e inaceptables de la entrada o, y sus significados
Valores o tipos de vuelta, y sus significados
El error y los valores o los tipos, de que de las condiciones de la excepción pueden ocurrir, y sus significados
Efectos secundarios
El precondiciona que las subclases puedan debilitar (pero no consolidar)
Postconditions que las subclases pueden consolidar (pero no debilitarse)
Invariants * garantías de funcionamiento (más raras), e. por tiempo o espacio utilizaron
Al usar el acercamiento de DBC, el código sí mismo del programa debe nunca intentar verificar las condiciones de contrato; la idea entera es que código si el " hard" del fall;, con la verificación del contrato siendo la red de seguridad. " de DBC; hard" del fall; la característica hace comportamiento del para-contrato del depuración mucho más fácil porque el comportamiento previsto de cada rutina se especifica claramente.
Las condiciones de contrato se deben nunca violar en la ejecución de programa: así, pueden ser cualquier izquierda adentro como código de depuración, o quitado del código en conjunto por razones de funcionamiento.
Todas las relaciones de la clase están entre las clases del cliente y las clases del surtidor. Una clase del cliente se obliga para hacer llamadas a las características del surtidor donde el estado resultante del surtidor no es violado por la llamada del cliente. Posteriormente, obligan al surtidor a proporcionar un estado y los datos de vuelta que no violan los requisitos del estado del cliente. Por ejemplo, un almacenador intermediario de datos del surtidor puede requerir que los datos estén presentes en el almacenador intermediario cuando se llama una característica de la cancelación. Posteriormente, el surtidor garantiza al cliente que cuando una característica de la cancelación acaba su trabajo, el artículo de datos, será suprimido de hecho del almacenador intermediario. Otros contratos del diseño son conceptos de " Clase Invariant". Las garantías invariantes de la clase (para la clase local) que el estado de la clase será mantenido dentro de tolerancias especificadas en el final de cada ejecución de la característica.
La prueba de la unidad prueba un módulo en el aislamiento, para comprobar que resuelve su contrato que asume que sus subcontratistas resuelven los suyos. La prueba de la integración comprueba si los varios módulos están funcionando correctamente juntos. El diseño por el contrato también fomenta la reutilización del código, puesto que el contrato para cada pedazo de código se documenta completamente. Los contratos para un módulo se pueden también mirar como forma de la documentación de software para el comportamiento de ese módulo.
Tomar el proceso de ir el día de fiesta, por ejemplo. Beltrán quiere pasar dos semanas en la Florida. Él reserva el día de fiesta con DBC Holidays Inc., que se especializa en vacaciones organizadas de los E. Cuando él hace la reservación (la colaboración #1), Beltrán es el cliente y los días de fiesta de DBC son el surtidor. Los días de fiesta de DBC entonces arreglan vuelos con Assertair Corp. (la colaboración #2), y reserva un cuarto en el hotel de la plaza de la condición previa en Miami (colaboración #3). En la colaboración #2, los días de fiesta de DBC son el cliente y Assertair es el surtidor, y en la colaboración #3, el hotel es el surtidor. Y la cadena de colaboraciones va más profunda y más profunda (e., que hace la paga de Assertair para mantener sus jets?)
Eventualmente el acoplamiento en esta cadena de colaboraciones se rompe, después el resultado podría ser que el día de fiesta de Beltrán está arruinado. Es vital, por lo tanto, que cada jugador en la colaboración hace lo que se suponen para hacer. En cualquier colaboración, el cliente y el surtidor tienen ciertas obligaciones. Estas obligaciones (o " responsibilities", si usted tiene gusto) de caída en tres tipos distintos: Las cosas del
que el surtidor promete hacer como parte del servicio ofrece al
Se describen las cosas que el surtidor promete hacer como parte del servicio como una clase especial de regla llamó un Postcondition . El Postcondition dice a cliente cuál será verdad si el servicio se ejecuta correctamente (e., " su cliente estará en Miami por 15:30 en " del 8 de junio ;).
Si Beltrán da vuelta para arriba en el mostrador de facturación sin su pasaporte, por supuesto, después la línea aérea no puede vivir hasta su lado del contrato: a le no se permitirá subir al plano sin él. Una regla que el cliente debe satisfacer antes de utilizar un servicio se llama una condición previa .
Una regla que los estados qué deben siempre ser verdades se llaman un invariante. ¡Si la línea aérea no tiene seguro adecuado entonces nadie va dondequiera!
El diseño de Contract es una disciplina para el software del edificio tales que las colaboraciones entre los objetos están correctas. Una fórmula para la corrección cuando un cliente utiliza los servicios de un surtidor se da como:
Si el invariantes Y condición previa son verdades antes de utilizar el servicio, después el invariante Y el postcondition serán verdades después de que se haya terminado el servicio.
En DBC, las responsabilidades están claras: el cliente debe satisfacer la condición previa. Esto la distingue marcado de una práctica relacionada conocida como programado defensivo, donde está responsable el surtidor de imaginar cuál hacer cuando una condición previa está quebrada. A menudo, el surtidor lanza una excepción para informar al cliente que la condición previa ha estado quebrada, y en encajona - DBC y programación de la defensiva - a cliente debe imaginar cómo responder a eso. DBC hace el trabajo del surtidor más fácil.
D
Eiffel
Sather
Lisaac
Niza
diseño de los instrumentos de la CHISPA del por el contrato usar el análisis estático de los programas del Ada .
y C++, usar el DBC para el preprocesador, GNU Nana, C ², o el recopilador de C de Digitaces Marte C++.
C#, usar C# extensible (XC#), o Spec# .
el campo común del balbucea puede ejecutar DBC con la facilidad macra y el protocolo del metaobject CLOS .
Java, usar iContract2, Contract4J, el jContractor, Jcontract, C4J, el preprocesador de CodePro Analytix, de STclass, de Jass, ovales con AspectJ, Java que modela la lengua (JML), SpringContracts del marco del resorte, o Jass moderno.
Javascript del, usar Cerny.
Nemerle, usar macros.
el Perl del puede apoyar usar los módulos CPAN clasifica:: Contrato (por el Damián Conway ) o carpa:: Dato (por Raphael Manfredi ).
pitón del, usar PyDBC o los contratos para el pitón.
rubí del, usar DesignByContract de Brian McCallister, el rubí DBC o el rubí-contrato.
esquema del con la extensión del esquema del PLT, acentuando que cada violación del contrato debe culpar la parte culpable y debe hacer tan con una explicación exacta.
.
| Random links: | Byars, Oklahoma | Asociación de eruditos musulmanes | John Adams Hyman | Devastación bestial | Visión del futuro |