ניתן להגדיר מחלקה חדשה על בסיס מחלקה קיימת. למחלקה החדשה ישנן כל התכונות והפעולות שירשה מהמחלקה שלפיה הוגדרה, ובנוסף ניתן להגדיר פעולות נוספות במחלקה החדשה, או לשנות פעולות שירשה. המחלקה המורישה קרויה מחלקת בסיס (base class), מחלקת־אב (parent) או מחלקת־על (superclass). המחלקה היורשת קרויה מחלקה נגזרת (derived class), בן (child) או תת־מחלקה (subclass).
דוגמה: על בסיס המחלקה "רכב" שהוא כלי שינוע, אפשר להגדיר את המחלקות: "רכב יבשתי", "כלי טיס" ו"כלי שיט" שכל אחד מהם נע בתווך שונה. מ"רכב יבשתי" אפשר להגדיר את המחלקה "רכב יבשתי לא ממונע" שממנו אפשר להגדיר את המחלקות: "אפריון", "אופניים" ו"כרכרה" שבכל אחד יש שינוי בצורת ההנעה והמטרה, ו"רכב יבשתי ממונע" שממנו אפשר להגדיר את המחלקות: "אופנוע", "משאית" ו"מכונית" אשר בכל אחת מהן יהיה שינוי בצורת הרכב, במנוע, בגלגלים ואף ביעוד הרכב. על בסיס המחלקה "מכונית" ניתן להגדיר מחלקה חדשה "מונית", ובה תכונות ופעולות נוספות: כמו "כובע" המונית, הפעלת והפסקת המונה.
הדוגמה המובהקת ביותר לרעיון ההורשה מופיעה במיון עולם הטבע. בשיטת המיון ההיררכי הנהוגה בתחום זה, מוגדרות מחלקות ברמות אחדות. בכל אחת מהרמות נקבעות תכונות מסוימות, וכל רמה יורשת את התכונות של הרמות שמעליה. כאשר אנו פוגשים עצם מסוים בעולם החי, למשל כלבה ששמה "לאסי", אנו לומדים על תכונותיו של העצם לפי המחלקה שאליה הוא משתייך.
ישנן שפות שבהן ניתן לרשת בו זמנית מכמה מחלקות בסיס, וליצור מחלקה שממזגת את התכונות של כמה מחלקות; ירושה כזאת עלולה ליצור בעיות במקרה של "ירושת יהלום", כלומר מקרה בו שתיים ממחלקות הבסיס יורשות מאותה מחלקה. בשל כך חלק מהשפות מגבילות את המנגנון לירושה ממחלקת בסיס אחת, ומימוש מספר ממשקים.
פולימורפיזם.
התמיכה בפולימורפיזם נותנת למתכנת את היכולת לממש אלגוריתמים ומבני נתונים לשימוש כללי, ולגזור מהם צורות שימוש שונות בהתאם לעצמים ולנסיבות המשתנות. הפולימורפיזם מאפשר להגדיר מושגים כלליים, ולגזור מהם מקרים ספציפיים יותר. בנוסף, מאפשרת השפה להתייחס למושג בצורה מופשטת המאפשרת הכללה. התייחסות למושג בצורה מופשטת, מאפשרת להשתמש בקוד כללי, הפועל על סוגים רבים ושונים של מושגים דומים לו. למעשה, ניתן להשתמש בקוד המתאים לעצם בכל טיפוס המהווה מקרה פרטי של המושג הכללי.
למשל, אף שיש מרחק רב בין מנוע של מעבורת חלל לבין מנוע של מכסחת דשא, באמצעות קונספט זה שיש בו הפשטה מושגית (מנוע יוגדר כמכונה הממירה אנרגיה לעבודה מכנית), אפשר להתייחס אליהם ואל מגוון האפשרויות שביניהם (מנועים של מטוס קרב סילוני, מטוס נוסעים, מטוס קל, אוניה, טנק, משאית, מכונית, קטנוע ואף אופניים חשמליים), מתוך מחלקה תכנותית אחת, תוך ביצוע ירושה והתאמות לכל אחד מהמנועים על פי המאפיינים הייחודיים שלו. גישה זו שיוצאת מהאבסטרקט ומגיעה אל הקונקרטי ביותר, מונעת את הצורך לכתוב מחדש מחלקות נפרדות עבור כל אחד ואחד מטיפוסי המנועים השונים, והיישומים המעשיים של כל אחד ואחד מהם, ומסירה מהתכנות את הסרבול של כתיבה חוזרת ונשנית, ובכך הופכת אותו לריכוזי, ארגוני, יעיל ואלגנטי.
ריבוי ייצוגים.
אובייקטים מחליטים בעצמם איזה קוד יורץ כאשר מבוצעת עליהם פעולה. שני אובייקטים המגיבים לאותה קבוצה של פעולות (כלומר בעלי ממשק משותף) עשויים להשתמש במימושים שונים לחלוטין, המתאימים לייצוג שלהם. מימושים אלה נקראים מתודות (שיטות). קריאה של פעולה לאובייקט - פעולה הנקראת "קריאה למתודה" או "שליחת הודעה" - עשויה לכלול חיפוש של שם הפעולה בזמן ריצה בטבלה המתאימה לאובייקט. תהליך זה נקרא Dynamic dispatch.
תהליך זה שונה מהמתרחש בטיפוסי נתונים מופשטים (ADT) הנתמכים גם על ידי שפות שאינן מונחות־עצמים, כגון שפת C. בטיפוסים אלה ישנו מימוש יחיד לפעולות על ערכי הטיפוס. להבדל זה ישנם הן יתרונות והן חסרונות.
פלוטו (פירושונים)
שפת סף
שפת סף או אַסֶמבּלי (באנגלית: Assembly) היא שפת התכנות הבסיסית והקרובה ביותר לשפת מכונה.
בשפת הסף, בצורתה הבסיסית, קיימת התאמה בין ההוראות שכותב המתכנת ובין ההוראות המופקות מהן בשפת מכונה, כלומר, כל הוראה יחידה באסמבלי מתורגמת להוראה אחת או יותר בשפת מכונה. לכן, כמו שפת המכונה, גם שפת הסף פועלת באופן ישיר על תאי הזיכרון של המחשב, על האוגרים הפנימיים של המעבד ועל יציאות הקלט/פלט של המחשב, ובפרטנות רבה. כתוצאה מכך, לכל סדרת מעבדים יש שפת סף משלה, כתלות בסט הפקודות של המעבד.
תכנות בשפת סף נחשב לקשה הרבה יותר מבשפות התכנות העיליות, בין היתר משום ששפת סף אינה אינטואיטיבית וקלה לקריאה כמו השפות העיליות. תכנות בשפת סף, במיוחד כזה הנחשב ליעיל, מחייב להכיר היטב את חומרת המחשב, בעוד שבשפות עיליות המהדר דואג להתאימן לחומרה. מעבר לכך, לשם ביצוע כל פעולה, ולו הפשוטה ביותר, עשויות להידרש הוראות שפת סף רבות. לדוגמה, כדי להציב במשתנה A את סכומם של המשתנים B ו־C, מספיקה בשפה עילית פקודה יחידה מצורה דומה ל־ A := B + C. באסמבלי, לעומת זאת, הפעולה תהיה ארוכה יותר, לדוגמה:
mov ax, B – העבר את הערך B אל אוגר ax
add ax, C – הוסף את הערך C לערך שנמצא באוגר ax
mov A, ax – העבר את הערך שנמצא באוגר ax אל הכתובת של המשתנה A
התכנות בשפת סף היה נפוץ למדי ואפילו דומיננטי, למרות הקושי שבו, עד לתחילת שנות ה־70 של המאה העשרים, וזאת בשל משאבי המחשב המוגבלים שעמדו לרשות המתכנתים ובשל היכולת ליצור קוד יעיל במהירות־הביצוע וחסכוני בזיכרון, יותר מקוד שנוצר בשפות עיליות. בעקבות השתכללות המהדרים של השפות העיליות, לא נותר עוד הבדל משמעותי שיצדיק את הטרחה שבכתיבה בשפת סף, והשימוש בה נדיר כיום. כיום היא משמשת בעיקר כותבי מערכות הפעלה, מפתחים של חלקי תוכנה שדרושים להם ביצועים מהירים במיוחד או תקשורת ישירה עם רכיבי חומרה (כמו מנהלי התקנים), וכן כותבי וירוסים מתוחכמים.
המהדר של שפת הסף, המתרגם את קובצי ההוראות לשפת מכונה, נקרא אסמבלר (Assembler).
בגלל ששפת סף תלויה בקוד המכונה שספציפי למערכות מחשוב שונות, כל שפת סף יכולה לשמש רק לארכיטקטורת מחשב מסוימת.
אסמבלי במעבדי 8086.
הקדמה.
נכון לשנת 2020, חלק גדול מהמעבדים בשוק מבוססים על סדרת 8086 של אינטל, וגם שפת הסף שלהם מבוססת על שפת הסף של המעבד אינטל 8086.
היות ששפת אסמבלי עוסקת בגישה ישירה לזיכרון ולהתקנים חיצוניים (באמצעות codice_1 ו־codice_2), רצוי להכיר מספר עקרונות מנחים בסיסים:
ארכיטקטורת פון נוימן – על פי ארכיטקטורה זו, אשר פותחה על ידי מדען המחשב והמתמטיקאי ג׳ון פון ניומן במאה ה־20, הנתונים וההוראות מאוחסנים באותו זיכרון. המחשב עצמו מחולק ל־4 רכיבים מרכזיים:
הגדרת סביבת עבודה.
כתיבת הקוד בשפת סף מחולקת למספר שדות הנקראים מקטעים (segments). במקטע אשר מיועד ליצירת משתנים, יש ליצור משתנים. במקטע אשר נועד להגדרת , יש להגדיר מחסניות. במקטע אשר מיועד לכתיבת קוד, יש לכתוב קוד, וכן הלאה. המקטעים נקראים בשמות שונים בסביבות עבודה שונות. טקסט זה יכיל את 3 המקטעים העיקריים:
אחת מסביבות העבודה הנוחות ביותר ללמידת שפת סף היא Emu8086 אשר פועלת במערכת ההפעלה Windows. סביבה זו היא בעצם אמולציה של המעבד הישן 8086 של אינטל (אשר פתח את סדרת מעבדי x86).
אוגרים.
אוגרים (Registers) הם יחידות זיכרון של המעבד שבאמצעותן מתבצעות פעולות שונות. למעבד לוקח זמן מאוד קצר לגשת אליהם ולכן שימוש בהם הוא יעיל.
האוגרים בטבלה לעיל נכונים לדור הבסיסי של מעבד 8086 – כיום נעשו שינויים – הוסיפו ושינו אוגרים בהתאם להתפתחות הטכנולוגיה. למשל ax, שגודלו 16 סיביות הוא חלק מאוגר eax שגודלו 32 סיביות (Double Word). עם זאת, האוגרים המצוינים בטבלה עדיין תקפים מפאת עקרון התאימות לאחור של מעבדי אינטל (קוד שנכתב למעבד ישן יותר יהיה ניתן להרצה על מעבד חדיש יותר). כל אחד מארבעת האוגרים codice_8, codice_9, codice_10 ו־codice_11 מורכב מ־2 אוגרים של 8 ביט – h (high) ו־l (low). שינוי של אחד מהאוגרים הקטנים יוביל לשינוי אוגר גדול, ולהפך – שינוי של אוגר גדול יוביל לשינוי של האוגרים הקטנים. לדוגמה, אם נשנה את al, ערך ax ישתנה בהתאם, ולהפך.
פקודות בסיסיות.
פקודות מובנות באסמבלי יכולות לקבל בין 0 ל־2 ערכים. הן מבצעות פעולות לוגיות ואריתמטיות כגון השמה, חיבור, חיסור, כפל, חילוק, השוואה, קפיצות (jmp), קפיצות מותנות (je, jne, jb, ja וכו׳).
דוגמאות קוד.
מאקרו למעבר שורה :
macro move_line
pusha
mov dl,10
mov ah,2
int 21h
mov dl,13
int 21h
מאקרו להדפסת ספרה כתו :
macro print_digit digit
pusha
mov dl,digit
add dl,30h
mov ah,2h
int 21h
לסיקור מקיף יותר של שפת סף, ניתן לגשת למדריך בויקיספר העברי.
אמונה
אמונה, במובנה הרחב, היא מצב פסיכולוגי בו אדם חש כי טענה או הנחה מסוימת היא נכונה (אמת). לפעמים משמש המושג גם לתיאור הטענה עצמה ביחס לאותו אדם. במובנה המצומצם, אמונה מתייחסת רק לעניינים שאינם טריוויאליים, ועשויה להיות מחלוקת לגבי הוכחתם. בשימוש כזה, אמונה מובחנת מידיעה, שהיא תחושת נכונות של עניינים שאינם טריוויאליים. מובן עוד יותר מצומצם של אמונה, אך מאוד נפוץ, הוא תחושת נכונות של עניינים שכלל אינם ניתנים להוכחה לוגית או אמפירית, גם לדעת המאמין. ישנן דעות שונות בשאלה אלו אמונות הן תחושות בלבד ואלו מהוות ידיעה.
אטימולוגיה.