Стандартные имена
Вы уже заметили многократное использование во всей книге нескольких базисных имен, таких как put и item. Они являются важной частью метода.
Большинству классов необходимы компоненты, представляющие операции нескольких базисных видов: вставка, замена, доступ к элементам структуры. Вместо придумывания специальных имен для этих и подобных операций в каждом классе, предпочтительно повсюду применять стандартную терминологию.
Вот каковы основные стандартные имена. Начнем с процедур создания: имя make рекомендуется для наиболее общей процедуры создания и имена вида make_some_qualification, например, make_polar и make_cartesian для классов POINT или COMPLEX.
Для команд наиболее общие имена приведены в таблице:
extend | Добавить элемент |
replace | Заменить элемент |
force | Подобна команде put, но может работать для большего числа случаев. Например для массивов put имеет предусловие, требующее, чтобы индекс не выходил за границы, в то время как force не имеет предусловий и допускает выход за границы |
remove | Удаляет (не специфицированный) элемент |
prune | Удаляет специфицированный элемент |
wipe_out | Удаляет все элементы |
Для небулевых запросов (атрибутов или функций)
item | Базисный запрос для получения элемента: в классе ARRAY - элемент с заданным индексом; STACK - элемент вершины стека; QUEUE - "старейший" элемент и так далее |
infix "@" | Синоним item в некоторых случаях, например в классе ARRAY |
count | Число используемых элементов структуры |
capacity | Физический размер, распределенный для ограниченной структуры, измеряемый числом потенциальных элементов. Инвариант должен включать 0<count and count <= capacity |
Для булевых запросов стандартными именами являются:
empty | Содержит ли структура элементы? |
full | Заполнена ли структура ограниченной емкости элементами? Обычно эквивалент count = capacity |
has | Присутствует ли заданный элемент в структуре? (Базисный тест проверки членства) |
extendible | Можно ли добавить элемент? (Может служить предусловием для extend) |
prunable | Можно ли удалить элемент? (Может служить предусловием для remove и prune) |
readable | Доступен ли элемент? (Может служить предусловием для remove и item) |
writable | Можно ли изменить элемент? (Может служить предусловием для extend, replace, put и др.) |