РЕФЕРАТ

на тему:

“Поля, властивості та методи Дельфі”

1. Поняття поля, властивостей і методів Delphi

Поля класу є перемінними, оголошеними усередині класу. Вони призначені
для збереження даних під час роботи екземпляра класу (об’єкта). Обмежень
на тип полів у класі не передбачено. В описі класу поля повинні
передувати методам і властивостям. Звичайно поля використовуються для
забезпечення виконання операцій усередині класу.

Поля призначені для використання усередині класу. Однак клас повинен
якимось чином взаємодіяти з іншими класами чи програмними елементами
додатку. У переважній більшості випадків клас повинен виконати з деякими
даними визначені дії і представити результат.

Для одержання і передачі даних у класі застосовуються властивості. Для
оголошення властивостей у класі використовується зарезервоване слово
property.

Властивості являють собою атрибути, які складають індивідуальність
об’єкта і допомагають описати його. Наприклад, звичайна кнопка у вікні
додатку має такі властивості, як колір, розміри, положення. Для
екземпляра класу «кнопка» значення цих атрибутів задаються за допомогою
властивостей — спеціальним перемінним, обумовленим ключовим словом
property. Колір може задаватися властивістю Color, розміри —
властивостями Width і Height і т.д.

Тому що властивість забезпечує обмін даними з зовнішнім середовищем, то
для доступу до його значення використовуються спеціальні методи класу.
Тому звичайно властивість визначається трьома елементами: полем і двома
методами, що здійснюють його читання/запис:

type

 TAnObject = class(TObject)

function GetColor: TSomeType;

procedure SetColor(ANewValue: TSomeType);

property AColor: TSomeType read GetColor write SetColor;

  end;

У даному прикладі доступ до значення властивості AColor здійснюється
через виклики методів GetColor і SetColor. Однак у звертанні до цих
методів у явному виді немає необхідності: досить написати:

AnObject.AColor := AValue; 

AVariable := AnObject.AColor;

і компілятор самостійно відтранслює звертання до властивості AColor у
виклики методів Getcolor чи Setcolor. Tо є зовні властивість виглядає в
точності як звичайне поле, але за всяким звертанням до нього можуть
стояти потрібні вам дії. Наприклад, якщо у вас є об’єкт, що представляє
собою квадрат на екрані, і його властивості «колір» ви привласнюєте
значення «білий», те відбудеться негайне перемальовування, що приводить
реальний колір на екрані у відповідність зі значенням властивості.
Виконання цієї операції здійснюється методом, що зв’язаний з установкою
значення властивості «колір».

У методах, що входять до складу властивостей, може здійснюватися
перевірка установлюваної величини на влучення в припустимий діапазон
значень і виклик інших процедур, що залежать від внесених змін. Якщо ж
потреби в спеціальних процедурах читання і/чи запису ні, можна замість
імен методів застосовувати імена полів. Розглянемо наступну конструкцію:

TPropObject = class(TObject) 

FValue: TSomeType; 

procedure DoSomething;

function Correct(AValue: Integer):boolean; 

procedure SetValue(NewValue: Integer); 

property AValue: Integer read FValue write SetValue;

 end;

procedure TPropObject.SetValue(NewValue: Integer);

 begin

if (NewValueoFValue) and Correct(NewValue) then EValue := NewValue;

DoSomething; 

end;

У цьому прикладі читання значення властивості AValue означає просте
читання поля rvalue. Зате при присвоєнні значення усередині SetValue
викликається відразу два методи.

Якщо властивість повинна тільки читатися чи записуватися, у його описі
може бути присутнім відповідний метод:

type

TAnObject = class(TObject)

property AProperty: TSomeType read GetValue; 

end;

У цьому прикладі поза об’єктом значення властивості можна лише
прочитати; спроба привласнити властивості AProperty значення викликає
помилку компіляції.

Для присвоєння властивості значення за замовчуванням використовується
ключове слово default:

property Visible: boolean read FVisible write SetVisible default True;

Це означає, що при запуску програми властивість буде встановлено
компілятором у True.

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

property APoints[Index : Integer]:TPoint read GetPoint write SetPoint;

Насправді в класі може і не бути відповідного поля — масиву. Нагадаємо,
що вся обробка звертань до внутрішніх структур класу може бути
замаскована.

