¿Programación basada en contratos para C++17?
¿Programación basada en contratos para
C++17?
using std::cpp 2015
J. Daniel Garcia
[email protected]
Grupo ARCOS
Universidad Carlos III de Madrid
18 de noviembre de 2015
c b e d –
J. Daniel Garcia – ARCOS@UC3M (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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 (
[email protected] – @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++.
Comentarios de: ¿Programación basada en contratos para C++17? (0)
No hay comentarios