Опубликован: 27.09.2006 | Уровень: для всех | Доступ: свободно
Лекция 10:

Основы объектно-ориентированного программирования

Более подробные комментарии к ссылочной реализации односвязного списка и других контейнеров можно найти в третьей главе учебного пособия [9].

Ссылочные реализации могут быть применены и для множества, однако для него существует еще одна чрезвычайно изящная реализация, называемая битовой. Она применима, если в множестве M могут содержаться только числа в диапазоне от 0 до n-1 включительно. В этом случае, используя битовый массив b[0..n-1], можно полностью описать текущее состояние множества следующим образом: i\in M \Leftrightarrow b[i] = 1.

Поиск элемента в такой реализации сводится к проверке значения соответствующего элемента массива, а добавление или удаление — к присваиванию единицы или нуля.

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

Определение 10.11. Любая целочисленная функция h\colon M \rightarrow \{0 .. n-1\} называется хеш-функцией ( to hash означает разрезать, разделять ).

Хеширование

Рис. 10.9. Хеширование

Основная идея хеширования заключается в том, что исходное множество M представляется в виде объединения n непересекающихся множеств: \displaystyle M = \bigcup_{i=0}^{n-1} M_i, где множества M_i для i=0,1,\ldots, n-1 определяются равенствами \displaystyle M_i = \{x\in M\colon h(x) = i\}.

После этого вся работа со множеством M сводится к работе с одним из его подмножеств M_i. В самом деле, для поиска элемента x в множестве достаточно найти h(x) и поискать этот элемент в подмножестве M_{h(x)}. Добавление и удаление элемента x совершенно аналогично приводят к работе с подмножеством M_{h(x)} (см. рис. 10.9).

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

Весьма важный вопрос — вопрос качества используемой хеш-функции. Легко понять, что самой плохой является постоянная функция, а хорошая функция должна максимально равномерно распределять элементы по подмножествам. На практике, работая со словами, часто применяют функции, подобные следующей: h(c_1c_2\ldots c_n) = (c_1 + c_2 + \ldots + c_n) \% 256, где c_1, c_2 и т.д. — символы слова и одновременно их десятичные коды (предполагается ASCII-кодировка, а не UNICODE).

Словарик ООП

В этой секции приведены определения многих понятий, активно используемых в объектно-ориентированном программировании.

Абстрагирование (abstraction)метод решения задачи, при котором объекты разного рода объединяются общим понятием (концепцией), а затем сгруппированные сущности рассматриваются как элементы единой категории.

Абстракция (abstraction) — существенные характеристики объекта, которые отличают его от всех других видов объектов и четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа.

Абстрактный класс (abstract class)класс, который не может быть использован для создания экземпляров, а служит исключительно для порождения других классов.

Абстрактный метод (abstract method) — метод, который не может быть вызван без предварительного доопределения.

Автоматическая переменная (automatic variable)переменная, для которой память выделяется автоматически при входе в процедуру (функцию, метод или блок); противопоставляется динамической переменной, память для которой отводится явной командой пользователя.

Автоматическое управление памятью (automatic storage management)алгоритм распределения памяти, при котором исполнительная система нижнего уровня отвечает за нахождение и повторное использование недоступных (а следовательно, ненужных) блоков памяти; синоним: сборка мусора.

Базовый класс (base class)класс, из которого порождается другой класс; синонимы: класс-предок, надкласс, родительский класс.

Динамическая переменная (dynamic variable)переменная, для которой память выделяется явной командой пользователя; противопоставляется автоматической переменной, память для которой отводится автоматически при входе в процедуру (функцию, метод или блок).

Дочерний класс (child class)класс, определяемый как расширение другого класса, называемого родительским; синонимы: подкласс, производный класс.

Закрытый метод (private method) — метод, который не предназначен для вызова извне объекта; получатель сообщения, которое приводит к вызову такого метода, должен быть обязательно экземпляром того же класса, которому принадлежит отправитель сообщения.

Иерархия классов (class hierarchy)иерархия, образуемая классами в соответствии с их взаимосвязью "классподкласс".

Инкапсуляция (encapsulation) — техника, при которой информация прячется внутри структуры.

Интерфейс (interface) — внешние особенности класса или объекта, придающие ему абстрактную форму и одновременно скрывающие его внутреннее устройство и поведение.

Класс (class) — множество объектов, связанных общностью структуры и поведения; абстрактное описание данных и поведения для совокупности похожих объектов, представители которой называются экземплярами класса.

Конструктор (constructor) — метод, используемый для создания нового объекта; обеспечивает решение двух задач: выделяет память под новую переменную и гарантирует, что переменная инициализируется надлежащим образом.

Контейнерные классы (container classes) — классы, которые используются как структуры данных, содержащие набор элементов.

Метод (method) — процедура или функция, связанная с классом, вызываемая в стиле пересылки сообщений.

Множественное наследование (multiple inheritance) — свойство языка, которое позволяет подклассу наследовать свойства сразу от нескольких надклассов.

Надкласс (superclass)синоним терминов класс-предок, базовый класс.

Наследование (inheritance) — свойство объектов, посредством которого экземпляры класса получают доступ к данным и методам классов-предков без их повторного определения.

Анастасия Халудорова
Анастасия Халудорова
подавляющее большиство фукций на пространстве последовательостей?
екатерина яковлева
екатерина яковлева
как получить сертификат,что для этого нужно?
Дмитрий Карпов
Дмитрий Карпов
Россия, Нижний Новгород
Антон Никитин
Антон Никитин
Россия, Хабаровск