Для векторної властивості необхідно описати не тільки тип елементів
масиву, але також ім’я і тип індексу. Після ключових слів read і write у
цьому випадку повинні стояти імена методів — використання тут полів
масивів неприпустимо. Метод, який читає значення векторної властивості,
повинен бути описаний як функція, що повертає значення того ж типу, що й
елементи властивості, і маюча єдиний параметр того ж типу і з тим же
ім’ям, що й індекс властивості:

function GetPoint(Index:Integer):TPoint;

Аналогічно, метод, який поміщає значення в таку властивість, повинен
першим параметром мати індекс, а другим — перемінну потрібного типу (яка
може бути передана як по посиланню, так і за значенням):

procedure SetPoint(Index:Integer; NewPoint:TPoint);

У векторних властивостей є ще одна важлива особливість. Деякі класи в
Delphi (списки т-List, набори рядків TStrings) «побудовані» навколо
основної векторної властивості. Основний метод такого класу дає доступ
до деякого масиву, а всі інші методи є ніби допоміжними. Спеціально для
полегшення роботи в цьому випадку векторна властивість може бути описана
з ключовим словом default:

type

TMyObject = class;

property Strings[Index: Integer]: string read Get write Put; default;

  end;

Якщо в об’єкта є така властивість, то можна його не згадувати, а ставити
індекс у квадратних дужках відразу після імені об’єкта:

var AMyObject: TMyObject; 

begin

AMyObject.Strings[1] := ‘First’; {перший спосіб}

 AMyObject[2] := ‘Second’; (другий спосіб}

end.

Будьте уважні, застосовуючи зарезервоване слово default, для звичайних
і векторних властивостей воно вживається в різних випадках і з різним
синтаксисом.

Про роль властивостей у Delphi красномовно говорить наступний факт: у
всіх наявних у розпорядженні програміста стандартних класів 100% полів
недоступні і замінені властивостями, що базуються на них. Рекомендуємо
при розробці власних класів дотримувати цього ж правила.

Отже, методом називається оголошена в класі чи функція процедура, що
використовується для роботи з полями і властивостями класу. Звертатися
до властивостей класу можна тільки через його методи. Від звичайних
процедур і функцій методи відрізняються тим, що їм при виклику
передається покажчик на той об’єкт, що їх викликав. Тому оброблятися
будуть дані саме того об’єкта, що викликав метод.

Поля і типи даних

Кожна таблиця БД і, отже, кожен набір дані додатки має власну структуру,
що визначається сукупністю полів. Кожне поле набору даних являє собою
об’єкт, що містить опис типу даних, якому повинне відповідати значення,
що знаходиться в записі на визначеному місці. Інакше, полем можна
назвати сукупність осередків з даними конкретного типу, розташованих у
тому самому місці кожного запису набору даних, чи попросту — це стовпець
у таблиці.

У наборі дані додатки баз даних Delphi кожному полю відповідає власний
об’єкт. Основою об’єктів полів є клас TFieid, що інкапсулює основні
властивості абстрактного поля, що не залежить від типу даних. Від цього
базового класу породжені інші класу, що забезпечують функціонування
реальних об’єктів полів, що залежать від типу даних.

Програміст, що грамотно використовує можливості полів, може вирішувати
істотно більш складні задачі і створювати ефективні і гнучкі додатки баз
даних.

Об’єкти полів

Об’єкти полів інкапсулюють властивості і методи полів різних типів
даних. Вони функціонують разом з набором даних і дуже тісно зв’язані з
ним. Наприклад, для того щоб одержати значення полів з поточної запису
набору даних, розроблювач повинен створити приблизно такий код:

Editl.Text := Tablel.Fields[0].AsString;

Властивість Fields являє собою індексований список об’єктів полів набору
даних. Якщо розроблювач не змінює порядок проходження полів у наборі
даних, то розташування об’єктів полів у списку Fields відповідає
структурі таблиці бази даних.

Кожен об’єкт поля зберігає ряд параметрів, які визначають поле.
Наприклад, у наборі даних до об’єкта поля можна звернутися, знаючи
тільки назву поля:

Editl.Text := Tablel.FieldByName(‘SomeField1).AsString;

