Паради́гма програмува́ння є способом класифікації мов програмування на основі їхніх особливостей. Мови можна класифікувати за кількома парадигмами.
Деякі парадигми стосуються головним чином наслідків для моделі виконання мови, наприклад дозволу побічних ефектів або того, чи послідовність операцій визначається моделлю виконання. Інші парадигми в основному стосуються способу організації коду, наприклад, групування коду в одиниці разом із станом, який змінюється кодом. Інші мають відношення головним чином до стилю синтаксису та граматики.
Загальні парадигми програмування:
- імперативне програмування, у якому програміст наказує машині, як змінити свій стан,
- процедурне програмування, яке групує інструкції в процедури,
- об'єктно-орієнтоване програмування, яке групує інструкції з частиною стану, з якою вони працюють,
- декларативне програмування, у якому програміст оголошує властивості бажаного результату, але не те, як його обчислити
- функціональне програмування, у якому бажаний результат оголошується як значення серії застосувань функції,
- логічне програмування, в якому бажаний результат оголошується як відповідь на запитання про систему фактів і правил,
- оптимізація, в якій бажаний результат оголошується як розв’язок задачі оптимізації,
- реактивне програмування, у якому бажаний результат оголошується з потоками даних і розповсюдженням змін.
Символічні методи (наприклад, рефлексія), які дозволяють програмі посилатися на себе, також можна розглядати як парадигму програмування. Однак вони сумісні з основними парадигмами і тому не є самостійною парадигмою.
Наприклад, мови, які відповідають імперативній парадигмі, мають дві основні особливості:
- вони вказують порядок, у якому виконуються операції, з конструкціями, які явно контролюють цей порядок,
- вони допускають побічні ефекти, в яких стан можна змінити в один момент часу, в одній одиниці коду, а згодом прочитати в інший момент часу в іншій одиниці коду.
Зв'язок між одиницями коду не є явним. Тим часом в об’єктно-орієнтованому програмуванні код організовано в об’єкти, які містять стан, який змінюється лише кодом, який є частиною об’єкта. Більшість об'єктно-орієнтованих мов також є імперативними мовами. Мови, які відповідають декларативній парадигмі, не визначають порядок виконання операцій. Натомість вони надають ряд доступних операцій у системі разом із умовами, за яких кожну з них дозволено виконувати. Реалізація моделі виконання мови відстежує, які операції можна вільно виконувати, і самостійно вибирає порядок.
Детальніше в Порівняння багатопарадигмальних мов програмування.
Кожну окрему парадигму програмування характеризує наявність у ній методу та зв'язок із моделлю життєвого циклу. Спільним для різних парадигм програмування є загальні принципи проєктування програмного продукту. Користувач може вибирати ту або іншу парадигму програмування з позицій зручності застосування для задач у ПрО та виготовлення конкретного програмного продукту.
Огляд
Подібно до того, як розробка програмного забезпечення (як процес) визначається різними методологіями, так і мови програмування (як моделі обчислень) визначаються різними парадигмами. Деякі мови розроблені для підтримки однієї парадигми (Smalltalk підтримує об'єктно-орієнтоване програмування, Haskell підтримує функціональне програмування), тоді як інші мови програмування підтримують кілька парадигм (такі як Object Pascal, , Java, JavaScript, C#, Scala, Visual Basic, Common Lisp, Scheme, Perl, PHP, Python, Ruby, Oz, і F#). Наприклад, програми, написані на C++, Object Pascal або PHP, можуть бути чисто процедурними, суто об'єктно-орієнтованими або можуть містити елементи обох або інших парадигм. Розробники програмного забезпечення та програмісти вирішують, як використовувати ці елементи парадигми.
В об'єктно-орієнтованому програмуванні програми розглядаються як набір взаємодіючих об'єктів. У функційному програмуванні програми розглядаються як послідовність оцінок функції без стану. Під час програмування комп’ютерів або систем із багатьма процесорами в програми розглядаються як набори одночасних процесів, які діють на логічні спільні структури даних.
Багато парадигм програмування добре відомі техніками, які вони забороняють та дозволяють. Наприклад, чисте функційне програмування забороняє використання побічних ефектів, тоді як структурне програмування забороняє використання оператора goto. Частково з цієї причини нові парадигми часто вважаються доктринними або занадто жорсткими для тих, хто звик до попередніх стилів. Тим не менш, уникання певних методів може полегшити розуміння поведінки програми та доведення теорем про її коректність. Парадигми програмування також можна порівняти з моделями програмування, які дозволяють викликати модель виконання за допомогою лише API. Моделі програмування також можна розділити на парадигми на основі особливостей моделі виконання.
Для паралельних обчислень використання моделі програмування замість мови є звичайним. Причина полягає в тому, що деталі паралельного апаратного забезпечення просочуються в абстракції, які використовуються для програмування апаратного забезпечення. Це змушує програміста відображати шаблони в алгоритмі на шаблони в моделі виконання (які були вставлені через витік апаратного забезпечення в абстракцію). Як наслідок, жодна з паралельних мов програмування не відповідає всім проблемам обчислення. Таким чином, зручніше використовувати базову послідовну мову та вставляти виклики API до моделей паралельного виконання через модель програмування. Такі моделі паралельного програмування можна класифікувати відповідно до абстракцій, які відображають апаратне забезпечення, наприклад, спільної пам’яті, розподіленої пам’яті з передачею повідомлень, уявлення про місце, видиме в коді, і так далі. Це можна вважати різновидами парадигми програмування, які застосовуються лише до паралельних мов і моделей програмування.
Критика
Деякі дослідники мов програмування критикують поняття парадигм як класифікацію мов програмування, напр. Харпер і Крішнамурті. Вони стверджують, що багато мов програмування не можуть бути строго класифіковані в одній парадигмі, а радше включають функції кількох парадигм. Див. Порівняння багатопарадигмальних мов програмування.
Історія терміна
Своїм сучасним значенням у науково-технічній галузі термін «парадигма» зобов'язаний, вочевидь, Томасу Куну та його книзі «Структура наукових революцій». Кун називав парадигмами усталені системи наукових поглядів, у межах яких ведуться дослідження, відтак, у процесі розвитку наукової дисципліни може відбуватися заміна однієї парадигми на іншу, при цьому стара парадигма ще продовжує якийсь час існувати, ба навіть розвиватися завдяки тому, що багато її прихильників виявляються з тих чи інших причин нездатними перебудуватися до праці в іншій парадигмі.
Власне термін «Парадигма програмування» вперше застосував Роберт Флойд у своїй лекції лауреата премії Тюрінга, відзначаючи, що в програмуванні можна спостерігати явище, подібне парадигмам Куна, але, на відміну від таких, парадигми програмування не є взаємовиключними:
Якщо прогрес мистецтва програмування в цілому вимагає постійного винаходу і вдосконалення парадигм, то вдосконалення мистецтва окремого програміста вимагає, щоб він розширював свій репертуар парадигм. |
Таким чином, на думку Роберта Флойда, на відміну від парадигм у науковому світі, описаних Куном, парадигми програмування можуть поєднуватися, збагачуючи інструментарій програміста.
Основні парадигми програмування
- Процедурне програмування
- Об'єктно-орієнтоване програмування
- Функціональне програмування
- Імперативне програмування
- Декларативне програмування
- Прототипне програмування
- Аспектно-орієнтоване програмування
- Предметно-орієнтоване програмування
- Функціонально-орієнтоване програмування
- Структурне програмування
- Модульне програмування
- Збірне програмування
- Логічне програмування
- Паралельне програмування
- Компонентне програмування
- Агентно-орієнтоване програмування
- Алгебраїчне програмування
Мультипарадигмова мова програмування
Мультипарадигмова мова програмування — це мова програмування, яка підтримує кілька парадигм. Наприклад на Python можна писати як імперативні та об'єктно-орієнтовані, так і програми в функціональному стилі.
Примітки
- Лавріщева К. М. Програмна інженерія [ 4 березня 2016 у Wayback Machine.] — К.: Академперіодика, 2008.- 319 с.
- Peter Van Roy (12 травня 2009). Programming Paradigms: What Every Programmer Should Know (PDF). info.ucl.ac.be. Процитовано 27 січня 2014.
- Peter Van-Roy; Seif Haridi (2004). Concepts, Techniques, and Models of Computer Programming. MIT Press. ISBN .
- Наприклад, геоцентрична небесна механіка Птолемея змінилася геліоцентричної системою Коперника.
- R.W. Floyd. The Paradigms of Programming Communications of the ACM, 22(8):455—460, 1979. — Російською див.: Лекции лауреатов премии Тьюринга за первые двадцать лет (1966—1985) — М.: МИР, 1993.
Див. також
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Paradigma znachennya Paradi gma programuva nnya ye sposobom klasifikaciyi mov programuvannya na osnovi yihnih osoblivostej Movi mozhna klasifikuvati za kilkoma paradigmami Deyaki paradigmi stosuyutsya golovnim chinom naslidkiv dlya modeli vikonannya movi napriklad dozvolu pobichnih efektiv abo togo chi poslidovnist operacij viznachayetsya modellyu vikonannya Inshi paradigmi v osnovnomu stosuyutsya sposobu organizaciyi kodu napriklad grupuvannya kodu v odinici razom iz stanom yakij zminyuyetsya kodom Inshi mayut vidnoshennya golovnim chinom do stilyu sintaksisu ta gramatiki Zagalni paradigmi programuvannya imperativne programuvannya u yakomu programist nakazuye mashini yak zminiti svij stan procedurne programuvannya yake grupuye instrukciyi v proceduri ob yektno oriyentovane programuvannya yake grupuye instrukciyi z chastinoyu stanu z yakoyu voni pracyuyut deklarativne programuvannya u yakomu programist ogoloshuye vlastivosti bazhanogo rezultatu ale ne te yak jogo obchisliti funkcionalne programuvannya u yakomu bazhanij rezultat ogoloshuyetsya yak znachennya seriyi zastosuvan funkciyi logichne programuvannya v yakomu bazhanij rezultat ogoloshuyetsya yak vidpovid na zapitannya pro sistemu faktiv i pravil optimizaciya v yakij bazhanij rezultat ogoloshuyetsya yak rozv yazok zadachi optimizaciyi reaktivne programuvannya u yakomu bazhanij rezultat ogoloshuyetsya z potokami danih i rozpovsyudzhennyam zmin Simvolichni metodi napriklad refleksiya yaki dozvolyayut programi posilatisya na sebe takozh mozhna rozglyadati yak paradigmu programuvannya Odnak voni sumisni z osnovnimi paradigmami i tomu ne ye samostijnoyu paradigmoyu Napriklad movi yaki vidpovidayut imperativnij paradigmi mayut dvi osnovni osoblivosti voni vkazuyut poryadok u yakomu vikonuyutsya operaciyi z konstrukciyami yaki yavno kontrolyuyut cej poryadok voni dopuskayut pobichni efekti v yakih stan mozhna zminiti v odin moment chasu v odnij odinici kodu a zgodom prochitati v inshij moment chasu v inshij odinici kodu Zv yazok mizh odinicyami kodu ne ye yavnim Tim chasom v ob yektno oriyentovanomu programuvanni kod organizovano v ob yekti yaki mistyat stan yakij zminyuyetsya lishe kodom yakij ye chastinoyu ob yekta Bilshist ob yektno oriyentovanih mov takozh ye imperativnimi movami Movi yaki vidpovidayut deklarativnij paradigmi ne viznachayut poryadok vikonannya operacij Natomist voni nadayut ryad dostupnih operacij u sistemi razom iz umovami za yakih kozhnu z nih dozvoleno vikonuvati Realizaciya modeli vikonannya movi vidstezhuye yaki operaciyi mozhna vilno vikonuvati i samostijno vibiraye poryadok Detalnishe v Porivnyannya bagatoparadigmalnih mov programuvannya Kozhnu okremu paradigmu programuvannya harakterizuye nayavnist u nij metodu ta zv yazok iz modellyu zhittyevogo ciklu Spilnim dlya riznih paradigm programuvannya ye zagalni principi proyektuvannya programnogo produktu Koristuvach mozhe vibirati tu abo inshu paradigmu programuvannya z pozicij zruchnosti zastosuvannya dlya zadach u PrO ta vigotovlennya konkretnogo programnogo produktu OglyadOglyad riznih paradigm programuvannya za Piterom Van Royem Podibno do togo yak rozrobka programnogo zabezpechennya yak proces viznachayetsya riznimi metodologiyami tak i movi programuvannya yak modeli obchislen viznachayutsya riznimi paradigmami Deyaki movi rozrobleni dlya pidtrimki odniyeyi paradigmi Smalltalk pidtrimuye ob yektno oriyentovane programuvannya Haskell pidtrimuye funkcionalne programuvannya todi yak inshi movi programuvannya pidtrimuyut kilka paradigm taki yak Object Pascal C Java JavaScript C Scala Visual Basic Common Lisp Scheme Perl PHP Python Ruby Oz i F Napriklad programi napisani na C Object Pascal abo PHP mozhut buti chisto procedurnimi suto ob yektno oriyentovanimi abo mozhut mistiti elementi oboh abo inshih paradigm Rozrobniki programnogo zabezpechennya ta programisti virishuyut yak vikoristovuvati ci elementi paradigmi V ob yektno oriyentovanomu programuvanni programi rozglyadayutsya yak nabir vzayemodiyuchih ob yektiv U funkcijnomu programuvanni programi rozglyadayutsya yak poslidovnist ocinok funkciyi bez stanu Pid chas programuvannya komp yuteriv abo sistem iz bagatma procesorami v programi rozglyadayutsya yak nabori odnochasnih procesiv yaki diyut na logichni spilni strukturi danih Bagato paradigm programuvannya dobre vidomi tehnikami yaki voni zaboronyayut ta dozvolyayut Napriklad chiste funkcijne programuvannya zaboronyaye vikoristannya pobichnih efektiv todi yak strukturne programuvannya zaboronyaye vikoristannya operatora goto Chastkovo z ciyeyi prichini novi paradigmi chasto vvazhayutsya doktrinnimi abo zanadto zhorstkimi dlya tih hto zvik do poperednih stiliv Tim ne mensh unikannya pevnih metodiv mozhe polegshiti rozuminnya povedinki programi ta dovedennya teorem pro yiyi korektnist Paradigmi programuvannya takozh mozhna porivnyati z modelyami programuvannya yaki dozvolyayut viklikati model vikonannya za dopomogoyu lishe API Modeli programuvannya takozh mozhna rozdiliti na paradigmi na osnovi osoblivostej modeli vikonannya Dlya paralelnih obchislen vikoristannya modeli programuvannya zamist movi ye zvichajnim Prichina polyagaye v tomu sho detali paralelnogo aparatnogo zabezpechennya prosochuyutsya v abstrakciyi yaki vikoristovuyutsya dlya programuvannya aparatnogo zabezpechennya Ce zmushuye programista vidobrazhati shabloni v algoritmi na shabloni v modeli vikonannya yaki buli vstavleni cherez vitik aparatnogo zabezpechennya v abstrakciyu Yak naslidok zhodna z paralelnih mov programuvannya ne vidpovidaye vsim problemam obchislennya Takim chinom zruchnishe vikoristovuvati bazovu poslidovnu movu ta vstavlyati vikliki API do modelej paralelnogo vikonannya cherez model programuvannya Taki modeli paralelnogo programuvannya mozhna klasifikuvati vidpovidno do abstrakcij yaki vidobrazhayut aparatne zabezpechennya napriklad spilnoyi pam yati rozpodilenoyi pam yati z peredacheyu povidomlen uyavlennya pro misce vidime v kodi i tak dali Ce mozhna vvazhati riznovidami paradigmi programuvannya yaki zastosovuyutsya lishe do paralelnih mov i modelej programuvannya KritikaDeyaki doslidniki mov programuvannya kritikuyut ponyattya paradigm yak klasifikaciyu mov programuvannya napr Harper i Krishnamurti Voni stverdzhuyut sho bagato mov programuvannya ne mozhut buti strogo klasifikovani v odnij paradigmi a radshe vklyuchayut funkciyi kilkoh paradigm Div Porivnyannya bagatoparadigmalnih mov programuvannya Istoriya terminaSvoyim suchasnim znachennyam u naukovo tehnichnij galuzi termin paradigma zobov yazanij vochevid Tomasu Kunu ta jogo knizi Struktura naukovih revolyucij Kun nazivav paradigmami ustaleni sistemi naukovih poglyadiv u mezhah yakih vedutsya doslidzhennya vidtak u procesi rozvitku naukovoyi disciplini mozhe vidbuvatisya zamina odniyeyi paradigmi na inshu pri comu stara paradigma she prodovzhuye yakijs chas isnuvati ba navit rozvivatisya zavdyaki tomu sho bagato yiyi prihilnikiv viyavlyayutsya z tih chi inshih prichin nezdatnimi perebuduvatisya do praci v inshij paradigmi Vlasne termin Paradigma programuvannya vpershe zastosuvav Robert Flojd u svoyij lekciyi laureata premiyi Tyuringa vidznachayuchi sho v programuvanni mozhna sposterigati yavishe podibne paradigmam Kuna ale na vidminu vid takih paradigmi programuvannya ne ye vzayemoviklyuchnimi Yaksho progres mistectva programuvannya v cilomu vimagaye postijnogo vinahodu i vdoskonalennya paradigm to vdoskonalennya mistectva okremogo programista vimagaye shob vin rozshiryuvav svij repertuar paradigm Takim chinom na dumku Roberta Flojda na vidminu vid paradigm u naukovomu sviti opisanih Kunom paradigmi programuvannya mozhut poyednuvatisya zbagachuyuchi instrumentarij programista Osnovni paradigmi programuvannyaProcedurne programuvannya Ob yektno oriyentovane programuvannya Funkcionalne programuvannya Imperativne programuvannya Deklarativne programuvannya Prototipne programuvannya Aspektno oriyentovane programuvannya Predmetno oriyentovane programuvannya Funkcionalno oriyentovane programuvannya Strukturne programuvannya Modulne programuvannya Zbirne programuvannya Logichne programuvannya Paralelne programuvannya Komponentne programuvannya Agentno oriyentovane programuvannya Algebrayichne programuvannyaMultiparadigmova mova programuvannyaMultiparadigmova mova programuvannya ce mova programuvannya yaka pidtrimuye kilka paradigm Napriklad na Python mozhna pisati yak imperativni ta ob yektno oriyentovani tak i programi v funkcionalnomu stili PrimitkiLavrisheva K M Programna inzheneriya 4 bereznya 2016 u Wayback Machine K Akademperiodika 2008 319 s Peter Van Roy 12 travnya 2009 Programming Paradigms What Every Programmer Should Know PDF info ucl ac be Procitovano 27 sichnya 2014 Peter Van Roy Seif Haridi 2004 Concepts Techniques and Models of Computer Programming MIT Press ISBN 978 0 262 22069 9 Napriklad geocentrichna nebesna mehanika Ptolemeya zminilasya geliocentrichnoyi sistemoyu Kopernika R W Floyd The Paradigms of Programming Communications of the ACM 22 8 455 460 1979 Rosijskoyu div Lekcii laureatov premii Tyuringa za pervye dvadcat let 1966 1985 M MIR 1993 Div takozhParadigma Programuvannya Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi