שפת תכנות אזוטרית ( Esoteric programming language, לפעמים מקוצר ל-esolang) היא שפת תכנות שנועדה לבחון את גבולות עיצוב שפת תכנות המחשב, כהוכחה לתפיסה, כאומנות תוכנה, כממשק פריצה לשפה אחרת (במיוחד שפות תכנות פונקציונליות או שפות תכנות פרוצדורליות), או כבדיחה. השימוש בשפות ה-esolang נבדל משפות תכנות בהן מפתחים משתמשים לכתיבת תוכנה. אלו שפות תיכנות לכל דבר, עם כללים, דקדוק, ולעיתים תווים ומילים שמורות, אך כיוון שהתחביר הוא לרוב מינימילי, התכנות בהן לעיתים מאוד ארוך ו/או מסובך. השפה האיזוטרית הראשונה היא INTERCAL שנוצרה בשנת 1972, ומאז שפות אלו מתפתחות במקביל להתפתחות השפות המקובלות, אך נעשות יותר ויותר לא קונבנציונליות.
רשימה קצרה לשפות אלו:
מבנה של שפת תכנות קלאסית.
רוב שפות התכנות יורכבו מהמרכיבים הבאים:
שפות תכנות ויזואליות (VDE).
המעבר לממשק משתמש גרפי, ובפרט הפיכתה של מערכת ההפעלה Windows לדומיננטית, יצר מגמה הולכת ומתפשטת להעניק לשפות התכנות יכולת ויזואלית, שהחלה בסביבות פיתוח דוגמת ויז'ואל סטודיו, Asymetrix ToolBook, פאואר בילדר, אובג'קט ויז'ין (ObjectVision) ודלפי, ומחוללי יישומים כדוגמת Oracle JDeveloper ו-אקסס. התכנות הוויזואלי מקצר את תהליך הפיתוח, מקל על תחזוקת התוכנה, ופותח את עולם התכנות לשכבה נוספת של אוכלוסייה, שהייתה מתקשה לפתח בשפות כדוגמת שפת C.
בתכנות תווי רגיל יש לכתוב את הוראות התכנות באופן מילולי, לרוב בשפה דמוית אנגלית, שורה לאחר שורה, ואת התוצאה ניתן לראות בזמן ריצה רק לאחר הידור התוכנית. בתכנות ויזואלי (חזותי) הקוד התכנותי מיוצג באמצעות ציור של סימבולים גרפיים שונים על טפסים, ומחולל אותו, ולכן הוא יותר אינטואיטיבי ופשוט. כך למשל ב־VB ושפות דומות נוספות מודולי תוכנה הקרויים פקדים, והם למעשה מחלקות תכנותיות, מיוצגים באמצעות צלמיות. ציורם על גבי משטח הטופס באמצעות עכבר, מקביל לפעולת הכרזה של משתנה, ומאפשר להשתמש בשיטות, במאפיינים ובאירועים הקיימים בקטעי תוכנה אלו. באמצעות פעולות העכבר ניתן אף ליצור שגרות לוכדי אירועים שמתייחסים לפקדים אלו. התכונות והאירועים של הפקד מתקבלים בגיליון טבלאי שמאפשר לסקור אותם ולשנותם, חלק מהתכונות כמו צבעים, גופנים, תמונות, וצורת סמן עכבר ניתן לשנות מתוך תיבות דיאלוג, שלעיתים יש בהן המחשה של מראה התכונות כפי שיראו בזמן ריצה.
ניתן למקם פקדים בטופס באמצעות גרירת עכבר. לעיתים ניתן ליצור הקשר פונקציונלי תכנותי בין שני פקדים, באמצעות גרירת יצוג גרפי של פקד והשלכתו על פקד שני. צורת התכנות הזו מאפשרת התמצאות טובה בתוכנה, מפני שניתן לסקור במהירות את רכיבי התוכנה. ניתן לנווט בקלות מפקד אל הסקריפט התכנותי שלו. כמו כן, ניתן לראות פריסה של תכונותיהם והאופציות הקיימות בכל תכונה ואף כל הפונקציות השייכות להם, כל זאת בזמן התכנות עצמו, בניגוד לתכנות רגיל שבו צריך להדר את התוכנית כדי לראות את התוצאה הסופית.
בשפות התכנות הוויזואליות, ציור הפקדים על הטופס, הגדרת מאפיינים ודרך פעילות של הפקדים באמצעות בחירת ערכים מתיבות משולבות, יוצר את הקוד המתאים לטיפול בממשק המשתמש ובפונקציונליות כללית של התוכנה. בשפות אלו גם העורכים הטקסטואליים עצמם תומכים בויזואליות, ונותנים רשימה של ערכים אפשריים תלויי הקשר בזמן כתיבת הקוד, שמקלים על איות הנכון ללא שגיאות ועל בחירה מדויקת של הפונקציה הרצויה. הסביבה גם נותנת רשימות נפתחות של פונקציות ואירועים שקיימים במסגרת העבודה הנוכחית ואף תצוגות נוספות כמו תצוגת עץ היררכית שמקלה על הניווט בפונקציות שבתוכנה. עם זאת בדרך כלל בשפות אלו הדרך הישנה לא התבטלה, וניתן גם ליצור את הקוד בכתיבה טקסטואלית.
המשך המגמה הזו הוא ביצירת אשפים שבהם בוחרים ומגדירים תכונות רצויות לרכיב כלשהו בתוכנה. לאחר סיום הגדרת התכונות, האשפים יוצרים את הטפסים, יחד עם הפקדים והקוד הדרוש. אשפים אלו מקלים ומזרזים הבטים מסוימים של תכנות, אך אינם משנים משמעותית את אופי תהליך התכנות.
מגמת הוויזואליזציה נכנסה גם ל־#C ול-Java, באמצעות עורכי טפסים ואשפים ליצירת קוד. ברוב מסדי הנתונים נכנסו דפוסים שונים לעיצוב ויזואלי ועבודה עם בסיס הנתונים. אחד המפורסמים שבהם הוא QBE - שהיא שיטה לתכנון ויצירת שאילתות SQL באמצעות עבודה על היצוג הגרפי שלהן באמצעות העכבר. ישנם כלים מיוחדים שמאפשרים לשרטט סכמה ויזואלית של ארכיטקטורת בסיס הנתונים (ERD) שמומר לקוד ליצירת בסיס נתונים.
תכנות מונחה-עצמים
תכנות מונחה־עצמים או לעיתים תכנות מוכוון־עצמים (באנגלית: Object-Oriented Programming, או בקיצור OOP) הוא פרדיגמת תכנות המשתמשת ב"עצמים" (אובייקטים) לשם תכנות תוכניות מחשב.
בפרדיגמה זו שמאפייניה הן מודולריות, מדרגיות ואבסטרקציה (הפשטה), מרחב התוכנה הוא למעשה מרחב של אובייקטים תכנותיים בעלי יחסים היררכיים ביניהם. כל ישות תכנותית היא מחלקה/אובייקט בעלת מאפיינים ופעולות משלה הקיימת כיחידה סגורה ועצמאית. בשיטה זו קיימת הפרדה בין המימוש הפנימי לבין הממשק החיצוני של המחלקה, בדומה לצורת העיצוב של מכשירים רבים.
הפרדיגמה מספקת למתכנת מספר דרכים לארגן ולפשט את קידוד התוכנה באמצעות כימוס (יצירת עצמים של "קופסאות שחורות"), הורשה (עצם Y יורש מעצם X ונגזרות תכונות מעצם לעצם) ופולימורפיזם (רב צורתיות שבה ניתן לשנות חלק מהתכונות הגזורות של העצם הנורש).
הפרדיגמה היוותה מהפכה בכתיבת תוכנה והחלה לשמש בפיתוח תוכנה החל מתחילת שנות ה־80 של המאה ה־20 ואילך, אך השימוש בפרדיגמה בשלמותה החל רק בשנות ה־90. רוב שפות התכנות המודרניות תומכות בתכנות מונחה־עצמים.
תכנות מונחה־עצמים הוא חלק מתפיסה (פרספציה) של פיתוח מונחה־עצמים, הכולל גם ניתוח מערכות מונחה־עצמים (OOA), עיצוב מונחה־עצמים (OOD) ובמידה חלקית גם בסיסי נתונים מונחי־עצמים (Object-Oriented Databases).
רקע.
הפרדיגמה של תכנות מונחה־עצמים צמחה מהתכנות הפרוצדורלי והמודולרי שבוסס על שגרות ופונקציות שפעלו על מבני נתונים חופשיים בכל מרחב התוכנה. השיטה הפרוצדורלית יצרה קושי רב, מכיוון שכל שינוי בהגדרת משתנים בתוכנית חייב שינוי בפונקציות שפעלו בכל מרחב התוכנה. היה קשה לאתר באג בתוכנה כיוון שהמשתנה יכול היה להשתנות ממקומות רבים בתוכנה. והיה קשה למחזר קוד, בשל תלויות שלו במשתנים ופונקציות במרחב היישום כולו. ככל שהתוכנה הייתה גדולה ומורכבת הקושי הלך והתעצם, דבר שגרר איטיות ומורכבות בפיתוח ככל שהתקדם ותחזוקה רבה, וכך, בניגוד למחירי החומרה שכל הזמן ירדו, מחירי התכנות דווקא האמירו. לפיכך היה צורך לחפש מתודולוגיה חדשה שתפשט ותקל על עבודת התכנות.
אחד מהכיוונים לטיפול בבעיה היה ביסוס של פיתוח התוכנה על מודולות, כעין "קופסאות שחורות" שניתן להשתמש בהן שימוש משותף ולהעתיקן ליישומים נוספים, בבחינת שימוש חוזר (Reuse) של קוד, ובכך לקצר את תהליך פיתוח התוכנה (דבר שיושם למשל בקובצי DLL). בהסבר פשטני מאוד, תכנות מונחה־עצמים הוא תכנות שמבוסס על יצירת "קופסאות שחורות" בעלות חיים עצמאיים משל עצמן, שאינן תלויות בגורם חיצוני. כל דבר בפרדיגמה זו הוא אובייקט (וישנן שפות שבהן אף משתנים פרימיטיביים הם אובייקטים). מהתפיסה הזו התפתחה מתודולוגיה המחקה את העולם הממשי שקיימים בו עצמים ותתי־עצמים, שלהם יש תכונות ופעולות משל עצמם. כך, כל תוכנה היא בעצם אוסף היררכי של אובייקטים רבים, שמקושרים אחד עם השני לכדי מערכת גדולה ומתואמת.
כאשר הקוד מאורגן לפי אובייקטים המייצגים ישויות, הדבר מאפשר שימוש חוזר בתוכנה, לצד אפשרות טובה להרחיב את הקוד הקיים. כמו כן, ישנו מעבר טבעי יותר בין הניתוח, התכנון והמימוש. יתרונה של מתודולוגיה זו היא במידול של העולם התכנותי באופן שקרוב לעולם האמיתי, יכולת שליטה בנפחים גדולים של קוד, על ידי חלוקה של עצמים לפי קטגוריות ולתת מערכות, המסייעת למיון וסידור המידע הרב על ידי שיוך פעולות ומאפיינים לאובייקטים, כאשר מאפיינים בעלי משמעות לוגית דומה, יכולים לפעול בצורה אחרת בהתאם לאובייקט שאליו הם מתייחסים.
לדוגמה, התפיסה האנושית מחלקת את העולם לקטגוריות של דומם, צומח וחי, אשר כל אחת מהן מתחלקת שוב לקטגוריות משנה, למשפחות ותתי משפחות. התכונות והפעולות, אף שיש להן משמעות דומה, יכולות לפעול בצורות אחרות בקטגוריות השונות. למשל פעולת הנשימה, שהיא קליטת החמצן מהסביבה, מתבצעת באופן שונה אצל דג ואצל אריה, אף על פי שהיא דומה מבחינה לוגית: אצל הדג הפעולה מתבצעת על ידי קליטת חמצן מהמים באמצעות זימים, ואצל האריה על ידי קליטת החמצן מהאוויר באמצעות הריאות.
היסטוריה.
הרעיון של עצמים ומופעים שלהם הופיע לראשונה בשנת 1963 בתוכנה בשם Sketchpad.
כמתודולוגיה לפיתוח תוכנה, מומש תכנות מונחה־עצמים לראשונה בשפת הסימולציה Simula 67, שנוצרה בשנות ה-60 של המאה ה-20 על ידי הנורווגים אולה־יוהאן דאל וקריסטן ניגארד. בשנת 2001 הוענק לשניים פרס טיורינג, בזכות תרומתם לפיתוחו של תכנות מונחה־עצמים. השפה מימשה למעשה סוג פרימיטיבי של סגור, שהוא תכונה של שפות תכנות המאפשרת התנהגות דומה לזאת של אובייקט.
פיתוח ושכלול של הרעיון נעשו בשפת Smalltalk, שפותחה בשנות ה-70 של המאה ה-20 בזירוקס פארק. שפה זו זכתה להכרה נרחבת ולעניין רב באקדמיה ובתעשייה, והייתה השפה הראשונה שניתן לכנותה "מונחית־עצמים".