7.2 Визначальні властивості ПВК та їх типові поєднання
В основі створення ПВК лежить ідея виявлення так званих родових знань про проблеми, які розв'язуються програмними системами. Цим терміном позначаються знання, котрі сприяють вирішенню кожного з певного кола завдань (таке коло визначає певну проблемну галузь). Родові знання виявляються як результат абстракції артефактів програмного забезпечення. Під артефактами мають на увазі будь-які продукти діяльності фахівців з розробки програмного забезпечення (ПЗ).
Типи артефактів при цьому не обмежуються фрагментами коду. Вони можуть бути структурами проекту, структурами реалізації модулів, документації, трансформації і т.д.
За величезної різноманітності форм ПВК, які використовуються у комп'ютерній практиці, є безперечна спільність у техніці їхнього застосування. Всі вони конструюються в процесі абстрагування і застосовуються шляхом виконання процесів селекції, спеціалізації й інтеграції. Перелічені чотири процеси визначають, так би мовити, чотири виміри, в аспектах яких ПВК можуть абстрагуватися, класифікуватися, добиратися і зіставлятися. Розглянемо ці процеси докладніше.
Абстракція. Абстракція є визначальною властивістю ПВК, кожна абстракція - продукт аналізу ознак зібрання сутностей, для котрого виділяються суттєві спільні ознаки й відкидаються несуттєві з певного погляду. Внаслідок цього визначається абстрактна або родова сутність, що матеріалізується як ПВК.
Кожна абстракція може розглядатися як така, що має дві частини - видиму та приховану. Видима частина є специфікацією тих знань, які необхідні для використання ПВК. Прихована частина містить деталі реалізації ПВК, невидимі на рівні її специфікації.
Видиму частину, у свою чергу, доцільно розглядати як сукупність стабільної або фіксованої та змінної складових.
Змінна частина являє собою змінні властивості ПВК, її здатність адаптуватися до якогось спектра застосувань, фіксована частина - інваріанти. Тобто, специфікація абстракції із змінною частиною відображається в множину альтернативних реалізацій.
Розподіл абстракції на видиму фіксовану і змінну та приховану частини є не внутрішньою властивістю абстракції, це передовсім проектні рішення розробника абстракції, які він приймає, даючи відповіді на такі запитання:
яка інформація потрібна користувачу? Потрібна користувачу інформація подається як специфікація (видима частина);
які з властивостей абстракції користувачу доведеться змінювати? Такі властивості доцільно подати у змінній частині специфікації.
Як приклад, розглянемо стек - відому схему запам'ятовування елементів за принципом: "елемент, що надійшов до сховища даних останнім, видається першим". Абстрагуємося при цьому від структури та форми подання елементу стека. Опис принципу роботи стека подається в специфікації, а максимальна глибина стека може бути або в прихованій частині (коли користувач нею не цікавиться), або в змінній частині (коли необхідно змінити її за бажанням користувача). Якщо подати глибину стека у фіксованій частині, користувач буде знати її значення, але не зможе його змінити.
Добір або селекція. Ключовою особливістю технологій використання ПВК є та обставина, що, приступаючи до нової програмної розробки, користувач не має відомостей про готові компоненти, тому у ПВК має бути чітка і виразна специфікація абстракції, котра давала б користувачеві можливість ефективно переглядати, розуміти, зіставляти і добирати підходящі для нього ПВК із числа наявних.
Подібно до бібліотечного пошуку, на допомогу користувачу може бути надано спеціальні каталоги й класифікатори зібрань компонент, призначених здійснювати навігацію пошуку і полегшувати розуміння сутності ПВК.
Спеціалізація. Як було зазначено вище, зазвичай ПВК є матеріалізацією певної абстракції або родового артефакту, який неможливо беспосередньо використати. Для його використання необхідно спеціалізувати або конкретизувати його, тобто провести операцію, обернену до абстракції, зміст котрої полягає в тому, щоб до родових ознак, властивих кожному з "представників роду", додати ознаки конкретного застосування - параметри, трансформації, обмеження тощо. Родовий артефакт є, по суті, абстракцією зі змінною частиною. Спеціалізація родового артефакту - це отримання реалізації абстракції на основі довизначення змінної частини ознаками конкретного застосування.
Інтеграція. Для ефективної інтеграції розрізнених артефактів, втілених у ПВК, до конкретної програмної системи потрібно, щоб користувач розумів інтерфейс артефакту, тобто особливості його взаємодії з іншими артефактами або з якимсь каркасом, який певною мірою можна вважати базою інтеграції. Можна сказати, що інтерфейс артефакту - це абстракція, в якій не враховуються внутрішні властивості артефакту, специфікація котрої визначає правила взаємодії артефактів між собою.
Для оцінювання ефективності абстракції вводиться інтуїтивна міра, яку названо когнітивною відстанню (cognitive distance). Цим терміном позначається кількість інтелектуальних зусиль, які необхідно витратити розробникові програмної системи для того, щоб перевести її з однієї стадії життєвого циклу в іншу. Для створення програмної системи за допомогою ПВК розробник ставить за мету мінімізацію когнітивної відстані між початковою концепцією системи та її кінцевою реалізацією, готовою до виконання.
Засобами досягнення цієї мети є:
- використання фіксованих і змінних абстракцій, лаконічних і виразних водночас;
- максимізація прихованої частини абстракції;
- застосування автоматичного відображення специфікації абстрак-ції в її реалізацію (наприклад, шляхом компіляції).
Якщо поглянути на розвиток у часі засобів створення програм з точки зору повторного використання, то історична картина виглядає як поширення застосувань комп'ютера на нові і нові домени, набуття практики вирішення окремих завдань в рамках цих доменів, узагальнення набутого досвіду як накопичення типових абстракцій та втілення їх у ПВК певної форми. Історично першим доменом застосування програмних засобів була галузь числових розрахунків, для якої було створено і перші ПВК, котрі мали вигляд спочатку типових програмних модулів (так званих підпрограм - аналог сучасних бібліотечних функцій), а згодом і мов програмування. Перше покоління мов програмування було втіленням типових абстракцій алгоритмічних обчислень (мови програмування Фортран, Алгол-60 та подібні їм).
Друге покоління з'явилось як відповідь на поширення комп'ютерних методів на домени оброблення великих обсягів економічної інформації, завдяки чому було виділено абстракції типових процесів оброблення даних, збирання програм з окремих модулів (Кобол, PL/1, Паскаль, Модула тощо).
Поява візуальних можливостей обміну інформації з комп'ютером покликала до життя наступні покоління ПВК, подані абстракціями комп'ютерної графіки, діалогової взаємодії, узагальненою концепцією інтерфейсу. Ці узагальнення втілено в мови програмування (C++, Java тощо) та багато інших форм подання узагальненого досвіду розв'язання певних проблем у вигляді ПВК. Нижче досліджуються різні форми втілення ПВК у сучасній комп'ютерній практиці.
Вінницький національний технічний університет