|
|||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Основи програмування в середовищі Delphi 7 0Оголошення класу Клас - це тип даних, визначений користувачем. Те, що в Delphi є множина визначених класів, не суперечить цьому визначенню - адже розробники Delphi теж користувачі Object Pascal. Клас повинен бути оголошений до того, як буде оголошена хоча б одна змінна цього класу, тобто клас не може оголошуватись усередині оголошення змінної. Клас повинен оголошуватись з областю видимості - програма або модуль. Синтаксис оголошення класу такий Туре <ім'я класу> = Class (<ім'я класу - батька>) public {доступно всім} published {видні в Інспекторі Об'єктів і змінювані} protected {доступ тільки нащадкам} private {тільки в модулі}
Ім'я класу може бути будь-яким допустимим ідентифікатором. Але прийнято ідентифікатори більшості класів починати із символу "Т". Ім'я класу-батька може не вказуватися. Тоді передбачається, що даний клас є безпосереднім нащадком TObject - найбільш загального з визначених класів. Таким чином, еквівалентні такі оголошення: Type TmyClass = class Type TmyClass = class (TObject)
Клас успадковує поля, методи, властивості, події від своїх предків і може скасовувати якісь із цих елементів класу або вводити нові. Доступ до елементів класу визначається тим, у якому розділі вони оголошені. Якщо ви потребуєте спеціального захисту об'єкта або його частини, то для цього необхідно помістити його в окремий модуль. З одного боку, Delphi, будучи візуальним середовищем розробки додатків, орієнтований на тих програмістів, що із готових компонент "збирають" конкретні додатки для кінцевих користувачів. З іншого боку, будучи розширюваним об'єктно-орієнтованим інструментом, цей продукт становить інтерес і для спеціалістів, що займаються нарощуванням функціональних можливостей вже існуючих програмних бібліотек. Тому, виглядає абсолютно логічною поява в Object Pascal нових розділів в описі класів - published і protected. Разом із раніше введеними розділами (public і private) вони надають повний контроль над можливостями використання і "безболісної" (у значенні запобігання фатальних із погляду ідеології помилок) модифікації компонентів Visual Component Library (VCL - бібліотека класів Delphi). Розділ public (відкритий, доступні) призначений для оголошень, що доступні для зовнішнього використання. Секція public не накладає обмежень на область видимості в ній полів, методів і властивостей-їх можна викликати в будь-якому іншому модулі програми. Це відкритий інтерфейс класу. Розділ published (що публікується, декларовані) містить відкриті властивості, що з'являються в процесі проектування на сторінці властивостей Інспектора Об'єктів і котрі користувач може впроваджувати в процесі проектування. Секція published так само не обмежує область видимості, проте в ній перераховуються властивості, що повинні бути доступні не тільки на етапі виконання, але і на етапі конструювання програми (тобто у вікні Інспектора Об'єктів). Секція published використовується тільки при розробці компонентів. Зазначимо, що за замовченням (без оголошення) секція вважається оголошеною як published. Така секція розташовується на самому початку оголошення класу будь-якої форми і продовжується до першої оголошеної секції. У неї середовище Delphi поміщає опис вставлених у форму компонентів. Програмісту не варто поміщати в неї власні елементи опису класу або видаляти з неї елементи, вставлені середовищем. Розділ private (закритий, особисті) містить оголошення полів, процедур і функцій, використовуваних тільки усередині даного класу. Секція private звужує область видимості до мінімуму: особисті елементи опису доступні тільки усередині методів даного класу і підпрограмах, що знаходяться в тому ж модулі, де описаний клас. Елемент, оголошений у секції private, стає недоступним навіть найближчим нащадкам класу, якщо вони розміщаються в інших модулях. Розділ protected (захищений) містить оголошення, доступні тільки для нащадків класу. Як і у випадку закритих елементів, можна сховати деталі реалізації захищених елементів від кінцевого користувача. Проте, на відміну від закритих, захищені елементи залишаються доступні для програмістів, що захочуть робити від цього класу похідні об'єкти, причому не потрібно, щоб похідні об'єкти оголошувалися в цьому ж модулі. В Object Pascal дозволяється скільки завгодно разів оголошувати будь-яку секцію, причому порядок секцій не має значення. Будь-яка секція може бути порожньою. Властивості Поля даних, виходячи з принципу інкапсуляції, завжди повинні бути захищені від несанкціонованого доступу. Доступ до них, як правило, повинен здійснюватися тільки через властивості, що включають методи читання і запису полів. Тому поля доцільно оголошувати в розділі private - закритому розділі класу. У рідких випадках їх можна поміщати в protected - захищеному розділі класу, щоб можливі нащадки даного класу мали до них доступ. Традиційно ідентифікатори полів збігаються з іменами відповідних властивостей, але з додаванням у якості префікса символу 'F'. Властивість оголошується оператором виду: property <ім'я властивості>: <тип> read <ім'я поля або методу читання> write <ім'я поля або методу запису> <директиви запам'ятовування>;
Якщо в розділах read або write цього оголошення записане ім'я поля, значить передбачається пряме читання або запис даних. Якщо в розділі read записане ім'я методу читання, то читання буде здійснюватися тільки функцією з цим ім'ям. Функція читання - це функція без параметра, що повертає значення того типу, що оголошений для властивості. Ім'я функції читання прийнято починати з префікса Get, після якого іде ім'я властивості. Якщо в розділі write записане ім'я методу запису, то запис буде здійснюватися тільки процедурою з цим ім'ям. Процедура запису - це процедура з одним параметром того типу, що оголошений для властивості. Ім'я процедури запису прийнято починати з префікса Set, після якого іде ім'я властивості. Якщо розділ write відсутній в оголошенні властивості, значить ця властивість тільки для читання, і користувач не може задавати її значення. Директиви запам'ятовування визначають, як треба зберігати значення властивостей при зберіганні користувачем файла форми .dfm. Частіше усього використовується директива Default <значення за замовченням>
Вона не задає початкові умови. Це справа конструктора. Директива просто говорить, що якщо користувач у процесі проектування не змінив значення властивості за замовченням, то зберігати значення властивості не треба. Наведемо приклад. Нехай потрібно оголосити клас з ім'ям MyClass, що успадковує безпосередньо TObject і має властивість цілого типу з ім'ям А, тоді оголошення цього класу може мати вигляд: Type MyClass = class Private FA: integer; Protected Procedure Set (Value: integer); {Процедура запису} Published Property А: integer read FA write Set default true; End;
Тут вводиться закрите поле FA, оголошується захищена функція Set, використовувана для запису значення в це поле, і вводиться опублікована властивість А, що оперує цим полем. В оголошенні властивості після ключового слова read записане просто ім'я поля. Це означає, що функція читання відсутня, і користувач може читати безпосередньо значення поля. Після ключового слова write іде посилання на функцію запису Set, за допомогою якої будуть записуватися в поле А нові значення. У цій функції можна передбачити якісь перевірки допустимості значення А, що вводиться. Опис цієї функції повинен міститись у розділі implementation того модуля, в якому оголошений клас, і може мати вигляд: Procedure Set (Value: integer); Begin If... Then FA:= Value; End;
У наведеному прикладі опис властивості А міститься в розділі published. Отже, якщо цей клас описує створюваний вами новий компонент, то після його установки в систему властивість А буде з'являтися у вікні Інспектора Об'єктів при використанні цього компонента. Якщо перенести оголошення властивості в розділ public, то властивістю, як і раніше, можна буде користуватися, але тільки під час виконання додатка, оскільки у вікні Інспектора Об'єктів вона з'являтися не буде. Якщо необхідно, щоб поле було доступно тільки для читання або тільки для запису, варто опустити відповідно частину write або read. Взагалі говорячи, властивість може і не зв'язуватися з полем. Фактично, вона описує один або два методи, що здійснюють деякі дії над даними того ж типу, що і властивість. Наступний фрагмент коду пояснює області видимості. Unit Unit1; Interface Uses Controls, Forms; Type Private Published Protected Public End; Var Implementation Procedure Tform1.Proc1; End; Initialization Form1.FintField:= 0; + End.
Interface Uses Controls, Unit1; Type Tform2 = class (Tform1) end; Var Implementation Procedure Tform2.Proc3; End; Initialization Form2.FintField:= 0; - End.
Основи програмування в середовищі Delphi 7 0
Кафедра: Автоматика та інформаційні технології Зміст Введення 1. Основні поняття об'єктно-орієнтованого програмування
При використанні ООП слід пам'ятати, що якщо характеристика одного разу визначена, то всі категорії, розташовані нижче від цього визначення, теж будуть містити цю характеристику. Тому, якщо визначено коло, то немає потреби дізнаватися скільки у неї вершин, тому що вона відноситься до підкласу фігур, які не мають вершин. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.01 сек.) |