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.

Historia

El término fue acuñado por el Beltrán Meyer con respecto a su diseño del lenguaje de programación de Eiffel y primero descrito en los varios artículos que comenzaban en 1986 y las dos ediciones sucesivas (1988, 1997) de su construcción orientada al objeto del software del libro. Alrededor de este tiempo, software de Eiffel trademarked el diseño del término de Contract.

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 .

Descripción

La idea central de DBC es una metáfora en cómo los elementos de un sistema informático colaboran con uno a, en base de las obligaciones mutuas del y de las ventajas del . La metáfora viene a partir de la vida de negocio, adonde un " client" y un " supplier" estar de acuerdo con un " contract" cuál define por ejemplo eso:

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.

Analogía no técnica

Un proceso en el cual un número de objetos (los componentes de la gente o de software, por ejemplo) interactivos satisfacer una meta se llaman una colaboración . Cuando dos objetos colaboran juntos, uno (el cliente) pide los servicios del otro (el surtidor). El surtidor alternadamente puede pedir los servicios de otros objetos, y en esas colaboraciones es el cliente y son los surtidores. El proceso trabaja solamente correctamente si todas estas colaboraciones individuales trabajan correctamente. En un sentido muy verdadero, la cadena es solamente tan fuerte como su acoplamiento más débil.

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

  • del cliente (e., Assertair promete a días de fiesta de DBC que Beltrán estará en Miami en una ciertas fecha y hora) Las cosas que el cliente promete hacer antes de usar el
  • del servicio (e., días de fiesta de DBC deben asegurarse de que Beltrán tenga su pasaporte y boletos cuando él llega para su vuelo) Las cosas que el surtidor promete serán siempre verdades no importa qué (e., la línea aérea tendrán siempre seguro adecuado para cubrir cualquier accidente) sucede

    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.

    Ayuda de la lengua

    Idiomas con la ayuda nativa

    Las idiomas que ejecutan la mayoría de las características de DBC nativo incluyen:
    cromo del del


    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 .

  • Idiomas con la ayuda de tercera persona

    Las varias bibliotecas, los preprocesadores y otras herramientas han sido desarrollados para los lenguajes de programación existentes sin diseño nativo por la ayuda del contrato:
    C del del

    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.

    Herramientas genéricas

    el revelador perfecto del, usar la lengua de especificación perfecta puede verificar contratos con el análisis estático del código y generar programas en idiomas tales como Java y C++.

    Ver también

    programado defensivo
    Lenguaje de programación D
    Lenguaje de programación de Eiffel
    Lógica de Hoare
    Construcción orientada al objeto del software
    Lengua de especificación perfecta
    Lenguaje de programación de la CHISPA
    desarrollo Prueba-conducido

    .

  • Zenithic
  • Andrew Waterworth
    Random links:Byars, Oklahoma | Asociación de eruditos musulmanes | John Adams Hyman | Devastación bestial | Visión del futuro

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">