Добавление инвариантов в интерфейсы в Java - PullRequest
6 голосов
/ 22 июля 2010

Я думал о создании инфраструктуры Java, которая позволила бы программистам указывать инварианты (предварительные и постусловия) на интерфейсах.Цель состоит в том, чтобы сделать код более устойчивым и уменьшить количество модульных тестов, которые необходимо было бы написать для разных реализаций одного и того же интерфейса.

Я предполагаю создание некоторого способа аннотирования методов с помощью инвариантов, которые программист мог бытоже пиши.EG

interface Sort {
    int [] sort(int [] nums);
}

будет украшен аннотацией, чтобы гарантировать, что любые реализации возвращают отсортированный список.Эта аннотация будет связана с модульным тестом, который можно запустить во время компиляции для любой реализации.

Это сумасшедшая идея или она будет полезна для более широкого сообщества программистов?

Ответы [ 4 ]

4 голосов
/ 22 июля 2010

Похоже, это может быть связано с JML и ESC / Java , оба из которых нашли достаточно широкое распространение в проектах, для которых требуется немного больше программного обеспечения. качество, которое предлагает обычный набор методик.

2 голосов
/ 23 июля 2010

Я думаю, что проектирование по контракту - отличная идея, и я взглянул на фреймворки, которые предоставляют эту функциональность в Java.Я думаю, что удержало меня в том, что получить бай-ин от команды для такого рода фреймворков может быть сложно.Я думаю, что это воспринимается как академический интерес, что странно, потому что на самом деле это все равно, что встраивать модульные тесты в код.

Основной намек Java в этом направлении, утверждение assert, существует уже несколько лет, но яредко вижу его используемым - часто только в коде, который я пишу сам!Использование утверждений требует больших усилий (особенно в сочетании с юнит-тестами), и я обнаружил несколько ошибок, использующих их, просто жаль, что люди их не используют.

Приветствия,

Ян.

1 голос
/ 23 июля 2010

Я думаю, что программирование Бертранда Мейера по контрактной идее в значительной степени мертво. Он встроил предварительные и последующие условия в Eiffel, но этот язык ниже латыни в шкале использования.

Существует Java-программирование с использованием библиотек контрактов; Подрядчик один. Но его день пришел и ушел. Дело в том, что даже у Eiffel был способ отключить их в работе, потому что затраты времени выполнения не стоили выгоды.

Только 6 Eiffel вопросов о переполнении стека - действительно небольшой процент. Если вы будете искать SO-теги с «контрактом», вы увидите очень небольшое число. Не большой интерес к теме на этом сайте. Он претендует на то, чтобы привлечь самую большую аудиторию профессиональных программистов в мире.

0 голосов
/ 22 июля 2010

Какая замечательная идея программирования не сумасшедшая !!! Я определенно думаю, что это было бы полезно.

...