У п'ятдесяті роки двадцятого століття з появою комп'ютерів на електронних лампах почався бурхливий розвиток мов програмування. Комп'ютери, що коштували в той час значно дорожче, ніж розробка будь-якої програми, вимагали високоефективного коду. Такий код розроблявся вручну на мові Асемблер. В середині 50-х років під керівництвом Джона Бекуса для фірми IBM був розроблений алгоритмічний мова програмування FORTRAN. Незважаючи на те, що вже існували розробки мов, які виконують перетворення арифметичних виразів в машинний код, створення мови FORTRAN (FORmula TRANslator), що надає можливість запису алгоритму обчислень з використанням умовних операторів і операторів введення / виведення, стало точкою відліку ери алгоритмічних мов програмування.

До мови FORTRAN пред'являлися вимоги Створення високоефективного коду. Тому багато конструкцій мови спочатку розроблялися з урахуванням архітектури IBM 407. Успіх розробки цієї мови привів до того, що виробники інших обчислювальних систем стали створювати свої версії трансляторів. З метою деякою можливої ​​на той момент уніфікації мови мову FORTRAN IV, розроблений в 1966 році, став першим стандартом, що має назву FORTRAN 66.

Як альтернатива мові FORTRAN, спочатку орієнтованому на архітектуру IBM, під керівництвом Пітера Наура в кінці 50-х років була розроблена мова ALGOL (ALGOrithmic Language). Основною метою, переслідуваної розробниками цієї мови, була незалежність від конкретної архітектури обчислювальної системи. Крім того, творці мови ALGOL прагнули розробити мову, зручний для опису алгоритмів і застосовує систему позначень, близьку до тієї, що прийнята в математиці.

Мови FORTRAN і ALGOL були першими мовами, орієнтованими на програмуванняобчислень.

Мова PL 1, перші версії якого з'явилися на початку 60-х років, був спочатку орієнтований на IBM 360 і розширював можливості мови FORTRAN деякими засобами мови COBOL, розробленого в ці ж роки. Незважаючи на певну популярність мови PL / I у програмістів, які працювали на комп'ютерах IBM і машинах серії ЄС, в даний час він представляє чисто теоретичний інтерес.

В кінці 60-х років під керівництвом Найарда і Дала була розроблена мова Simula-67, який використовує концепцію користувальницьких типів даних. Фактично це перша мова, що застосовує поняття класів.

В середині 70-х років Вірт запропонував мову Pascal, який відразу став широко використовуватися. В цей же час з ініціативи Міністерства оборони США почалася робота зі створення мови високого рівня, що отримав назву Ada - на честь Ади Лавлейс, програмістки і дочки лорда Байрона. Створення мови почалося з визначення вимог і вироблення специфікацій. Над проектом працювали чотири незалежні групи, але всі вони використовували як основу мову Pascal. На початку 80-х років був розроблений перший промисловий компілятор мови Ada.

універсальний мова програмуванняЗ був розроблений в середині 70-х років Денисом Рітчі і Кеном Томпсоном. Ця мова став популярним мовою системного програмування і свого часу використовувався для написання ядра операційної системи UNIX. Стандарт мови С почав розроблятися робочою групоюінституту стандартів ANSI в 1982 році. Міжнародний стандарт мови С прийнятий в 1990 році. Мова С ліг в основу розробки мов програмування C ++ і Java.

Поряд з алгоритмічними мовами паралельно розвивалися і мови, які призначаються для обробки ділової інформації, а також мови штучного інтелекту. До перших належить мову COBOL (COmmon Business Oriented Language), а до других - мови LISP (LISt Processing) і Prolog. Мова LISP, розроблений в 60-х роках під керівництвом Дж. Маккарті, був першим функціональним мовою обробки списків, який знайшов широке застосування в теорії ігор.

З появою персональних комп'ютерівмови стали складовими частинамиінтегрованих середовищ розробки. З'явилися мови, що застосовуються в різних офісних програмах, Наприклад VBA (Visual Basic for Application).

У 90-х роках з поширенням мережі Інтернет розширюється можливість розподіленої обробки даних, що відбивається і на розвитку мов програмування. З'являються мови, орієнтовані на створення серверних додатків, такі як Java, Perl і PHP, мови опису документів - HTML і XML. Традиційні мови програмування С ++ та Pascal також зазнають змін: під мовою програмування починає розумітися не тільки функціональність самої мови, а також бібліотеки класів, що надаються середовищем програмування. Акцент зі специфікації самих мов програмування переноситься на стандартизацію механізмів взаємодії розподілених додатків. З'являються нові технології - COM і CORBA, специфицирующие взаємодія розподілених об'єктів.

Області застосування мов програмування

В даний час мови програмування застосовуються в самих різних областях людської діяльності, таких як:

  • наукові обчислення (мови C ++, FORTRAN, Java);
  • системне програмування (мови C ++, Java);
  • обробка інформації (мови C ++, COBOL, Java);
  • штучний інтелект (LISP, Prolog);
  • видавнича діяльність (Postscript, TeX);
  • віддалена обробка інформації (Perl, PHP, Java, C ++);
  • опис документів (HTML, XML).

З плином часу одні мови розвивалися, набували нових рис і залишилися затребувані, інші втратили свою актуальність і сьогодні представляють в кращому випадку чисто теоретичний інтерес. В значній мірі це пов'язано з такими факторами, як:

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

Перш ніж ви захочете вивчати якусь мову програмування треба знати трохи про їхню історію і де вони застосовуються.

Я представляю вам короткий огляд 25 відомих мов програмування. Починаючи з самого відомого до менш популярного. Стаття зроблена для новачків в сфері програмування. Ви можете почитати про кожній мові і вибрати той який вам більше сподобатися для вивчення.

Перш ніж приступити до вивчення мов програмування рекомендую вам вивчити курс по.

1. JavaScript

Прототипна-орієнтований сценарний мову програмування. JavaScript спочатку створювався для того, щоб зробити web-сторінки «живими». У браузері вони підключаються безпосередньо до HTML і, як тільки завантажується сторінка - тут же виконуються.

коли створювався мова Java Script, у нього спочатку була інша назва: «LiveScript». Але тоді був дуже популярний мову Java, і маркетологи вирішили, що схожу назву зробить нову мовубільш популярним.

Планувалося, що JavaScript буде таким собі «молодшим братом» Java. Однак, історія розпорядилася по-своєму, JavaScript сильно виріс, і зараз це абсолютно незалежний мову, зі своєю специфікацією і до Java не має ніякого відношення.

2. Java


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

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

Спочатку мова називалася Oak ( «Дуб») розроблявся Джеймсом Гослінгом для програмування побутових електронних пристроїв. Згодом він був перейменований в Java і став використовуватися для написання клієнтських додатків і серверного програмного забезпечення.

3. PHP


Є поширеним інтерпретується мовою загального призначення з відкритим вихідним кодом (скриптова мова). PHP створювався спеціально для ведення web-розробок і код на ньому може впроваджуватися безпосередньо в HTML-код. Синтаксис мови бере початок з C, Java і Perl, і є легким для вивчення.

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

4. Python

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

5. C #


Об'єктно-орієнтована мова програмування. Розроблено в 1998-2001 роках групою інженерів під керівництвом Андерса Хейлсберг в компанії Microsoft як мова розробки додатків для платформи Microsoft .NET Framework. C # відноситься до сім'ї мов з C-подібним синтаксисом, з них його синтаксис найбільш близький до C ++ і Java.

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

6. З ++


Компільований, статично типізований мова програмування загального призначення. Є одним з найпоширеніших мов у світі. Google Chrome, Mozilla Firefox, Winamp і лінійка продуктів Adobe були розроблені за допомогою С ++. Крім того, деякі сучасні ігри і операційні системи були розроблені на С ++ через швидке процесингу і компіляції.

7. Ruby


Простий і читається мова програмування, орієнтований на розробку веб додатків. Розроблений Юкіхіро Мацумто в 1995 році. Мова має незалежної від операційної системи реалізацією багатопоточності, суворої динамічною типізацією, складальником сміття.

Основне призначення Ruby - створення простих і в той же час зрозумілих програм, де важлива не швидкість роботи програми, а малий час розробки, зрозумілість і простота синтаксису. Мова дотримується принципу «найменшої несподіванки»: програма повинна вести себе так, як очікує програміст.

8. CSS


Cascading Style Sheets (каскадні таблиці стилів) формальна мова опису зовнішнього вигляду документа, написаного з використанням мови розмітки.
Переважно використовується як засіб опису, оформлення зовнішнього вигляду веб-сторінок, написаних за допомогою мов розмітки HTML і XHTML, але може також застосовуватися до будь-яких XML-документах.

9. C


Компільований статично типізований мова програмування загального призначення. Мова Сі був розроблений Деннісом Рітчі в 1972 році в Bell Labs. Він є попередником таких мов програмування як С ++, Java, C #, JavaScript і Perl. З цієї причини вивчення цієї мови веде до розуміння і інших мов. Мова С використовується для розробки низькорівневих програм, так як вважається найближче до апаратного.

10. Objective-C


Компільований об'єктно-орієнтована мова програмування, що використовується корпорацією Apple, побудований на основі мови Сі і парадигм Smalltalk. Мова Objective-C є надбезліччю мови Сі, тому Сі-код повністю зрозумілий компілятору Objective-C. Мова використовується в першу чергу для Mac OS X (Cocoa) і GNUstep - реалізацій об'єктно-орієнтованого інтерфейсу OpenStep. Також мова використовується для iOS (Cocoa Touch).

11. Shell

Він не стільки мова, скільки інтерпретатор команд (командний мову). Його скрипти використовуються для автоматизації оновлення програмного забезпечення. Містить стандартні конструкції для циклів, розгалуження, оголошення функцій. У сімействі операційних систем, сумісних з ОС UNIX, мова SHELL використовується в якості стандартного мови управління завданнями.

12. R


Мова програмування для статистичної обробкиданих і роботи з графікою, а також вільна програмне середовище обчислень з відкритим вихідним кодом в рамках проекту GNU. R широко використовується як статистичне програмне забезпечення для аналізу даних і фактично став стандартом для статистичних програм. В R використовується інтерфейс командного рядка.

13. Perl


Високорівнева інтерпретується динамічний мова програмування загального призначення. Назва мови є абревіатурою, що розшифровується як Practical Extraction and Report Language - «практичну мову для отримання даних та складання звітів». Основною особливістю мови вважаються його багаті можливості для роботи з текстом, в тому числі робота з регулярними виразами, вбудована в синтаксис. На даний момент він використовується для виконання широкого спектру завдань, включаючи системне адміністрування, веб-розробку, мережеве програмування, ігри, біоінформатику, розробку графічних користувальницьких інтерфейсів.

14. Scala


Мультипарадигмальності мову програмування, спроектований коротким і тіпобезопасним для простого і швидкого створення компонентного програмного забезпечення, що поєднує можливості функціонального і об'єктно-орієнтованого програмування. Scala - програми багато в чому схожі на Java-програми, і можуть вільно взаємодіяти з Java-кодом.

15. Go


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

16. SQL

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

17. Haskell


Cтандартізірованний чистий функціональний мова програмування загального призначення. Є одним з найбільш поширених мов програмування з підтримкою відкладених обчислень. Відмітна риса мови - серйозне ставлення до типізації. Haskell чудовий мову для навчання і для експериментів з складними функціональними типами даних.

18. Swift


Відкритий мультипарадигмальності компільований мова програмування загального призначення. Створено компанією Apple в першу чергу для розробників iOS і OS X. Swift працює з фреймворками Cocoa і Cocoa Touch і сумісний з основною кодової базою Apple, написаної на Objective-C. Swift замислювався як більш легкий для читання і стійкий до помилок програміста мова, ніж передував йому Objective-C. Swift запозичив досить багато з Objective-C, проте він визначається не покажчиками, а типами змінних, які обробляє компілятор. За аналогічним принципом працюють багато скриптові мови.

19. Matlab


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

20. Visual Basic


Мова програмування, а також інтегроване середовище розробки програмного забезпечення, що розробляється корпорацією Microsoft. Мова Visual Basic успадкував дух, стиль і синтаксис свого предка - мови BASIC, у якого є чимало діалектів. У той же час Visual Basic поєднує в собі процедури та елементи об'єктно-орієнтованих і компонентно-орієнтованих мов програмування.

Visual Basic також є хорошим засобом швидкої розробки RAD додатків баз даних для операційних систем сімейства Microsoft Windows. Безліч готових компонентів, що поставляються разом із середовищем, покликані допомогти програмісту відразу ж почати розробляти бізнес-логіку додатка, не відволікаючи його увагу на написання коду запуску програми.

21. Delphi


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

На сьогоднішній день, поряд з підтримкою розробки 32 і 64-розрядних програм для Windows, реалізована можливість створювати додатки для Apple Mac OS X, а також для Google Android(Безпосередньо виконувані на ARM-процесорі).

22. Groovy


Об'єктно-орієнтована мова програмування, розроблений для платформи Java як доповнення до мови Java з можливостями Python, Ruby і Smalltalk. Groovy використовує Java-подібний синтаксис з динамічної компіляцією в JVM байт-код і безпосередньо працює з іншим Java кодом і бібліотеками. Мова може використовуватися в будь-якому Java-проект або як скриптова мова.

23. Visual Basic .NET


Об'єктно-орієнтована мова програмування, який можна розглядати як черговий виток еволюції Visual Basic, реалізований на платформі Microsoft.NET. VB.NET не має зворотної сумісності з більш ранньою версією (Visual Basic 6.0). Розвиток проектів старих версій (* .vbp) можливо тільки після попередньої конвертації їх в формат VB.NET спеціальним майстром (Migration Wizard); проте, після конвертації потрібна істотна ручна доробка текстів.

24. D

Мультипарадигмальності компільований мова програмування, створена Уолтером Брайт з компанії Digital Mars. Спочатку D був задуманий як реінжиніринг мови C ++, проте, незважаючи на значний вплив С ++, не є його варіантом. Також мова зазнала впливу концепцій з мов програмування Python, Ruby, C #, Java, Eiffel.

25. Assembler


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

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

Я не став брати всі мови тому вони не так сильно затребувані у професійних програмістів. Моя задача виконана, тепер Вам залишилося вибрати потрібну мову і підкорювати його. Удачі Вам у ваших починаннях.

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

Сутність високорівневих мов написання програм

Мова програмування високого рівня - інструмент, що відноситься до категорії машинно-незалежних. Що це означає? Справа в тому, що мови програмування діляться на кілька категорій.

Є машинний код: набір алгоритмів, що призначені для управління користувачем безпосередньо апаратними елементами комп'ютера. Їх сутність буде повністю машинно-залежною: для конкретних типів ПК підійдуть тільки певні алгоритми.

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

У свою чергу, мова програмування високого рівня дозволяє здійснювати користувачеві взаємодія з ПК незалежно від того, яке конкретно обладнання встановлено на комп'ютері. Тому його слід відносити до машинно-незалежним. При написанні операційних систем найчастіше задіюється мову програмування високого рівня. Але є ОС, що написані на асемблері. Мови програмування низького і високого рівня можуть використовуватися одночасно. Людина, віддаючи ПК високорівневі команди, повинен, так чи інакше, доносити їх до конкретних апаратних компонентів, і ця функція може бути реалізована при використанні мов асемблера одночасно з високорівневими, що задіяні в структурі операційної системи.

транслятори

Найважливіші елементи, що входять в мови програмування високого рівня, - транслятори. Їх функція може бути різною. У числі ключових областей застосування трансляторів - «переклад» команд, сформованих на мові програмування високого рівня, в машинний код, зрозумілий конкретному апаратному компоненту ПК, наприклад, процесору. Транслятори, що виконують цю функцію, називаються також компиляторами. Є інший різновид відповідних компонентів - інтерпретатори. Вони призначені, в свою чергу, для «перекладу» високорівневих команд в ті, що зрозумілі операційній системі або будь-якій програмі.

Класифікація високорівневих мов

Високорівневі мови програмування можуть бути класифіковані за різними підставами. Поширена схема, по якій вони діляться на наступні основні різновиди:

Процедурно-орієнтовані (задіюються в якості інструменту при обробці інформації на будь-якому етапі обчислень);

Проблемно-орієнтовані (використовуються як засіб вирішення галузевих і прикладних задач, що формуються при розширенні сфер застосування ПК);

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

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

Процедурно-орієнтовані мови

До таких можна віднести Фортран. Він вважається першою мовою програмування високого рівня, створеним для широкого застосування. Характеризується простою структурою. До процедурно-орієнтованим мовам також відноситься Бейсік. Вважається одним з найбільш часто використовуваних при навчанні програмуванню. Приклад іншого процедурно-орієнтованої мови - СІ. Спочатку він створювався для ОС UNIX. На його основі згодом була створена мова C ++, доповнений інструментами об'єктно-орієнтованого програмування. Ще одна мова, що відноситься до даної категорії - Паскаль. Часто також задіюється при навчанні програмуванню. Можливості даного мови дозволяють його використовувати як дуже потужний інструмент розробки професійних видів ПО.

Проблемно-орієнтовані мови

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

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

Вивчимо тепер приклади мов програмування високого рівня, які відносяться до категорії об'єктно-орієнтованих. У числі таких - Visual Basic, Delphi, Visual Fortran, зазначений вище C ++, а також Prolog ++. Фактично всі вони в своїй основі містять процедурно-орієнтовані мови. Однак передбачається істотне їх доповнення візуальними елементами управління з метою подальшого освоєння необхідних алгоритмів розробниками, звиклими до інших інструментів. Так, перша мова програмування високого рівня - Фортран - може бути в оперативні терміни вивчений IT-фахівцями за допомогою можливостей Visual Fortran. Аналогічним методом можна швидко освоїти Бейсік або Пролог.

Здійснюється, в свою чергу, при використанні Delphi програмування на мові високого рівня Object Pascal. Існує велика кількість інших середовищ розробки ПЗ, що класифікуються як об'єктно-орієнтована мова. Дана сфера технологій розробки ПЗ активно розвивається.

Фортран і Лісп - перший і другий високорівневі мови

Вивчимо докладніше то, як з'явився перший мова програмування високого рівня - Фортран, а також Лисп, який вважається другою. У 1954 році розробники з компанії IBM, очолювані Джоном Бекуса, створили мову, за допомогою якого програмісти отримали можливість значно полегшити взаємодію з ПК, яке до того моменту здійснювалося за допомогою машинних команд або асемблера. Він отримав назву Fortran і незабаром став відомий і в СРСР під русифікованим найменуванням. Фортран став популярним інструментом для наукових обчислень.

Основним революційним елементом, запропонованим фахівцями IBM спільноті, став, власне, той самий компілятор, покликаний бути альтернативою асемблеру. У перші роки практики написання програм при використанні Фортран багато розробників вважали компілятор не зовсім вдалим рішенням, перш за все, з точки зору трудовитрат. Багато машинні коди, дійсно, складалися простіше, ніж при залученні транслятора. Однак у міру стрімкого збільшення продуктивності комп'ютерів програмісти починали усвідомлювати, що без використання компілятора ефективне ПО, яке буде повністю задіяти обчислювальні потужності ПК, створювати вкрай проблематично. Так, починання розробників з IBM отримали подальший розвиток. Основні синтаксичні конструкції мови програмування високого рівня Фортран в багатьох випадках стали задейстоваться в якості базових при створенні нових рішень.

Прикладом досягнення практичних результатів в області розвитку концепцій, закладених в Фортран, можна вважати створення Лісп. Дана мова був розроблений в 1958 році, проте, широку популярність він придбав кілька пізніше - в 1960-м. Лісп був розроблений Джоном Маккарті і опублікований в одному з популярних журналів для IT-фахівців. Основне призначення даного мови - обробка списків. Лисп став популярний в середовищі розробників систем штучного інтелекту. На його основі були створені такі мови, як Planner, Scheme, а також Common Lisp. Також Лисп справив значний вплив на багато сучасні інструменти розробки ПО. Структура мов програмування високого рівня, популярних сьогодні, в значній мірі базується на алгоритмах Фортран і Лісп.

Цікаво буде, однак, розглянути інші підходи до класифікації розглянутих інструментів розробки засобів ПО.

Універсальні високорівневі мови

Так, сучасні експерти виділяють універсальні високорівневі мови. До них відносяться, зокрема, ті, що були розроблені в 60-і роки. Ключові їх характеристики:

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

Велика кількість мовних конструкцій та алгоритмів;

Значимість не тільки для свого часу, але і для сучасного етапу розвитку комп'ютерної техніки;

Підтримка у відповідних мовах імперативною методології.

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

унікальні мови

Деякі IT-експерти виділяють в самостійну категорію «унікальні мови». У числі таких: APL, Cobol, Forth, SETL, а також CLU. Яка їхня специфіка?

Найважливіший аспект APL - задіяння масивів (векторів і матриць) в якості ключового структурного типу. Специфіка мови Cobol - в орієнтованості на комерційну сферу. Так, його доцільно задіяти при вирішенні завдань, пов'язаних зі стандартизованим форматом представлення результатів. Мова Forth характеризується використанням постфіксной записи програм, а також залученням стековой нотації. У мові SETL застосовуються сукупності значень в якості одного з ключових типів даних. Мовою програмування високого рівня є також CLU. Його основна особливість - залучення концепції роботи з абстрактними типами даних. Багато IT-фахівці бачать логічним поява нових рішень, що базуються на унікальних мовами - таких як, наприклад, Object-Oriented Cobol.

Засоби паралельного програмування

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

співпрограми;

розгалужень;

об'єднань;

Паралельних дужок;

Алгоритмів роботи з процесами.

Інша підстава для класифікації мов розглянутого типу - методи синхронізації процесів. Відповідні рішення можуть, таким чином, включати:

семафори;

Монітори;

- «рандеву»;

Критичні ділянки;

Дистанційний виклик процедур;

Транзакції, які стосуються категорії атомарних.

До мов розглянутого типу відносяться Modula-2, BLISS, Concurrent Pascal, DP, Argus.

Сімейство мов C

Вище ми розглянули як приклад мови високорівневого програмування таке рішення, як C. По суті справи, воно формує ціле сімейство. Мови, що належать до нього, є приватними конструкціями C. Так, його доповнення різними об'єктно-орієнтованими компонентами призвело до розробки C ++. Після суттєвої фільтрації ряду конструкцій C з'явилася мова Java. Можна відзначити, що Java створювався багато в чому під впливом концепцій проекту Oberon, яким керує Ніклаус Вірт, творець мови Паскаль. Чи відноситься до високорівневих JavaScript? Безумовно, так, не дивлячись на вузькість застосування - в якості інструменту розробки веб-сторінок. Але до мов програмування високого рівня не належать, зокрема, HTML, XML і SGML. Вони класифікуються як інструменти розмітки гіпертексту.

Сімейство мов Pascal

Мови програмування високого рівня Pascal також утворюють окреме сімейство. На базі Паскаль був, власне, створений Oberon, що класифікується як мову об'єктно-орієнтованого типу. Ключова особливість Oberon - в можливості забезпечення безпеки типів. Крім Oberon, до мов сімейства Pascal можна віднести Modula-2, а також Component Pascal.

Сімейство мов Ada

Основоположний у відповідній категорії мов - замовлений під потреби Міністерства оборони США Ada. Він був створений в кінці 70-х - початку 80-х років. Характеризується великою кількістю функцій, можливостей, універсальністю. Сімейство мов Ada включає такі рішення, як Cedar, Modula 3.

Сімейство мов Simula

Мова Simula поширений в галузях програмування, пов'язаних з імітаційним моделюванням. Специфіка відповідних рішень - в залученні специфічного ядра. Його використання дозволяє застосовувати різні розширення, адаптовані до тих чи інших сфер застосування. На основі Simula були створені об'єктно-орієнтована мова Smalltalk, а також BETA, що характеризується здатністю комбінувати в рамках єдиної абстракції алгоритми, що відображають роботу з даними, процедурами, а також управління. Об'єкти BETA можуть розглядатися в різному контексті, наприклад, в якості змінних, функцій або паралельних систем.

Для вирішення обчислювальних завдань зараз все активніше використовуються графічні процесори, але залишається відкритим питання: як писати ефективні програми під відповідні конфігурації?

15.06.2011 Андрій Адінец

Для вирішення обчислювальних завдань зараз все активніше використовуються графічні процесори, але залишається відкритим питання: як писати ефективні програми під відповідні конфігурації? Стандартне рішення - зв'язка CUDA або OpenCL - дозволяє порівняно швидко реалізувати алгоритм, проте створити оптимізовану під конкретну конфігурацію версію з їх допомогою складно. Потрібні інструменти для програмування графічних процесорів більш високого рівня, які можуть бути створені, наприклад, за допомогою розширюваних мов.

Ще три роки тому графічні процесорні пристрої (Graphical Processing Unit, GPU) розглядалися лише як відеокарти для ПК, то зараз ставлення до них змінилося - з'явилися спеціальні серверні моделі GPU, орієнтовані на рішення обчислювальних задач, збільшилася продуктивність на обчисленнях з подвійною точністю, виникли системи рекордної продуктивності, що займають вищі рядки в Top500. А як писати ефективні програми під такі машини? Стандартна відповідь - зв'язка CUDA або OpenCL для програмування GPU і MPI на рівні кластера. Ці інструменти доступні, активно підтримуються виробниками обладнання, під них вже написано багато програм, однак є і недоліки.

CUDA і OpenCL - розширення мови Сі, вони не складні для вивчення, хоча і є досить нізкуровневимі інструментами. З їх допомогою можна порівняно швидко реалізувати алгоритм для GPU, проте створити оптимізовану під конкретне застосування і конфігурацію версію виявляється значно складніше. Все оптимізації потрібно виконувати вручну, що призведе до збільшення розміру коду і погіршення його читаності. І хоча програми, створені за допомогою OpenCL, будуть переносяться між широким спектром архітектур, продуктивність при такому перенесенні не збережеться. Потрібні інструменти для програмування GPU більш високого рівня.

Створювати такі інструменти можна різними шляхами: вводити нову мову програмування; додавати директиви в уже існуючий мову, як робиться в моделі PGI Accelerator або CAPS HMPP; скористатися розширюваними мовами. розширювані мови- мови програмування, синтаксис і семантика яких не фіксовані, а можуть бути змінені в залежності від потреб програміста. У порівнянні з традиційними, які розгортаються мови мають ряд переваг: в них простіше додавати нові можливості; вони відкриті; вивчення нових моделей програмування на основі таких мов простіше, оскільки потрібно вивчити лише порівняно невеликі за обсягом розширення; за допомогою таких мов легше виконувати тонке налаштування і оптимізацію програм.

розширювані мови

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

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

Виявляється, що мов, які відповідають цим вимогам, порівняно небагато: Lisp, Nemerle, Seed7, xoc і Stratego. При цьому xoc, який призначений для розширення мови Сі, використовує окрема мова Zeta для написання розширень, а Stratego - це мова предметної області для створення перетворювачів вихідного коду. Nemerle - розширювана мова, що використовує середовище. Net.

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

У мові Nemerle для цього використовується конструкція, наприклад створює дерево, що складається з оголошення змінної i з початковим значенням 0. Квазіцітірованіе схоже на створення строкових об'єктів при строкових константах. На рис. 1 наведено приклад квазіцітірованія. Конструкція інтерполяції дозволяє підставляти значення змінних в фіксований шаблон всередині квазіцітірованія. У Nemerle для цього використовуються конструкції $ (...), якщо потрібно підставити список, наприклад. Також в розширюваних мовах присутні конструкції розбору дерева програми. У мові Nemerle для цього використовується оператор match (...) (...), аналог switch з мови Сі, в якості гілок якого використовуються конструкції квазіцітірованія. При цьому інтерполяція трактується як оголошення нових змінних, які в разі успішного зіставлення отримують значення відповідних піддерев. Наприклад, для оператора зіставлення match (e) (| => ...), якщо e містить дерево, в змінну a потрапить, а в змінну b.

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

На рис. 2 наведено приклад макросу з синтаксичним розширенням, що дозволяє оголосити багатовимірний цикл зі змінними і кількістю ітерацій по кожному виміру, а на рис. 3 дан приклад перетворення програми, яка здійснює цей макрос. Зауважимо, що макрос, який здійснює таке розширення, займає менше 30 рядків вихідного коду і при цьому включає кілька перевірок на помилки. При традиційному підході реалізація такого розширення зажадала б значно більшої кількості коду і, крім того, зажадала б вивчення внутрішньої будови компілятора.

Історично першим з'явився механізм макросів в Ліспі, програма в якому представляється як звичайний список і не вимагає спеціальних конструкцій для роботи з деревом програми, тому саме в цій мові розширюване програмування отримало найбільше поширення. Макроси в Nemerle аналогічні таким в Ліспі. В системі xoc механізм розширень реалізований через розширення граматики і атрибути дерева розбору. Будь-яке розширення обов'язково задає два атрибути: тип синтаксичної конструкції і вираз на базовому мовою, в яке вона перетвориться.

Для розширюваних мов характерна реалізація через макроси багатьох стандартних конструкцій. У мові Nemerle все цикли і умовні оператори, крім match, реалізовані через макроси, а в Ліспі макросами є стандартні конструкції циклів і оголошення функцій.

Як використовувати мови?

Для розширюваної мови програмування можна написати конструкції, що дозволяють найбільш зручним способом програмувати графічні процесори, що і було зроблено в рамках проекту NUDA (Nemerle Unified Device Architecture), метою якого є створення розширень мови Nemerle для програмування GPU. Як інтерфейс взаємодії з GPU і цільової мови для представлення програми використовується OpenCL.

Для початку треба реалізувати виконання на GPU підмножини коду на мові Nemerle. При цьому повинні підтримуватися звичні оператори мови, такі як цикли і розгалуження, а також робота з простими типами даних, структурами і масивами. Код для GPU виноситься в окремі функції, або в ядра NUDA. Кожне ядро ​​відзначається макросом nukernel, який за кодом ядра генерує код на OpenCL і метод-заглушку для виклику ядра на стороні хоста. Перед генерацією коду проводиться розкриття всіх макросів, за винятком макросів циклів і розгалуження. Якщо всередині ядра потрібно викликати функцію, ця функція повинна бути позначена макросом nucode, який згенерує для цієї функції код на мові OpenCL. Виклик ядра здійснюється за допомогою макросу nucall; крім параметрів ядра, йому передається ще й конфігурація решітки потоків, з якої воно запускається.

Найчастіше в якості ядра для GPU використовується тіло циклу, тому хотілося б відразу переносити цикл на GPU. У Nemerle це можна реалізувати - відповідний макрос в NUDA називається nuwork. В якості обов'язкових параметрів він приймає розмір блоку потоків і на підставі поточного контексту і аналізу коду тіла циклу визначає набір змінних, які необхідно передати ядру в якості параметрів. Тіло ядра формується з тіла циклу, обчислення індексів циклу через глобальний номер потоку, а також умови, що дозволяє коректно виконувати цикл навіть у тому випадку, коли глобальний розмір сітки не ділиться на розмір групи потоків. На місце циклу підставляється виклик макросу nucall, який здійснює виклик згенерованого ядра.

В принципі можна дозволити використовувати в GPU-програмах звичайні масиви мови Nemerle, але це призводить до високих накладних витрат - масив потрібно копіювати в пам'ять GPU при кожному виклику ядра, а потім копіювати назад. Тому в програмах для GPU використовуються спеціальні типи-масиви з ледачою синхронізацією між GPU і CPU. Це дозволяє, з одного боку, не захаращувати текст програми командами копіювання даних, а з іншого - уникнути накладних витрат на копіювання даних. Для таких масивів, як і для звичайних масивів в Nemerle, використовується управління пам'яттю за допомогою збірки сміття. Для виділення пам'яті під такі масиви існує макрос nunew, який треба застосувати до звичайного оператору виділення пам'яті.

На рис. 4 зліва приведена звичайна програма складання масивів, а праворуч - аналогічна програма, але виконує обчислення на GPU. Отримати GPU-програми зі звичайної досить просто - потрібно лише застосувати макроси до циклам і операціям виділення пам'яті, при цьому обсяг коду практично не змінюється. Програма, написана з використанням NUDA, займає менше 20 рядків коду. Аналогічна програма, але на чистому мовою Сі і OpenCL займає понад 100 рядків.

Крім макросів, що полегшують роботу з GPU, система розширень NUDA включає також анотації для перетворення циклів. Анотації, по суті, є спеціальними макросами. Наприклад, анотація inline застосовується до циклу з фіксованим числом ітерацій і виконує його повну розгортку. Анотація dmine виконує глибоку розгортку циклу. "Глибока розгортка" означає, що створення декількох копій тіла циклу і перемішування виконуються не тільки для самого перетворюється циклу, але і для вкладених циклів, якщо вони незалежні.

ефект

Для чого програмісту потрібно вчити нову мову і освоювати нові бібліотеки розширюваних мов? Основний відповідь - продуктивність. Маючи алгоритм з паралельних циклів, які працюють з масивами і записаний на мові Nemerle, досить додати кілька анотацій, щоб отримати програму для GPU. При цьому програма буде виконуватися на будь-якому пристрої з підтримкою OpenCL, включаючи графічні процесори nVidia і AMD, а також процесори x86. Щоб домогтися того ж за допомогою тільки технологій OpenCL або CUDA, потрібно затратити значно більше ресурсів, які підуть не тільки на написання вихідного коду, але і на налагодження взаємодії між хостом і GPU.

Інша причина - продуктивність створеного коду. На CUDA або OpenCL перетворення циклів потрібно виконувати вручну, причому окремо для кожної архітектури. Це довгий і багате помилками процес, а отриманий в результаті код мають важко і незручний для супроводу. З NUDA цю роботу можна робити за допомогою анотацій. Наприклад для декількох ядер можна оптімізіроватьаціі операції згортки зображень або множення матриць за допомогою анотацій inline і dmine. Без збільшення розміру вихідного коду вдається домогтися підвищення продуктивності в два-п'ять разів. При цьому, якщо б ті ж самі перетворення виконувалися вручну, це призвело б до збільшення коду в рази, а іноді і на порядок, не кажучи вже про витрати часу на налагодження і підбір оптимальних параметрів розгортки. Наприклад, універсальна анотована програма з семи рядків в NUDA множення транспонованою матриці на матрицю з подвійною точністю виконується на nVidia Tesla C2050 лише на 40% повільніше найшвидшою зараз реалізації (CUBLAS 3.2). Аналогічна програма, написана вручну, зайняла б 70 рядків коду. Природно, для стандартних завдань можна один раз вручну написати код, щоб підвищити продуктивність, але для специфічних завдань зниження трудовитрат і підвищення продуктивності буде дуже до речі. Нарешті, підвищення продуктивності відноситься і до створення самих розширень: створювати їх за допомогою розширюваних мов простіше, ніж за допомогою традиційних інструментів. Вся система NUDA, незважаючи на свою функціональність, займає всього лише 12 тис. Рядків коду, не рахуючи тестів. Це порівняно небагато, наприклад, компілятор мови Nemerle (збірка 9025) займає близько 130 тис. Рядків.

Розширювана мова - це потужний інструмент, і його використання в паралельних обчисленнях знаходиться поки в самому початковому стані. В області розробки паралельних мов програмування є дуже багато цікавих завдань, і будь-яку з них можна вирішити за допомогою поєднання розширень і бібліотек. Можна додати в мову асинхронні блоки коду і паралельні цикли, можна створити зручні конструкції для програмування кластерних систем, такі як розподілені масиви. Нарешті, можна за допомогою розширень побудувати повноцінний мову паралельного програмування, такий як Chapel або X10.

Андрій Адінец([Email protected]) - м.н.с. НИВЦ МГУ (Москва).



1.1 Microsoft Visual Studio C ++

Microsoft Visual Studio - лінійка продуктів компанії Майкрософт, що включають інтегроване середовище розробки програмного забезпечення і ряд інших інструментальних засобів.

Visual Studio включає один або кілька компонентів з наступних:

Visual Basic .NET, а до його появи - Visual Basic;

Visual C ++;

Visual C #.

Багато варіантів поставки також включають:

Microsoft SQL Serverабо MSDE;

Visual Source Safe - файл-серверна система управління версіями;

У минулому, до складу Visual Studio також входили продукти:

Visual InterDev;

Visual J ++;

Visual J #;

Visual FoxPro.

Найбільш значущі версії пакету:

Visual Studio 97 - перша випущена версія Visual Studio, в ній вперше були зібрані разом різні засоби розробки ПЗ. Вона була випущена в двох версіях Professional і Enterprise. Вона включала в себе Visual Basic 5.0, Visual C ++ 5.0, Visual J ++ 1.1, Visual FoxPro 5.0, вперше з'явилося середовище розробки ASP - Visual InterDev. Visual Studio 97 - була першою спробою Microsoft створити єдине середовище для розробки на різних мовах програмування: Visual C ++, Visual J ++, Visual InterDev, і MSDN використовували одну середу, звану Developer Studio. Visual Basic і Visual FoxPro використовували окремі середовища для розробки.

Visual Studio 6.0 - випущена в червні 1998 - остання версія Visual Studio працює на платформі Win9x. Як і раніше популярна серед програмістів, що використовують Visual Basic. Дана версіябула основним середовищем розробки додатків під Windows від Microsoft, до появи платформи.NET.

