Приклади створюваних програмно класів

клас Custom

Лістинг 11.12. клас ConvertAmount

У класі оголошуються захищені масиви, що містять найменування чисел, і два методу - відкритий метод Convert. якому передається преобразуемое число, і захищений NumToString. Як виконується перетворення числа в рядок, зрозуміло з коду методу.
Для використання класу потрібно створити об'єкт і викликати його метод Convert:

клас Collection

Що таке колекції? Колекція - це інструмент для об'єднання пов'язаних об'єктів в групи. Наприклад, об'єкт Form підтримує колекцію об'єктів - керуючих елементів Controls і має відповідні методи для додавання нових елементів в колекцію або видалення їх з неї. Ви можете звернутися до будь-якого елементу в колекції Controls по його індексу, наприклад:

Властивість ControlCount форми містить значення, яке дорівнює кількості об'єктів в колекції. При видаленні об'єкта з колекції, незалежно від його положення всередині колекції, значення властивості ControlCount зменшується на одиницю, а індекси всіх об'єктів, які прямують до колекції за видаляється об'єктом, так само зменшуються на одиницю.
Колекції дозволяють організувати об'єктно-орієнтований підхід до зберігання даних. Крім того, на відміну від масивів, колекції не вимагають повторного завдання розмірів у разі додавання або видалення елементів.
В Visual FoxPro для створення колекцій застосовується базовий клас Collection. В об'єкті - екземплярі цього класу ви можете зберігати не тільки об'єкти, але і дані будь-яких інших типів: числові, символьні, логічні, і навіть масиви. До кожного елементу колекції можна звернутися як за його індексом, так і по ключу - рядку, як і індекс, однозначно ідентифікує цей елемент. На відміну від масивів, ви можете додавати нові елементи в колекцію, розміщуючи їх між будь-якими вже існуючими елементами.

Для створення об'єкта - екземпляра класу Collection можна використовувати функції CREATEOBJECT () або NEWOBJECT (), наприклад:

Властивість Count містить кількість елементів колекції. Воно є тільки для читання:

Властивість KeySort визначає, в якій послідовності Visual FoxPro перераховує елементи колекції в циклі FOR EACH.

Таблиця 11.13. Значення властивості KeySort класу Collection

Лістинг 11.13. Застосування властивості KeySort об'єкта Collection

Решта властивості класу Collection - загальні для всіх базових класів Visual FoxPro; при необхідності ви знайдете їх опис в довідковій документації.

З усіх методів класу ми розглянемо тут методи Add, Item, GetKey і Remove. Опис інших методів класу ви можете знайти в довідковій документації.

Метод додає в колекцію новий елемент. Ось його синтаксис:

Параметр eItem є виразом будь-якого типу, яке додає елемент в колекцію.
Необов'язковий параметр cKey визначає ключ - символьний рядок, яка буде ідентифікувати об'єкт. Ключі повинні бути унікальні, тобто не допускається використання двох однакових символьних рядків як ключів для декількох об'єктів колекції.
Необов'язкові параметри eBefore і eAfter визначають положення додається елемента в колекції. Параметр eBefore вказує ключ, перед яким повинен бути поміщений для додавання, а параметр eAfter - ключ, після якого повинен бути поміщений для додавання. Ви можете вказати одночасно обидва параметри або один з них; якщо ви опускаєте параметр eBefore. то його місце має бути позначено в списку параметрів коми:

У лістингу 11.14 показано застосування методу Add.

Лістинг 11.14. Застосування методу Add об'єкта Collection

В результаті виконання цього коду ви отримаєте наступний список:

Роза Цветок1
Орхідея Цветок2
дзвіночок Цветок3

Чому висновок зроблений саме в зазначеній послідовності? Дійсно, після додавання в колекцію рядки "Орхідея" індекс цього елемента отримав значення, рівне одиниці. Але при додаванні наступного елемента було зазначено, що він повинен бути розміщений перед елементом з ключем "Цветок2". Таким чином, елемент "Роза" отримав значення індексу, що дорівнює одиниці, а індекс елемента "Орхідея" став дорівнює двом. При додаванні наступного елемента (рядки "Дзвіночок") його положення явно не вказано, тому цей елемент був доданий в кінець колекції.

зауваження
Якщо ви хочете використовувати параметр cKey хоча б для одного елемента колекції, то тоді ви повинні використовувати цей параметр для всіх елементів колекції; при порушенні цієї вимоги виникає помилка часу виконання.

метод Item

Метод дозволяє звернутися до елементу колекції по його індексу. Ось його синтаксис:

де eIndex може бути або числовим значенням індексу елемента, або найменуванням ключа. Приклад застосування методу показаний в лістингу 11.15.

Лістинг 11.15. Застосування методу Item об'єкта Collection

Останні чотири рядки коду демонструють варіанти звернення до елементу колекції. Всі вони повертають однаковий результат.

метод GetKey

Метод дозволяє отримати значення ключа за індексом елемента колекції або значення індексу по ключу. Якщо елемента з вказаним індексом (або ключем) немає в колекції, метод повертає нуль. Ось синтаксис цього методу:

У табл. 11.14 перераховані повертаються методом значення.

Таблиця 11.14. Значення, що повертаються методом GetKey

метод Remove

Метод видаляє елемент з колекції. Ось його синтаксис:

Параметр eIndex може бути або числовим значенням індексу елемента, або найменуванням ключа. При видаленні елемента з колекції значення властивості Count зменшується на одиницю; так само на одиницю зменшуються індекси для всіх елементів, розташованих в колекції після видаляється елемента.

застосування

Застосування колекцій дозволить вам вирішити безліч проблем, які виникають при зберіганні даних в масивах. Простота використання і об'єктно-орієнтований підхід є визначальними факторами на користь застосування колекцій.
У лістингу 11.16 наведено демонстраційний приклад коду з довідкової документації, в якому показано застосування колекції для зберігання посилань на об'єкти - елементи форми.

Лістинг 11.16. Демонстраційний приклад використання колекцій

клас Empty

Клас Empty використовується для створення об'єктів, призначених для зберігання даних. На відміну від раніше розглянутих класів, цей клас не може використовуватися як батьківський при створенні призначених для користувача класів. Він не містить ніяких властивостей і методів; ви можете додавати нові властивості в об'єкти цього класу, використовуючи функцію ADDPROPERTY (). Видалити доданий в цей об'єкт властивість можна, використовуючи функцію REMOVEPROPERTY (). Об'єкт - екземпляр класу Empty може бути створений командою SCATTER ... NAME: