Парадигма на програмиране | начин за групиране на езиците за програмиране според това, което правят

Парадигмите за програмиране са начин за групиране на езиците за програмиране по това, което правят. Езиците могат да бъдат разделени на повече от една парадигма.

Някои парадигми разглеждат начина, по който се изпълнява кодът, като например разрешаване на странични ефекти или необходимост да се правят неща в определен ред. Други парадигми разглеждат начина, по който кодът се групира, като например поставянето на кода в една или две части (или вместо това в много малки части). Някои други парадигми разглеждат реда и частите, които правят програмата такава, каквато е.

Съществуват две основни групи парадигми - императивна и декларативна. Един език може да бъде и двете парадигми едновременно.


 

Императивно програмиране

В императивните програми програмистите дават на компютъра набор от подредени стъпки, които трябва да се извършат, за да се направи нещо. Ако някой иска компютърът да нарисува лице на котка, той може да даде указания като "Нарисувай кръг тук, нарисувай два по-малки кръга там, нарисувай два триъгълника отгоре" и т.н. Императивните програми понякога имат много странични ефекти.

Съществуват две основни парадигми на императива и в повечето случаи езикът има и двете:

  • Структурирани - на компютъра се дават указания, които винаги са в определен ред. Не се допускат стъпки като "върни се към стъпка 3" (т.нар. "goto").
    • Процедурни - Програмата позволява на програмиста да даде име на списък от поръчки, което превръща тези поръчки в "процедура", която може да се използва по-късно. Повечето структурирани езици също са процедурни.
  • Обектно-ориентирано - идеите се обясняват на компютъра с помощта на обекти, части от кода, които имат набор от команди, които могат да им бъдат дадени, и някаква информация за тях.

 

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

В декларативните парадигми програмистът казва на компютъра какво да направи, вместо как да го направи. Ако иска компютърът да нарисува лице на котка, той може да даде указания като "Нарисувай лице, нарисувай две очи, две уши и уста".

Най-известните декларативни парадигми са:

  • Функционални - Повечето работа се извършва от функции без странични ефекти.
  • Логика - излагат се факти и след това се задават един или повече "въпроси".
  • Задвижвани от събития - части от кода са настроени да се изпълняват, когато се случат определени неща (например включване на компютъра).

 

Други парадигми

Някои парадигми могат да бъдат открити както в императивните, така и в декларативните езици. Тези парадигми обикновено се срещат с някоя от горните парадигми, вместо да се използват самостоятелно.

  • Паралелно: Повече от една част от кода се изпълнява едновременно.
  • Мета: Специални неща в езика позволяват на програмиста да променя начина, по който действа самият език.

 

Преглед

Езиците за програмиране се групират по парадигми по същия начин, по който машините се групират по това, за какво се използват.

Няколко езика се вписват само в една основна парадигма, като например:

  • Smalltalk (обектно-ориентиран)
  • Асемблиране (императивно, но не структурирано или обектно-ориентирано)
  • Haskell (функционален)
  • Prolog (логика)

Повечето езици обаче имат повече от една парадигма. Някои от тях се отличават с повече от една парадигма:

  • Scala (обектно-ориентирана, функционална, паралелна)
  • Visual Basic (управляван от събития, обектно-ориентиран)
  • Common Lisp (процедурен, функционален, обектно-ориентиран, мета)
  • Схема (функционална, процедурна, мета)
  • Perl (функционален, процедурен, мета, обектно-ориентиран, ориентиран към събития)
  • Python (функционален, обектно-ориентиран, процедурен)
  • Ruby (функционален, обектно-ориентиран, процедурен)
  • Език Wolfram (функционален, процедурен, обикновено декларативен)
  • Oz (логически, функционален, императивен, обектно-ориентиран)
  • F# (функционален, императивен, обектно-ориентиран, мета)

Наличието на повече парадигми не винаги е добро. Един от случаите, в които наличието на по-малко парадигми може да е полезно, е когато има език, който е само функционален. Функцията в един от тези езици понякога върши по-малко работа (като например преминава само през частите на група неща, които действително трябва да направи), отколкото би трябвало, ако езикът беше и процедурен.

Много парадигми за програмиране са известни както с нещата, които не позволяват на хората да правят, така и с тези, които им позволяват да правят. Един от случаите, в които това е вярно, са функционалните езици. Когато един функционален език е само или предимно функционален, той обикновено не позволява странични ефекти. Друг случай, в който това е вярно, е структурното програмиране: то се различава от обикновените императивни езици, защото не позволява на програмистите да използват "goto statements" (оператори, които казват на програмата да премине към по-ранна стъпка). Поради тази и други причини хората понякога смятат, че новите парадигми не позволяват достатъчно неща. Понякога обаче е добре компютърът да не позволява на хората да правят различни неща: той може да помогне на хората да избегнат проблеми с техния код и да позволи на компютъра да прави предположения, така че да може да изпълнява кода по-бързо, или дори да проверява кода за проблеми, преди той да е стартирал!



 Преглед на различните парадигми за програмиране според Питър Ван Рой  Zoom
Преглед на различните парадигми за програмиране според Питър Ван Рой  

Проблеми с парадигмите

На някои хора, които изучават езици за програмиране, не им харесва, че парадигмите се използват за групиране на езици за програмиране, като например Харпър и Кришнамурти. Тези хора казват, че много езици за програмиране не могат просто да бъдат групирани в парадигми, защото езиците заимстват неща и идеи от много парадигми.


 

История

С течение на времето са били създадени нови парадигми и хората са ги посочвали или в момента, или когато са гледали назад. Една от първите парадигми, която е призната за нов начин на програмиране, е структурирано програмиране от 60-те години на миналия век. Идеята за "парадигма на програмирането" е от 1978 г., ако не и по-рано, когато Робърт У. Флойд я използва, докато преподава. Думата "парадигма" по начина, по който я разбира Робърт, е използвана за първи път от Томас Кун в книгата му "Структура на научните революции" (1962 г.).

Машинен код

Най-ниското ниво (най-близко до начина, по който компютърът обича да разбира нещата) и най-старата парадигма за програмиране е машинният код - императивна парадигма. Указанията в машинния код са просто набор от числа в определен ред. Асемблерният език е малко по-малко ниско ниво (и малко по-малко стар). В езика на асемблер указанията за компютъра получават мнемонични имена (по-лесни за запомняне имена), а адресите на паметта (указания за намиране на част от информацията в компютъра) могат да получат имена. Понякога те се наричат езици от първо и второ поколение.

През 60-те години на миналия век езиците на асемблер се усъвършенстват, като се добавят нови неща като библиотека COPY, макроси (части от "специален" код, които се трансформират в нормален код преди стартирането на програмата), стартиране на процедури (набори от указания, на които се дава име и които се запазват за по-късно) и променливи (елементи, на които се дават имена и които се запазват за по-късно) извън програмата. Това позволява на хората да използват някои кодове в повече от един проект и да не се притесняват за хардуерно специфични проблеми (проблеми, които се случват само на един вид компютър) благодарение на команди (имена на указания) като READ/WRITE/GET/PUT.

Асемблерът се използваше, а понякога все още се използва в системи, в които е важно кодът да бъде бърз, а също така се използва много във вградените системи, тъй като позволява на потребителя да има точен контрол върху това, което прави машината.

Процедурни езици

В края на 60-те години на миналия век хората започнаха да създават процедурни езици. Тези езици от трето поколение (първите няколко от това, което сега наричаме езици от високо ниво) имаха думи, свързани с това, което се опитваха да решат. Например,

  • COmmon Business Oriented Language (COBOL) - използва думи като файл, преместване и копиране.
  • FORmula TRANslation (FORTRAN) - използва математически думи и символи ( форми, използвани при писане и писане). Разработена е предимно за науката и инженерството.
  • ALGOrithmic Language (ALGOL) - предназначен за писане на алгоритми (набори от стъпки, които указват на компютъра какво да прави). Той използва математически думи и символи, точно както FORTRAN.
  • Programming Language One (PL/I) - трябваше да бъде полезен за всички.
  • Универсален код за символни инструкции за начинаещи (BASIC) - създаден в помощ на начинаещите програмисти.
  • C - език за програмиране, предназначен за много неща. Денис Ричи работи по него от 1969 до 1973 г. в AT&T Bell Labs.

Обектно-ориентирано програмиране

След като много хора започнаха да използват процедурни езици, те изобретиха обектно-ориентирани езици за програмиране. В тези езици данните и техните "методи" (начини за манипулиране на данните) се поставят в един "обект". Някои програмисти, като Ричард Столман, не са съгласни, че обектно-ориентираните езици са по-добри за обясняване на идеи на компютъра, отколкото процедурните езици.

Тъй като обектно-ориентираното програмиране е парадигма, а не език, хората са създали обектно-ориентирани езици за асемблиране като HLA (High Level Assembly).

Декларативни парадигми

По същото време някои хора създават декларативни езици за програмиране. Добре познат декларативен език е SQL (език за добавяне и премахване на елементи от таблици).


 

Свързани страници

  • Начин на мислене
  • Система от типове
  • Пълнота на Тюринг
 

Въпроси и отговори

В: Какво представлява парадигмата на програмиране?


О: Парадигмата на програмиране е начин за групиране на езиците за програмиране въз основа на начина им на работа.

В: Кои са двете основни групи парадигми?


О: Двете основни групи парадигми са императивна и декларативна.

В: По какво се различават императивната и декларативната парадигма?


О: Императивните парадигми разглеждат начина, по който се изпълнява кодът, като например допускане на странични ефекти или необходимост да се правят нещата в определен ред, докато декларативните парадигми разглеждат начина, по който се групира кодът, като например поставяне на кода в една или две части (или вместо това в много малки части).

Въпрос: Може ли един език да бъде едновременно императивна и декларативна парадигма?


О: Да, един език може да бъде едновременно императивна и декларативна парадигма.

В: Как една парадигма на програмиране групира езиците?


О: Програмните парадигми групират езиците по това, което правят. Те разглеждат как се изпълнява кодът, как е групиран и в какъв ред и от какви части се състои програмата.

В: Има ли други видове парадигми за програмиране освен императивната и декларативната?


О: Да, има и други видове парадигми за програмиране освен императивната и декларативната. Например някои разглеждат начина, по който кодът се изпълнява (като например разрешаването на странични ефекти), докато други разглеждат начина, по който кодът се групира (като например поставянето на кода в една или две части).

Въпрос: Всеки език ли принадлежи само към един тип парадигма на програмиране?


О: Не, не всеки език принадлежи само към един тип парадигма за програмиране; някои езици могат да бъдат в повече от един тип парадигма.

AlegsaOnline.com - 2020 / 2023 - License CC3