**פרדיגמת תכנות** היא סט מוסכמות ועקרונות לכתיבת תוכנה, עם שפת תכנות מסוימת. קיימות מספר פרדיגמות תכנות וכל שפת תכנות יכולה לשמש לכתיבת תוכנה בפרדיגמה אחת לפחות.

פרדיגמת התכנות מתווה את היסודות לאופן שבו התוכנה מפותחת ועל כן יש לה השפעה רבה על כל מהלך הכתיבה, ארגון הקוד, התוצר הסופי ופתרון בעיות.

אין לבלבל פרדיגמת תכנות עם מתודולוגיית פיתוח תוכנה, שהיא סגנון עבודה בו משתמשים למניעה מראש ופתרון נקודתי של בעיות בהנדסת תוכנה.

הפרדיגמה והמתכנת
----------------

פרדיגמת תכנות קובעת איך המתכנת רואה או תופס את אופן הביצוע של תוכנית מחשב. לדוגמה, בתכנות מונחה עצמים, המתכנת יכול לראות את התוכנית כאוסף של עצמים שיש ביניהם פעולות גומלין, ואילו בתכנות פונקציונלי אפשר לתפוס את התוכנית כפונקציה מקלט התוכנית אל הפלט שלה. תכנות מונחה תהליכים (Process-oriented programming) מאפשר למתכנת לחשוב על היישום כעל קבוצות של תהליכים בו-זמניים הפועלים על מבני נתונים המשותפים לוגית.

הפרדיגמה והשפות
---------------

כשם שקבוצות שונות בתחום הנדסת התוכנה מעודדות מתודולוגיות פיתוח שונות, שפות תכנות שונות מעודדות פרדיגמות תכנות שונות. יש שפות המעוצבות לתמוך בפרדיגמה מסוימת אחת, כגון Smalltalk ו-Java התומכות בתכנות מונחה-עצמים, לעומת Haskell התומכת בתכנות פונקציונלי. אחרות, כגון C++‎ ופייתון, תומכות בפרדיגמות מרובות, ומאפשרות למתכנת לבחור ביניהן או לשלב מספר פרדיגמות לפי הצורך.

פרדיגמות רבות ידועות בשל הטכניקות האסורות בהן, לא פחות מאשר בטכניקות שהן מאפשרות. לדוגמה, תכנות פונקציונלי 'טהור' אוסר על השימוש בתופעות לוואי; תכנות מובנה מעדיף הימנעות, ולכל היותר שימוש מזערי, בפקודת goto, ותכנות מונחה עצמים 'טהור' אוסר על שימוש במשתנים שלא במסגרת המחלקה (משתנים גלובליים). מסיבה זו, בין השאר, פרדיגמות חדשות רבות נחשבות נוקשות יתר על המידה בעיני מי שהורגלו בסגנונות הוותיקים יותר. עם זאת, ההימנעות מטכניקות מסוימות יכולה להקל על אימות נכונות התוכנה ועל הבנת ההתנהגות שלה, מבלי להגביל את התאמתה של שפת התכנות לשימוש כללי.

מאחר ששפת תכנות עשויה לתמוך במספר פרדיגמות, היחסים בין פרדיגמות תכנות לבין שפות תכנות עשויים להיות מורכבים. לדוגמה, C++‎ תומכת במרכיבים של תכנות פרוצדורלי, תכנות מונחה-עצמים ותכנות גנרי. עם זאת, המתכנתים מחליטים איך לבנות את התוכנית תוך שימוש במרכיבים אלה של הפרדיגמות. אפשר לכתוב תוכנית פרוצדורלית טהורה בשפת C++‎, אפשר לכתוב תוכנית מונחית-עצמים טהורה, או לכתוב תוכנית הכוללת מרכיבים משתי הפרדיגמות.

פרדיגמות תכנות עיקריות
----------------------

* **הפרדיגמות האימפרטיבית**:
	+ תכנות מובנה
	+ תכנות פרוצדוראלי,
	+ תכנות מודולרי
	+ תכנות מונחה עצמים
	+ תכנות מונחה אירועים
	+ תכנות מונחה תהליכים
* **הפרדיגמות הדקלרטיבית**:
	+ תכנות לוגי
	+ תכנות פונקציונלי

| תחומים במדעי המחשב |
| --- |
| יסודות מתמטים | לוגיקה מתמטית • תורת הקבוצות • תורת המספרים • תורת הגרפים • תורת הטיפוסים • תורת הקטגוריות • אנליזה נומרית • תורת האינפורמציה |
| תורת החישוביות | תורת האוטומטים • תורת הרקורסיה • תורת הסיבוכיות • מחשוב קוונטי |
| אלגוריתמים ומבנה נתונים | אנליזה של אלגוריתמים • גאומטריה חישובית |
| שפות תכנות ומהדרים | מפרש • פרדיגמת תכנות (תכנות פרוצדורלי • תכנות מונחה עצמים • תכנות פונקציונלי • תכנות לוגי) |
| חישוב מבוזר ועיבוד מקבילי | עיבוד מקבילי • מחשוב סריגי • בקרת מקביליות |
| הנדסת תוכנה | ניתוח מערכות מידע • עיצוב תוכנה • תכנות מחשבים • שיטות פורמליות • בדיקות תוכנה • מתודולוגיית פיתוח תוכנה |
| תקשורת | ניתוב • טופולוגיית רשת • קריפטוגרפיה |
| מסד נתונים | מסד נתונים יחסי • SQL • תנועה • אינדקסים • כריית מידע • CAP theorem |
| בינה מלאכותית | חשיבה אוטומטית • בלשנות חישובית • ראייה ממוחשבת • עיבוד שפה טבעית • בינה חישובית • מערכת מומחה • למידה חישובית • רובוטיקה |
| גרפיקה | הדמיה ממוחשבת • הנפשה ממוחשבת • עיבוד תמונה |
| שפות פורמליות | שפה רגולרית • שפה חסרת הקשר • שפה תלוית הקשר • ההיררכיה של חומסקי |
| שימושים במדע | ביואינפורמטיקה • מדעים קוגניטיביים • כימיה חישובית • פיזיקה חישובית • אנליזה נומרית |

קישורים חיצוניים
----------------

ויקישיתוף מדיה וקבצים בנושא **פרדיגמת תכנות** בוויקישיתוף

|  |  |
| --- | --- |
| בקרת זהויות עריכת הנתון בוויקינתונים | 
* GND: 4308224-5

 |

1. ↑  Programming paradigms: What are the principles of programming?, IONOS Digital Guide, ‏2020-04-20 (באנגלית אמריקאית)