
- •Лекція 3. Розвиток мов та підходів до програмування. Технологія програмування. Види і типи сучасних мов програмування.
- •1. Розвиток мов та підходів до програмування.
- •2. Технологія структурного програмування .
- •2.1. Поняття структурного програмування
- •2.2. Методи структурного програмування
- •3. Технологія об'єктно-орієнтованого програмування
- •3.1. Об'єктно-орієнтований підхід
- •3.2. Основні поняття об'єктно-орієнтованого програмування
- •3.3. Принципи об'єктно-орієнтованого програмування
- •4. Кросплатформність
- •5. Види і типи сучасних мов програмування
- •5.1. Універсальні й спеціалізовані мови
- •5.2. Класифікація мов програмування за типами завдань
4. Кросплатформність
Кросплатформність - здатність програмного забезпечення працювати більш ніж на одній платформі або операційній системі.
Звичайно, буде неправильним сказати, що кожен додаток має бути сумісним з великою кількістю різних платформ. Тим не менш, кросплатформні програми існують і продовжують з'являтися. Вже одне це говорить про те, що ринок має потребу в подібному ПЗ. Спробуємо розібратися детальніше в деяких особливостях, пов'язаних з його проектуванням, а також у принциповому питанні, чи має взагалі сенс страждати над кросплатформністю розробки.
Отже, які переваги кросплатформних додатків перед тими, які можуть запускатися тільки на одній платформі? По-перше, програми, які володіють такою корисною властивістю, як кросплатформність, більш стійкі на ринку програмного забезпечення. Зараз набирають популярності програми, які вміють працювати під основними "китами" світу операційних систем: Windows, Linux, FreeBSD і MacOS. Серед програм для кінцевих користувачів на вершинах хіт-парадів софта стоять Mozilla Firefox, OpenOffice.org, Opera тощо. Список великий, і кожного дня він поповнюється новими учасниками. У світлі цих фактів розробникам, які дивляться в майбутнє і не бачать його без своїх, безсумнівно, дуже потрібних і якісних продуктів, варто подумати про кросплатформність. Це більш ніж актуально для того, хто розробляє програмне забезпечення для станцій-серверів або корпоративних користувачів. Що стосується корпоративної сфери, тут дуже популярні два слова: Java і .NET. Як відомо, це архітектури, які за своєю природою спираються на поняття кросплатформності. Звичайно, ніхто не забороняє створювати корпоративні додатки під одну платформу, але вартість їх, як правило, обґрунтовано нижча [45].
Загалом-то, щоб дізнатися, чи має сенс робити ту або іншу розробку кросплатформною, простіше за все подивитися на конкурентів. У них є кросплатформна версія програми - значить, вам теж є про що задуматися. Якщо ж конкурентів у вас немає, то потрібно оцінити передбачувану кількість користувачів вашої програми для кожної з платформ - це називається маркетинговими дослідженнями. Якщо серед платформ немає явного лідера за кількістю користувачів, то має сенс робити програму кросплатформною.
Найважливішим принципом кросплатформних додатків є чіткий поділ інтерфейсу програми і її "движка". Приклад: Web-сервер Apache реалізований на платформах Unіx, Windows, OS/2 і BeOS. Оскільки мережеві API цих систем розрізняються досить сильно, код ядра Apache, який працює безпосередньо з мережевими інтерфейсами, не може бути однаковим для всіх цих платформ. Проте, ядро Apache відокремлено від елементів, що відповідають за різні функції сервера. Більша частина функціональності Apache реалізована в модулях Apache. Модулі Apache використовують інтерфейс програмування, наданий сервером, а не мережевий інтерфейс системи. Оскільки Apache API однаковий на всіх платформах, написання кросплатформних модулів для Apache стає досить простою справою. У всякому разі, програмісту Apache не потрібно піклуватися про реалізацію мережевого інтерфейсу. Можливість нарощування функціональності Apache за допомогою додаткових кросплатформних модулів є, безумовно, однією з причин популярності цього сервера.
Другим правилом кросплатформності є максимально широке використання стандартів. Стандарти - на те й стандарти, щоб розробники систем програмування прагнули їм відповідати. Розглянемо як приклад компілятори мов C/ C++ (ці мови давно пройшли процес стандартизації).
Практично всі компілятори C/ C++ розширюють стандартний синтаксис. Теж саме стосується і стандартних бібліотек. Найчастіше розширення, що додаються конкретними системами розробки стосуються підвищення зручності, а не ефективності тому їх використання можна успішно уникнути без втрати продуктивності програми [4].
Чи не найбільш важливим моментом є вибір мови програмування і, відповідно, сумісних з ним технологій і стандартів.
Кросплатформними можна назвати більшість сучасних високорівневих мов програмування. Наприклад, C, С++ і Free Pascal - кросплатформні мови на рівні компіляції, тобто для цих мов є компілятори під різні платформи. Java і C# - кросплатформні мови на рівні виконання, тобто їх виконувані файли можна запускати на різних платформах без попередньої перекомпіляції. PHP, ActionScript, Perl, Python, Tcl і Ruby - кросплатформні мови, що інтерпретуються, їх інтерпретатори існують для багатьох платформ.
С - стандартизована процедурна мова програмування. С створена для використання в операційній системі UNIX. З тих пір вона була портована на інші операційні системи і стала однією з найбільш використовуваних мов програмування. С цінують за її ефективність. Вона є найпопулярнішою мовою для створення системного програмного забезпечення. Її також часто використовують для створення прикладних програм. Незважаючи на те, що С не розроблялася для новачків, вона активно використовується для навчання програмуванню. Надалі синтаксис мови С став основою для багатьох інших мов.
C++ - компільована статично типізована мова програмування загального призначення. Підтримуючи різні парадигми програмування, поєднує властивості як високорівневих, так і низькорівневих мов. У порівнянні з його попередником - мовою C - найбільшу увагу приділено підтримці об'єктно-орієнтованого і узагальненого програмування. Назва C++ походить від мови C, в якій унарний оператор ++ позначає інкремент змінної.
Free Pascal (повна назва Free Pascal Compiler, часто використовується скорочення FPC) - вільно розповсюджуваний компілятор мови програмування Pascal.
Java - об'єктно-орієнтована мова програмування, розроблена компанією Sun Microsystems. Програми Java зазвичай компілюються в спеціальний байт-код, тому вони можуть працювати на будь-який віртуальній Java-машині (JVM) незалежно від комп'ютерної архітектури.
C# відноситься до сім'ї мов із C-подібним синтаксисом, з них її синтаксис найбільш близький до C++ і Java. Мова має статичну типізацію, підтримує поліморфізм, перевантаження операторів (у тому числі операторів явного і неявного приведення типу), делегати, атрибути, події, властивості, узагальнені типи і методи, ітератори, анонімні функції з підтримкою замикань, винятки, коментарі у форматі XML .
PHP - скриптова мова програмування загального призначення, інтенсивно застосовується для розробки веб-додатків. У даний час підтримується переважною більшістю хостинг-провайдерів і є однією з лідерів серед мов програмування, що застосовуються для створення динамічних веб-сайтів.
ActionScript - об'єктно-орієнтована мова програмування, яка додає інтерактивність, обробку даних і багато чого іншого до вмісту Flash-додатків. ActionScript виконується віртуальною машиною (ActionScript Virtual Machine), яка є складовою частиною Flash Player. ActionScript компілюється в байт-код, який включено до SWF-файлу.
Perl - високорівнева динамічна мова програмування загального призначення, що інтерпретується. Головною особливістю мови вважаються її можливості для роботи з текстом, у тому числі реалізовані за допомогою регулярних виразів. Perl успадкував багато властивостей від мов Си, shell script, awk.
Python - високорівнева мова програмування загального призначення з акцентом на продуктивність розробника і читаність коду. Синтаксис ядра Python мінімалістичний. У той же час стандартна бібліотека включає великий обсяг корисних функцій.
Ruby - динамічна, рефлективна, інтерпретована високорівнева мова програмування для швидкого і зручного об'єктно-орієнтованого програмування. Мова має незалежну від операційної системи реалізацію багатопоточності, жорсткою динамічною типізацією, сміттярем і багатьма іншими можливостями. Ruby близька за особливостями синтаксису до мов Perl і Eiffel, за об'єктно-орієнтованим підходом - до Smalltalk. Також деякі риси мови взяті з Python, Lisp, Dylan та CLU.
Звернемося до трійки лідерів. Кожен з них, природно, має переваги і недоліки. C++ дозволяє створювати дуже компактні та швидкі рішення, однак вимагає найбільших витрат на розробку, оскільки рішення для кожної платформи доведеться писати окремо. Наявність величезної кількості бібліотек і високопродуктивних компіляторів (в тому числі й безкоштовних) - звичайно, плюс, але навряд чи він переважує мінуси. Java у цьому плані програє у швидкості роботи програм за рахунок своєї віртуальної машини, зате має величезну фору в тому, що для забезпечення сумісності з різними платформами з боку розробника кінцевого продукту потрібні мінімальні рухи тіла. Кількість різних бібліотек для цієї мови вже плавно наблизилося до числа аналогічних для C++, так що в цьому питанні вони практично на одному рівні. C#, в принципі, теж схожа на Java - для роботи програм, написаних цією мовою, також потрібна віртуальна машина [45].
Сучасні мови програмування мають розвинені засоби інтероперабельності, що дозволяють використовувати в одній програмі модулі, написані різними мовами. З одного боку, розробка різних частин проекту різними мовами ускладнює проект, з іншого - розширює інструментарій розробника. У складному проекті можна використовувати різні мови для написання різних додатків проекту.
Приклад: додатки СУБД Oracle, що володіють графічним інтерфейсом, написані на Java (цей приклад також можна розглядати як позитивний досвід використання Java), що дозволяє розробникам Oracle не тільки переносити код графічних додатків з однієї платформи на іншу, але і забезпечити єдність користувальницького інтерфейсу на всіх підтримуваних платформах.
Часто вибір певного засобу розробки може мотивуватися спеціальними можливостями, доступними в рамках цього засобу. Приклад: Borland Delphi/ Borland C++ Builder/ Borland Kylix
Інтегровані середовища розробки Borland традиційно відрізняються потужними засобами програмування додатків баз даних. Однією з ключових ідей компонентів Borland, призначених для програмування додатків БД, є реалізація єдиного механізму доступу до різних СУБД. Єдиний механізм доступу до СУБД полегшує розробку гнучких додатків баз даних, здатних інтегруватися з різними СУБД, а наявність подібного механізму в Kylix дозволяє переносити такі додатки між платформами Linux і Windows з мінімальними витратами на адаптацію [4].
У принципі, явного лідера немає, тому при виборі мови потрібно враховувати, що вам важливіше - швидкість розробки або швидкість роботи готового додатку. І якщо критичніше перше, потрібно подумати, яку мову ви чи ваші програмісти знають краще або засвоять швидше. Можна, звичайно, зробити і багатомовний проект, але поєднувати такі мови, як Java, C++ і C# - технічно не найпростіше завдання. Хоча в деяких програмах воно і вирішене, варто взяти до уваги, що такий підхід збільшує витрати на розробку.
Ще один важливий фактор - кількість підтримуваних платформ. Для Java і C# це не особливо критично, а ось на C++ весь платформно-залежний код потрібно буде писати окремо для кожної ОС. Відповідно, чим менше підтримуваних ОС, тим менший код. Для користувачів операційних систем на кшталт OS/2 або QNX намагатися навряд чи має сенс, оскільки їх мало. Аналогічно, якщо ваш продукт має чисто серверну спрямованість, очевидно, навряд чи варто його портувати під настільні системи сімейства Windows [45].
Вибір бібліотек.
Використання бібліотек сторонніх розробників є частиною концепції повторного використання коду і тому повинне всіляко вітатися. Використання сторонніх бібліотек дозволяє заощадити час і сили на розробці і, що не менш суттєво, на тестуванні й налагодженні. Якщо у вашого проекту немає власної широкої бази бета-тестерів, то можна бути впевненим, що будь-яка популярна бібліотека, написана стороннім розробником, пройшла більш ретельне і масове тестування, ніж ваш власний код.
Вибір засобів створення графічного інтерфейсу.
Підсистеми графічного виводу є, напевно, найбільш несумісними елементами різних операційних систем. Три основних інтерфейси, X-Window, Win32 GDI і Cocoa (інтерфейс MacOS) нічого не хочуть знати один про одного. Проблему сумісності вирішують різні крос-платформні бібліотеки, які, крім того, реалізують набори елементів інтерфейсу високого рівня (віджетів). Оскільки розроблювати графічний інтерфейс користувача за допомогою високорівневих бібліотек простіше і зручніше, ніж за допомогою графічного інтерфейсу операційної системи, ви можете використовувати їх навіть в програмах не розрахованих на кросплатформне перенесення.
Що робити, якщо відповідну кросплатформну бібліотеку віджетів знайти так і не вдалося? Можна спробувати інші варіанти. До складу середовища виконання Java входять два набори віджетів - Swing та AWT, які є фактичним стандартом, і підтримувані майже всіма Java-runtime. Якщо розроблюваний пакет складається з багатьох модулів і значна частина його роботи відбувається у фоновому режимі, можна реалізувати графічні засоби взаємодії у вигляді окремих додатків, написаних іншою мовою програмування (наприклад, Java, як це робить Oracle) [4].