Програмерска парадигма
Програмерска парадигма е стил на програмирање (слично како што методологијата, е стил на практикување на софтверското инженерство).
Програмерската парадигма го овозможува (и определува) начинот на кој програмерот го гледа извршувањето на програмот. Така на пример, во објектно ориентираното програмирање, програмерите ја гледаат програмата како колекција на објекти кои меѓу себеси дејствуваат, додека во функционалното програмирање програмот може да се замисли како низа на функции. Кај програмирање на компутери или системи со повеќе обработувачи, процес ориентирано програмирање, програмерите апликациите ги замислуваат како процеси кои се одвиваат по некоја логика врз заедничка структура на податоци.
Слично како во софтверското инженерство различни групи предлагаат различни методологии, така и различни програмски јазици налагаат различни програмерски парадигми. Некои програмски јазици се дизајнирани да поддржуваат одредена парадигма(Smalltalk и Java поддржуваат објектно ориентирано програмирање, додека Haskell и Scheme поддржуваат функционално програмирање), а некои програмски јазици поддржуваат повеќе програмерски парадигми (Common Lisp, Python, Ruby и Oz).
Познато е дека одредени програмерски парадигми поддржуваат одредени техники а некои не. Пример, чисто функционално програмирње не допушта користење на странични ефекти; структурното програмирање не допушта користење на наредбата goto.
Врската помеѓу програмерските парадигми и програмските јазици може да биде комплексна бидејќи програмскиот јазик може да поддржува повеќе парадигми. Пример, C++ е дизајниран да поддржува елементи на процедурално програмирање, објектно ориентирано програмирање, објектно засновано програмирање, агент ориентирано програмирање и генеричко програмирање. Се разбира, дизајнерите и програмерите одлучуваат како ќе го кодираат програмот, со користење на која парадигма. Некои програми во C++ можат да бидат напишани чисто процедурално, некои чисто објект ориентирано, некои со комбинација на овие две парадигми.
Примери
уреди- Анотативно програмирње (како во Flare јазикот)
- Аспект ориентирано програмирање (како во AspectJ)
- Атрибут ориентирано програмирање (може да биде исто како анотативното програмирање) (како во Java 5 Анотации, пре-процесирано со XDoclet класата; C# Атрибути )
- Програмирање засновано на класи, во корелација со Порграмирање засновано на прототипи (во контекст на објект ориентираното програмирање]
- Концепт ориентирано програмирање е засновано на користење на концепти како главно програмерски конструкции.
- Constraint програмирање, споредено со Логичко програмирање
- Data-directed програмирање
- Dataflow програмирање (како во Spreadsheet-ови)
- Flow-driven програмиарње, споредено со Event-driven програмирање
- Функционално програмирање
- Императивно програмирање, споредено со Декларативно програмирање
- Интенционално програмиарње
- Логичко програмиарње (како во Mathematica)
- Message passing programming, споредено со императивно програмирање
- Објект ориентирано програмирање (како во Smalltalk)
- Pipeline програмирање (како во UNIX командна линија)
- Policy-based програмирање
- Процедурално програмирање, споредено со Функционално програмиарње
- Процес ориентирано програмирање модел на паралелно програмирање.
- Рекурзивно програмирање, споредено со Итеративно програмирање
- Рефлективно програмирање
- Скаларно програмирање, споредено со Array programming
- Компонент ориентирано програмирање (како во OLE)
- Структурирано програмирање, споредено со Неструктурирано програмирање
- Subject-oriented programming
- Tree programming
- Value-level programming, споредено со Function-level programming