Архангельский А.Я. Программирование в Delphi. Учебник по классическим версиям Delphi. 2006 г. - 1152 с.

Поняття проекту

 

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

  • Файли опису форм – текстові файли з розширенням DFM, описують форми з компонентами. У цих файлах запам'ятовуються початкові значення властивостей, встановлені вами у вікні властивостей.
  • Файли програмних модулів – текстові файли з розширенням PAS, що містять вихідні програмні коди на мові Delphi. У цих файлах пишуться методи обробки подій, що генеруються формами і компонентами.
  • Головний файл проекту – текстовий файл з розширенням DPR, що містить головний програмний блок. Файл проекту підключає всі використовувані програмні модулі і містить оператори для запуску програми. Цей файл середовище Delphi створює і контролює сама.

На підставі сказаного можна зобразити процес створення додатку в середовищі Delphi від постановки завдання до отримання готового виконуваного файлу (рисунок 1.7.1):

Рис. 1.7.1. Процес створення застосування в середовищі Delphi

Розглянемо призначення і внутрішній устрій файлів проекту. Це допоможе легше орієнтуватися у проекті.

 

Файли опису форм

 

Пам'ятаєте, з чого ви починали знайомство із середовищем Delphi? Звичайно, з форми. Отже, перша складова частина проекту – це текстовий файл з розширенням DFM, що описує форму. У DFM-файлі зберігаються значення властивостей форми та її компонентів, встановлені вами у вікні властивостей під час проектування програми. Кількість DFM-файлів дорівнює кількості використовуваних у додатку форм. Наприклад, у нашому прикладі про ідеальну вагу використовується тільки одна форма, тому й DFM-файл лише один – Unit1.DFM.

Якщо ви бажаєте поглянути на вміст DFM-файлу, викличте у форми контекстне меню клацанням правої кнопки миші і виберіть команду View as Text (Рисунок 1.7.2).

Рис. 1.7.2. Перехід до текстового поданням форми за допомогою команди View as Text контекстного меню

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

object Form1: TForm1 Left = 250 Top = 150 Width = 400 Height = 303 Caption = “Weight Calculator” Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = “MS Sans Serif” Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 64 Top = 48 Width = 93 Height = 13 Caption = “Specify your height:” end object Label2: TLabel Left = 64 Top = 144 Width = 84 Height = 13 Caption = “Your ideal weight:” end object Button1: TButton Left = 248 Top = 64 Width = 75 Height = 25 Caption = “Compute” TabOrder = 0 OnClick = Button1Click end object Button2: TButton Left = 248 Top = 160 Width = 75 Height = 25 Caption = “Close” TabOrder = 1 end object Edit1: TEdit Left = 64 Top = 64 Width = 121 Height = 21 TabOrder = 2 end object Edit2: TEdit Left = 64 Top = 160 Width = 121 Height = 21 TabOrder = 3 end end

Незважаючи на настільки довгий текст опису, розібратися в ньому зовсім не складно. Тут на спеціальній мові задаються початкові значення для властивостей форми Form1 та її компонентів Button1, Button2, Edit1, Edit2, Label1, Label2. Більшого знати не потрібно, оскільки ви завжди будете використовувати візуальні засоби проектування і працювати з графічним представленням форми, а не з текстовим описом. Раз так, давайте повернемося до графічного представлення, не вносячи в текст ніяких змін. Для цього викличте контекстне меню редактора коду і виберіть команду View as Form (Рисунок 1.7.3).

 

a)

b)

Рис. 1.7.3. Перехід до графічного поданням форми за допомогою команди View as Form контекстного меню

 

На екрані знову з'явиться графічний образ форми. Якщо ви все-таки внесли зміни в текст, то вони відіб'ються на зовнішньому вигляді форми.

Файл опису форми (DFM-файл) потрібен лише на етапі проектування. При складанні програми опис форми з DFM-файлу поміщається в спеціальну область даних виконуваного файлу (область ресурсів). Коли під час роботи програми відбувається створення форми, її опис витягується з області ресурсів і використовується для ініціалізації форми та її компонентів. У результаті форма відображається на екрані так, як ви задали при проектуванні.

 

1.7.3. Файли програмних модулів

 

Кожній формі в проекті відповідає свій програмний модуль (unit), що містить всі пов'язані з формою оголошення і методи обробки подій, написані на мові Delphi. Програмні модулі розміщуються в окремих файлах з розширенням PAS. Їх кількість може перевищувати кількість форм. Чому? Тому, що в ряді випадків програмні модулі можуть і не ставитися до форм, а містити допоміжні процедури, функції, класи та ін. Завдання про ідеальну вагу дуже просте, тому в ній є лише один програмний модуль, пов'язаний з формою.

  unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; Memo1: TMemo; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin // Алгоритм обчислення ідеального ваги Memo1.Lines.Add(IntToStr(StrToInt(Edit1.Text) – 100)); end; procedure TForm1.Button2Click(Sender: TObject); begin Close; end; end.

Дамо необхідні коментарі до тексту програмного модуля. На самому початку після ключового слова unit записується ім'я модуля

  unitUnit1;

Ні в якому разі не змінюйте це ім'я вручну. Середовище Delphi вимагає, щоб ім'я модуля збігалося з ім'ям файлу, тому якщо ви хочете перейменувати модуль, збережіть його у файлі з новим ім'ям, скориставшись командою меню File/Save As…. Середовище Delphi само підставить після слова unit нове ім'я. Після цього видаліть старий модуль.

Зміст інтерфейсної секції модуля (interface) Починається з підключення стандартних модулів бібліотеки VCL, в яких визначено часто викликаються підпрограми і класи поміщених на форму компонентів.

 

  uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

 

Середовище Delphi формує список модулів без участі користувача і автоматично поповнює його, коли ви додаєте на форму нові компоненти. Тим не менш, список підключених модулів можна змінювати прямо в редакторі коду (вручну).

У розділі опису типів (type) Оголошено клас форми. За замовчуванням він називається TForm1 і породжений від стандартного класу TForm.

 

type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; Memo1: TMemo; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;

Розміщені на форму компоненти представлені полями форми. У нас на формі шість компонентів, тому і полів в описі класу теж шість. Імена полів збігаються з іменами компонентів, заданими у вікні властивостей.

Після полів слідують заголовки методів обробки подій. Назва кожного такого методу середовище Delphi формує автоматично на підставі імені компоненту та імені генерованої ним події. Наприклад, для кнопки Button1 метод обробки події OnClick називається Button1Click.

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

  • коли ви ставите на форму компоненти, середовище Delphi само додає відповідні поля в опис класу форми, а коли ви видаляєте компоненти з форми, середа видаляє поля з опису класу;
  • коли ви визначаєте у формі або компонентах обробники подій, середовище Delphi само визначає в класі відповідні методи, а коли ви видаляєте весь код з методів обробки подій, середовище Delphi видаляє і самі методи.

Для зручності користувачів в класі форми заздалегідь оголошені порожні секції private і public, В яких ви можете розміщувати будь-які допоміжні поля, методи і властивості. Середовище Delphi їх "в упор не бачить", тому з ними можна працювати тільки на рівні програмного коду. Користувач можете поміщати в секцію private атрибути, які потрібні тільки самій формі, а в секцію public – Атрибути, які потрібні ще й іншим формам і модулів.

Після опису класу йде оголошення власне об'єкту форми:

  var Form1: TForm1;

Змінна Form1 – Це посилання на об'єкт класу TForm1, Конструювання якого виконується у головному файлі проекту – DPR-файлі (див. далі).

На цьому зміст інтерфейсної секції модуля закінчується і починається розділ реалізації (implementation). Спочатку в ньому підключається файл опису форми:

  {$R *.dfm}

Будь ласка, не подумайте, що ця директива підключає всі файли з розширенням DFM. Підключається лише один DFM-файл, у якому описана форма даного модуля. Ім'я DFM-файлу виходить заміною зірочки на ім'я модуля, в якому записана директива.

Далі слід реалізація методів обробки подій. Порожні заготовки для них середовище Delphi створює сама одночасно з додаванням заголовків у клас форми. Ви ж наповнюєте їх змістом[1].

  procedure TForm1.Button1Click(Sender: TObject);begin// Алгоритм обчислення ідеального ваги Memo1.Lines.Add(IntToStr(StrToInt(Edit1.Text) – 100));end; procedure TForm1.Button2Click(Sender: TObject); begin Close; end;

При уважному вивченні вихідного тексту модуля залишається нез'ясованим одне питання: як забезпечується виклик методів Button1Click і Button2Click при натисканні на формі кнопок, адже в тексті модуля відсутній навіть натяк на це. Все дуже просто. Подивіться в DFM-файл. Крім установки значень властивостей ви знайдете установку і обробників подій.

  object Button1: TButton … OnClick = Button1Click end object Button2: TButton … OnClick = Button2Click end

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

 

 

Головний файл проекту

 

Для того щоб компілятор знав, які конкретно файли входять до проекту, необхідно якийсь організуючий початок. Це так званий файл проекту, що має розширення DPR (скор. від Delphi Project). Він являє собою головний програмний файл на мові Delphi, який підключає за допомогою оператора uses всі файли модулів, що входять в проект. Для кожного проекту існує тільки один DPR-файл.

Коли ви по команді File/New/Application починаєте розробку нової програми, середовище Delphi автоматично створює файл проекту. У міру створення нових форм вміст цього файлу видозмінюється автоматично. Коли ви закінчите роботу і будете готові компілювати проект, в DPR-файлі буде знаходитися перелік програмних модулів, які будуть подані на вхід компілятору. Щоб побачити вміст DPR-файлу нашого застосування, що обчислює ідеальний вага, виберіть у меню середовища Delphi команду Project/View Source. У редакторі коду з'явиться нова сторінка з наступним текстом:

  program Project1; uses Forms, Unit1 in “Unit1.pas” {Form1}; {$R *.res} Begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.

 

Рис. 1.7.3.1

Прокоментуємо цей текст. Підключення модуля Forms обов'язково для всіх програм, тому що в ньому міститься визначення об'єкта Application. Цей об'єкт лежить в основі будь-якого графічного додатку і доступний протягом всієї його роботи.

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

Директива {$R *. res} підключає до результуючою виконуваному файлу так звані ресурси, в даному випадку значок програми. Цей значок буде видно на панелі задач.

Далі йде головний програмний блок, що містить виклики трьох методів об'єкту Application. Виклик методу Initialize готує додаток до роботи, метод CreateForm завантажує і ініціалізує форму Form1, А метод Run активізує форму і починає виконання програми. Фактично час роботи методу Run – Це час роботи програми. Вихід з методу Run відбувається тоді, коли користувач закриває головну форму додатку; в результаті завершенні програм[2].

 

 

1.7.5. Інші файли проекту

 

Вище ми розглянули основні файли проекту. Крім них існує ряд додаткових файлів:

  • Файл з розширенням DOF (скор. від Delphi Options File), де зберігаються задані програмістом параметри компіляції і збірки проекту;
  • Файл з розширенням DSK (скор. від англ. Desktop), де зберігаються налаштування середовища Delphi для даного проекту. Щоб середовище Delphi зберігала свої налаштування в DSK-файлі, виберіть у меню команду Tools/Environment Options… і в діалоговому вікні Environment Options на вкладці Preferences в групі Autosave options відзначте пункт Project Desktop.
  • Файл з розширенням CFG (скор. від англ. Configuration), де зберігаються налаштування для консольного варіанту компілятора.
  • Файл з розширенням DCI (скор. від англ. Delphi CodeInsight), де середовище Delphi зберігає зроблені вами настройки для програмного "суфлера" (CodeInsight).
  • Файл з розширенням DCT (скор. від англ. Delphi Component Templates), де зберігаються ваші домашні заготівлі компонентів.
  • Файл з розширенням DMT (скор. від англ. Delphi Menu Templates), де зберігаються ваші домашні заготовки меню.
  • Файл з розширенням DRO, де зберігаються настройки і ваші добавки до сховища компонентів.
  • Файл з розширенням TODO – записна книжка для зберігання завдань на програмування і коротких приміток.
  • Файл з розширенням DDP (скор. від англ. Delphi Diagram Portfolio), де зберігаються графічні схеми, наочно пояснюють взаємозв'язку між компонентами.
  • Файл ресурсів з розширенням RES (скор. від RESource). У ньому, наприклад, зберігається значок програми, що відображається на панелі задач. Про те, як задати значок програми, ми розповімо під час обговорення питань управління проектом.

До проекту можуть входити також логічно автономні елементи: точкові малюнки (BMP-файли), значки (ICO-файли), файли довідки (HLP, CHM-файли) і т.п., проте ними керує сам програміст.

Тепер можна уточнити малюнок, що відображає склад проекту (рисунок 1.7.4):

Рис. 1.7.4. Склад проекту в середовищі Delphi

Рис.1.7.5. Зв’язок між файлами проекту.

 

Отже, склад проекту зрозумілий. Потрібно тепер з'ясувати, як ним керувати – створювати і зберігати проект, додавати і видаляти модулі, встановлювати параметри компіляції, збирати і запускати додаток.


Переваги ОО розробки

Об'єктно-орієнтований розробка дозволяє нам створювати набори об'єктів, які працюють разом синергічно[3], щоб справити програмного забезпечення, які легше адаптуватися до вимог які постійно змінюються, простіше в обслуговуванні, більш надійними і сприяє більшій проектування і повторному використанні коду. Об'єктно-орієнтований розвиток дозволяє нам створювати модулі функціональності. Після того, як об'єкти будуть визначені, це може бути само собою зрозумілим, що вони будуть виконувати свої необхідні функції, і ви можете представити їх, як чорні ящики, тобто ви можете зосередитися на тому, що вони роблять, і не турбуватися про те, як вони це роблять.

Об'єктно-орієнтований підхід дає важливі переваги в практику будівництва програмного забезпечення:

• OO підтримує високий рівень абстракції, таким чином система спрощується, так як вона розбита на суб-частини. Об'єкти інкапсують (ізолюють) дані (атрибути) і функції/процедури(методи) і, отже, розвиток може тривати на рівні об'єкта й ігнорувати іншу частину системи стільки, скільки потрібно. Кілька програмістів можуть працювати над одною і тою самою системою одночасно, кожен з упором на його/її власної єдиний об'єкт.

• Існує плавний перехід від одного етапу розвитку системи, до наступного. OO підхід використовує ту саму "мова", щоб говорити про аналізу, проектування, програмування і проектування баз даних. Це знижує рівень складності і надмірності системи, та робить більш «чисте», та міцний розвиток системи.

• OO підхід заохочує хороші методи програмування. Клас в ОО системі ретельно описує його інтерфейс (специфікації, що об'єкт класу може зробити), і здійснення цього інтерфейсу (як клас робить те, що він робить). Процедури і атрибути всередині класу утримуються разом щільно: Зміна одного класу не має ніякого впливу на інші класи.

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

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

• Ієрархія класів є динамічною. Функція забудовника в ОО навколишнього середовища полягає в сприянні зростанню класової ієрархії шляхом визначення нових, більш спеціалізованих класів для виконання завдань, що вимагають додатки.

Об'єктно-орієнтована розробка системи

Розвиток OO системи складається з декількох етапів, найбільш загальний з яких наступні:

• OO аналіз

• OO проектування

• ОО програмування

• Тестування

Етапи розробки ПЗ

Основні положення об’єктної моделі

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

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

Об’єктно-орієнтований аналіз і проектування відображають еволюційне, а не революційний розвиток проектування; нова методологія не пориває з попередніми методами, а будується з врахуванням попереднього досвіду.

 

 

2.1. Об’єктно-орієнтоване програмування.

Що таке об’єктне-орієнтоване програмування (object-oriented programming, OOP)? Ми визначаємо його наступним чином:

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

В даному визначенні можна виділити три частини:

1) OOП використовує в якості базових елементів об’єкти, а не алгоритми;

2) кожен об’єкт є екземпляром деякого визначеного класу;

3) класи організовані ієрархічно.

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

У відповідності з цим визначенням не всі мови програмування є об’єктно-орієнтованими. Теоретично можлива імітація об’єктно-орієнтованого програмування на звичайних мовах, таких, як Pascal і навіть COBOL або асемблер, але досить важко. Можна сказати що: "мова програмування є об’єктно-орієнтованою тільки тоді, коли виконуються наступні умови:

  • Підтримуються об’єкти, абстракції даних, що мають інтерфейс у вигляді операцій з іменами і власні дані, з обмеженням доступу до них.
  • Об’єкти відносяться до відповідних типів (класам).
  • Типи (класи) можуть успадковувати атрибути супертипів (суперкласів)".

 

Об’єктне-орієнтоване програмування = інкапсуляція + спадкування + поліморфізм

2.2. Об’єктно-орієнтоване проектування.

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

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

В даному визначені є дві важливі частини: об’єктно-орієнтоване проектування 1) базується на об’єктно-орієнтваній декомпозиції; 2) використовується різноманіття прийомів представлення моделей, які відображають логічну (класи і об’єкти) і фізичну (модулі и процеси) структуру системи, а також її статичні і динамічні аспекти.

Саме об’єктно-орієнтована декомпозиція відрізняє об’єктно-орієнтоване проектування від структурного; в першому випадку логічна структура системи відображається абстракціями у вигляді класів і об’єктів, в другому - алгоритмами. Для ОО проектування використовується абревіатура OOD (object-oriented design), для позначення метода об’єктно-орієтованого проектування.

 

 

2.3. Об’єктно-орієнтований аналіз.

На об’єктну модель вплинула більш ранішня модель життєвого циклу програмного забезпечення. Об’єктно-орієнтований аналіз (або OOA, object-oriented analysis) направлений на створення моделей реальної дійсності на основі об’єктно-орієтованого світогляду.

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

Як співвідносяться ООА, OOD и OOP? На результатах ООА формується моделі, на яких базуються OOD; OOD в свою чергу створює фундамент для остаточної реалізації системи з використання методології OOP.

 


2.4. Складові частини об’єктного підходу

Парадигми програмування

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

процедурно-орієнтовані Алгоритми
об’єктно-орієнтовані класи і об’єкти
логіко-орієнтовані мета, часто представлена в термінах обчислення предикатів
орієнтований на правила правила "якщо-то"
орієнтована на обмеження інваріантні співвідношення

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

  • абстрагування;
  • інкапсуляція;
  • модульність;
  • ієрархія.

Ці елементи є головними в тому розумінні, що без будь якого з них модель не буде об’єктно-орієнтованою. Окрім головних, є ще три додаткових елементи:

  • типізація;
  • паралелізм;
  • сохраняемость.

Називаючи їх додатковими, ми маємо на увазі, що вони корисні в об’єктній моделі, але не є обов’язковими.

 

 


Питання:

1. З яких файлів складається проект в Delphi.

2. З яких частин складається файл реалізації(*.pas).

3. Етапи розробки ПЗ.

4. Що таке ОО програмування.

5. Що таке ОО проектування.

6. Що таке ОО аналіз.


Література:

 

Архангельский А.Я. Программирование в Delphi. Учебник по классическим версиям Delphi. 2006 г. - 1152 с.

2. Архангельский А.Я. Delphi 2006. Справочное пособие: язык Delphi, классы, функции Win32 и .NET, 2006 г. - 1152 с.