Принцип наименьшего удивления применим к широкому спектру проектных работ - и не только к вычислительной технике (хотя именно здесь часто происходят самые удивительные вещи).
Рассмотрим лифт с кнопкой рядом с ним, которая говорит «звонок». Когда вы нажимаете кнопку, звонит таксофон (вместо вызова лифта на этот этаж). Это будет считаться удивительным. Правильный дизайн будет помещать кнопку вызова рядом с телефоном, а не лифтом.
Затем представьте веб-страницу с всплывающим окном, в котором отображается ошибка стиля Windows с кнопкой «ОК». Люди нажимают кнопку «ОК», думая, что это для операционной системы, и вместо этого переходят на другую веб-страницу. Это удивляет пользователя.
Когда дело доходит до API ...
- Подумайте о методе toString (), который вместо распечатки полей возвращает обратно «для реализации».
- Метод equals (), который работает со скрытой информацией.
- Иногда люди пытаются реализовать класс отсортированного списка, изменяя метод add для вызова sort () для массива впоследствии - что удивительно, потому что метод add должен добавлять в список - это особенно удивительно, когда кто-то возвращает объект List не зная, что где-то глубоко внутри кто-то нарушил контракт интерфейса.
Наличие метода, который делает одну особую вещь, способствует снижению удивления, однако это отдельные принципы в дизайне API. Четырьмя принципами, часто называемыми «хорошим дизайном API», являются (из этого pdf - только один из примеров такой презентации. Ссылки в конце этой конкретной статьи предназначены для хорошего чтения):
Потенциально удивительно, что у кого-то есть класс, который пытается сделать все - или ему нужны два класса, чтобы сделать что-то одно. Также потенциально удивительно, что кто-то странным образом связывается с внутренностями под покровами (я считаю, что открытые классы в Ruby являются источником бесконечного удивления). Также удивительно найти два метода, которые делают одно и то же.
Как таковой, принцип наименьшего удивления лежит в основе других конструкций API, но сам по себе он не достаточен для того, чтобы просто сказать «не иметь удивительного API».
Дальнейшее чтение (с точки зрения пользовательского интерфейса) - блог разработчика IBM под названием «Причудливый пользователь: принцип наименьшего удивления»