В общем контрактное программирование - это попытка формализовать
взаимодействие между элементами алгоритма - делать на выходе, то что оговорено, получая оговоренные условия на вход.
Read more!
В работе я часто встречала ситуации, когда, например, начало методов было проверкой параметров на Null. Или эта проверка была в середине, что, очевидно, не добавляло понимания в работу метода. К тому же часто эти проверки дублировались в многих местах, или, что намного хуже вообще пропускались, из-за чего был баг.
Вот именно из-за этой неразберихи со вводом-выводом контрактное программирование выглядит довольно привлекательным.
В целом, можно выделить 3 блока при работе с контрактами
1) проверка предусловий - типы данных, формально оговоренные состояния входной информации;
2) проверка постусловий - типы возвращаемого значения, условия, которым должны соответствовать выходные данные;
3) проверка инвариантов - проверка на соблюдение условий, которым должны удовлетворять инварианты на каждом шаге алгоритма.
Разбор контрактного программирования я начала, с самой известной библиотеки iContract.
Однако, как оказалось, это не самая удачная технология для бизнес-приложений, у которой есть множество аналогов: от Google, для Spring framework, и другие, например contract4j
Вохможно, в следующей части рассмотрю аналог от google.
Вот именно из-за этой неразберихи со вводом-выводом контрактное программирование выглядит довольно привлекательным.
В целом, можно выделить 3 блока при работе с контрактами
1) проверка предусловий - типы данных, формально оговоренные состояния входной информации;
2) проверка постусловий - типы возвращаемого значения, условия, которым должны соответствовать выходные данные;
3) проверка инвариантов - проверка на соблюдение условий, которым должны удовлетворять инварианты на каждом шаге алгоритма.
Разбор контрактного программирования я начала, с самой известной библиотеки iContract.
- Пример проверки предусловий
- Пример проверки постусловий
- Пример для инвариантов
/** * @pre positiveParam > 0 */ public static void setPositiveParam(int positiveParam) { System.out.println("Set a param" + positiveParam); }
/** * @pre word != null * @post getWord() != null */ public static void setWord(String word) { _word = word; }
/** * * @invariant forall Object r_text in list * r_text!=null */ public static void addNotNullValues(List list, Integer value) list.add(value); }
Однако, как оказалось, это не самая удачная технология для бизнес-приложений, у которой есть множество аналогов: от Google, для Spring framework, и другие, например contract4j
Вохможно, в следующей части рассмотрю аналог от google.
Комментариев нет:
Отправить комментарий