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
494 visualizaciones desde el 28 de Enero del 2019
344,1 KB
82 paginas
Creado hace 8a (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

[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++.
  • 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...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad