Delphi (мова програмування)

Delphi (Делфі, вимовляється / Dɛl ˌ fi :/ [1]) - імперативний, структурований, об'єктно-орієнтований мова програмування, діалект Object Pascal [2]. Починаючи з середи розробки Delphi 7.0 [3], в офіційних документах Borland стала використовувати назву Delphi для позначення мови Object Pascal. Починаючи з 2007 року вже язик Delphi (похідний від Object Pascal) почав жити своїм самостійним життям і зазнавав різні зміни, пов'язані з сучасними тенденціями (наприклад, з розвитком платформи. NET) розвитку мов програмування: з'явилися class helpers, перевантаження операторів та інше.


1. Цільова платформа

Спочатку середу розробки була призначена виключно для розробки додатків Microsoft Windows, потім був реалізований також для платформ Linux (як Kylix), однак після випуску в 2002 Kylix 3 його розробка була припинена, і, невдовзі після цього, було оголошено про підтримку Microsoft. NET.

Реалізація середовища розробки проектом Lazarus ( Free Pascal, компіляція в режимі сумісності з Delphi) дозволяє використовувати його для створення додатків на Delphi для таких платформ, як Linux, Mac OS X і Windows CE.

Також робилися спроби використання мови в проектах GNU (наприклад, Notepad GNU) і написання компілятора для GCC.


2. Історія мови

Object Pascal - результат розвитку мови Турбо Паскаль, який, у свою чергу, розвинувся з мови Паскаль. Паскаль був повністю процедурним мовою, Турбо Паскаль, починаючи з версії 5.5, додав в Паскаль об'єктно-орієнтовані властивості, а в Object Pascal - динамічну ідентифікацію типу даних з можливістю доступу до метаданих класів (тобто до опису класів і їх членів) в компільованих коді, також званому інтроспекцією - дана технологія отримала позначення RTTI. Так як всі класи успадковують функції базового класу TObject, то будь покажчик на об'єкт можна перетворити до нього, після чого скористатися методом ClassType і функцією TypeInfo, які й забезпечать інтроспекцію.

Також відмітною властивістю Object Pascal від С + + є те, що об'єкти за замовчуванням розташовуються в динамічній пам'яті. Однак можна перевизначити віртуальні методи NewInstance і FreeInstance класу TObject. Таким чином, абсолютно будь-який клас може здійснити "бажання" "де хочу - там і буду лежати". Відповідно організовується і "многокучность".

Object Pascal (Delphi) є результатом функціонального розширення Turbo Pascal [4].

Delphi зробив величезний вплив на створення концепції мови C # для платформи . NET. [Джерело не вказано 226 днів] Багато його елементи та концептуальні рішення увійшли до складу С #. Однією з причин називають перехід Андерса Хейлсберга, одного з провідних розробників Дельфі, з компанії Borland Ltd. в Microsoft Corp.

  • Версія 8 здатна генерувати байт-код виключно для платформи. NET. Це перша середа, орієнтована на розробку багатомовних додатків (лише для платформи. NET);
  • Подальші версії (що позначаються роками виходу, а не порядковими номерами, як це було раніше) можуть створювати як додатки Win32, так і байт-код для платформи. NET.

Delphi for. NET - Середа розробки Delphi, а також мову Delphi (Object Pascal), орієнтовані на розробку додатків для. NET.

Перша версія повноцінного середовища розробки Delphi для. NET - Delphi 8. Вона дозволяла писати програми тільки для. NET. Delphi 2006 підтримує технологію MDA за допомогою ECO (Enterprise Core Objects) версії 3.0.

У березні 2006 компанія Borland прийняла рішення про припинення подальшого вдосконалення інтегрованих середовищ розробки JBuilder, Delphi і C + + Builder з причини збитковості цього напрямку. Планувався продаж IDE-сектора компанії. Група прихильників вільного програмного забезпечення організувала збір коштів для покупки у Borland прав на середу розробки і компілятор [5].

Однак у листопаді того ж року було ухвалено рішення відмовитися від продажу IDE бізнесу. Тим не менш, розробкою IDE продуктів тепер займатиметься нова компанія - CodeGear, яка буде фінансово повністю підконтрольна Borland.

У серпні 2006 року Borland випустив полегшену версію RAD Studio під ім'ям Turbo: Turbo Delphi (для Win32 і. NET), Turbo C #, Turbo C + +.

У березні 2008 року було оголошено про припинення розвитку цієї лінійки продуктів.

У березні 2007 року CodeGear порадувала користувачів оновленою лінійкою продуктів Delphi 2007 for Win32 і виходом абсолютно нового продукту Delphi 2007 for PHP.

У червні 2007 року CodeGear представила свої плани на майбутнє, тобто опублікувала так званий roadmap [6].

Embarcadero RAD Studio 2010

25 серпня 2008 року компанія Embarcadero, новий господар CodeGear, опублікувала прес-реліз на Delphi for Win32 2009 [7]. Версія привнесла безліч нововведень в мову, як то [8] :

  • За замовчуванням повна підтримка Юнікоду у всіх частинах мови, VCL і RTL; заміна звернень до всіх функцій Windows API на юнікодние аналоги (тобто MessageBox викликає MessageBoxW, а не MessageBoxA).
  • Узагальнені типи, вони ж generics.
  • Анонімні методи.
  • Нова директива компілятора $ POINTERMATH [ON | OFF].
  • Функція Exit тепер може приймати параметри відповідно до типу функції.

Що вийшла в 2011 версія Delphi XE2 додала компілятор Win64 і крос-компіляцію для операційних систем фірми Apple.


3. Компілятори

  • Embarcadero Delphi (раніше наз. CodeGear Delphi і Borland Delphi) - напевно, найвідоміший компілятор, який є послідовником Borland Pascal та Turbo Pascal. Використовується Win16 (Delphi 1), Win32 (Delphi 2 і пізніше), Win64 (Delphi 16 (XE2) і пізніше), а також . NET 1.x, 2.0 (Delphi 8, Delphi 2005-Delphi 2007). Підтримка. NET, згодом виділена в окремий продукт, відомий як Oxygene.
  • Free Pascal (FPC) - вільний компілятор Оbject Pascal, який підтримує різні діалекти Паскаля, включаючи Turbo Pascal, Delphi і власні діалекти. На поточний момент, FPC може генерувати код для x86, x86-64, PowerPC, SPARC і процесорів ARM, а також для різних операційних систем, у тому числі для Microsoft Windows, Linux, FreeBSD, Mac OS. Існує кілька середовищ розробки програмного забезпечення для FPC (один з найвідоміших представників - Lazarus).
  • GNU Pascal (окремо розроблена версія з GCC). Не ставить за мету продовження серії діалектів Delphi, як складової Паскаля, але тим не менше містить режим сумісності Borland Pascal, і дуже повільно пристосовує компоненти мови Delphi. Не підходить для компіляції великих проектів, що містять код Delphi, але варто відзначити, що його підтримують більшість операційних систем і архітектур.
  • Oxygene (раніше відомий як Chrome) - компілятор Object Pascal, який інтегрований в Microsoft Visual Studio. Також доступний у вигляді компілятора з вільної командним рядком CLI. Використовує. NET і моно платформи. На даний момент продається під маркою Embarcadero Delphi Prism.
  • MIDletPascal - мова програмування з Delphi-подібним синтаксисом, і однойменний компілятор, який перетворює вихідний код в компактний і швидкий байт-код Java.
  • PocketStudio - заснована на Паскалі, IDE для Palm OS.
  • Virtual Pascal - Безкоштовний компілятор і текстова IDE для Win32, OS / 2 і Лінукса. На той момент дуже швидкий і вельми сумісний (частково підтримуються конструкції Delphi 5). Зовні дуже схожий на текстову середу Borland Pascal 7, хоча відсутня сумісна з ним графіка, наприклад. Однак розробка закінчилася в 2004 році, а исходники відкриті не були. З тих пір FPC пішов набагато вперед і в цілому для програмування краще він. Тим не менш, VP залишається дуже непоганим варіантом швидкої заміни ще більш застарілих версій Borland Pascal для школи / інституту, враховуючи рідну роботу в Win32 без проблем з російськими кодуваннями.

4. Синтаксис мови

4.1. Оператори

Список операторів через пробіл: := + - * / div mod not and or with xor shl shr ^ = <> >= <= < > @ in is as

