Что значит заглушка в программировании?


26

Я часто слышу термины "заглушка", "заглушка", "заглушки" и т. Д.

Что означает «заглушка» в программировании и откуда взято это слово? В каких контекстах это можно использовать?


также называется: заполнитель.
Питер Б

Ответы:


30

Метод-заглушка - это метод, который просто возвращает простой, но правильный (хотя и не обязательно правильный) результат.

Они обычно создаются при создании инфраструктуры, и вы не хотите тратить время на каждый метод, необходимый прямо сейчас. Вместо этого вы создаете заглушки, чтобы все компилировалось, и автозаполнение вашей IDE знает о методах, которые вы планируете использовать.

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


3
Nitpick: заглушки используются при заглушении, а не при издевательстве. Когда вы издеваетесь, вы используете насмешки. martinfowler.com/articles/mocksArentStubs.html
Йорг Миттаг,

+1 за вышеупомянутое, но я хотел бы добавить, что, если вы не ожидаете, что методы-заглушки еще будут использоваться, может быть полезно, чтобы заглушки вызывали исключение или иным образом приводили к ошибке. Пример «NotImplementedException»: msdn.microsoft.com/en-us/library/… commons.apache.org/proper/commons-lang/javadocs/api-release/org/…
Дэн Армстронг,

6

Возможно, это лучше ответить конкретным примером. Давайте рассмотрим случай, когда вы создаете настольное приложение. Вы решили назвать функцию с именем createMenubar, createToolbarи createMainваш конструктор приложения будет аккуратным и аккуратным.

Ваш основной код будет выглядеть примерно так (этот пример на python):

class ExampleApp():
    def __init__(self):
        self.createMenubar()
        self.createToolbar()
        self.createMain()

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

Это где пни войти. Вы можете создать функцию с именем createToolbarи createMainкоторые удовлетворяют требование конструктора приложения (а именно, что эти функции существуют), не имея на самом деле их реализацию. Эти функции являются заглушками:

def createToolbar():
    pass

def createMain():
    pass

С этими заглушками вы можете приступить к реализации основной программы и меню, не беспокоясь о деталях панели инструментов или основной части программы. В конце концов вы перейдете на панель инструментов и замените заглушку фактической функцией. И, наконец, вы удалите заглушку для createMainи дадите ей реальную реализацию.

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


2

«Заглушка» используется в программировании «сверху вниз». Именно тогда вы строите свое приложение от общего к частному. При этом вы будете использовать «заглушки» в качестве «заполнителей» для конкретных приложений, которые у вас не было времени для создания. Они часто возвращают такие вещи, как фиктивные или случайные значения, в более общую часть программы. Все в порядке, заглушка передает достаточно значения, чтобы сделать более "старшую" часть программы работоспособной. Пока не пришло время заменить заглушку или установить ее истинное вычисление или значение.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.