https://dosideas.com/wiki/index.php?title=Dise%C3%B1o_Por_Contrato&feed=atom&action=historyDiseño Por Contrato - Historial de revisiones2024-03-28T23:24:49ZHistorial de revisiones para esta página en el wikiMediaWiki 1.28.2https://dosideas.com/wiki/index.php?title=Dise%C3%B1o_Por_Contrato&diff=5040&oldid=prev190.231.79.154: /* Descripción */2010-05-05T14:06:43Z<p><span dir="auto"><span class="autocomment">Descripción</span></span></p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='es'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Revisión anterior</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revisión del 14:06 5 may 2010</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l40" >Línea 40:</td>
<td colspan="2" class="diff-lineno">Línea 40:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* (raramente) garantías de rendimiento, por ejemplo, de tiempo o espacio utilizado.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* (raramente) garantías de rendimiento, por ejemplo, de tiempo o espacio utilizado.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Cuando se utilizan contratos, el código del programa por si mismo nunca debe intentar verificar las condiciones del contrato; la idea es que el código <del class="diffchange diffchange-inline">dbe </del>"fallar duro", siendo la verificación del contrato la red de contención. Este concepto de "fallar duro" de DbC simplifica el debug del comportamiento del contrato, ya que el comportamiento requerido para cada rutina está claramente especificado.</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Cuando se utilizan contratos, el código del programa por si mismo nunca debe intentar verificar las condiciones del contrato; la idea es que el código <ins class="diffchange diffchange-inline">debe </ins>"fallar duro", siendo la verificación del contrato la red de contención. Este concepto de "fallar duro" de DbC simplifica el debug del comportamiento del contrato, ya que el comportamiento requerido para cada rutina está claramente especificado.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Nunca se deben violar las condiciones del contrato en la ejecución del programa; por lo tanto se lo puede dejar activado para debug, o quitado completamente del código productivo por motivos de rendimiento.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Nunca se deben violar las condiciones del contrato en la ejecución del programa; por lo tanto se lo puede dejar activado para debug, o quitado completamente del código productivo por motivos de rendimiento.</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l46" >Línea 46:</td>
<td colspan="2" class="diff-lineno">Línea 46:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Todas las relaciones de clases son entre clases Cliente y clases Proveedor. Una clase Cliente está obligada a hacer las llamadas al Proveedor</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Todas las relaciones de clases son entre clases Cliente y clases Proveedor. Una clase Cliente está obligada a hacer las llamadas al Proveedor</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>La [[Prueba Unitaria]] verifica módulos aislados, para comprobar si cumplen con el contrato asumiendo que los demás proveedores cumplen el suyo. La [[Prueba De Integracion]] comprueba que varios módulos funcionan correctamente entre si. El Diseño por Contrato también facilita la reutilización de código, ya que el contrato para cada pieza de código está completamente documentado. Los contratos de un módulo también <del class="diffchange diffchange-inline">puede </del>verse como una forma de documentación para el comportamiento del módulo.  </div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>La [[Prueba Unitaria]] verifica módulos aislados, para comprobar si cumplen con el contrato asumiendo que los demás proveedores cumplen el suyo. La [[Prueba De Integracion]] comprueba que varios módulos funcionan correctamente entre si. El Diseño por Contrato también facilita la reutilización de código, ya que el contrato para cada pieza de código está completamente documentado. Los contratos de un módulo también <ins class="diffchange diffchange-inline">pueden </ins>verse como una forma de documentación para el comportamiento del módulo.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== Herramientas ==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== Herramientas ==</div></td></tr>
</table>190.231.79.154https://dosideas.com/wiki/index.php?title=Dise%C3%B1o_Por_Contrato&diff=3093&oldid=prev201.251.185.130 en 12:09 28 ago 20092009-08-28T12:09:35Z<p></p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='es'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Revisión anterior</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revisión del 12:09 28 ago 2009</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l59" >Línea 59:</td>
<td colspan="2" class="diff-lineno">Línea 59:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* [[Java]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* [[Java]]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* [http://en.wikipedia.org/wiki/Design_by_contract Design by Contract en la Wikipedia]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* [http://en.wikipedia.org/wiki/Design_by_contract Design by Contract en la Wikipedia]</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Category: Diseño De Software]]</ins></div></td></tr>
</table>201.251.185.130https://dosideas.com/wiki/index.php?title=Dise%C3%B1o_Por_Contrato&diff=2682&oldid=prevLeito en 19:07 7 may 20092009-05-07T19:07:25Z<p></p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='es'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Revisión anterior</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revisión del 19:07 7 may 2009</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l1" >Línea 1:</td>
<td colspan="2" class="diff-lineno">Línea 1:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>El [[Diseño Por Contrato]] (Design by Contract - DbC) es una metodología para el diseño e implementación de aplicaciones y componentes popularizada por el lenguaje de programación Eiffel.</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>El [[Diseño Por Contrato]] (Design by Contract - DbC) es una metodología para el diseño e implementación de aplicaciones y componentes popularizada por el lenguaje de programación Eiffel.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>En Estados Unidos "Design by Contract" es una marca registrada, por lo que muchos desarrolladores lo llaman Programming by Contract (Programación por Contratos), o Contract Programming (Programación Contractual), o contract-first development (desarrollo con primero <del class="diffchange diffchange-inline">el contrato</del>).</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>En Estados Unidos "Design by Contract" es una marca registrada, por lo que muchos desarrolladores lo llaman Programming by Contract (Programación por Contratos), o Contract Programming (Programación Contractual), o contract-first development (desarrollo con <ins class="diffchange diffchange-inline">contrato </ins>primero).</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Beneficios==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==Beneficios==</div></td></tr>
</table>Leitohttps://dosideas.com/wiki/index.php?title=Dise%C3%B1o_Por_Contrato&diff=2681&oldid=prevLeito: /* Herramientas */2009-05-07T18:29:48Z<p><span dir="auto"><span class="autocomment">Herramientas</span></span></p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='es'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Revisión anterior</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revisión del 18:29 7 may 2009</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l50" >Línea 50:</td>
<td colspan="2" class="diff-lineno">Línea 50:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== Herramientas ==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== Herramientas ==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Hay varias herramientas que facilitan la implementación de DbC en en software.  </div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>Hay varias herramientas que facilitan la implementación de DbC en en software.  </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">Algunas herramientas de DbC para [[Java]]: </ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* [[SpringContracts]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* [[SpringContracts]]</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* [[<del class="diffchange diffchange-inline">Oval</del>]]</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* [[<ins class="diffchange diffchange-inline">OVal</ins>]]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== Ver también ==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>== Ver también ==</div></td></tr>
</table>Leitohttps://dosideas.com/wiki/index.php?title=Dise%C3%B1o_Por_Contrato&diff=2680&oldid=prevLeito: /* Ver también */2009-05-07T18:26:50Z<p><span dir="auto"><span class="autocomment">Ver también</span></span></p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;' lang='es'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">← Revisión anterior</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">Revisión del 18:26 7 may 2009</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l56" >Línea 56:</td>
<td colspan="2" class="diff-lineno">Línea 56:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* [[Diseño De Software]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* [[Diseño De Software]]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* [[Java]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>* [[Java]]</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">* [http://en.wikipedia.org/wiki/Design_by_contract Design by Contract en la Wikipedia]</ins></div></td></tr>
</table>Leitohttps://dosideas.com/wiki/index.php?title=Dise%C3%B1o_Por_Contrato&diff=2679&oldid=prevLeito: Página creada con 'El Diseño Por Contrato (Design by Contract - DbC) es una metodología para el diseño e implementación de aplicaciones y componentes popularizada por el lenguaje de progra...'2009-05-07T18:25:57Z<p>Página creada con 'El <a href="/wiki/Dise%C3%B1o_Por_Contrato" title="Diseño Por Contrato">Diseño Por Contrato</a> (Design by Contract - DbC) es una metodología para el diseño e implementación de aplicaciones y componentes popularizada por el lenguaje de progra...'</p>
<p><b>Página nueva</b></p><div>El [[Diseño Por Contrato]] (Design by Contract - DbC) es una metodología para el diseño e implementación de aplicaciones y componentes popularizada por el lenguaje de programación Eiffel.<br />
<br />
En Estados Unidos "Design by Contract" es una marca registrada, por lo que muchos desarrolladores lo llaman Programming by Contract (Programación por Contratos), o Contract Programming (Programación Contractual), o contract-first development (desarrollo con primero el contrato).<br />
<br />
==Beneficios==<br />
* 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 éste ofrece. Mediante razonamientos de este tipo, por ejemplo, se justifica el comportamiento covariante de los tipos de retornos de los métodos en Eiffel.<br />
* Menos errores en el código gracias a una mejor representación de las especificaciones.<br />
* Un sistema efectivo para detectar errores.<br />
* Una forma práctica de documentar el código al mismo tiempo en que se programa.<br />
* Una imbricación eficaz con los mecanismos de herencia y reutilización.<br />
<br />
==Descripción==<br />
<br />
La idea central de DbC es una metáfora sobre cómo interactuan los elementos de un sistema de software para colaborar entre si, basándose en obligaciones y beneficios mutuos. La metáfora proviene del mundo de los negocios, en donde un "cliente" y un "proveedor" firman un "contrato" que define por ejemplo: <br />
* el proveedor debe brindar cierto producto (obligación) y tiene derecho a que el cliente le pague una cuota (beneficio).<br />
* el cliente paga una cuota (obligación) y tiene derecho a obtener el producto (beneficio). <br />
* ambas partes deben satisfacer ciertas obligaciones, como leyes y regulaciones, que se aplican a todos los contratos. <br />
<br />
De manera similar, si una rutina de una clase en Programación Orientada a Objetos brinda cierta funcionalidad, podría: <br />
* imponer ciertas obligaciones que se garanticen por cualquier módulo cliente que la invoque: '''la precondición de la rutina''' - una obligación del cliente, y un beneficio para el proveedor (la rutina en si misma), ya que la libera de tener que gestionar casos por fuera de la precondición.<br />
* garantizar cierto comportamiento a la salida: '''la postcondición de la rutina''' - una obligación del proveedor, y obviamente un beneficio para el cliente. <br />
* mantener cierta propiedad, asumida al momento de la entrada y garantizada a la salida: '''las invariantes de la clase'''.<br />
<br />
El contrato es la formalización de estres obligaciones y beneficios. Se podría resumir al Diseño por Contrato por estas tres preguntas que el diseñador del compomnente debe preguntarse: <br />
<br />
* ¿Qué espera? <br />
* ¿Qué garantiza?<br />
* ¿Qué mantiene? <br />
<br />
Muchos lenguajes brindan facilidades para hacer verificaciones como estas. Sin embargo, DbC considera que los contratos son cruciales para crear software correcto, y que deben ser parte del proceso de diseño del software. De hecho, DbC fometa escribir primero las asersiones. <br />
<br />
La noción de contrato se extiende hacia el nivel de los métodos/procedimientos; el contrato para cada método normalmente contendrá la siguiente información: <br />
* tipos y valores aceptados y no aceptados para la entrada, y su significado.<br />
* tipos y valores de retorno, y su significado.<br />
* tipos y valores de error y condiciones de excepción, que puedan ocurrir, y su significado.<br />
* efectos secundarios. <br />
* precondiciones, que las subclases pueden debilitar (pero no reforzar)<br />
* postcondiciones, que las subclases pueden reforzar (pero no debilitar)<br />
* invariantes, que las subclases pueden reforzar (pero no debilitar)<br />
* (raramente) garantías de rendimiento, por ejemplo, de tiempo o espacio utilizado.<br />
<br />
Cuando se utilizan contratos, el código del programa por si mismo nunca debe intentar verificar las condiciones del contrato; la idea es que el código dbe "fallar duro", siendo la verificación del contrato la red de contención. Este concepto de "fallar duro" de DbC simplifica el debug del comportamiento del contrato, ya que el comportamiento requerido para cada rutina está claramente especificado.<br />
<br />
Nunca se deben violar las condiciones del contrato en la ejecución del programa; por lo tanto se lo puede dejar activado para debug, o quitado completamente del código productivo por motivos de rendimiento.<br />
<br />
Todas las relaciones de clases son entre clases Cliente y clases Proveedor. Una clase Cliente está obligada a hacer las llamadas al Proveedor<br />
<br />
La [[Prueba Unitaria]] verifica módulos aislados, para comprobar si cumplen con el contrato asumiendo que los demás proveedores cumplen el suyo. La [[Prueba De Integracion]] comprueba que varios módulos funcionan correctamente entre si. El Diseño por Contrato también facilita la reutilización de código, ya que el contrato para cada pieza de código está completamente documentado. Los contratos de un módulo también puede verse como una forma de documentación para el comportamiento del módulo. <br />
<br />
== Herramientas ==<br />
Hay varias herramientas que facilitan la implementación de DbC en en software. <br />
* [[SpringContracts]]<br />
* [[Oval]]<br />
<br />
== Ver también ==<br />
* [[Diseño De Software]]<br />
* [[Java]]</div>Leito