Для того щоб привласнити значення полю в поточному записі, можна
скористатися приведеними вище способами, чи якщо тип даних поля
невідомий, властивістю Fieidvalues:

Tablel.FieldValues[‘SomeField’] := Editl.Text;

Знання імені поля дає самий простий спосіб звертання до поточного
значенню поля:

Tablel[‘SomeField’] := Editl.Text; 

Editl.Text := Tablel[‘SomeField’];

В основі класів, що описують ієрархію типізованих полів, лежить клас
TField. Від нього породжені інші класи, що забезпечують роботу цілих
груп полів, об’єднаних по типах даних.

Що ж таке об’єкт поля і якої можливості він надає розроблювачу?

По-перше, призначення класу TField, як базового класу поля, полягає в
умінні взаємодіяти з компонентом відображення даних для забезпечення
правильної візуалізації даних. Наприклад, об’єкт поля зберігає спосіб
вирівнювання, параметри шрифту, текст заголовка і т.д.

По-друге, з погляду набору даних об’єкт поля є сховищем поточного
значення цього поля (а не всього стовпця даних, як це можна собі
представити за назвою).

Компоненти відображення даних при роботі з набором даних взаємодіють
саме з полями. Наприклад, стовпчики компонента TDBCrid при відсутності
додаткових настроювань відповідають розташуванню об’єктів полів у
зв’язаному наборі даних.

Статичні і динамічні поля

У Delphi передбачено два способи створення об’єктів поля.

Динамічні поля використовуються програмою у випадку, якщо розроблювач не
створив для них об’єкти явно на етапі розробки. Кожний не заданий явно
об’єкт поля автоматично створюється при відкритті набору даних у
відповідності зі структурою зв’язаної таблиці БД. Любий об’єкт поля є
прямим спадкоємцем класу TField, а його конкретний тип залежить від типу
даних поля таблиці. При цьому властивості динамічного поля
установлюються відповідно до параметрів поля таблиці бази даних.

Компонент набору даних після підключення до таблиці БД без додаткових
настроювань використовує тільки динамічні поля. До властивостей і
методів динамічних полів можна звернутися програмно, для цього варто
використовувати індексована властивість Fields компонента доступу до
даних, що поєднує всі поля набору даних (див. вище) чи метод
FieldByName.

Динамічні поля використовуються у випадках, коли задані характеристики
полів у таблиці бази даних цілком задовольняють розроблювача і немає
необхідності розглядати яке-небудь поле поза

набором даних.

Статичні поля створюються програмістом на етапі розробки, їх властивості
доступні в Інспекторі об’єктів, а їхньої назви можна вибрати зі списку
об’єктів активної форми у верхній частині Інспектора об’єктів. Назва
статичного об’єкта поля звичайно складається з назв таблиці і поля,
наприклад ordersCUSTNO.

Створюються статичні об’єкти полів за допомогою спеціалізованого
Редактора полів, що викликається подвійним щигликом на компоненті набору
даних на чи формі командою Fields Editor зі спливаючого меню цього
компонента.

Редактор полів являє собою простий список уже створених статичних полів.
Усе керування здійснюється командами зі спливаючого меню. У верхній
частині вікна Редактори розташовані кнопки навігатора для переміщення по
наборі даних, що активні тільки при відкритому наборі даних. Якщо набір
даних має агрегатні поля даних (див. нижче), то вони розміщаються в
окремому списку в нижній частині вікна Редактора полів (мал. 2).

Рис. .2. Редактор полів з окремим списком агрегатних полів

Рис. 3. Діалог створення нового статичного поля

Редактора полів набору даних

Додати до списку статичних полів нове поле, що існує в таблиці БД, можна
за допомогою команди Add fields зі спливаючого меню Редактора. Видалення
елемента зі списку здійснюється клавішею . Перетаскуванням
елементів списку за допомогою миші можна змінити їхнє розташування. У
такий спосіб можна створювати довільні комбінації статичних полів.

Список використаної літератури

Самоучитель по Delphi для профессионалов. – М., 2004.

Советы по Delphi: вопросы и ответы. – М., 2002.

PAGE

PAGE 9

Рис. 1. Ієрархія класів полів

Похожие записи