Java залишається провідною об'єктної технологією


Релігійні війни між прихильниками популярних об'єктно-орієнтованих мов C + +, C # і Java не припиняться, напевно, ніколи. Більш-менш об'єктивну картину затребуваності цих мов можна отримати, наприклад, в сервісі Google трендів, що відстежує кількість запитів відповідної тематики. Інтерес до C #, плавно возраставший протягом двох-трьох років, вирівнявся і практично зрівнявся з інтересом до C + +, який вже давно залишається стабільним. Запитів "Java" майже в чотири рази більше, ніж "C + +", – тут, можливо, позначається той факт, що Java не тільки мову, але і платформа. Найбільше звернень до теми Java з Індії як однієї з провідних офшорних держав – за кількістю їх практично стільки ж, скільки і з усіх інших країн, разом узятих (Росія в цьому переліку на другому місці, далі йдуть Тайвань, Сінгапур і Китай). По інтересу до C + + ситуація помітно рівніше, однак порядок країн, що виявляють до цієї теми інтерес, зберігається таким же.


Java як система програмування залишається сьогодні однією з ключових технологій розробки, і якісь її серйозні конкуренти в найближчі роки навряд чи з'являться. Побічно це підтверджує тематика осінньої міжнародній конференції з об'єктно-орієнтованому програмуванню OOPSLA "2008, що відбулася в місті Нешвілл (шт. Теннессі, США). Абсолютна більшість виступів було пов'язано з платформою Java і вільної середовищем розробки Eclipse.


Методологічні аспекти


Як відомо, оптимізацією коду можна заощадити 5% ресурсів, оптимізацією алгоритму – 50%, а оптимізацією архітектури – 500%. Але й відповідні технології ефективного проектування зазвичай складні для освоєння. Кожен колектив самостійно вирішує, що краще – ризикнути і витратити час на вивчення передових рішень, отримавши при цьому шанс на різке збільшення продуктивності, або ж продовжувати експлуатувати традиційні емпіричні підходи, які хоч і неквапливі, але як мінімум добре виміряні і передбачені.


Ребекка Вірфс-Брок, консультант з проектування складних об'єктних архітектур, розповіла про методологію Responsibility-Driven Design (проектування, кероване здібностями: об'єкти трактуються не як дані і код, а як ролі і здібності). Традиційне навчання об'єктному побудови системи зазвичай засноване на практиці і прикладах, але погано пояснює, які конкретно чинники визначають якість мислення проектувальника і за якими принципами таких фахівців треба навчати. Ребекка рекомендує акцентуватися в ході навчання на вмінні максимально абстрагуватися від технічних деталей, прагнути думати про об'єктах системи на самому високому рівні, намагатися розділяти особливості реалізації від загальної моделі системи, а будувати таку модель на концепції розподіленого поведінки об'єктів.


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


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


Національний університет Сінгапуру кілька років удосконалює розширення XVCL для середовища Eclipse, що дозволяє описувати групи схожих за структурою програм, представляючи їх загальним шаблоном. Декомпозиція коду на мета-рівні здійснюється за допомогою мови XML-based Variant Configuration Language, який задає текстовий опис взаємних перетворень програм в наочному вигляді, звичному програмісту. Технологія XVCL корисна в проектах з великим об'ємом повторної реалізації подібних вимог. Вона також дозволяє керувати щоденними і довгостроковими змінами проекту, підтримує повторне використання моделей, коду та документації, дає можливість створювати шаблони документування і швидко будувати прототипи на основі існуючих напрацювань.


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


Технологія мейнстріму


Безліч доповідей було присвячено конкретним програмістських проектам, найчастіше всілякому інструментарію, що спрощує або полегшує кодування і налагодження Java-додатків в Eclipse. Так, проект бразильських розробників FLiP містить вільно підключаються до середовища Eclipse розширення: інструмент рефакторінгу FLiPEx, модуль FLiPG, оновлюючий модель системи після рефакторінгу коду, і FLiPC, призначений для побудови фінальної версії продукту. Ще одне Eclipse-розширення, eMoose, створене в університеті Карнегі – Меллона, дозволяє відстежувати обробку об'єктів в пам'яті, забезпечувати їх власним описом і контролювати виклики зовнішніх і внутрішніх інтерфейсів.


Цілий комплект підключаються Eclipse-модулів запропонований Даніелем Саділеком, співробітником Берлінського університету ім. А. Гумбольта. EProvide дозволяє задавати семантику і метамоделі предметно-орієнтованих мов за допомогою QVT, Java, Prolog або Scheme. Система ESemantics на основі цих моделей формує працездатні інтерпретатори з підтримкою налагодження, а також транслятори – наприклад, в код мовою Scheme. Перетворення моделей по набору правил можливо за допомогою Пролог-програм і модуля EPromote. А готовий і загальнодоступний предметно-орієнтована мова WebDSL для створення складних веб-додатків, активно працюють з даними, запропонували дослідники з голландського технологічного інституту міста Дельфт. Цей декларативний мова дозволяє замінити значні обсяги низькорівневого Java-коду, що формується вручну, готовими моделями робочих процесів і контролю доступу, а програма на ньому транслюється в JSF-сторінки.


