Московский государственный индустриальный университет
Опубликован: 27.09.2006 | Доступ: свободный | Студентов: 3333 / 380 | Оценка: 4.17 / 3.79 | Длительность: 24:17:00
Специальности: Программист
Лекция 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) — свойство объектов, посредством которого экземпляры класса получают доступ к данным и методам классов-предков без их повторного определения.

Анастасия Халудорова
Анастасия Халудорова
екатерина яковлева
екатерина яковлева