Структура проекту delphi - delphi sources faq

Програма Delphi-це кілька пов'язаних між собою файлів.

Головний файл проекту, спочатку називається PROJECT1.DPR. Якщо необхідно перейменувати назву проекту, потрібно перезаписати цей файл, вибравши в меню File команду Save Project As: При завданні імені слід дотримуватися правил завдання імен в Object Pascal. Ім'я не повинно містити пропусків (використовуйте в такому випадку знак підкреслення), має починатися з літери (цифри допустимі, але з другої позиції), не повинно містити інших символів, крім букв і цифр. Під яким ім'ям ви зберігаєте проект, під таким ім'ям і буде створюватися виконуваний EXE файл, який ви завжди зможете самостійно перейменувати.







EXE - виконуваний файл

І так, будь-яка програма завжди складається з уже знайомого нам файлу проекту (такий файл має розширення .dpr) і одного або декількох модулів (файли з розширенням .pas) Файл проекту не призначений для редагування користувачем і створюється автоматично самою системою програмування Delphi. Для того, щоб побачити вміст файлу проекту, необхідно виконати команду Project | View Source.Содержімое файлу проекту може бути, наприклад, таким:

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

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

Методи, визначені в класі, можуть бути статичними, віртуальними, динамічними або абстрактнимі.Тіп методу визначається механізмом перекриття його в нащадках. Для статичних методів перекриття здійснюється компілятором. Наприклад, нехай у нас є опис батьківського класу Tbase і його нащадка Tdescedant, що містять однойменний метод

Відповідно до принципу поліморфізму в операторі FirstObject.MyJoy; викликається метод, описаний в класі Tbase, а в операторі SecondObject.MyJoy; Викликається метод, описаний в класі Tdescedant.По замовчуванням всі методи, описані в класі, є статіческімі.Дінаміческіе і віртуальні методи відрізняються від статичних тим, що заміщення батьківських методів методами нащадків відбувається на етапі виконання прогрмми.Для оголошення віртуального методу в батьківському класі необхідно використовувати зарезервоване слово virtual, а для оголошення динамічного методу-зарезервоване слово dynamic.В класі-нащадку в загаловке заміщає методу повинно бути вказано зарезервоване слово ov erride. наприклад:

Якби ми захотіли, щоб метод MyJoy в класі Tbase був динамічним, слово virtual в заголовку процедури слід замінити словом dynamic.Разлічіе між віртуальними і динамічними методами невіліка і пов'язане з особливостями реалізації їх визовов.Можно сказати, що віртуальні методи більш ефективні з точки зору витрат часу, а динамічні методи дозволяють більш раціонально використовувати оперативну память.Абстрактнимі називаються віртуальний або динамічні методи, які визначені в класі, але не містять ніяких дій, ніколи не викл иваются і обов'язково повинні бути перевизначені в класах-потомках.Обьявляется абстрактний метод за допомогою зарезервованого слова abstract, розташованого після слів virtual або dynamic, наприклад: procedure MyMetod; virtual; abstrat; Основне призначення абстрактних методів-бути родоначальником ієрархій конкретних методів в класах-нащадках. У будь-якому класі містяться два спеціальних методу-конструктор і деструктор. Ці методи містяться в класі-родоначальник всіх інших класів-Tobject і, отже, успадковуються нащадками. Як і інші методи, вони можуть бути ізменінія в класах-нащадках, т.е.перекрити. У класі Tobject і в більшості його нащадків конструктор і деструктор називаються Create і Destroy відповідно. Конструктори призначені для створення і ініціалізації об'єкта. Справа в тому, що об'єкт в мові Object Pascal є динамічною структурою і змінна-об'єкт містить не самі данни, а посилання на них. Конструктор розподіляє обьект в динамічної пам'яті і присвоює полях об'єкта початкові значення. При цьому поля порядкових типів в якості початкового значення одержують 0, строкового-порожній рядок, поля-покажчики-значення nil, поля-варіанти-Unassigned. Крім того, конструктор поміщає посилання на створений об'єкт в змінну Self, яка автоматично оголошують в класі. Зі сказаного випливає, що звернення до полів, властивостей і методів об'єкта повинно здійснюватися тільки після виклику конструктора. Деструкція звільняє динамічну пам'ять і руйнує об'єкт. Для оголошення конструктора і деструктора використовуються зарезервовані слова constructor і destructor відповідно. наприклад:







Для того, щоб створити об'єкт, необхідно застосувати метод-конструктор до класу об'єкта: varMyObject. TSample;

Якщо створюється клас-нащадок і при його створенні планується здійснити деякі додаткові дії, які відсутні у класу-батька, то в конструкторі класу-нащадка слід спочатку викликати конструктор свого батька, а вже потім здійснювати додаткові дії. Викликати будь перекритий метод батьківського класу можна за допомогою зарезервованого слова inherited (успадкований). Наприклад, якщо в класі TDescedant є свій власний конструктор typeTDescedant = class (TBase) FMark. Boolean;

то його реалізація могла б бути такою: constructor TDescedant.Create (Mark: Boolean);

де виклик батьківського конструктора здійснюється оператором inherited Create; а оператор Emark: = Mark; Здійснює додаткові дії. Крім деструктора Destroy, в базовому класі Tobject визначено метод Free, який перш перевіряє, чи був об'єкт насправді реалізований і тільки потім викликає метод Destroy. Якщо об'єкт ні створено конструктором, то звернення до деструктор, призведе до генерації виняткової ситуації. Отже, для знищення непотрібного об'єкта зручніше використовувати метод Free, наприклад: MyObject.Free; У класі можуть бути визначені методи, які можуть викликатися без створення і ініціалізації об'єкта. Ці методи називаються методами класу, і для їх оголошення використовується зарезервоване слово class. наприклад:

Як правило, методи класу призначені для довідкової інформації про клас-імені класу, предка класу, розмірі класу і т.д.

Полями називаються інкапсульовані в класі дані. Поля класу подібні полів запису, але на відміну від них можуть бути будь-якого типу, в тому числі класами, наприклад: type TchildClass = class Fone. Integer; Ftwo. String; Fthree. TObject; end; Виходячи з принципу інкапсуляції, звернення до полів повинно здійснюється за допомогою методів і властивостей класу. Разом з тим, в Object Pascal допускається звертатися до полів і безпосередньо .Для того щоб звернутися до поля, необхідно записати складові ім'я, що складається з імені класу і імені поля, між якими ставиться крапка, наприклад: var MyObject. TChildClass; begin MyObject.Fone: = 16; MyObject.Ftwo: = 'Деякий строкове значення'; end; Зазвичай ім'я поля таке ж, як і ім'я належної якості, але до імені поля в якості першої літери додають букву F.