Programacion por contratos [Was: Re: Proyectos (era Re: Problemas con GTK)]

Horst von Brand vonbrand en inf.utfsm.cl
Mar Oct 11 11:05:43 CLST 2005


Juan Carlos Muñoz Ilabaca <jcmunoz en dcc.uchile.cl> wrote:
> Disque el Lunes 10 Octubre 2005 23:43, Horst von Brand escribiosese:
> > Alvaro Herrera <alvherre en alvh.no-ip.org> wrote:
> > > Horst von Brand escribio:
> > > > Alvaro Herrera <alvherre en alvh.no-ip.org> wrote:

[...]

> > >                                 Esta aproximacion me ha permitido
> > > resolver problemas grandes, y usar depuradores para ver errores en mis
> > > soluciones.  El paradigma "programacion por contrato" ayuda mucho en
> > > este aspecto, y el depurador es una buena herramienta para buscar nuevas
> > > clausulas para los contratos, y ver donde estan fallando.
> >
> > Podrias detallar? No veo como un debugger ayude alli

[...]

> La programación con contratos permite mantener la consistencia de los
> metodos de las clases,

No. Se refiere a que cada interfaz se toma como un contrato: Al efectuar
esta operacion, siempre se cumplen X condiciones, con ese punto de partida
los resultados cumplen Y condiciones. Y no, no requiero que me expliquen en
que consiste, o como se puede implementar a traves del (bastante debil)
mecanismo de assert.h en C o C++, me interesa saber como un debugger pueda
ayudar a definir los contratos. Por definicion, un contrato es una
propiedad /global/ (aplicable a (casi) todos los estados del programa), un
debugger te permite ver (parte de) una situacion /puntual/ (un estado del
programa), y no veo la relacion. Pensar globalmente es lo que IMHO
distingue al verdadero programador del mero trazador de programas, el
debugger es la herramienta por excelencia del ultimo.

Uno de los problemas de esto es que si se quiere llevar la programacion por
contrato a su conclusion final, terminas con contratos aun mas grandes y
complejos que lo que describen, con lo que en vez de simplificar, complica.
Por algo lenguajes que lo incorporan como parte integrante nunca llegaron a
ser populares... Su aplicacion cuerda es mas o menos informal, y llevar
eso a assert() (o contratos formales) es bastante trabajo. 

Una opcion practica puede ser splint (<http://www.splint.org> da punteros,
muchas distribuciones lo traen), o hacer algo con sparse (el sistema de
revision del nucleo Linux).

[...]

> para el caso del uso de malloc, para mi ha sido muy importante el tema
> del debug, debido a que aveces uno no hace un free donde corresponde y al
> final el error se muestra varias lineas (cientas en mi caso) despues sin
> tener como saber por que se cayó ahí.

En mi caso, los problemas por mala administracion de memoria han sido poco
frecuentes (si, cuando comence a usarla cometi cualquier cantidad de
aberraciones, ya no).
-- 
Dr. Horst H. von Brand                   User #22616 counter.li.org
Departamento de Informatica                     Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria              +56 32 654239
Casilla 110-V, Valparaiso, Chile                Fax:  +56 32 797513


Más información sobre la lista de distribución Linux