Влияние проектирования программ
Введено| English | Значение |
|---|---|
| modular/ˈmɒdjʊlə/ | Модульность |
Два аккуратных дизайна могут давать разные средние значения
- Вымышленная запись содержит оценки 80, отсутствующую и 100. Если считать отсутствие нулем, получится
(80 + 0 + 100) / 3 = 60; если исключить отсутствующий результат, получится(80 + 100) / 2 = 90. - Отдельные методы могут корректно вычислять любой из этих результатов. Организация кода не диктует политику отчетности: перед использованием результата необходимо определить, что означает отсутствие данных, кто принимает решение и какой знаменатель должен использоваться в отчете.
Баллы составляют 80, отсутствуют и 100. Согласно политике доступных баллов, каково среднее значение?
Сложность 2/5 · 140 монет + небольшой бонус за первое выполнение сегодня
Сумма присутствующих баллов равна 180, количество присутствующих равно 2, следовательно, 180/2 = 90.
Превратите требование в договор
- Укажите, означает ли отсутствие незавершенную оцененную работу, невыполненное задание или данные, которые еще не были введены. Эти случаи не обязаны подчиняться одному правилу; вымышленный пример демонстрирует последствия, но не предписывает школьную политику оценивания.
- Определите допустимые входные данные, обработку отсутствующих значений и ожидаемый результат. Если правило гласит «среднее доступных оценок», то запись, полностью состоящая из отсутствующих значений, не имеет среднего; явно укажите этот случай вместо того, чтобы искусственно добавлять ноль или делить на ноль.
Раздельные обязанности для проверки
- Модульный дизайн разделяет
readScores,averageAvailableиprintReport. Среднее значение можно проверить с известными данными без чтения файла или захвата отформатированного вывода. - Разделение помогает при сохранении четких интерфейсов. Изменение смысла отсутствия все равно может потребовать изменений в расчетах, отчетности и проверках; малые методы и хорошие имена по отдельности не устраняют эти зависимости.
Проверка обычных и граничных случаев
- Для политики доступных оценок проверьте, что [80, absent, 100] дает 90, одна ⟨80⟩ дает 80, а [absent, absent] дает согласованный результат «нет результата». Не ограничивайтесь проверкой того, что программа просто запускается.
- Приведенный ниже расчет использует
nullдля отсутствующих значений. Он возвращает среднее значение типа double и отклоняет случай полного отсутствия данных. Он предполагает массив обычных оценок без пустых ссылок (non-null); проверка входных данных и отчетность — это отдельные обязанности.
public class AverageAvailable {
public static double averageAvailable(Integer[] scores) {
double total = 0;
int present = 0;
for (Integer score : scores) {
if (score != null) {
total += score;
present++;
}
}
if (present == 0) {
throw new IllegalArgumentException("No available scores");
}
return total / present;
}
}
Модульный дизайн (независимые, хорошо названные части) прежде всего упрощает...
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Модульность делает изменения безопаснее, а части — повторно используемыми.
При повторном использовании одного метода несколькими вызывателями исправление этого_methoda может принести пользу всем вызывателям без редактирования дублированных копий.
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Верно: вызыватели повторно используют реализацию. Тем не менее, необходимо пересмотреть контракт метода и последствия изменений.
Смещение в данных или логике программы может приводить к несправедливым результатам на больших объемах.
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Выборы в дизайне влияют на реальных людей — учитывайте, кто пострадает.
Для проверки вычисления среднего независимо от ввода и печатного вывода, какой дизайн лучше всего изолирует эту ответственность?
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Разделение вычисления с вводом и выводом позволяет проводить проверки по известным баллам без выполнения этих других операций. Само по себе наличие небольших методов не гарантирует корректности.
Проектирование программ — это исключительно косметика и не влияет на безопасность изменений кода.
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Дизайн определяет, насколько безопасно можно изменять программу.
Показанный метод averageAvailable возвращает ноль для массива, состоящего только из отсутствующих значений.
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Неверно: он отвергает этот случай через IllegalArgumentException, поскольку отсутствие доступных баллов не определяет среднее значение.
Сообщайте последствия затронутым пользователям
- Отчет об 90 должен указывать, что он вычисляет среднее двух доступных оценок из трех записей, исключая одно отсутствующее значение. Указание только на 90 скрывает информацию, необходимую читателю для сравнения результатов.
- Пересмотрите круг лиц, на которых могут повлиять данные и политика. Консистентный расчет все равно может некорректно относиться к разным видам отсутствия; протестируйте согласованные требования и сделайте результат понятным для пользователей.
Модульность упрощает inspection и тестирование политики, но не делает эту политику справедливой или подходящей. Средние значения 60 и 90 используют разные знаменатели. Выберите и раскройте правило, вместо того чтобы молча выбирать тот результат, который выглядит лучше.
Хорошее или плохое проектирование?
Выборы в проектировании имеют реальные последствия. Распределите каждый исход.
Внесите изменения политики в архитектуру
- Если разрешенное требование изменится и задача без попыток будет считаться нулем, обновите знаменатель, соответствующие примеры, проверки и формулировки отчета. Повторное использование метода полезно только тогда, когда его контракт соответствует новой задаче.
- Тестируемость, корректность и понимание пользователями должны рассматриваться отдельно. Четкие границы снижают некоторые риски изменений, но вызывающий код и общие предпосылки все равно нужно проверять при изменении контракта метода.
Проектирование программы влияет на поддерживаемость и людей. Разделите обязанности так, чтобы поведение можно было проверить, определите политику обработки отсутствующих данных, протестируйте ее граничные случаи и раскройте знаменатель. Правильная арифметика и аккуратная структура сами по себе не делают политику appropriate.
Match the change to the issue it addresses.
Сложность 2/5 · 140 монет + небольшой бонус за первое выполнение сегодня
A modular structure enables checking but cannot choose the right policy by itself.