4.2. Вирази

Вирази в Object Pascal (Delphi) бувають арифметичними, логічними та рядковими.

Основні логічні вирази:
Логічні вирази в основному вживаються в умовних операторах. До логічним виразам відносяться такі операції як:

  • not - "НЕ", заперечення логічного виразу (NOT <логіческое_вираженіе>)
  • and - "І", множення (перетин) логічних виразів (<логіческое_вираженіе1> AND <логіческое_вираженіе2>)
  • or - "АБО", об'єднання логічних виразів (<логіческое_вираженіе1> OR <логіческое_вираженіе2>)
  • xor - "Що виключає АБО", заперечення АБО, все що не потрапляє під АБО (<логіческое_вираженіе1> XOR <логіческое_вираженіе2>)



4.3. Типи даних

Оброблювані в програмі дані підрозділяються на змінні, константи і літерали. Константи являють собою дані, значення яких встановлені в розділі оголошення констант і не змінюються в процесі виконання програми.

4.4. Об'єкти

Об'єкти як екземпляри класу оголошуються в програмі в розділі var як звичайні змінні. Наприклад:

 var  CCircle1  :  TColorCircle  ;  CircleA  :  TCircle  ; 

Як і у випадку записів, для звернення до конкретного елементу об'єкта (полю, властивості або методу) вказується ім'я об'єкту і ім'я елемента, розділені крапкою, тобто ім'я елемента є складовим.

4.5. Класи

У мові Object Pascal класи - це спеціальні типи даних, що використовуються для опису об'єктів. Відповідно об'єкт, що має тип якого класу, є екземпляром (instance) цього класу або змінної цього типу.

Клас являє собою особливий тип, що має в своєму складі такі елементи (члени, member), як поля, властивості і методи. Поля класу аналогічні полям запису і служать для зберігання інформації про об'єкт. Методами називаються процедури та функції, призначені як правило для обробки полів. Властивості займають проміжне положення між полями і методами.


5. Об'єктно-орієнтовані особливості мови

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

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

5.2. Спадкування

При створенні нових об'єктів отримати всі властивості і методи від своїх предків називають спадкуванням. Такі об'єкти успадковують після свого створення всі поля, властивості, події, методи та інше від своїх предків. Спадкування часто позбавляє розробників від рутинної роботи і дозволяє не зволікаючи приступити до розробки чогось нового.

5.3. Поліморфізм

Це методи різних об'єктів, які можуть мати однакові імена, але по наповненню відрізняються один від одного.

6. Приклади

6.1. Структура програми

Кожна написана програма на мові Delphi складається з заголовка програми (program NewApplication ;), поля використовуваних модулів Uses (наприклад, Uses Windows, Messages, SysUtils і т. д.), який може не входити в саму структуру, а також блоків опису і виконання (починаються складовим оператором begin і закінчуються end.).

 program  Project1  ;  / / Тема програми, з її ім'ям "Project1"  uses  Forms  ,  Unit1  in  'Unit1.pas'  {Form1}  ;  / / Модулі, які підключені до проекту і використовуються програмою  {$ R *. Res}  begin  Application  .  Initialize  ;  / / Ініціалізація додатки  Application  .  CreateForm  (  TForm1  ,  Form1  )  ;  / / Створення форми / вікна  Application  .  Run  ;  / / Запуск і виконання  end  . 

6.2. Приклад № 1

Висновок повідомлення "Hello, world!" в консольному додатку Delphi

 program  Helloworld  ;  / / Назва програми  {$ APPTYPE CONSOLE}  / / Директива компілятору про створення консольного застосування  begin  writeln  (  'Hello, world!'  )  ;  / / Виведення повідомлення Hello, world!  end  .  / / Кінець програми 

6.3. Приклад № 2

Висновок повідомлення "Hello, world!" в 32-розрядному GUI додатку Delphi

 ...  procedure  TForm1  .  Button1Click  (  Sender  :  TObject  )  ;  / / Обробник події OnClick, що генерується автоматично  begin  ShowMessage  (  'Hello, world!'  )  ;  / / Виведення повідомлення Hello, world!  end  ;  / / Кінець процедури  ... 

6.4. Приклад № 3

Динамічне створення списку рядків і запис його в файл

 / / Обробник події, що відбувається при створенні форми MainForm  procedure  TMainForm  .  FormCreate  (  Sender  :  TObject  )  ;  var  / / Оголошення змінної типу TStrings (список рядків).  Strings  :  TStrings  ;  begin  / / Створення (виділення пам'яті і заповнення її початковими значеннями) об'єкта типу TStringList.  / / TStringList - це нащадок TStrings, який реалізує його абстрактні методи з метою зберігання рядків в пам'яті.  Strings  :  =  TStringList  .  Create  ;  try  / / Додавання рядка.  Strings  .  Add  (  'Додається рядок.'  )  ;  / / Збереження усіх рядків у файл.  Strings  .  SaveToFile  (  'C: \ Strings.txt'  )  ;  finally  / / Звільнення пам'яті об'єкта і очистка посилання на неї для запобігання ненавмисному звернення до не виділеної пам'яті.  FreeAndNil  (  Strings  )  ;  end  ;  end  ; 

7. Розширення файлів

  • . Pas - вихідний код модуля (pascal)
  • . Dpr - вихідний код проекту (pascal)
  • . Dproj - вихідний код проекту (xml)
  • . Dproj.local - вихідний код проекту (xml)
  • . Dfm - вихідний код форми
  • . Dpk - скомпільований пакет
  • . Dcu - скомпільований модуль
  • . Exe - скомпілювати додаток
  • . Res - ресурси
  • . Dsk - прив'язки до файлів
  • . Identcache - кешовані прив'язки до файлів

8. Відоме програмне забезпечення, створене на Delphi

Серед багатьох поширених програмних продуктів, написаних на Delphi, можна знайти [9] :


Примітки

  1. В Великобританії домінує вимова "справ-фи": варіант вимови, характерний для Великобританії - cougar.eb.com/sound/gg/ggdelp02.wav (Англ.) . Merriam-Webster Online Dictionary. Merriam-Webster. Читальний - www.webcitation.org/616XNHJAJ з першоджерела 21 серпня 2011. , А в США - "справ-фай": варіант вимови, характерний для США - cougar.eb.com/sound/gg/ggdelp01.wav (Англ.) . Merriam-Webster Online Dictionary. Merriam-Webster. Читальний - www.webcitation.org/616XNiHf4 з першоджерела 21 серпня 2011.
  2. Під такою назвою він був розроблений у фірмі Apple в 1986 групою Ларрі Теслера.
  3. Delphi Language Overview -
  4. Про це говорять позначення версій компілятора. Так, в Delphi 7 компілятор має номер версії 15.0 (остання версія Borland Pascal / Turbo Pascal позначалася 7.0, в Delphi 1 компілятор має версію 8.0, в Delphi 2 - 9.0 і т. д. Номер версії 11.0 носить компілятор Pascal, який входив до складу середовища C + + Builder).
  5. Default Parallels Plesk Panel Page - opendelphi.org
  6. Delphi and C + + Builder Roadmap - dn.codegear.com/article/36620
  7. Database Tools and Developer Software | Embarcadero Technologies - www.codegear.com/article/38512
  8. Delphi from Embarcadero | RAD Application Development Software - www.codegear.com/products/delphi/win32/whats-new/
  9. Good Quality Applications Built With Delphi - Delphi Programming - delphi.wikia.com / Good_Quality_Applications_Built_With_Delphi (Англ.) [ неавторитетний джерело? ]

Література

  • Ніл Дж. Рубенкінг. Мова програмування Delphi для "чайників". Введення в Borland Delphi 2006 = Delphi for Dummies. - М .: Діалектика, 2007. - 336 с. - ISBN 0-7645-0179-8
  • Хав'єр Пашеку. Програмування в Borland Delphi 2006 для професіоналів = Delphi for. NET Developer's Guide. - М .: Вільямс, 2006. - 944 с. - ISBN 0-672-32443-X
  • А. Н. Вальвачев, К. А. Сурков, Д. А. Сурков, Ю. М. Четирько. Програмування на мові Delphi. Навчальний посібник - www.rsdn.ru/?article/Delphi/Delphi_7_00.xml. - 2005.