Меню
Головна
 
Головна arrow Філософія arrow Історія, філософія і методологія техніки та інформатики
< Попередня   ЗМІСТ   Наступна >

Проблемний ряд парадигм і мов програмування

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

Таблиця 4.5. Парадигми програмування

Парадигма

Основні ідеї

1

Автоматно-орієнтоване

програмування

Програма або її фрагмент осмислюються як модель якогось формального автомата

2

Імперативне програмування

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

3

Процедурне програмування

Задається послідовність операторів (інструкцій), які визначають процедуру вирішення завдання

4

Функціональне програмування

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

5

Логічне програмування

Вирішальне значення надається теорії та апарату математичної логіки

6

Декларативне програмування

Описує щось, а не його створення. Протиставляється імперативного програмування

7

Структурне програмування

Програма проектується у вигляді структури блоків

8

Об'єктно-орієнтоване програмування

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

9

Аспектно-орієнтоване

програмування

Аспект розуміється як модуль або клас, що реалізує функціональність наскрізну

10

Аппликативное програмування

Систематичне здійснення застосування одного об'єкта до іншого

11

Подієво-орієнтоване програмування

Вибирається головний цикл додатки

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

Концепт "парадигма програмування" в 1979 р. в інформатику ввів американський учений Р. Флойд1. При цьому він тричі процитував філософа Т. Куна, який відомий як засновника вчення про парадигмах в рамках філософії науки. Але аргументація Флойда істотно відрізняється від доводів Куна, який в основному обігравав синонімічність термінів "парадигма" і "зразок". Згідно Куну, парадигма є зразком, який дозволяє вирішувати головоломки. Флойд ж пов'язував концепт парадигми програмування переважно з двома іншими факторами: по-перше, зі своєрідністю мов програмування, а по-друге, з необхідністю виділення концептуальних підстав вживаються програмістом зусиль. Слід віддати належне Р. Флойду: йому вдалося досить точно визначити епістемологічний статус парадигм програмування. Прагматичний аспект справи вважався досить очевидним: парадигми потребують постійного вдосконалення.

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

Основні підходи до інтерпретації парадигм програмування. Розглянемо тепер питання про можливості впорядкування принципів програмування. Неважко помітити, що кожен з них володіє відносною самостійністю, і лише усі разом вони утворюють єдине ціле. В табл. 4.5 зазначено 11 парадигм. Такий список надмірний. Його доцільно скоротити, виділяючи в більш виразному вигляді актуальні для аналізу інформатики концептуальні одиниці. У цьому зв'язку доречно звернутися до кількох підходів, кожний з яких містить декілька парадигм:

(2) Алгоритмічний (орієнтований на алгоритми).

(3) Логіко-математичний підхід (орієнтований на логіко-математичні засоби). Він включає функціональну і логічну парадигми.

(4) Процедурний підхід. Зазвичай у цю рубрику включають поряд з процедурної також імперативну парадигму. Його вершиною стало структурне програмування.

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

Неважко бачити, що многозвенный концептуальний перехід

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

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

Об'єктно-орієнтоване програмування.

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

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

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

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

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

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

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

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

Критика об'єктно-орієнтованого підходу

У науковій літературі зустрічається велика кількість критичних зауважень в адресу об'єктно-орієнтованого підходу. Однак найчастіше критика відноситься не до його концептуальним основам, які цікавлять нас в першу чергу. Як правило, критики нарікають на невдале використання потенціалу об'єктно-орієнтованого програмування. Але, мабуть, найбільш різка оцінка міститься в статті Річарда Гебріела, який стверджує, що "об'єктна парадигма провалилася". Він закінчує свою статтю наступним висновком: "В кінці кінців, ніхто не агітує змінювати те, як ми працюємо з об'єктами і об'єктно-орієнтованими мовами. Ні, просто необхідно різноманітність, необхідно працювати над новими парадигмами, щоб "дати розквітати тисячам квітів". Самовідновлюються, розподілені і складні системи, що самоорганізуються, адаптивні, зростаючі по крупицях як живі організми, що використовують статистичне поведінка, еволюціонує, використовують надмірність заради безаварійності - системи, в основі яких можуть бути ще сотні різних перспективних ідей і підходів, про яких ми ще й не думали, - все повинно бути дозволено і підтримано для руху вперед. Зараз саме час для визначення нової і зміни старої парадигми. Часто нове взагалі не виглядає науково, або раціонально, статті та розмови, що пояснюють нові

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

Як бачимо, Річард Гебріел не знаходить альтернативи об'єктно-орієнтованого підходу. Він цілком правомірно виступає проти спроб насадження універсальної точки зору. Різноманітність, звичайно, необхідно, але при цьому, як очевидно, не варто очікувати зречення від старого. Було б вельми необачно в передчутті нового відмовитися від тих концептуальних досягнень, яких досягла наука сьогоднішнього дня. Гай Став у відповідь на критику Гебріела мав усі підстави заявити наступне: "Зрозуміло, об'єкти не вирішують всі проблеми програмування. Наприклад, вони не забезпечують полиморфического абстрагування типів (тобто настроюваних типів). Вони не забезпечують синтаксичного абстрагування (тобто макросів). Процедурне програмування раніше використовується при кодуванні методів. Але заявляти, що об'єкти провалилися, оскільки вони не вирішують всі можливі проблеми, - це все одно, що говорити, що вуглеводи провалилися, оскільки ви не можете жити на чистому цукрі. Об'єктно-орієнтоване програмування нагадує гроші зі старої жарти - це, може бути, і не всі, але на голову обганяє все, що може знаходитися на другому місці".

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

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

Таблиця 4.6. Парадигмальность мов програмування

Парадигмальность мов програмування

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

Приклад проблемного ряду мови програмування

Керуючись таблицею розвитку мов програмування, складеної Е. Левенецом2, наведемо у скороченому вигляді родовід самого популярного на сьогоднішній день мови З#:

В наявності не що інше, як цілком певний проблемний ряд. Кожен наступний мова перевершує попередній за деякими параметрами. Якщо б все було по-іншому, то взагалі не було б потреби у використанні нових мов.

Між проблемними рядами мов програмування існують поперечні зв'язки: вони еволюціонують незалежно один від одного. Наприклад, мова Ruby (1993) увібрав багато ідей, спочатку з'явилися в мовах CLU (1974), Smalltalk (1980), Common USP (1984), Python (1991).

Мови програмування специфицируются не тільки у відповідності з змістом певних парадигм, а й за типами завдань, серед яких особливо часто зустрічаються: 1) паралельні обчислення; 2) фізико-математичні розрахунки; 3) питання штучного інтелекту; 4) проблеми, пов'язані з розробкою інтерфейсу; 5) проектування програм-оболонок і систем; 6) оформлення документів і розробка баз даних.

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

Висновки

1. Зміст парадигм програмування переноситься на мови програмування, які також утворюють проблемні та інтерпретаційні ряди.

 
< Попередня   ЗМІСТ   Наступна >

Схожі тими

Основи лінійного програмування
Державне програмування
Побудова мови бізнесу: від бухгалтерської термінології до вартісної
Провідні геополітичні парадигми і сучасна методологія геополітики
Загальна характеристика маржиналізму як парадигми економічного аналізу: основні напрями та методологічні принципи
Предметно-проблемний підхід
Типологія проблемних регіонів
Концепція проблемного навчання
Цілочисельне програмування
Методи і засоби проблемного навчання. Системи додаткової освіти
 
Предмети
Банківська справа
БЖД
Бухоблік і аудит
Документознавство
Екологія
Економіка
Етика і естетика
Інвестування
Інформатика
Історія
Культурологія
Література
Логістика
Маркетинг
Медицина
Менеджмент
Політологія
Політекономія
Право
Психологія
Соціологія
Страхова справа
Товарознавство
Філософія
Фінанси