Design by Contracts in PHP
-
Upload
sergei-khaletskiy -
Category
Technology
-
view
1.190 -
download
0
description
Transcript of Design by Contracts in PHP
![Page 1: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/1.jpg)
Design by Contracts (DbC)
Sergey Khaletskiy
![Page 2: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/2.jpg)
Контрактное программирование
Контрактное программирование — это возможность автоматической проверки «формальных, точных и верифицируемых спецификаций программных интерфейсов»
![Page 3: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/3.jpg)
● обязанности сторон:– клиент: корректные входные данные
– поставщик: корректная работа и результат
● соблюдение контракта
Контрактное программирование
![Page 4: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/4.jpg)
Контрактное программирование
● Основная идея – объединить программный код и спецификации
● Спецификации (контракты) встраиваются в программу
● В основе лежит логика Хоара
Тройка Хоара: {P}С{Q} ● P и Q – утверждения ● С – часть программы
![Page 5: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/5.jpg)
● Документация– предусловия + посусловия + интерфейс
- документирование методов
– инварианты + интерфейс класса – документирование классов
● Тестирование– предусловия и инварианты -
ограничения на генерируемые тесты
Решение проблем
![Page 6: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/6.jpg)
Контракт – сугубо декларативное описание требовний.
Задает:● Типы данных● Предусловие (precondition)● Инвариант (invariant)● Постусловие (postcondition)
Контракт
![Page 7: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/7.jpg)
● Предусловие● Инвариант● Вызов функции● Инвариант● Постусловие
Последовательность проверки
![Page 8: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/8.jpg)
DcP в PHP
![Page 9: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/9.jpg)
● PhpDeal
https://github.com/lisachenko/php-deal
DcP в PHP
● PHP-Contract
https://github.com/axiom82/PHP-Contract
![Page 10: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/10.jpg)
PHP-Contract
![Page 11: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/11.jpg)
PhpDeal предусловия/постусловия
![Page 12: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/12.jpg)
PhpDeal инварианты
![Page 13: Design by Contracts in PHP](https://reader034.fdocuments.net/reader034/viewer/2022051313/5491e102ac79595e288b4644/html5/thumbnails/13.jpg)
Вопросы