Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.10.2020

Просмотров: 7863

Скачиваний: 25

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 — именем массива и текущими значениями его нижней и верхней границ. По-

скольку реализация алгоритма предполагает разбиение исходного множества на два под-

множества с последующей рекурсией, аргументам присвоены имена Left (индекс левой
границы рассматриваемой части массива) и Right (индекс правой границы). В строке 3

объявлены целочисленные индексные переменные I и J. Строка 4 содержит выражение

объявления переменной, тип которой совпадает с типом сортируемого массива; она ис-

пользуется в нескольких местах кодах для хранения содержимого "граничного" элемента,

определяющего порядок разбиения множества на подмножества.

В строке 6 первым делом выполняется проверка того, действительно ли значение

правой границы (Right) превышает величину левой

 В строке 8 сохраняется

граничное значение, определяющее разбиение массива на части. Далее индексу I
присваивается значение Left - 1, а переменной  — величина, хранимая в Right.
Бесконечный цикл, охватывающий строки

 используется для нахождения точек

деления левой (строки

 и правой (строки

 половин текущего подмноже-

ства. Если значение I достигает величины  или превышает ее, выполнение цикла за-
вершается; в противном случае элементы массива, адресуемые индексными значения-

ми I и J, меняются местами. Процесс повторяется до тех пор, пока не выполнится

условие I >= J. Далее в строке 26 вновь вызывается процедура Swap, а затем следуют
рекурсивные обращения к процедуре Quicksort для дальнейшей обработки левой и
правой половин текущего подмножества данных.

Существуют еще более сложные алгоритмы сортировки, учитывающие особенно-

сти конкретных типов и разновидностей данных. Однако их исчерпывающий анализ

выходит за рамки предмета нашего обсуждения. При необходимости более подробную

информацию вы сможете найти в книге Роберта

 (Robert

Algorithms in C++

 и в ряде других публикаций, упомянутых выше.

 что во

многих случаях вам придется переводить тексты примеров на язык VBA. К счастью,

бизнес-приложения, для создания которых и предназначен VBA, отнюдь не исчерпы-

ваются задачами сортировки данных. Кроме того, проявив определенную настойчи-

вость, вы наверняка сможете отыскать на Web-сайтах множество готовых решений.

Резюме

Массивы — это мощные и эффективные структуры данных, способные сохранить

миллионы единиц информации и обеспечить удобные средства управления ею. Эле-

ментами массивов могут служить значения стандартных и пользовательских типов

данных, а также объекты классов.

Главная черта массивов — простота их использования. Массивы настолько доступ-

ны, что могут применяться программистами любого уровня квалификации. Впрочем,

существуют и отрицательные стороны. В ходе занятия вы усвоили, что обязательными

условиями успешного применения массивов служат действия, связанные с объявлени-

ем индексных переменных и контролем за допустимыми границами их изменения.

Если подобные операции станут неотъемлемой частью создаваемых вами процедур,

работа с массивами окажется значительно более эффективной и надежной.

Соединение нескольких идей и приемов воедино — это, пожалуй, одна из главных

концепций, лежащих в основе объектно-ориентированного подхода к программирова-

нию. Решив обратиться к массивам, доверяйте собственному опыту и интуиции, но не

ограничивайте свое творческое воображение только рамками массивов. Следующее

занятие посвящено изучению более современной разновидности массивов — коллек-

ций. А пока обратитесь к приведенным ниже разделам "Вопросы и ответы" и

"Задания", чтобы отшлифовать полученные знания.

 час. Управление данными переменного объема 225


background image

Вопросы и ответы

Вопрос. Можно ли создать массив для хранения элементов различных типов данных?

Ответ.

 Да. Объявите массив с указанием типа Variant, и вы сможете сохранять в

нем данные различных типов.

Вопрос. Необходимо ли при завершении работы с массивом использовать функцию Erase?

Ответ.

 Делать это вовсе не обязательно. Но если вы поступаете именно так, будьте

последовательны в своих действиях.

Вопрос. Насколько велик объем памяти, доступный для объявления массива внутри

функции?

Ответ.

 Еще несколько лет назад, когда не существовало мощных 32-разрядных опе-

рационных систем, таких как Windows 2000, допустимый размер массива ограничивался

объемом стека — специальной области оперативной памяти. Но теперь программисту

позволено объявлять внутри функции или процедуры весьма широкие массивы.

Вопрос. Существуют ли более эффективные алгоритмы сортировки, нежели рассмот-

ренные методы "пузырька", выбора или "быстрой сортировки"?

Ответ.

 Алгоритм "быстрой сортировки" теоретически обладает наилучшей оценкой

поведения, однако с учетом свойств конкретных наборов сортируемых данных могут

быть построены и более эффективные алгоритмы. Если время работы вашей про-

граммы имеет серьезное значение, необходимо проанализировать данные и по воз-

можности оптимизировать алгоритм.

Задания

Ниже приведены тестовые задания и упражнения, которые помогут вам самостоя-

тельно проверить уровень освоения материала, изложенного в этой главе. Ответы на

вопросы вы найдете в приложении.

Тесты

1. Как называется функция, позволяющая построить и вернуть массив?

2. Какая функция используется для инициализации элементов массива значением,

равноценным

3. Действует ли функция Erase одинаково в отношении массивов данных различных

типов?

4. Каким образом можно динамически, т.е. в ходе выполнения программы, изменить

размер массива?

5. Какой из алгоритмов сортировки более эффективен — метод "пузырька", выбора

или "быстрой сортировки"?

1. Напишите выражение сравнения строк для использования в процедуре сортировки.

2. Исправьте текст процедуры Dump таким образом, чтобы вывод данных осуществ-

лялся в файл. Почему лучше выносить подобный код в отдельный именованный

блок (функцию или процедуру), а не располагать его непосредственно в том месте

программы, где он необходим?

3. Внесите изменения в текст процедуры BubbleSort, чтобы осуществить сортировку

данных в порядке их убывания. (Имейте в виду: в листинге 12.9 предполагается ва-

риант сортировки по возрастанию.)

226 Часть IV. Определение типов данных. Использование массивов и коллекций


background image

 час

Коллекции данных

На протяжении многих лет университетские курсы лекций, посвященные структурам

данных, сводились к изложению приемов управления динамическими массивами. Ди-

намический массив — чрезвычайно простая и доступная структура данных (за информа-
цией обращайтесь к предыдущей главе, "12-й час. Управление данными переменного
объема"). В начале 90-х была разработана концепция объектно-ориентированного про-
граммирования. С тех пор во многих системах программирования, включая и VBA, ар-
сенал пополнился средствами создания классов и объектов. Для нас с вами это означает

возможность многократного использования однажды созданного кода, собственного или
заимствованного.

 — одно из достижений объектно-ориентированного подхода. Коллекция

представляет собой разновидность динамического массива, оформленного в виде
стандартного класса VBA. Сегодня коллекции способны послужить более удачным ва-
риантом выбора во всех ситуациях,

 прежде применялись массивы. В образцах ко-

да, написанного ранее, вы все еще сможете встретить примеры обращения к масси-

вам. Но в современных приложениях чаще употребляются коллекции.

Основные темы занятия.

• Знакомство с коллекциями.
• Объявление объектов коллекций.
• Применение стандартных средств управления коллекциями.
• Примеры использования коллекций.

 с коллекциями

Коллекция — это индексированная структура данных, обладающая встроенными

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

родными, так и неоднородными — т.е. охватывать элементы данных различных типов.


background image

Дополнительные возможности, предоставляемые коллекциями, — это встроенные

средства изменения размеров и динамической обработки ошибок.

Словом, коллекции — одна из самых мощных и универсальных структур данных,

имеющихся в распоряжении программиста, применяющего VBA.

Использование коллекций

Коллекции находят самое широкое применение — в стандартных визуальных ком-

понентах (например, раскрывающиеся списки), в объектах класса ADODB для пред-
ставления полей, в ADOX для хранения информации о таблицах и ключах базы данных
и т.д. Вам непременно потребуется изучить приемы обращения с коллекциями, чтобы

научиться работать с визуальными компонентами и объектами ADO.

На страницах этой книги, мы уже неявно обращались к коллекциям, когда ис-

пользовали объекты класса

 Таким образом, коллекции — это на-

столько важная тема, без изучения которой всем нам просто не обойтись.

Термины объектно-ориентированного

программирования

В составе библиотек VBA имеется код, определяющий существо коллекции. Он

носит название класса Collection. Воспринимайте класс как формализованное опи-

сание того, какие данные и какие действия могут поддерживаться и выполняться

фрагментом (объектом) кода.

Тип данных Integer, например, "осведомлен" о возможностях выполнения опе-

раций с целыми числами. Класс же способен содержать в своем составе переменные

различных типов и "знать", как обращаться с каждой из них. Но класс, кроме того,

"умеет" что-то делать. Созидательная способность заключена в наборе процедур и

функций, объявленных в составе класса.

Именованный блок кода, содержащий формализованные описания собственных

"знаний" и "умений", называют

 классом.

 Создаваемый программистом экземпляр

(переменная) класса носит название

 объекта.

Определенные в составе класса переменные, процедуры и функции называют об-

щим термином

 атрибуты.

 Существует две разновидности атрибутов. Атрибуты дан-

ных — это

 свойства.

 Свойства — это те же переменные, за исключением того, что при

обращении к свойству необходимо обязательно указывать наименование объекта

(экземпляра), которому оно принадлежит. Вторая разновидность атрибутов —

 мето-

ды —

 это объявленные в составе класса процедуры и функции. Отличие методов от

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

ставе класса и полностью ему принадлежат.

Процесс и результат объявления атрибутов класса называется

 инкапсуляцией.

 Вы

можете, например, услышать такое выражение: "Класс инкапсулирует объявленные в

его составе свойства и методы". До появления объектной концепции информатика

следовала парадигме

 структурного программирования.

 Табл. 13.1 представляет удобную

сопоставительную схему терминов структурного и объектного программирования.

Новый термин

Парадигма —

 это, в контексте нашего разговора, набор общих приемов

или стиль программирования. Например, объектно-ориентированное

программирование — это парадигма (концепция), в соответствии с кото-

рой при декомпозиции (разделении) задачи на более мелкие подзадачи

во главу угла ставится объект, а не процесс.

228

 Часть IV. Определение типов данных. Использование массивов и коллекций


background image

Таблица 13.1. Сопоставительная схема терминов структурного и объектного

программирования

Термин структурного подхода

Термин объектного подхода

Значение

Переменная

Функция или подпрограмма

Свойство
Метод

Элемент данных
Фрагмент кода

Новые термины введены не для того, чтобы запутать вас. Они несут в себе как

прежнюю, так и новую смысловую нагрузку. Например, термин

 переменная

 служит

для обозначения хранимой порции данных, но в слове

 свойство,

 помимо прямого

толкования, появляется дополнительное значение, подчеркивающее принадлежность

данных объекту класса.

Не следует углубляться в проблемы абстрактной семантики — указанные термины

нужно просто отчетливо понимать и различать. Это поможет в работе, да и общение с
коллегами значительно упростится, если вы будете говорить с ними на одном языке.

Класс Collection содержит четыре атрибута. Свойство Count предназначено для

хранения количества элементов коллекции. Метод Add позволяет добавлять в коллек-
цию новые элементы, Remove служит для удаления элементов, a Item дает возмож-
ность ссылаться на элементы по значению индекса.

В ходе этого занятия будут подробно рассмотрены все названные атрибуты класса

Collection.

Создание объектов коллекций

Мы не погрешим против истины, если в каком-то смысле отнесем классы к типам

данных, объявляемым пользователем. Коллекции — это тип данных, разработанный

специалистами Microsoft и включенный в состав VBA. Класс коллекций содержит че-
тыре атрибута, перечисленных в предыдущем разделе.

Средства поддержки парадигмы объектно-ориентированного программи-
рования были включены в окружение VBA в последние годы. Конструк-

ции и приемы определения объектов классов в VBA несколько отличают-
ся от тех, которые применяются по отношению к стандартным и пользо-
вательским типам данных, рассмотренным ранее. (Сейчас, рассматривая

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

ления коллекции таков:

Dim

 As Collection

Нетрудно заметить, что внешне ничего не изменилось. Замените идентификатор

МояКоллекция более точным именем — и процесс объявления будет завершен. Впро-
чем, существует одна важная особенность — непосредственно после объявления объ-

екта соответствующая ему переменная содержит значение Nothing

 равно-

ценное null или Empty, которыми инициализируются стандартные типы данных.
Поэтому сразу воспользоваться объектом вы не сможете.

Чтобы объект стал полноценным, соответствующей ему переменной необходимо

присвоить значение существующего объекта либо создать новый, выделив память с
помощью директивы New. При создании нового объекта возможны два варианта дей-
ствий. Команду New допускается использовать непосредственно в строке объявления:

Dim МояКоллекция As New Collection

 час. Коллекции данных

229