Visual Studio .NET (кодове ім'я Rainier; внутрішня версія 7.0) - випущена в лютому 2002 (влючает.NET Framework 1.0). Service Pack 1 для Visual Studio .NET (2002) випущений в березні 2005.

Visual Studio .NET 2003 (кодове ім'я Everett; внутрішня версія 7.1) - випущена в квітні 2003 (влючает.NET Framework 1.1). Service Pack 1 для Visual Studio .NET 2003 випущений 13 вересня 2006.

Visual Studio 2005 (кодове ім'я Whidbey; внутрішня версія 8.0) - випущена наприкінці жовтня 2005 (включает.NET Framework 2.0). На початку листопада 2005 також вийшла серія продуктів в редакції Express: Visual C ++ 2005 Express, Visual Basic 2005 Express, Visual C # 2005 Express та ін. 19 квітня 2006 редакція Express стала безкоштовною. Service Pack 1 для VS2005 і всіх Express-редакцій випущено 14 грудня 2006 року. Додатковий патч для SP1, що вирішує проблему сумісності з Windows Vista випущений 3 июня 2007.

Visual Studio 2008 (кодове ім'я Orcas) - випущена 19 листопада 2007, одночасно с.NET Framework 3.5. Націлена на створення додатків для ОС Windows Vista (але підтримує і XP), Office 2007 і веб-додатків. Включає в себе LINQ, нові версії мов C # і Visual Basic. До студії не ввійшов Visual J #. З 28 жовтня 2008 року вперше доступна версія російською мовою.

Продукт-наступник Visual Studio 2008 має кодове ім'я Hawaii. 29 вересня 2008 роки з'явився анонс, який представляє деякі нововведення, які з'являться в Visual Studio 2010 і.NET Framework 4.0.

Розробник додатків, який вирішив скористатися послугами Visual Studio.Net 7.0, отримує в своє розпорядження досить багато нових технологій і інструментів, які дозволяють йому швидко і ефективно створювати звичайні Windows-додатки, які тепер прийнято називати настільними - desktop applications, а також web-додатки і web-послуги (Web Services). Компанія Microsoft додала в арсенал програміста нову мову С # (вимовляється «Сі Шарп»), який, як обіцяють фахівці, здатний у декілька разів прискорити цикл розробки складних проектів.

Головною новиною, яка повинна привернути вашу увагу, є те, що Visual C ++, Visual Basic і С # використовують одну і ту ж середовище розробки IDE (Integrated Development Environment), що дає можливість створювати комплексні проекти з використанням різних мов (mixed-language solutions ). Багатомовному середовищі разработкі.Net (.Net Framework) являє собою суму трьох складових:

загальна для розглянутого набору мов бібліотека часу виконання (Common Language Runtime);

уніфікована бібліотека класів розробника (Unified Programming Classes);

модель розробки web-додатків (Active Server Pages.Net).

Перша складова - бібліотека часу виконання (Common Language Runtime, скорочено CLR), функціонує як на етапі виконання, так і на етапі розробки. Під час виконання коду вона стежить за динамікою багатопотокових додатків, забезпечує взаємозв'язок процесів, підтримує їх безпеку, автоматизує процедури виділення і звільнення пам'яті. На етапі розробки CLR автоматизує типові завдання, які вирішуються програмістом, значно спрощуючи використання нових технологій. Особливо відзначаються переваги, одержувані при створенні компонентів стандарту COM (Component Object Model, скорочено COM - Модель багатокомпонентних об'єктів).

Друга складова (Unified Programming Classes) надає розробнику уніфіковану, об'єктно-орієнтовану, расширяемую бібліотеку класів, яка спільно з іншими ресурсами є частиною програмованого інтерфейсу додатків API (Application Programming Interface). Вона об'єднує елементи MFC (Microsoft Foundation Classes), WFC (Windows Foundation Classes) і частина API, використовувану Visual Basic.

Третя складова (ASP.Net) являє собою надбудову на.д класами, яка дає можливість користуватися об'єктно-орієнтованої технологією при розробці типових елементів HTML-інтерфейсу. Фактично виконувані на стороні сервера, ці елементи проектують функції призначеного для користувача інтерфейсуу вигляді HTML-коду. Однак при розробці сервера є можливість використовувати потужний апарат, що надається об'єктною моделлю програмування. Результат - різке спрощення процесу побудови web-додатків. На додаток до цього ASP.Net підтримує досить нову концепцію або модель розробки програм. Ви, напевно, чули про неї, як про технології «тонкого» клієнта. Основна суть цієї моделі - надання коду користувачеві не у вигляді інсталюється продукту, а у вигляді тимчасової послуги (service).

Код, який створений на основі середовища разработкі.Net Framework, носить назву керованого коду (Managed code)на відміну від звичайного, некерованого коду (Unmanaged code).У режіме.Net компілятори розглянутих мов виробляють метадані (Metadata),які супроводжують сам код. Це означає, що вони генерують додаткову інформацію, що описує типи даних, об'єкти і посилання. Бібліотека часу виконання (Common Language Runtime) використовує метадані для пошуку і завантаження об'єктів, запуску функцій, передачі параметрів, розміщення об'єктів в пам'яті.

Важливою функцією, яку виконує бібліотека часу виконання, є автоматичне звільнення пам'яті, займаної об'єктами, які більш не використовуються. Це нововведення покликане підвищити надійність як окремих компонентів, так і всього розробляється. Дані, час життя яких управляється таким чином, називаються керованими даними (Managed data).Якщо ваш код є керованим (Managed code),то ви можете користуватися керованими даними, але можете і не використовувати їх. Більш того, ви можете і не знати, чи є ваші дані керованими.

Загальна бібліотека часу виконання (CLR) спрощує створення додатків і їх складових, які розроблені на різних мовах і налаштовані (target) на використання CLR. Ці модулі можуть бути інтегровані в одному проекті і взаємодіяти між собою так, як ніби вони були створені на одній мові. Наприклад, ви можете декларувати клас, а потім створити похідний від нього клас вже на іншій мові. Можна і просто користуватися методами класу в рамках модуля, написаного іншою мовою. Така інтеграція стала можливою тому, що компілятори і інструменти різних мов користуються загальною системою типів, визначеної в CLR, а також новими правилами гри, прийнятими при її розробці.

1.2 C ++ Builder

Borland C ++ Builder - випущене недавно компанією Borland засіб швидкої розробки додатків, що дозволяє створювати додатки на мові C ++, використовуючи при цьому середовище розробки і бібліотеку компонентів Delphi. У цій статті розглядається середовище розробки C ++ Builder і основні прийоми, що застосовуються при проектуванні користувальницького інтерфейсу.

C ++ Builder являє собою SDI-додаток, головне вікно якого містить настроюється інструментальну панель (ліворуч) і палітру компонентів (праворуч). Крім цього, за замовчуванням при запуску C ++ Builder з'являються вікно інспектора об'єктів (ліворуч) і форма нового додатка (праворуч). Під вікном форми додатку знаходиться вікно редактора коду.


Рис.1. Середовище розробки C ++ Builder

Форми є основою додатків C ++ Builder. Створення призначеного для користувача інтерфейсу додатку полягає в додаванні у вікно форми елементів об'єктів C ++ Builder, званих компонентами. Компоненти C ++ Builder розташовуються на палітрі компонентів, виконаної у вигляді багатосторінкового блокнота. Важлива особливість C ++ Builder полягає в тому, що він дозволяє створювати власні компоненти і налаштовувати палітру компонентів, а також створювати різні версіїпалітри компонентів для різних проектів.

Компоненти розділяються на видимі (візуальні) і невидимі (невізуальні). Візуальні компоненти з'являються під час виконання точно так же, як і під час проектування. Прикладами є кнопки і редаговані поля. Невізуальні компоненти з'являються під час проектування як піктограми на формі. Вони ніколи не видно під час виконання, але мають певну функціональність (наприклад, забезпечують доступ до даних, викликають стандартні діалоги Windows 95 і ін.)


Мал. 2. Приклад використання видимих ​​і невидимих ​​компонентів

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

Кожен компонент C ++ Builder має три різновиди характеристик: властивості, події і методи.

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

Властивості є атрибутами компонента, що визначають його зовнішній вигляді поведінку. Багато властивостей компонента в колонці властивостей мають значення, яке встановлюється за замовчуванням (наприклад, висота кнопок). Властивості компонента відображаються а сторінці властивостей (Properties). Інспектор об'єктів відображає опубліковані (published) властивості компонентів. Крім published-властивостей, компоненти можуть і найчастіше мають загальні (public), опубліковані властивості, які доступні тільки під час виконання програми. Інспектор об'єктів використовується для установки властивостей під час проектування. Список властивостей розташовується на сторінці властивостей інспектора об'єктів. Можна визначити властивості під час проектування або написати код для видозміни властивостей компонента під час виконання програми.

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

1.3 Delphi

Delphi - середовище розробки, використовує мову програмування Delphi (починаючи з 7 версії мову в середовищі іменується Delphi, раніше - Object Pascal), розроблений фірмою Borland і спочатку реалізований в її пакеті Borland Delphi, від якого і отримав в 2003 році свою нинішню назву. Object Pascal по суті є спадкоємцем мови Pascal з об'єктно-орієнтованими розширеннями.

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

Delphi - це комбінація кількох найважливіших технологій:

    високопродуктивний компілятор в машинний код;

    - об'єктно-орієнтована модель компонент;

    - візуальне (а, отже, і швидкісний) побудова додатків з програмних прототипів;

    - масштабовані засоби для побудови баз даних.

    Borland Delphi 8 Studio дозволяє створювати самі різні програми: Від найпростіших одновіконних додатків до програм управління розподіленими базами. До складу пакету включені різноманітні утиліти, що забезпечують роботу з базами даних, XML-документами, створення довідкової системи, вирішення інших завдань. Відмінною особливістю сьомої версії є підтримка технологіі.NET.

    Основний упор моделі в Delphi робиться на те, щоб максимально продуктивно використовувати код .. Це дозволяє дуже швидко розробляти програми, так як вже існують заздалегідь підготовлені об'єкти. А так же ви можете створювати свої власні об'єкти, без яких-небудь обмежень. Мова Delphi - строго типізований об'єктно-орієнтована мова, в основі якого лежить добре знайомий програмістам Object Pascal.

    У стандартну поставку Delphi входять основні об'єкти з 270 базових класів. На цій мові дуже зручно писати, як додатки до баз даних, так навіть і ігрові програми. Якщо взяти до уваги і зручний інтерфейс для створення графічних оболонок, то можна з упевненістю заявити що мова Delphi - це дуже доступний для розуміння, але в той же час і дуже потужний мову програмування.

    Перша версія повноцінного життєвого розробки Delphi для.NET - Delphi 8. Вона дозволяла писати програми лише для.NET. В даний час, в Delphi 2006, можна писати програми для.NET, використовуючи стандартну бібліотеку классов.NET, VCL для.NET. Середовище також дозволяє создавать.NET-додатки на C # і Win32-додатки на C ++. Delphi 2006 містить функції для написання звичайних додатків з використанням бібліотек VCL і CLX. Delphi 2006 підтримує технологію MDA за допомогою ECO (Enterprise Core Objects) версії 3.0.

    У березні 2006 року компанія Borland прийняла рішення про припинення подальшого вдосконалення інтегрованих середовищ розробки JBuilder, Delphi і C ++ Builder через збитковість цього напрямку. У серпні 2006 року Borland випустив полегшені версію RAD Studio під ім'ям Turbo: Turbo Delphi, Turbo Delphi for .NET, Turbo C #, Turbo C ++. У березні 2008 року було оголошено про припинення розвитку цієї лінійки продуктів.

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

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

    - повна підтримка Юнікоду за умовчанням у всіх частинах мови, VCL і RTL;

    - узагальнені типи, вони ж generics.

    - анонімні методи.

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

    1.Продукція Borland: Borland Delphi, Borland C ++ Builder, Borland JBuilder 1 і 2 версії.

    2.Адміністрірованіе / розробка баз даних: MySQL Tools (Administrator, Query Browser), IBExpert, TOAD

    3.Інженерна ПО: Altium Designer / Protel (проектування електроніки).

    4.Просмотрщікі графіки: FastStone Image Viewer, FuturixImager, Photofiltre.

    5.Відео і аудіо програвачі: KMPlayer (відео- і аудіо програвач), X-Player (аудіопрогравач).

    6.Доставка інформації в Інтернеті: Skype (VoIP і IM), QIP, QIP Infium і R & Q, (Іми), The Bat! і si.Mail (клієнти електронної пошти), PopTray (засіб для перевірки пошти), FeedDemon (перегляд RSS / Atom новинних груп), XanaNews (читання новинних груп), Xnews (читання новинних груп).

    7.Создание музики: FL Studio (раніше FruityLoops).

    8.Разработка програмного забезпечення: Dev-C ++, Dev-PHP, Maguma Open Studio і Open Perl IDE (IDE), DUnit (юніт-тестування), Jedi Code Format (форматування програмного коду), Game Maker (створення ігор) Help & Manual (система авторинга довідки), Inno Setup (движок для інсталяції).

    9.Веб-розробка: Macromedia HomeSite (HTML-редактор), TopStyle Pro (CSS-редактор), Macromedia Captivate (захоплення екрану), Quick Page 2008 (середа розробки Web-сайтів).

    10.Веб-браузери (оболонки для MSIE): Avant Browser, Netcaptor.

    11.Утіліти: Spybot - Search & Destroy, Ad-Aware (анти-шпигунське ПЗ), jv16 PowerTools, FDK (багатофункціональна утиліта для оптимізації системи), Total Commander і Frigate (файлові менеджери), DarkCrypt TC / GUI (програмний комплекс для шифрування), ImageSpyer і StegoTC (програмний стеганографічний комплекс), Copernic Desktop Search, PowerArchiver і PeaZip (архіватори), MCubix (інтелектуальний аналіз даних), Download Master [менеджер закачувань], ACProtect (програма для упаковки і захисту EXE-файлів).

    12.Текстовие редактори: SynEdit, Bred2, KeyNote, cEdit Professional, Programmer's Notepad, UniRed, gleditor.

    13.Редактори довічних файлів (HEX-редактори): Hexapad

    14.Бухучёт і оподаткування: Intuit's Lacerte Professional Tax Software, включаючи всі підсистеми, такі як QuickBooks / EasyACCT Trial Balance Utility, Document Management System і Client Database Repair Utility.

    15.Программи для читання і каталогізації електронного тексту: DarkLib (каталогізатор і мультиформатний букридер), IxReader (букридер).

    2 Порівняльний аналіз можливостей (переваги) недоліки сучасних об'єктно-орієнтованих мов і засобів розробки на їх основі

    2.1 Object Pascal

    Object Pascal - повністю об'єктно-орієнтована діалект мови Pascal, розроблений фірмою Apple Computer спільно з Ніклаус Віртом. У 1986 компанія Borland додала подібне розширення Паскаля в продукт Turbo Pascal for Macintosh; з випуском Turbo Pascal 5.5 розширення стало доступно для DOS. Починаючи з Delphi 7 Borland почала офіційно називати свою мову Delphi. Однак Object Pascal підтримується і розвивається іншими розробниками. Найбільш серйозні реалізації Object Pascal (крім Delphi) - це TMT Pascal, Virtual Pascal і Free Pascal.

    Будь-яка програма в Delphi складається з файлу проекту (файл з розширенням dpr) і одного або декількох модулів (файли з розширенням pas). Кожен з таких файлів описує програмну одиницю Object Pascal.

    У вікні коду жирним шрифтом виділяються так звані зарезервовані слова, а курсивом - коментарі (так само виділяються зарезервовані слова і коментарі в книзі). Як бачимо, текст програми починається зарезервованим словом program і закінчується словом end з точкою за ним. Зауважу, що поєднання end з наступною за нею точкою називається термінатором програмної одиниці: як тільки в тексті програми зустрінеться такий термінатор, компілятор припиняє аналіз програми і ігнорує решту тексту.

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

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

    ($ R * .RES)

    насправді не є коментарем. Цей спеціальним чином написаний фрагмент коду називається директивою компілятора (в нашому випадку - вказівка ​​компілятору на необхідність підключення до програми так званого файлу ресурсів). Директиви починаються символом $, який стоїть відразу за відкриває фігурною дужкою.

    Оскільки мова зайшла про коментарі, зауважу, що в Object Pascal в якості обмежувачів коментаря можуть також використовуватися пари символів (*, *) і //. Дужки (* ... *) використовуються подібно фігурним дужках т. Е. Коментарем вважається знаходиться в них фрагмент тексту, а символи // вказують компілятору, що коментар розташовується за ними і триває до кінця поточного рядка:

    (Це коментар)

    (* Це теж коментар *)

    // Все символи до кінця цього рядка складають коментар

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

    uses

    Forms, Unit1 in 'Unitl.pas' (fmExample);

    вказують, що крім файлу проекту в програмі повинні використовуватися модулі Forms І Unit1. модуль Forms є стандартним (т. е. вже відомим Delphi), а модуль Unit1 - новим, раніше невідомим, і Delphi в цьому випадку вказує також ім'я файлу з текстом модуля (in 'uniti.pas') і ім'я пов'язаного з модулем файлу опису форми (fmExample).

    Власне тіло програми починається зі слова begin (почати) і обмежується термінатором end з крапкою. Тіло складається з декількох операторів мови Object Pascal. У кожному операторі реалізується деяка дія - зміна значення змінної, аналіз результату обчислення, звернення до підпрограми і т. П. У тілі нашої програми - три виконуваних оператора:

    Application.Initialize;

    Application.CreateForm (TfmExample, fmExample);

    Application.Run;

    Кожен з них реалізує звернення до одного з методів об'єкта Application

    Об'єктом називається спеціальним чином оформлений фрагмент програми, що містить в собі дані і підпрограми для їх обробки. Дані називаються полями об'єкта, а підпрограми - його методами. Об'єкт в цілому призначений для вирішення якої-небудь конкретного завдання і сприймається в програмі як неподільне ціле (іншими словами, не можна з об'єкта «висмикнути» окреме поле або метод). Об'єкти відіграють надзвичайно важливу роль в сучасних мовах програмування. Вони придумані для того, щоб збільшити продуктивність праці програміста і одночасно підвищити якість розроблюваних їм програм. Два головних властивості об'єкта - функціональність і неподільність - роблять його самостійної або навіть самодостатньою частиною програми і дозволяють легко переносити об'єкт з однієї програми в іншу. Розробники Delphi придумали для нас з вами сотні об'єктів, які можна розглядати як цеглинки, з яких програміст будує багатоповерховий будинок програми. Такий принцип побудови програм називається об'єктно-орієнтованим програмуванням (ООП). В об'єкті Application зібрані дані і підпрограми, необхідні для нормального функціонування Windows-програми в цілому. Delphi автоматично створює об'єкт-програму Application для кожного нового проекту. рядок

    Application.Initialize;

    означає звернення до методу Initialize об'єкта Application. Прочитавши цей рядок, компілятор створить код, який змусить процесор перейти до виконання деякого фрагмента програми, написаного для нас розробниками Delphi. Після виконання цього фрагмента (програмісти кажуть: після виходу з підпрограми) управління процесором перейде до наступного рядка програми, в якій викликається метод CreateForm і т. Д.

    Модулі - це програмні одиниці, призначені для розміщень фрагментів програм. За допомогою що міститься в них програмного коду реалізується вся поведінкова сторона програми. Будь-модуль має наступну структуру: заголовок секція інтерфейсних оголошень секція реалізації термінатор Тема відкривається зарезервованим словом Unit за яким слідує ім'я модуля і крапка з комою. Секція інтерфейсних оголошень відкривається зарезервованим словом Interface, a секція реалізації - словом implementation. Термінатором модуля, як і термінатором програми, є end з крапкою. Наступний фрагмент програми є синтаксично правильним варіантоммодуля:

    unit Unit1;

    interface

    // Секція інтерфейсних оголошень

    implementation

    // Секція реалізації

    end.

    У секції інтерфейсних оголошень описуються програмні елементи (типи, класи, процедури і функції), які будуть 'видно' іншим програмним модулям, а в секції реалізації розкривається механізм роботи цих елементів. Поділ модуля на дві секції забезпечує зручний механізм обміну алгоритмами між окремими частинами однієї програми. Він також реалізує засіб обміну програмними розробкамиміж окремими програмістами. Отримавши відкомпільований «сторонній» модуль, програміст отримує доступ тільки до його інтерфейсної частини, в якій, як уже говорилося, містяться оголошення елементів. Деталі реалізації оголошених процедур, функцій, класів приховані в секції реалізації і недоступні іншим модулям.

    Класи служать основним інструментом реалізації потужних можливостей Delphi. Клас є зразком, за яким створюються об'єкти, і навпаки, об'єкт - це екземпляр реалізації класу. Зразки для створення елементів програми в Object Pascal називаються типами, таким чином, клас TfmExamplel це тип. Перед його оголошенням варто зарезервоване слово type (тип), який сповіщає компілятор про початок розділу опису типів.

    Стандартний клас TForm реалізує все необхідне для створення і функціонування порожнього Windows-вікна. Клас TfmExamplel породжений від цього класу, про що свідчить рядок

    TfmExample = class (TForm)

    в якій за зарезервованим словом class в дужках вказується ім'я батьківського класу. Термін «породжений» означає, що клас TfmExample успадкував всі можливості батьківського класу TForm і додав до них власні у вигляді додаткових компонентів, які вставлені в форму fmExample. Перелік вставлених нами компонентів і складає значну частину опису класу.

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

    Об'єкт fmExampie формально відноситься до елементів програми, які називаються змінними. Ось чому перед оголошенням об'єкта варто зарезервоване слово var (від англ. Variables - змінні).

    Елементи програми - це мінімальні неподільні її частини, ще несуть в собі певну значимість для компілятора. До елементів відносяться:

    зарезервовані слова;

    ідентифікатори;

    типи;

    константи;

    змінні;

    мітки;

    підпрограми;

    коментарі.

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

    Ідентифікатори - це слова, якими програміст позначає будь-який інший елемент програми, крім зарезервованого слова, ідентифікатора або коментаря. Ідентифікатори в Object Pascal можуть містити лише латинські літери, арабських цифр і знака підкреслення. Ніякі інші символи або спеціальні знаки не можуть входити в ідентифікатор. З цього простого правила слід, що ідентифікатори не можуть складатися з декількох слів (не можна використовувати пробіл) або включати в себе символи кирилиці (українського алфавіту).

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

    Константи визначають області пам'яті, які не можуть змінювати свого значення в ході роботи програми. Як і будь-які інші елементи програми, константи можуть мати свої власні імена. Оголошенню імен констант має передувати зарезервоване слово const (від англ. Constants - константи). Наприклад, можyj визначити константи const

    Kbyte = 1024;

    Mbyte = Kbyte * Kbyte;

    Gbyte = 1024 * Mbyte;

    щоб замість довгих чисел

    1048576 (1024 * 1024) і 1073741824

    (1024 * 1024 * 1024) писати, відповідно, Mbyte і Gbyte. Тип константи визначається способом її записи і легко розпізнається компілятором в тексті програми, тому програміст може не використовувати іменовані константи (т. Е. Не оголошувати їх в програмі явно).

    Змінні пов'язані із змінними областями пам'яті, т. Е. З такими її ділянками, вміст яких буде змінюватися в ході роботи програми. На відміну від констант змінні завжди оголошуються в програмі. Для цього після ідентифікатора змінної ставиться двокрапка і ім'я типу, за образом якого повинна будуватися змінна. Розділу оголошення змінної (змінних) має передувати слово var. наприклад:

    var

    inValue: Integer;

    byValue: Byte;

    Тут ідентифікатор inValue оголошується як змінна типу integer, а ідентифікатор byValue - як змінна типу Byte. Стандартний (т. Е. Заздалегідь визначений в Object Pascal) тип integer визначає четирехбайтний ділянку пам'яті, вміст якого розглядається як ціле число в діапазоні від -2 147 483 648 до +2 147 483 647, а стандартний тип Byte - ділянку пам'яті довжиною 1 байт , в якому розміщується беззнаковое ціле число в діапазоні від 0 до 255 4. Усі наведені відомості щодо діапазону можливих значень і обсягу пам'яті стандартних типів відносяться до Delphi 32. Для 16-розрядної версії 1 ці величини мають інші значення, наприклад, тип Integer в версії 1 займає 2 банта і має діапазон значенні від -32 768 до +32 767.

    Мітки - це імена операторів програми. Мітки використовуються дуже рідко і тільки для того, щоб програміст зміг вказати компілятору, який оператор програми повинен виконуватися наступним. Мітки, як і змінні, завжди оголошуються в програмі. Розділу оголошень міток передує зарезервоване слово label (мітка).

    Підпрограми - це спеціальним чином оформлені фрагменти програми. Чудовою особливістю підпрограм є їх значна незалежність від решти тексту програми. Кажуть, що властивості підпрограми локалізуються в її тілі. Це означає, що, якщо програміст що-небудь змінить в підпрограмі, йому, як правило, не знадобиться в зв'язку з цим змінювати що-небудь поза підпрограми. Таким чином, підпрограми є засобом структурування програм, т. Е. Розчленування програм на ряд багато в чому незалежних фрагментів. Структурування неминуче для великих програмних проектів, тому підпрограми використовуються в Delphi-програмах дуже часто.

    У Object Pascal є два сорти підпрограм: процедури і функції. Функція відрізняється від процедури тільки тим, що її ідентифікатор можна поряд з константами і змінними використовувати у виразах, т. К. Функція має вихідний результат певного типу. Якщо, наприклад, визначена функція

    Function MyFunction: Integer;

    і змінна var

    X: Integer;

    то можливий такий оператор присвоювання:

    Х: = 2 * MyFunction-l;

    Ім'я процедури не можна використовувати в вираженні, т. К. Процедура не має пов'язаного з нею результату:

    Procedure MyProcedure;

    :

    X: = 2 * MyProcedure-l; // Помилка!

    2.2 С ++

    C ++ - розширення мови С - був розроблений співробітником науково-дослідного центру AT & T Bell Laboratories (Нью-Джерсі, США) Бьерном Строустропом в 1979 році. С ++ містить в собі все, що є в С. Але, крім того, він підтримує об'єктно орієнтоване програмування (Object Oriented Programming, OOP). Спочатку С ++ був створений для того, щоб полегшити розробку великих програм. Об'єктно орієнтоване програмування це новий підхід до створення програм.

    За винятком другорядних деталей C ++ є надбезліччю мови програмування C. Крім можливостей, які дає C, C ++ надає гнучкі і ефективні засобивизначення нових типів. Використовуючи визначення нових типів, точно відповідають концепціям додатки, програміст може розділяти розроблювану програму на легко піддаються контролю частини. Такий метод побудови програм часто називають абстракцією даних. Інформація про типи міститься в деяких об'єктах типів, визначених користувачем. Такі об'єкти прості і надійні у використанні в тих ситуаціях, коли їх тип не можна встановити на стадії компіляції. Програмування з застосуванням таких об'єктів часто називають об'єктно-орієнтованим. При правильному використанні цей метод дає більш короткі, простіше розуміються і легше контрольовані програми.

    Ключовим поняттям C ++ є клас. Клас - це тип, який визначається користувачем. Класи забезпечують приховування даних, гарантовану ініціалізацію даних, неявне перетворення типів для типів, визначених користувачем, динамічне завдання типу, контрольоване користувачем управління пам'яттю і механізми перевантаження операцій. C ++ надає набагато кращі, ніж в C, засоби вираження модульності програми і перевірки типів. У мові є також удосконалення, не пов'язані безпосередньо з класами, що включають в себе символічні константи, inline- підстановку функцій, параметри функції за замовчуванням, перевантажені імена функцій, операції керування вільною пам'яттю і контрольний тип. У C ++ збережені можливості мови C по роботі з основними об'єктами апаратного забезпечення (біти, байти, слова, адреси і т.п.). Це дозволяє досить ефективно реалізовувати типи, визначені користувачем.

    C ++ і його стандартні бібліотеки спроектовані так, щоб забезпечувати переносимість. Наявна на поточний момент реалізація мови буде йти в більшості систем, що підтримують C. З C ++ програм можна використовувати C бібліотеки, і з C ++ можна використовувати більшу частину інструментальних засобів, що підтримують програмування на C

    Програма на C ++ зазвичай складається з великого числа вихідних файлів, кожен з яких містить опису типів, функцій, змінних і констант. Щоб ім'я можна було використовувати в різних вихідних файлах для посилання на один і той же об'єкт, воно повинно бути описано як зовнішнє. наприклад:

    extern double sqrt (double);

    extern instream cin;

    Найпростіший спосіб забезпечити узгодженість вихідних файлів - це помістити такі опису в окремі файли, звані заголовними (або хедер) файлами, а потім включити, тобто скопіювати, ці заголовки в усі файли, де потрібні ці описи. Наприклад, якщо опис sqrt зберігається в заголовки для стандартних математичних функцій math.h, і ви хочете витягти квадратний корінь з 4, можна написати:

    #include

    //…

    x = sqrt (4);

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

    У команді включення include ім'я файлу, укладену в кутові дужки, наприклад, відноситься до файлу з такою назвою в стандартному каталозі (часто це / usr / include / CC); на файли, що знаходяться в будь-яких інших місцях посилаються за допомогою імен, взятих в подвійні лапки.

    наприклад:

    #include «math1.h»

    #include «/usr/bs/math2.h»

    включить math1.h з поточного користувальницького каталогу, а math2.h з каталогу / usr / bs.

    Тут наводиться дуже маленький закінчений приклад програми, в якому рядок визначається в одному файлі, а її друк проводиться в іншому. Файл header.h визначає необхідні типи:

    // header.h

    extern char * prog_name;

    extern void f ();

    У файлі main.c знаходиться головна програма:

    // main.c

    #include «header.h»

    char * prog_name = «хороший, але повний»;

    main ()

    {

    f ();

    }

    а файл f.c друкує рядок:

    // f.c

    #include

    #include «header.h»

    void f ()

    {

    cout<< prog_name << «\n»;

    }

    Скомпілювати і запустити програму ви можете наприклад так:

    $ CC main.c f.c -o silly

    $ silly

    хороший, але повний

    $

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

    Бути реалізованим на традиційних ЕОМ;

    Виконуватися в середовищі традиційних операційних систем;

    Бути конкурентоспроможним з традиційними мовами програмування по ефективності при виконанні програм;

    Підходити для більшої частини можливих додатків.

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

    У таблиці 1 показані переваги і недоліки об'єктно-орієнтованих мов.

    Таблиця 1 - Переваги і недоліки об'єктно-орієнтованих мов

    плюси

    мінуси

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

    Необхідно розуміти базові концепції, такі як класи, спадкування та динамічне зв'язування

    Дані та операції разом утворюють певну сутність і вони не «розмазуються» по всій програмі, як це нерідко буває в разі процедурного програмування

    Багаторазове використання вимагає від програміста познайомитися з великими бібліотеками класів

    Локалізація коду і даних покращує наочність і зручність супроводу програмного забезпечення

    Проектування класів - завдання куди складніше, ніж їх використання

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

    Дуже важко вивчати класи, не маючи можливості їх «помацати».

    Дає можливість створювати розгортаються системи

    Неефективність в сенсі розподілу пам'яті

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

    використання об'єктів в якості основних моделей дозволяє користувачеві моделювати складні системи реального світу;

    гнучкість об'єктно-орієнтованих текстів виливається в швидке реагування на зміни вимоги користувача;

    повторне використання стандартних компонентів знижує як час розробок нових прикладних задач, так і обсяг згенерованого коду;

    простота ПО робить його більш гнучким і знижує витрати на експлуатацію.

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

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

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

    Наприклад, в вимірювальній системі, розробленої в Combuston Engineering (Columbus, Ohio), група датчиків відображається класом Sensor, що задає загальні властивості всіх датчиків. Підкласи задаються для кожного типу датчика системи, наприклад, для оптичних або інфрачервоних. Вони успадковують загальні процедури, які застосовуються до всіх датчиків, і містять додаткові процедури, які застосовуються тільки до оптичних або інфрачервоним датчикам.

    Об'єктно-орієнтований підхід зменшує концептуальний розрив між реальним світом м комп'ютерною моделлю. Він дозволяє аналітикам і проектувальникам ясно розуміти структуру системи. Як зазначає один з користувачів: «Я можу уявити свої думки текстом програми в такому вигляді, як я думаю.» Тому сьогодні об'єктно-орієнтовані системи використовуються для моделювання складних фізичних систем на виробництві, в телекомунікаціях, а також у військовому та оборонному комплексах.

    Друга перевага об'єктно-орієнтованих систем обумовлено способом взаємозв'язку об'єктів через повідомлення. У прикладі, наведеному вище, загальні повідомлення типу «почати вимір», можна посилати всіх датчиків системи; кожен з них відповідає специфічним чином. Якщо один з фізичних датчиків застарів, він замінюється. Одночасно змінюється і відповідний клас системи: для нового типу датчика вводиться новий клас, що містить процедури, характерні для нового датчика. Новий клас успадковує інші необхідні йому процедури від суперкласу. При отриманні новим датчиком загального повідомлення він відповідає на нього відповідним чином. Тіло всієї системи і загальні повідомлення залишаються без змін.

    Гнучкість об'єктно-орієнтованих систем є незаперечною перевагою для користувачів в швидко мінливих середовищах, наприклад, в технології програмування. Наприклад, Computer Science Corporation використовував об'єктно-орієнтована мова Smalltalk для розробки продукту Design Generator. Компанія відзначає, що завдяки використанню об'єктно-орієнтованої технології, розробники програм мають можливість швидко реагувати на нові течії ринку в умовах зростаючої конкуренції.

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

    У минулому бібліотеками підпрограм користувалися розробники ПЗ для вирішення стандартних завдань типу математичних обчислень. Об'єктно-орієнтовані системи дають ширший спектр багаторазового використання текстів програм. Один з перших користувачів, Cadre Technologies, підрахував, що обсяг текстів програм для нової прикладної задачі зменшується відносно 5: 1 у разі використання об'єктно-орієнтованих програм.

    Бібліотеки об'єктів також можна купувати від незалежних постачальників. В даний час найбільш активно купують такі бібліотеки класів для створення користувацьких інтерфейсів з піктограмами. Розробка і написання таких інтерфейсів з нуля - завдання нелегке. Компанії типу Apple і Whitewater Group поставляють інструментарії для швидкої побудови таких інтерфейсів на основі декількох базових класів типу Window, Menu, ScrollBar і Icon. Користувачі можуть використовувати як ці класи, так і їх підкласи, що додають в інтерфейс, наприклад, спеціальні піктограми.

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

    Відомо, що витрати на супровід складають до 80% вартості життєвого циклу системи програмування. Розробники великих складних систем, часто стикаються з необхідністю їх модифікації, схиляються до використання ООС як одному із способів зниження витрат на супровід і підвищення надійності їх продуктів. Наприклад, Wild Leitz (Торонто, Канада) використовував об'єктно-орієнтованих мову Objective-C для розробки географічної інформаційної системи. Компанія порахувала вихідні тексти на цій мові легшими в супроводі, оскільки вони коротші, є ізольованими «речами в собі», що знижує вплив зміни одного модуля на решту системи.

    Правильно розроблені програми повинні не тільки задовольняти своїм функціональним вимогам, а й володіти такими властивостями, як:

    повторна використовуванність;

    розширюваність;

    стійкість до неправильних даних;

    системність.

    Правильний об'єктно-орієнтована стиль програмування забезпечує наявність цих властивостей. Пояснимо це на прикладі властивості системності.

    Програма має властивість системності, якщо вона може бути застосована в якості узагальненого оператора при «великоблочному програмуванні». Великоблочне програмування - це систематичне використання раніше розроблених великих програмних одиниць (таких, як класи, підсистеми, або модулі) при розробці нових програмних систем.

    Обмеження сучасних об'єктно-орієнтованих систем (ООС) в більшості своїй пов'язані з їх недосконалістю. Подолання цих обмежень - це виклик продавцям ПО і можливість появи на ринку нових постачальників. У цьому розділі обговорюються проблеми розвитку об'єктно орієнтованих систем і дається тимчасова шкала подолання їх слабкостей.

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

    обмежений доступ на ряді стандартних платформ;

    необхідність інтеграції з існуючими системами і базами даних;

    нестача ПО для програмування широкомасштабних систем.

    Успіх об'єктно-орієнтованої технології обумовлений проникненням в основне русло комп'ютерної індустрії. Щоб це сталося, слід впоратися з вищезгаданими проблемами. Але це досить дороге і довгий за часом заняття. Частина перших постачальників об'єктно-орієнтованих систем додали собі проблем вибором в якості основи своїх продуктів нестандартних запатентованих мов. Отримавши великі капіталовкладення, такі компанії зіткнуться з великими проблемами по боротьбі за заняття своєї ніші на ринку.

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

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

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

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

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


    Мал. 3. Спрощена схема організації багатомодульною системи роботи з геометричними об'єктами

    Багатомодульна структура системи має наступні переваги.

    Можливість розширення. Додавання нових класів та їх взаємодій здійснюється не переписуванням уже наявного коду, а розробкою нових модулів.

    Можливість повторного використання коду. Модуль ГеометріческіеОб'екти можна включити в будь-який додаток, якщо там є і ДемонстраціонниеОкна - можна включити і Візуалізацію.

    Можливість поетапної реалізації програм. Так, перший реліз може включати ГеометріческіеОб'екти, ДемонстраціонниеОкна і Візуалізацію, у другому додадуться Обчислення і т.д ..

    Можливість застосування конвеєрного методу виробництва, «розпаралелювання» процесу розробки ПО.

    Є кілька причин, які не дозволяють вважати С ++ динамічним мовою програмування.

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

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

    Статичний контроль типів.

    При розборі вираження p-> f () компілятор «повинен бути впевнений», що об'єкт, на який посилається вказівник p, дійсно містить метод f (). Навіть шаблони (template) не завжди допомагають створити код, що обробляє різнотипні об'єкти: на етапі компіляції і збірки необхідно знати, які з них потрібно інсталювати, який застосовується в кожному конкретному випадку. Спробуйте-но виконати завдання з лістингу 1, не змінюючи класів і не використовуючи конструкції if-then-else + dynamic_cast.

    /*

    Лістинг 1. Статичний контроль типів обмежує можливості використання поліморфізму

    */

    class baseclass ();

    class A: public baseclass

    {

    public:

    A ();

    // клас A містить метод void f ()

    virtual void f ();

    };

    class B: public baseclass

    {

    public:

    B ();

    // клас B не містить метод void f ()

    };

    class C: public baseclass (...);

    /*

    потрібно написати

    (Не змінюючи вищеописаних класів і не використовуючи if-then-else + dynamic_cast):

    */

    bool CallF (baseclass * p)

    {

    /*

    якщо визначено p-> f (), викликати цю функцію і повернути true,

    інакше - повернути false

    */

    }

    C ++ пропонує три способи реалізувати функцію CallF. Перший (найбільш вживаний) - додати в baseclass метод bool f (), в тих підкласах, де він має сенс - виконувати необхідні дії і повертати true, в інших - повертати false. Другий - створити клас baseclass_f: public baseclass, успадкувати від нього всі класи, які містять f (), і використовувати dynamic_cast< baseclass_f *>. Третій - горезвісне if-then-else + dynamic_cast в CallF. Перший варіант призводить до засмічення базового класу, до того ж baseclass може бути недоступний (наприклад, міститися в «закритому» модулі). Другий вимагає перепроектувати всю систему об'єктів. А якщо потім буде потрібно написати CallG, CallH? Звичайно, С ++ підтримує множинне успадкування, але ієрархія класів при такому підході сильно ускладниться, та й не раз міняти її «туди-сюди». Недоліки третього методу обговорювалися неодноразово: функцію CallF доведеться переписувати всякий раз, коли з'являється новий клас, що підтримує f ().

    Неможливість run-time міняти окремі об'єкти класів. Здавалося б, якщо об'єкти належать одному класу, то і вести себе вони повинні однаково. Якщо існуючий клас чимось не влаштовує - «Спадщина» і міняй там що хочеш. Однак можливість динамічно змінювати окремі об'єкти класу часто виявляється дуже корисною. Звичайно, спадкування є гнучким і зручним способом зміни функціональності класів. Але після того як об'єкт створений, змінити його методи, додати нові методи і змінні вже не можна. Для цього необхідно видалити існуючий об'єкт, а потім створити новий. При цьому треба подбати про оновлення всіх покажчиків на даний об'єкт, збереженні його властивостей. Крім того, якщо кожен раз створювати нові класи, їх кількість може перейти всі розумні межі.

    висновок

    Найбільш поширеним об'єктно-орієнтованою мовою програмування безумовно є C ++. Вільно розповсюджувані комерційні системи програмування C ++ існують практично на будь-якій платформі. Широко відома вільно поширювана система програмування G ++, яка дає можливість усім бажаючим розібрати досить добре і детально прокоментований вихідний текст одного зі зразкових компіляторів мови C ++. Основні ідеї об'єктно-орієнтованого підходу спираються на наступні положення: програма являє собою модель деякого реального процесу, частини реального світу; модель реального світу або його частини може бути описана як сукупність взаємодіючих між собою об'єктів; об'єкт описується набором параметрів, значення яких визначають стан об'єкта, і набором операцій (дій), які може виконувати об'єкт; взаємодія між об'єктами здійснюється посилкою спеціальних повідомлень від одного об'єкта до іншого. Повідомлення, отримане об'єктом, може вимагати виконання певних дій, наприклад, зміни стану об'єкта; Об'єкти, описані одним і тим же набором параметрів і здатні виконувати один і той же набір дій являють собою клас однотипних об'єктів.

    З точки зору мови програмування клас об'єктів можна розглядати як тип даного, а окремий об'єкт - як дане цього типу. Визначення програмістом власних класів об'єктів для конкретного набору задач повинно дозволити описувати окремі завдання в термінах самого класу завдань (при відповідному виборі імен типів та імен об'єктів, їх параметрів і виконуваних дій).

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

    Класи об'єктів часто зручно будувати так, щоб вони утворювали ієрархічну структуру.

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

    Досвід програмування показує, що будь-який методичний підхід в технології програмування не повинен застосовуватися сліпо з ігноруванням інших підходів. Це відноситься і до об'єктно-орієнтованого підходу. Існує ряд типових проблем, для яких його корисність найбільш очевидна, до таких проблем відносяться, зокрема, завдання імітаційного моделювання, програмування діалогів з користувачем. Існують і завдання, в яких застосування об'єктного підходу ні до чого, крім зайвих витрат праці, не приведе. У зв'язку з цим найбільшого поширення набули об'єктно-орієнтовані мови програмування, що дозволяють поєднувати об'єктний підхід з іншими методологіями. У деяких мовах і системах програмування застосування об'єктного підходу обмежується засобами інтерфейсу з користувачем (наприклад, Visual FoxPro ранніх версій).

    Список використаної літератури

  1. Архангельський А. Програмування в Delphi для Windows. Версії 2006, 2007, Turbo Delphi + CD. -М .: Біном. Лабораторія Знання, 2006..

    Архангельський А. Мова C ++ в С ++ Builder. Довідкове і методичне посібник. - М .: Біном. Лабораторія Знання, 2008.

    Бакнелл Дж. Фундаментальні алгоритми та структури даних в Delphi. Бібліотека программіста.-СПБ .: Пітер, DiaSof, 2006.

    Галісеев Г.В. Компоненти в Delphi 7. Професійна работа.-М .: Вільямс, 2006.

  2. Гамма Е. Прийоми об'єктно-орієнтованого проектування. Патерни проектування. С.Петербург: Питер, 2006.
    Вирішіть задачу на основі тексту Законів Хаммурапі Удосконалення обліку основних засобів сільськогосподарського підприємства Які терміни проведення інвентаризації основних засобів?

    2014-05-28