КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Кросплатформність
Лекція 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].
Дата добавления: 2014-01-04; Просмотров: 2590; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |