PDF de programación - ¿Programación basada en contratos para C++17?

Imágen de pdf ¿Programación basada en contratos para C++17?

¿Programación basada en contratos para C++17?gráfica de visualizaciones

Publicado el 28 de Enero del 2019
168 visualizaciones desde el 28 de Enero del 2019
344,1 KB
82 paginas
Creado hace 4a (17/11/2015)
¿Programación basada en contratos para C++17?

¿Programación basada en contratos para

C++17?

using std::cpp 2015

J. Daniel Garcia

josedaniel.garcia@uc3m.es

Grupo ARCOS

Universidad Carlos III de Madrid

18 de noviembre de 2015

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

1/32

¿Programación basada en contratos para C++17?

Aviso

c Esta obra está bajo una Licencia Creative Commons

Atribución-NoComercial-SinDerivar 4.0 Internacional.

b Debes dar crédito en la obra en la forma especificada

por el autor o licenciante.

e El licenciante permite copiar, distribuir y comunicar pú-
blicamente la obra. A cambio, esta obra no puede ser
utilizada con fines comerciales — a menos que se ob-
tenga el permiso expreso del licenciante.

d El licenciante permite copiar, distribuir, transmitir y co-
municar públicamente solamente copias inalteradas de
la obra – no obras derivadas basadas en ella.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

2/32

¿Programación basada en contratos para C++17?

Reconocimientos

Trabajo realizado antes de C++11.

Thorsten Ottosen, Lawerence Crowl, Dave Abrahams, . . .

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

3/32

¿Programación basada en contratos para C++17?

Reconocimientos

Trabajo realizado antes de C++11.

Thorsten Ottosen, Lawerence Crowl, Dave Abrahams, . . .

Y después de C++11.

Bloomberg: John Lakos, Alisdair Meredith, Nathan Myers,
. . .
Microsoft: Gabriel Dos Reis, Herb Sutter, . . .
Morgan Stanley: Bjarne Stroustrup.
Otros: Lawrence Crowl, Walter Brown, . . .
UC3M: J. Daniel García.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

3/32

¿Programación basada en contratos para C++17?

Reconocimientos

Trabajo realizado antes de C++11.

Thorsten Ottosen, Lawerence Crowl, Dave Abrahams, . . .

Y después de C++11.

Bloomberg: John Lakos, Alisdair Meredith, Nathan Myers,
. . .
Microsoft: Gabriel Dos Reis, Herb Sutter, . . .
Morgan Stanley: Bjarne Stroustrup.
Otros: Lawrence Crowl, Walter Brown, . . .
UC3M: J. Daniel García.

Y por supuesto, todo empezó con:

C.A.R Hoare.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

3/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

1 ¿De qué estamos hablando?

2 Diseño

3 Sintaxis

4 Niveles de comprobación

5 Modos

6 Contratos y funciones noexcept

7 Conclusiones

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

4/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Dos propiedades relacionadas

En el diseño de una biblioteca hay una tensión entre dos
propiedades: robustez y corrección.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

5/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Dos propiedades relacionadas

En el diseño de una biblioteca hay una tensión entre dos
propiedades: robustez y corrección.

Robustez: Capacidad de un componente software para
reaccionar en condiciones anormales.

¿Qué pasa si al añadir un elemento a un contenedor no se
puede obtener memoria dinámica?

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

5/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Dos propiedades relacionadas

En el diseño de una biblioteca hay una tensión entre dos
propiedades: robustez y corrección.

Robustez: Capacidad de un componente software para
reaccionar en condiciones anormales.

¿Qué pasa si al añadir un elemento a un contenedor no se
puede obtener memoria dinámica?

Corrección: Grado en el que un componente software
cumple con sus especificaciones.

¿Qué pasa si se accede a un contenedor fuera de rango?
¿Qué pasa si paso un puntero nulo a strcat?

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

5/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Robustez en la biblioteca estándar de C++

La robustez requiere la identificación y tratamiento de
situaciones anormales.

Estas situaciones ocurren en programas totalmente
correctos.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

6/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Robustez en la biblioteca estándar de C++

La robustez requiere la identificación y tratamiento de
situaciones anormales.

Estas situaciones ocurren en programas totalmente
correctos.
Buen ejemplo: No se puede obtener memoria dinámica.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

6/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Robustez en la biblioteca estándar de C++

La robustez requiere la identificación y tratamiento de
situaciones anormales.

Estas situaciones ocurren en programas totalmente
correctos.
Buen ejemplo: No se puede obtener memoria dinámica.
Abominación: Fin de fichero.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

6/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Robustez en la biblioteca estándar de C++

La robustez requiere la identificación y tratamiento de
situaciones anormales.

Estas situaciones ocurren en programas totalmente
correctos.
Buen ejemplo: No se puede obtener memoria dinámica.
Abominación: Fin de fichero.

¿De verdad creías que eso no iba a pasar?

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

6/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Robustez en la biblioteca estándar de C++

La robustez requiere la identificación y tratamiento de
situaciones anormales.

Estas situaciones ocurren en programas totalmente
correctos.
Buen ejemplo: No se puede obtener memoria dinámica.
Abominación: Fin de fichero.

¿De verdad creías que eso no iba a pasar?

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

6/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Robustez en la biblioteca estándar de C++

La robustez requiere la identificación y tratamiento de
situaciones anormales.

Estas situaciones ocurren en programas totalmente
correctos.
Buen ejemplo: No se puede obtener memoria dinámica.
Abominación: Fin de fichero.

¿De verdad creías que eso no iba a pasar?

¿Qué hace la biblioteca estándar en C++?

I Especifica la condición que causa la situación.
II La excepción que se lanzará para notificar de la situación.

Throws: bad_alloc if the storage cannot be obtained.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

6/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Corrección

La corrección está relacionada con encontrar defectos en
un programa.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

7/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Corrección

La corrección está relacionada con encontrar defectos en
un programa.
Un programa correcto no tiene defectos.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

7/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Corrección

La corrección está relacionada con encontrar defectos en
un programa.
Un programa correcto no tiene defectos.

¿Qué hacen los matemáticos?

Definen el dominio y el recorrido de la función.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

7/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Corrección

La corrección está relacionada con encontrar defectos en
un programa.
Un programa correcto no tiene defectos.

¿Qué hacen los matemáticos?

Definen el dominio y el recorrido de la función.

¿Qué podemos hacer nosotros?

Definir las precondiciones bajo las cuales se puede
ejecutar de forma segura la operación.
Definir las postcondiciones que se cumplirán tras la
ejecución de la operación.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

7/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Aproximaciones frente a la corrección

Entonces ¿Qué podemos hacer con la corrección?

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

8/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Aproximaciones frente a la corrección

Entonces ¿Qué podemos hacer con la corrección?

No hacer nada.

Más habitual de lo que uno pueda creer.

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

8/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Aproximaciones frente a la corrección

Entonces ¿Qué podemos hacer con la corrección?

No hacer nada.

Más habitual de lo que uno pueda creer.

Documentar las precondiciones y postcondiciones.

Muy habitual.
Es lo que hace la biblioteca estándar de C++.
No deja de ser documentación (ni más, ni menos)

c b e d –

J. Daniel Garcia – ARCOS@UC3M (josedaniel.garcia@uc3m.es – @usingstdcpp – @jdgarciauc3m)

8/32

¿Programación basada en contratos para C++17?

¿De qué estamos hablando?

Aproximaciones frente a la corrección

Entonces ¿Qué podemos hacer con la corrección?

No hacer nada.

Más habitual de lo que uno pueda creer.

Documentar las precondiciones y postcondiciones.

Muy habitual.
Es lo que hace la biblioteca estándar de C++.
  • Links de descarga
http://lwp-l.com/pdf15002

Comentarios de: ¿Programación basada en contratos para C++17? (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad