Перейти до вмісту

Object Pascal

Матеріал з K2 ERP Wiki Ukraine — База знань з автоматизації та санкцій в Україні

Object Pascal — це обʼєктно-орієнтоване розширення мови Pascal, яке використовується насамперед у середовищах Delphi, Free Pascal та Lazarus. Мова поєднує читабельність класичного Pascal із сучасними можливостями обʼєктно-орієнтованого програмування: класами, обʼєктами, інтерфейсами, властивостями, методами, модулями, обробкою подій і компонентною моделлю.

Object Pascal став особливо відомим завдяки Delphi, де він використовується для створення desktop-застосунків, бізнес-систем, ERP/CRM-рішень, програм для роботи з базами даних, інженерних інструментів, сервісів, API та cross-platform застосунків.

Object Pascal — це Pascal, розширений для реальної прикладної розробки: з класами, компонентами, формами, базами даних і нативними застосунками.

Коротко

Параметр Значення
Назва Object Pascal
Походження Розвиток мови Pascal
Тип Обʼєктно-орієнтована, компільована, високорівнева мова програмування
Основні реалізації Delphi, Free Pascal
Основні IDE Delphi IDE, RAD Studio, Lazarus
Основні сфери Desktop, ERP, CRM, бази даних, бізнес-системи, інженерні програми, cross-platform застосунки
Головні можливості Класи, обʼєкти, властивості, методи, інтерфейси, модулі, компоненти
Складність для новачків Низька або середня
Повʼязані статті Pascal, Delphi, Free Pascal, Lazarus, VCL, FireMonkey

Головна ідея Object Pascal

Класичний Pascal створювався як зрозуміла, структурована й навчальна мова програмування. Object Pascal розвинув цю ідею й додав до неї обʼєктну модель.

Якщо Pascal дозволяв писати структуровані програми через процедури й функції, то Object Pascal додав:

  • класи;
  • обʼєкти;
  • наслідування;
  • інкапсуляцію;
  • поліморфізм;
  • властивості;
  • методи;
  • інтерфейси;
  • модулі;
  • компоненти;
  • події.

Object Pascal зберіг читабельність Pascal, але додав інструменти для великих прикладних систем.

Важливі акценти

Статус Теза Пояснення
Ключове Object Pascal — це розвиток Pascal Мова зберігає зрозумілий синтаксис Pascal, але додає ООП.
Ключове Object Pascal найвідоміший через Delphi Саме Delphi зробив Object Pascal популярним у бізнес-розробці.
Ключове Мова добре підходить для desktop і бізнес-систем Особливо для Windows-застосунків, ERP, CRM і програм з базами даних.
Ключове Object Pascal компілюється в нативний код У Delphi та Free Pascal програми зазвичай компілюються в нативні виконувані файли.
Важливо Object Pascal має різні діалекти Delphi і Free Pascal дуже близькі, але не завжди повністю ідентичні.
Увага Мова менш популярна серед новачків Сьогодні частіше починають із Python, JavaScript, Java або C#, але Object Pascal досі важливий у legacy і бізнес-системах.

Історія

Object Pascal виник як обʼєктно-орієнтоване розширення Pascal. Ранні форми обʼєктного Pascal використовувалися ще до Delphi, але саме Delphi зробив мову масово популярною серед прикладних розробників.

У 1995 році компанія Borland випустила Delphi — середовище швидкої розробки застосунків, у якому Object Pascal став основною мовою. Delphi поєднав:

  • компілятор;
  • візуальний дизайнер форм;
  • бібліотеку компонентів;
  • роботу з базами даних;
  • обробку подій;
  • швидку компіляцію;
  • нативні Windows-застосунки.

Пізніше розвиток Delphi перейшов до Embarcadero Technologies. Паралельно існує відкрита реалізація Object Pascal — Free Pascal, а також IDE Lazarus.

Object Pascal, Pascal і Delphi

Ці назви часто плутають.

Термін Що означає
Pascal Класична структурована мова програмування
Object Pascal Обʼєктно-орієнтоване розширення Pascal
Delphi IDE, платформа й сучасна реалізація Object Pascal від Embarcadero
Free Pascal Open source-компілятор Pascal/Object Pascal
Lazarus Open source IDE для Free Pascal, схожа за ідеєю на Delphi

Delphi — це середовище й платформа, а Object Pascal — мова, на якій у ньому пишуть код.

Для чого використовується Object Pascal

Напрям Як використовується Object Pascal Приклади
Desktop-застосунки Нативні програми з формами, меню, таблицями Windows-програми, облікові системи
ERP Документи, склад, фінанси, бізнес-логіка Внутрішні ERP-системи
CRM Клієнти, угоди, задачі, історія взаємодії Desktop CRM
Бази даних SQL, форми, datasets, звіти Firebird, InterBase, PostgreSQL, MSSQL
Інженерні програми Розрахунки, моделювання, спеціалізовані інструменти Технічні desktop-застосунки
Legacy-системи Підтримка старих, але критичних програм Облік, склад, виробництво
Cross-platform Застосунки для різних ОС Delphi FMX, Lazarus LCL
Навчання Вивчення структурного й ООП-програмування Pascal/Object Pascal курси

Основи синтаксису

Object Pascal має читабельний синтаксис, де блоки коду часто позначаються словами begin і end.

Найпростіша програма:

program HelloWorld;

begin
  Writeln('Hello, world!');
end.

Змінні

Змінні оголошуються в секції var.

program VariablesExample;

var
  Name: string;
  Age: Integer;

begin
  Name := 'Anna';
  Age := 17;

  Writeln('Привіт, ', Name, '! Тобі ', Age, ' років.');
end.

Основні типи даних

Тип Для чого Приклад
Integer Цілі числа 10
Int64 Великі цілі числа 123456789
Single Дробове число меншої точності 3.14
Double Дробове число більшої точності 3.14159
Currency Фінансові значення 1250.50
Boolean True або False True
Char Один символ 'A'
String Рядок тексту 'Hello'
TDateTime Дата й час Дата, час, timestamp
Variant Значення різних типів Використовується обережно

Умови

if Age >= 18 then
  Writeln('Дорослий')
else
  Writeln('Неповнолітній');

Цикли

Цикл for:

var
  I: Integer;

begin
  for I := 1 to 5 do
    Writeln(I);
end;

Цикл while:

while Counter < 10 do begin

 Writeln(Counter);
 Inc(Counter);

end;

Цикл repeat:

repeat

 Writeln(Counter);
 Inc(Counter);

until Counter >= 10;

Процедури

Процедура виконує дію, але не обовʼязково повертає значення.

procedure SayHello(Name: string);
begin
  Writeln('Привіт, ', Name);
end;

Виклик:

SayHello('Anna');

Функції

Функція повертає результат.

function Add(A, B: Integer): Integer;
begin
  Result := A + B;
end;

Виклик:

Writeln(Add(5, 7));

Масиви

Статичний масив:

var
  Numbers: array[1..3] of Integer;

begin
  Numbers[1] := 10;
  Numbers[2] := 20;
  Numbers[3] := 30;
end;

Динамічний масив:

var

 Numbers: array of Integer;

begin

 SetLength(Numbers, 3);
 Numbers[0] := 10;
 Numbers[1] := 20;
 Numbers[2] := 30;

end;

Records

Record — це структура даних із полями.

type
  TUser = record
    Name: string;
    Email: string;
    Age: Integer;
  end;

var
  User: TUser;

begin
  User.Name := 'Anna';
  User.Email := 'anna@example.com';
  User.Age := 17;
end;

Класи

Класи — основа обʼєктно-орієнтованого програмування в Object Pascal.

type
  TUser = class
  private
    FName: string;
    FEmail: string;
  public
    constructor Create(const AName, AEmail: string);
    function GetInfo: string;
  end;

constructor TUser.Create(const AName, AEmail: string);
begin
  FName := AName;
  FEmail := AEmail;
end;

function TUser.GetInfo: string;
begin
  Result := FName + ' <' + FEmail + '>';
end;

Використання:

var

 User: TUser;

begin

 User := TUser.Create('Anna', 'anna@example.com');
 try
   Writeln(User.GetInfo);
 finally
   User.Free;
 end;

end;

Конструктори і деструктори

Конструктор створює обʼєкт, деструктор звільняє ресурси.

type
  TLogger = class
  public
    constructor Create;
    destructor Destroy; override;
  end;

constructor TLogger.Create;
begin
  inherited Create;
  Writeln('Logger created');
end;

destructor TLogger.Destroy;
begin
  Writeln('Logger destroyed');
  inherited Destroy;
end;

Властивості

Властивості дозволяють керувати доступом до полів.

type
  TProduct = class
  private
    FName: string;
    FPrice: Currency;
  public
    property Name: string read FName write FName;
    property Price: Currency read FPrice write FPrice;
  end;

Методи

Метод — це процедура або функція, яка належить класу.

type
  TCalculator = class
  public
    function Add(A, B: Integer): Integer;
  end;

function TCalculator.Add(A, B: Integer): Integer;
begin
  Result := A + B;
end;

Інкапсуляція

Інкапсуляція означає приховування внутрішніх деталей класу.

У Object Pascal для цього використовуються секції:

  • private;
  • protected;
  • public;
  • published.
Секція Значення
private Доступ тільки всередині модуля або класу, залежно від діалекту й режиму
protected Доступ у класі та нащадках
public Відкритий доступ
published Доступ для RTTI, Object Inspector і компонентної моделі

Наслідування

Наслідування дозволяє створити новий клас на основі існуючого.

type
  TAnimal = class
  public
    procedure Speak; virtual;
  end;

  TDog = class(TAnimal)
  public
    procedure Speak; override;
  end;

procedure TAnimal.Speak;
begin
  Writeln('Animal sound');
end;

procedure TDog.Speak;
begin
  Writeln('Bark');
end;

Поліморфізм

Поліморфізм дозволяє працювати з різними класами через спільний базовий тип.

var
  Animal: TAnimal;

begin
  Animal := TDog.Create;
  try
    Animal.Speak;
  finally
    Animal.Free;
  end;
end;

Інтерфейси

Інтерфейс описує контракт, який має реалізувати клас.

type
  IUserRepository = interface
    ['{A1B2C3D4-E5F6-4700-8000-000000000001}']
    function FindById(Id: Integer): string;
  end;

Приклад реалізації:

type

 TUserRepository = class(TInterfacedObject, IUserRepository)
 public
   function FindById(Id: Integer): string;
 end;

function TUserRepository.FindById(Id: Integer): string; begin

 Result := 'User #' + IntToStr(Id);

end;

Unit

Unit — це модуль коду в Object Pascal.

Типова структура unit:

unit UserService;

interface

type
  TUserService = class
  public
    function GetUserName: string;
  end;

implementation

function TUserService.GetUserName: string;
begin
  Result := 'Anna';
end;

end.

Секція interface описує те, що видно іншим модулям. Секція implementation містить реалізацію.

Uses

Секція uses підключає інші модулі.

uses
  SysUtils, Classes, UserService;

Exceptions

Object Pascal підтримує винятки.

try
  DoSomething;
except
  on E: Exception do
    Writeln('Помилка: ', E.Message);
end;

Блок try/finally часто використовується для звільнення ресурсів:

User := TUser.Create('Anna', 'anna@example.com'); try

 Writeln(User.GetInfo);

finally

 User.Free;

end;

Памʼять і керування обʼєктами

У класичному Delphi обʼєкти часто створюються через Create і звільняються через Free.

var
  User: TUser;

begin
  User := TUser.Create('Anna', 'anna@example.com');
  try
    Writeln(User.GetInfo);
  finally
    User.Free;
  end;
end;

У Object Pascal важливо розуміти життєвий цикл обʼєктів: хто створює обʼєкт, той зазвичай має подбати про його звільнення.

Компонентна модель

У Delphi Object Pascal тісно повʼязаний із компонентною моделлю.

Компонент — це клас, який можна використовувати в дизайнері форм.

Приклади компонентів:

  • кнопка;
  • поле вводу;
  • таблиця;
  • меню;
  • timer;
  • database connection;
  • query;
  • data source.

Події

Події — одна з основ Delphi/Object Pascal.

Приклад обробника натискання кнопки:

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Hello from Object Pascal!');
end;

Схема:

користувач натискає кнопку → виникає подія OnClick → виконується метод Button1Click

Object Pascal у Delphi

У Delphi Object Pascal використовується для:

  • VCL-застосунків;
  • FireMonkey-застосунків;
  • desktop-програм;
  • мобільних застосунків;
  • серверних застосунків;
  • API;
  • компонентів;
  • пакетів;
  • бібліотек;
  • бізнес-систем.

Delphi додає до мови:

  • візуальний дизайнер;
  • Object Inspector;
  • VCL;
  • FireMonkey;
  • FireDAC;
  • пакети компонентів;
  • debugger;
  • deployment tools;
  • cross-platform target platforms.

Object Pascal у Free Pascal

Free Pascal — це open source-компілятор Pascal/Object Pascal.

Він підтримує різні режими сумісності, зокрема режими, близькі до Delphi.

Free Pascal часто використовується разом із IDE Lazarus.

Free Pascal підходить для:

  • open source-розробки;
  • навчання;
  • cross-platform програм;
  • консольних застосунків;
  • desktop-застосунків через Lazarus;
  • серверних утиліт;
  • embedded і спеціалізованих сценаріїв.

Lazarus

Lazarus — це open source IDE для Free Pascal, схожа за ідеєю на Delphi.

Lazarus дозволяє створювати:

  • desktop-застосунки;
  • cross-platform UI;
  • програми для Linux, Windows, macOS;
  • навчальні проєкти;
  • open source Pascal-проєкти.
Delphi Lazarus
Комерційне середовище від Embarcadero Open source IDE для Free Pascal
Дуже сильний у VCL і RAD Studio-екосистемі Сильний у cross-platform open source-сценаріях
Має VCL і FireMonkey Має LCL
Платна комерційна екосистема Безкоштовна й відкрита екосистема

VCL, FMX і LCL

Object Pascal може використовуватися з різними UI-бібліотеками.

Бібліотека Де використовується Призначення
VCL Delphi Windows desktop-застосунки
FireMonkey / FMX Delphi Cross-platform застосунки
LCL Lazarus Cross-platform desktop-застосунки

Object Pascal і бази даних

Object Pascal традиційно сильний у роботі з базами даних.

Типові сценарії:

  • підключення до SQL-бази;
  • виведення таблиці на форму;
  • редагування записів;
  • створення документів;
  • звіти;
  • транзакції;
  • імпорт і експорт;
  • інтеграції з ERP/CRM.

Приклад SQL-запиту в Delphi:

FDQuery1.SQL.Text :=
  'SELECT id, name, city FROM customers WHERE city = :city';

FDQuery1.ParamByName('city').AsString := 'Київ';
FDQuery1.Open;

Object Pascal у ERP

Object Pascal часто використовувався для ERP-систем через Delphi.

Причини:

  • швидка розробка форм;
  • хороша робота з базами даних;
  • нативні Windows-застосунки;
  • data-aware компоненти;
  • стабільність;
  • довгий життєвий цикл програм;
  • можливість інтеграції з обладнанням;
  • підтримка складної бізнес-логіки.

Типові ERP-модулі:

Модуль Що автоматизує
Склад Залишки, партії, рух товарів
Продажі Замовлення, рахунки, накладні
Закупівлі Постачальники, заявки, надходження
Фінанси Оплати, каса, банк, звіти
Виробництво Специфікації, плани, операції
Документообіг Договори, акти, внутрішні документи
CRM Клієнти, контакти, угоди

Object Pascal і обладнання

Object Pascal часто використовувався для інтеграції з обладнанням.

Приклади:

  • касові апарати;
  • фіскальні реєстратори;
  • сканери штрихкодів;
  • принтери етикеток;
  • ваги;
  • POS-термінали;
  • COM-порти;
  • USB-пристрої;
  • DLL-драйвери;
  • промислові контролери.

Це одна з причин, чому старі Delphi/Object Pascal-системи досі використовуються в торгівлі, складах і виробництві.

Object Pascal і legacy

Object Pascal часто зустрічається в legacy-системах.

Legacy-система — це стара система, яка продовжує виконувати важливі бізнес-функції.

Object Pascal legacy може містити:

  • складну бізнес-логіку;
  • старі форми;
  • SQL-запити;
  • звіти;
  • інтеграції;
  • роботу з обладнанням;
  • нестандартні правила підприємства;
  • багато років накопичених доопрацювань.

У legacy-системах Object Pascal часто цінний не сам по собі, а через бізнес-логіку, яка роками накопичувалась у коді.

Модернізація Object Pascal-проєктів

Модернізація не завжди означає повне переписування.

Можливі підходи:

Підхід Опис
Оновити компілятор Перейти на новішу версію Delphi або Free Pascal
Рефакторинг Поступово покращити структуру коду
Винести бізнес-логіку з форм Розділити UI і логіку
Додати тести Покрити критичну логіку тестами
Оновити доступ до БД Перейти на сучасні компоненти або драйвери
Створити API Додати REST/API-шар для інтеграцій
Поступово замінювати модулі Переписувати не всю систему, а окремі частини

Хороша структура Object Pascal-проєкту

Приклад структури:

Project/
├── Forms/
│   ├── MainForm.pas
│   └── CustomerForm.pas
├── Services/
│   ├── CustomerService.pas
│   └── InvoiceService.pas
├── Repositories/
│   ├── CustomerRepository.pas
│   └── InvoiceRepository.pas
├── Models/
│   ├── Customer.pas
│   └── Invoice.pas
├── DataModules/
├── Reports/
└── Project.dpr

Бажано розділяти:

  • форми;
  • бізнес-логіку;
  • доступ до даних;
  • моделі;
  • сервіси;
  • звіти;
  • інтеграції;
  • конфігурацію.

Типові помилки новачків

Помилка Чому це проблема
Писати всю логіку у формі Код стає важким для підтримки
Зловживати глобальними змінними Система стає непередбачуваною
Не звільняти обʼєкти Можливі витоки памʼяті
Не використовувати try/finally Ресурси можуть не звільнитися при помилці
Плутати unit і class Unit — це модуль файлу, class — тип обʼєкта
Ігнорувати архітектуру Проєкт швидко перетворюється на набір великих форм

Переваги Object Pascal

Перевага Пояснення
Читабельний синтаксис Код досить легко читати навіть новачкам
Нативна компіляція Програми компілюються в нативний код
Добрий для desktop Особливо разом із Delphi VCL
Сильний у бізнес-системах Підходить для ERP, CRM, обліку, складу
Хороша робота з базами даних Delphi і Lazarus мають сильні інструменти для БД
Компонентна модель Зручно створювати UI й повторно використовувати компоненти
Стабільність Багато систем працюють десятиліттями

Недоліки Object Pascal

Недолік Пояснення
Менша популярність Сьогодні мова менш популярна серед нових розробників
Менше вакансій, ніж у масових мов Менше ринку порівняно з JavaScript, Python, Java, C#
Legacy-репутація Часто асоціюється зі старими desktop-системами
Не головний вибір для web frontend Для frontend частіше використовують JavaScript або TypeScript
Не основний вибір для AI Для AI переважно використовують Python
Різні діалекти Delphi і Free Pascal можуть мати відмінності

Коли Object Pascal — хороший вибір

Задача Чи підходить Object Pascal?
Windows desktop-застосунок Дуже добре
Бізнес-програма з формами й базою даних Дуже добре
ERP desktop Добре
CRM desktop Добре
Підтримка Delphi legacy Дуже добре
Навчання структурному програмуванню Добре
Cross-platform desktop Можливо через Lazarus або FMX
Web frontend Не основний вибір
AI / Data Science Не основний вибір

Object Pascal у порівнянні з іншими мовами

Мова Порівняння
Pascal Object Pascal додає обʼєктну модель і сучасні можливості
Delphi Delphi — це середовище й платформа, Object Pascal — мова
C# C# сильний у .NET; Object Pascal сильний у Delphi desktop і legacy
Java Java частіше для enterprise backend; Object Pascal частіше для desktop і бізнес-систем
Python Python простіший для AI й automation; Object Pascal сильніший у нативних desktop-програмах
JavaScript / TypeScript JavaScript/TypeScript головні для web; Object Pascal сильний у desktop
C++ C++ більш низькорівневий; Object Pascal зручніший для прикладної розробки

Рекомендований шлях навчання Object Pascal

Етап Що вивчати
1 Змінні, типи, оператори
2 Умови й цикли
3 Процедури й функції
4 Масиви й records
5 Unit, interface, implementation
6 Класи й обʼєкти
7 Властивості, методи, конструктори
8 Наслідування й поліморфізм
9 Інтерфейси
10 Exceptions і try/finally
11 VCL, FMX або LCL
12 SQL і бази даних
13 Архітектура desktop-бізнес-систем

Мінімальний набір для першого проєкту

Компонент Рекомендація
IDE Delphi або Lazarus
Компілятор Delphi compiler або Free Pascal
Перший тип проєкту Console application або проста форма
База даних SQLite, Firebird або PostgreSQL
Контроль версій Git
Структура Forms, Services, Models, DataModules
Документація README і короткий опис модулів

Простими словами

Object Pascal — це Pascal, який навчився працювати з обʼєктами, формами, компонентами й великими прикладними програмами.

Якщо класичний Pascal був хорошим для навчання логіці програмування, то Object Pascal став практичною мовою для реальних desktop і бізнес-застосунків.

Висновок

Object Pascal — це важлива мова з великою історією, яка досі використовується в Delphi, Free Pascal і Lazarus.

Вона сильна там, де потрібні:

  • нативні desktop-застосунки;
  • бізнес-системи;
  • ERP і CRM;
  • робота з базами даних;
  • підтримка legacy-коду;
  • компоненти;
  • форми;
  • інтеграція з обладнанням;
  • стабільні прикладні програми.

Object Pascal не є найпопулярнішою мовою для новачків у сучасному IT, але він залишається важливим у багатьох компаніях, де працюють Delphi-системи з реальною бізнес-логікою.

Object Pascal — це мова, яка поєднує простоту Pascal із практичною силою обʼєктно-орієнтованої бізнес-розробки.

Джерела