Изменения и постоянство
Изменения и постоянство
Разработка ПО, как уже упоминалось, во многом связана с повторяемостью. Для понимания технической трудности повторного использования, следует понять природу повторяемости.
Несмотря на то, что программисты обычно время от времени повторяют одни и те же действия, но эти действия являются не совсем одинаковыми. Ведь если бы они были одинаковыми, то решение оказалось бы простым, по крайней мере, на бумаге. Однако на практике может измениться настолько много деталей задачи, что любая бесхитростная попытка обеспечить ее унификацию потерпит неудачу.
Наглядной иллюстрацией являются работы норвежского художника Эдварда Мунка, многие из которых можно видеть в посвященном ему музее в Осло, на родине языка программирования Simula. Творчеством Мунка владели несколько жизненно-важных, глубоких тем: любовь, страдание, ревность, танец, смерть. Он без конца воспроизводил их в своих рисунках и живописи, пользуясь всякий раз одними и теми же образцами, но меняя технические приемы, цвета, резкость контуров, размер, освещение, настроение.В таком же положении находится и разработчик ПО, создавая новые варианты, развивающие одни и те же основные темы.
Возьмем пример, упоминавшийся в начале этой лекции: табличный поиск. Несомненно, алгоритм табличного поиска в общем виде всегда выглядит одинаково: начать с некоторой позиции в таблице t, затем приступить к последовательному просмотру таблицы, всякий раз проверяя, является ли искомым элемент в текущей позиции и, если это не так, то переходить к следующей позиции. Процесс завершается, если найден нужный элемент, либо проверка всех элементов оказалась безуспешной. Такая общая схема применима к многим возможным случаям представления данных и алгоритмам для табличного поиска, в том числе в массивах (отсортированных или не отсортированных), связных списках (отсортированных или не отсортированных), последовательных файлах, двоичных деревьях, Б-деревьях и различных хеш-таблицах.
Нетрудно превратить это неформальное описание в частично детализированную подпрограмму:
has (t: TABLE, x: ELEMENT): BOOLEAN is
-- Присутствует ли x в t?
local
pos: POSITION
do
from
pos := INITIAL_POSITION (x, t)
until
EXHAUSTED (pos, t) or else FOUND (pos, x, t)
loop
pos := NEXT (pos, x, t)
end
Result := not EXHAUSTED (pos, t)
end
Некоторые пояснения к принятой здесь нотации: from ... until ... loop ... end описывает цикл, с начальным условием в предложении from, ни разу или повторно выполняющий действия предложения loop, и завершающийся при выполнении условия предложения until. Переменная Result содержит значение, возвращаемое функцией has. Если вы незнакомы с оператором or else (Оператор or else объясняется в лекции 13), то считайте, что здесь содержится просто логическое or.
Хотя приведенный выше текст описывает общую схему работы алгоритма, он не является непосредственно выполняемым, поскольку содержит некоторые не вполне определенные фрагменты (написанные заглавными буквами). Они соответствуют аспектам задачи табличного поиска, зависящим от выбранной реализации: тип элементов таблицы (ELEMENT), с какой позиции начинать поиск (INITIAL_POSITION), как переходить от текущей позиции к следующей (NEXT), как проверить наличие искомого элемента на некоторой позиции (FOUND), как определить, что все интересующие нас позиции уже проверены (EXHAUSTED).
Поэтому вышеприведенный текст является не столько подпрограммой, а шаблоном подпрограммы, который можно превратить в действующую подпрограмму, лишь после уточнения фрагментов, написанных заглавными буквами.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Изменения в третьем издании
Изменения в третьем издании Наряду со значительным обновлением и реорганизацией по сравнению с первыми двумя изданиями, в третьем издании добавлен обширный объем нового материала. Это издание призвано решать следующие задачи:• Охватить новые возможности, появившиеся
Изменения, связанные с использованием API
Изменения, связанные с использованием API Наиболее заметные изменения, связанные с использованием API, затрагивают функции управления памятью, введенные в главе 5. В новых определениях в полях счетчиков используется тип данных SIZE_T (см. табл. 16.2). Например, теперь прототип
11.7.2. Изменения в коде
11.7.2. Изменения в коде Как только в parseCommand() будут правильно отражены структуры данных, то запуск команд в правильном порядке становится довольно простым при достаточном внимании к деталям. Прежде всего, мы добавляем цикл в parseCommand() для запуска дочерних процессов,
8.9.7 Триггерные изменения и хранение
8.9.7 Триггерные изменения и хранение Триггерные изменения (triggered updates) ускоряют процесс исследования изменений. Маршрутизатор, изменив метрику пути, посылает объявление о таком изменении.Отметим, что новое изменение приводит к переключению следующего изменения, и процесс
11.8.2 Перемещения и изменения
11.8.2 Перемещения и изменения Что произойдет, если пользователь переместит компьютер в другое место, подключив его к иной сети или подсети? Во время загрузки компьютер, использующий DHCP, автоматически изменит свой IP-адрес и маску подсети, а также при необходимости —
22.10.3 Изменения в DNS
22.10.3 Изменения в DNS Новый тип записи о ресурсе, AAAA, отображает имена доменов в адреса IP версии 6. Пример такой записи:MICKEY IN AAAA 4321:0:1:2:3:4:567:89ABДолжен быть обеспечен и обратный просмотр. Для преобразования адресов в имена для IPv6 потребуется добавить новые домены. Обратный поиск
Изменения
Изменения Если изменений в документе много, удобно пользоваться этой группой кнопок.Например, вы видите исправление, и вы с ним согласны. Ставите в него курсор и нажимаете кнопку Принять. Выделение исправления пропадает, и оно органично вписывается в ваш текст.У этой
Операция изменения знака: -
Операция изменения знака: - Знак минус используется также для указания или изменения алгебраического знака некоторой величины. Например, в результате выполнения последовательности операторов rocky = -12;smokey = -rocky;переменной smokey будет присвоено значение 12. Когда
Условия для изменения OIT и OAT
Условия для изменения OIT и OAT Каждый раз, когда сервер стартует другую транзакцию, он проверяет состояние идентификаторов транзакций, которые он хранит в TSB, удаляя те, чье состояние было изменено на "подтвержденное", и заново вычисляет значения OIT и OAT. Он сравнивает их с
Редактирование без изменения формы
Редактирование без изменения формы К методам редактирования объекта без изменения его формы относятся перемещение, поворот, копирование, зеркальное отображение и размножение. Команды для выполнения этих действий собраны в меню, вызываемом из главного меню программы
Изменения в XPath 2.0
Изменения в XPath 2.0 Разрабатываемая версия языка XPath, вследствие интеграции с XQuery, очевидно, претерпит серьезные изменения. Новая спецификация уже сейчас разбита на два документа: документ, описывающий модель данных и документ, описывающий функции и операторы. Поэтому на
54 Агенты изменения
54 Агенты изменения Одна рыба, сделав правильное движение в нужный момент, может изменить курс всего косяка. В группе, разрабатывающей программное обеспечение, успешность введения нового инструмента или улучшенного метода управления версиями часто зависит от
Новые «аймаки»: постоянство - признак зрелости Олег Нечай
Новые «аймаки»: постоянство - признак зрелости Олег Нечай Опубликовано 04 мая 2011 года Обновление линейки настольных моноблоков iMac не вызвало того ажиотажа, который обычно сопутствует выпуску других устройств под маркой Apple. И неудивительно: внешне