Вільна система Checker Framework Массачусетського технологічного інституту реалізує побажання JSR 308 до прийдешньої версії Java 7, припускає анотації до типів даних. З її допомогою можна створювати власні інформативні типи і автоматично попереджати типові помилки – наприклад, звернення з нульовим вказівниками.


У січні 2009-го обіцяно вихідні тексти Java-проекту Melt Техаського університету м. Остін. Melt уточнює реалізацію концепції керованого коду, безпечних типів і збірки сміття – ці принципи зазвичай декларуються творцями віртуальних платформ, проте далеко не завжди ефективно реалізуються. Так, спроби повторного звільнення об'єктів часом викликають помилки часу виконання; витік пам'яті і висячі посилання призводять до зависання системи і т. д. Melt старанно ідентифікує невикористовувані об'єкти та вивантажує їх на диск. Якщо згодом доступ до них якимось хитрим способом відновлюється, вони знову акуратно поміщаються в оперативну пам'ять.


Експериментальна середовище розробки VM Maxine дослідницького підрозділу Sun доступна під ліцензією GPLv2. Вона являє собою віртуальну Java-машину (ВМ), написану на Java, і містить потужний інструмент Maxine Inspector, що спрощує налагодження складних і системних проектів. Цей інструмент, зокрема, дозволяє переглядати об'єкти в динаміці і вести багаторівневу налагодження з прив'язкою до внутрішніх структурам даних і механізмам ВМ. Корисна Maxine і розробникам ВМ для конкретних платформ.


Оригінальну ВМ запропонував і науковий центр IBM ім. Т. Дж. Уотсона. Помилки у вже встановленому ПО часом виявляються лише на етапі його промислової експлуатації. При цьому точно зімітувати ситуацію, в якій виникає помилка, буває вкрай складно. Але без цього і усунути її навряд чи можливо. Дана проблема зазвичай вирішується веденням протоколів роботи, але вони дають досить приблизне уявлення про місцезнаходження помилки у вихідних текстах. Віртуальна машина контролю якості IBM Quality Virtual Machine (QVM) поставляється замовникам разом з продуктом і здійснює безперервний моніторинг роботи ПЗ. Вона дозволяє настроювати ступінь детальності контролю – наприклад, відслідковувати перетворення типів, різні переривання, інтенсивність використання ресурсів і т. д. Таким чином вдається вибудовувати баланс між виділенням додаткових потужностей на роботу QVM і оперативним виявленням і усуненням помилок. Ця ВМ реалізована у вигляді надбудови над IBM J9 Java VM.


Не Java єдиної …


Технології ООП, альтернативні Java, обговорювалися лише в одиничних виступах. Найбільш солідно виглядали тут рішення Microsoft – точніше, її наукового підрозділу Microsoft Research. Доповідачі повідомили про вихід у жовтні набору засобів аналізу коду. NET – Managed Contract Tools, до якого включена, зокрема, утиліта Clousot. Вона виконує умовну інтерпретацію коду, виявляючи точки некоректної роботи з пам'яттю в небезпечних ділянках коду. Використовуючи її рекомендації, цей код можна зробити гарантовано захищеним від відповідних помилок. За допомогою Clousot були протестовані всі системні збірки . NET, і результат виявився не менш успішний, ніж при експлуатації "важких" і дорогих рішень. Набір поширюється як доповнення до середовища Visual Studio 2008.


Ще одна новинка Microsoft, стосується, звичайно, мови Basic. Вона являє собою розширення Visual Basic 9.0 конструкціями асинхронного паралельного виконання і називається Concurrent Basic (CB). Цей діалект, по-перше, націлений на підтримку багатоядерних апаратних архітектур, а по-друге, спрощує створення насичених веб-додатків, що вибудовуються в клієнт-серверних архітектур з великим часом відгуку сервера. При цьому авторам CB вдалося зберегти подієво-орієнтовану схему формування вихідного коду, звичну програмістам, що працюють з Visual Basic.


Суперможливості ООП


Одним з найбільш цікавих у плані перспектив об'єктно-орієнтованих мов стало робоче обговорення групи smalltalk-superpowers.org. Її учасники обговорювали обоюдогострі мета-можливості найбільш потужних мов ООП зразок Smalltalk, які дозволяють, наприклад, змінювати структуру об'єктів під час роботи програми або динамічно додавати метод, протоколюються звернення до масиву, – відповідний код зайняв всього 55 рядків на мові Ruby. Подібні методи дають розробнику розвинені інструменти оптимізації алгоритмів та коду, але при цьому збільшують ризик внесення складно виявляються помилок. Для масового виробництва ПО вони навряд чи підійдуть, однак при створенні експериментальних проектів, які потребують особливої ефективності, можуть виявитися незамінними. Та й сама їх вивчення дозволяє сформувати свіжий погляд на процес кодування, абстрагуватися від деталей реалізації та одночасно поглиблює розуміння різних тонких механізмів конкретних мов. Учасники пообіцяли сформувати каталог подібних суперможливості і підготувати їх безпечні реалізації у вигляді шаблонів, які потім можна буде задіяти в популярних об'єктно-орієнтованих мовах.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*