תכנות אופייני-אובייקטי
הוצג| English | משמעות |
|---|---|
| object/ˈɒbdʒekt/ | אובייקט |
| encapsulation/ɪnˌkæpsjʊˈleɪʃn/ | עטיפה |
| class/klæs/ | כיתה |
| instance/ˈɪnstəns/ | דוגמה |
| constructor/kənˈstrʌktə/ | בונה |
| inheritance/ɪnˈherɪtəns/ | ירישה |
| subclass/ˈsʌbklæs/ | תת-סוג |
| superclass/ˈsuːpəklæs/ | סוג עליון |
| polymorphism/ˈpɒlɪmɔːfɪzəm/ | ריבוי משמעותי |
| abstraction/əbˈstrækʃn/ | השגת מושג |
| containment/kənˈteɪnmənt/ | כליאה |
| aggregation/ˌæɡrɪˈɡeɪʃn/ | אגרגציה |
שינוי במקום אחד שעבר היה אומר שינוי בחמישים
- תוכנית מאחסנת את יתרת חשבון הלקוח כמספר ציבורי. עשרים רoutines קוראות אותו ושינים כותבים אותו. כעת היתרה לעולם לא תוכל להיות שלילית.
- בלי אובייקטים, הכלל הזה צריך להוסף בשישה-עשר מקומות, והיום שאדם כלשהו מוסיף כותב שישי-עשר הוא נשבר שוב.
- עם אובייקטים, היתרה היא פרטית והדרך היחידה לשנות אותה היא מות' שמטיל את הכלל. יש מקום אחד להוסיף אותו ואין דרך לעקוף אותו.
- זהו אקפסולציה, והוא הסיבה שקיים תכנות מכוון-אובייקטים. שיעור זה הוא על אובייקטים, קלאסים, וארבעת העמודים.
אובייקטים וקלאסים
- אובייקט משלב מאפיינים, את הנתונים שלו, עם מות', הפעולות הפועלות על נתונים אלו. הוא יחידת מצב והתנהגות יחד.
- קלאס הוא התוכנית: הוא מגדיר מהם המאפיינים והמות' שכל אובייקט מסוג זה יהיה בעל. אובייקט הוא דוגמה לקלאס, עם ערכים משלו.
- אחת
Taxiקלאס, וכל מוני-טקסי אמיתי הוא אובייקט עם רישום וקיבולת משלו.

מאפיינים למעלה, מות' למטה, ונראותם מסומנת
מעבדת מושגי תכנות
קשר בין הדוגמאות לבין הרעיון התכנותי שהן מדגימות.
אובייקט מכיל:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
אובייקט מקבץ את הנתונים שלו (המאפיינים) עם הפעולות (המטרים) המופעלות עליו.
מהי הקשר בין מחלקה לאובייקט?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
מחלקת One Taxi מגדירה את המאפיינים והמטרים; כל מונית בפועל היא אובייקט עם קיבולת ורישום משלו.
בונים, מקבלים ומגדירים
- בונה הוא מות' מיוחד הנערך כאשר אובייקט נוצר, כדי להגדיר את המאפיינים שלו לערכים התחלתיים תקינים.
- מכיוון שמאפיינים הם פרטיים, הקלאס מספק מות' קבלה לקרוא ערך ומות' הגדרה לשנות אותו. מות' הגדרה הוא המקום שבו כלל כמו "לעולם שלילי" מוטל.
- זוהי הסיבה שהתכונה הפרטית שוויה להחזיק: הכלל מופעל על כל שינוי, מכיוון שאין אף דרך אחרת לגשת לנתונים.
CLASS Taxi
PRIVATE Capacity : INTEGER
PUBLIC PROCEDURE NEW(StartCapacity : INTEGER)
Capacity ← StartCapacity
ENDPROCEDURE
PUBLIC FUNCTION GetCapacity() RETURNS INTEGER
RETURN Capacity
ENDFUNCTION
ENDCLASS
קונסטרוקטור הוא מטרה מיוחדת שעושה:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
הבונה מאייר אטריבוטים של אובייקט חדש בזמן יצירתו.
עמוד תמיכה 1: אינסקפסולציה
- אינסקפסולציה פירושה שהנתונים של אובייקט נסתרים מאחורי המيثודים שלו. התכונות הן פרטיות; קוד חיצוני משתמש באתרי המרצה הפומביים.
- שני יתרונות, ובמבחן מצפים לשניהם: האובייקט יכול להפעיל את הכללים שלו בכל שינוי, והייצוג הפנימי ניתן לשינוי בטוח בעתיד, מכיוון שאף קוד חיצוני לא תלוי בו.
- אחסון המאזן בפאונדים היום ובפניים למחר: כל משתמש בקלאס עדיין קורא
GetBalance()ואף דבר מחוץ לא יתפרץ.
אנקפסולציה פירושה:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
אנקפסולציה מסתירה את הנתונים; קוד חיצוני משתמש במיתודות ציבוריות, ולכן ניתן לשנות את הפנימיות בבטחה.
מה האנקפסולציה מעניקה? בחר את כולם החלופות הנכונות.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
אנקפסולציה עוסקת בשמירות ונכונות, ולא במהירות. נתונים פרטיים עם מיתודות ציבוריות הם מה שמאפשר את שניהם.
עמוד תמיכה 2: ירושה
- ירושה מאפשרת הגדרת קלאס בת בהתייחס לקלאס העליון, תוך קבלת כל התכונות והאתרים שלו ולאחר מכן הוספת משלו או החלפת אותם.
- היא מדגמת יחס "הוא-הוא": מנהל הוא עובד, ולכן
Managerיורש מEmployeeומוסיף מחלקה. - היתרון הוא שקוד משותף נכתב פעם אחת בקלאס העליון, ושינוי בו מגיע לכל הקלאסים בת.

החלק המשותף נמצא למעלה; ההבדלים נמצאים למטה
דגמי תורשה מדמים קשר "הוא-____" (למשל, מנהל הוא עובד), ולכן קלאסה בת-עורלה תורשת ומרחיבה את הקלאסה העליונה שלה.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
תורשה היא הספקיפיציה של "הוא-"; קשרים של "יש לו-" מתודגמים באמצעות קומפוזיציה במקום זאת.
תורשה מדמת קשר "____ הוא", כמו מנהל שהוא עובד.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
רכב יש לו מנוע, וזהו קומפוזיציה ולא תורשה. הבחנה נכונה בין השניים היא מה שהשאלה בוחנת.
עמודי תמיכה 3 ו-4: פולימורפיזם ואבסטרקציה
- פולימורפיזם פירושה שאובייקטים שונים מגיבים לאותו קריאת אתר באופן משלהם. כל
Shapeיש לו אתרArea();CircleוRectangleמיישמים אותו בצורה שונה. - הערך שלו: קוד יכול לעבור על רשימה של צורות ולקרוא
Area()על כל אחת מהן, מבלי לדעת או לדאוג איזה סוג כל אחת היא. אם יוסיפו קלאסTriangleמאוחר יותר, לול הזה לא יהיה צורך בשום שינוי כלל. - אבסטרקציה פירושה הצגת ממשק פשוט והסתרת המורכבות מאחוריו: המקרא ל
Area()אינו צריך לדעת שום גיאומטריה.
פולימורפיזם מאפשר:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
אותה קריאה (למשל Area()) פועלת נכון לכל סוג — הקורא אינו צריך לדעת את הכיתה המדויקת.
סדרו את ההשלכות של הפולימורפיזום, מההגדרה ועד היתרון.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
קריאה אחת, מספר מימושים, והקוד שמשתמש בה לעולם לא יצטרך לדעת על החדשים.
דוגמה פתורה: קראו לאות עמוד תמיכה
- קלאס
BankAccountשומר את המאזן שלו כפרטי ומספק אתריםDeposit()וWithdraw()שדוחים ביצוע שינויים שיגרמו לו להיות שלילי. אינסקפסולציה: הנתונים נסתרים והכלל מופעל על ידי הדרכים היחידות לגישתו. - קלאס
SavingsAccountמוגדר כBankAccountעם תוספת שיעור ריבית. ירושה: יחס "הוא-הוא", שימוש חוזר בקוד הקלאס העליון. - לול קורא
Print()לכל מסמך ברשימה, וכל סוג מדפיק את עצמו בצורה שונה. פולימורפיזם: קריאה אחת, מספר מימושים. - קראו את שם עמוד התמיכה וגם את התכונה של התרחיש שמראה אותה.
התאמו כל עמודה של OOP למשמעותה.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
אקפסולציה = הסתרה; ירישה = is-a מומחש; פולימורפיזם = אותה ממשק, התנהגות מגוונת.
דוגמה פתורה: למה תכנות ממוחשב מבוסס אובייקטים (OOP) עבור מערכת גדולה
- ציינו שתי יתרונות של שימוש בתכנות ממוחשב מבוסס אובייקטים למערכת גדולה. [4]
- אנצקפולציה משמעותה שניתן לשנות את הפנימיים של כל מחלקה ללא השפעה על שאר התוכנה, ולכן קל יותר לתחזק את המערכת וצוות יכול לעבוד על מחלקות בו-זמנית.
- יורשות משמעותה שהתנהגות משותפת נכתבת פעם אחת ומשומשת שוב, ולכן יש פחות קוד כפול ותיקון חל בכל מקום בו-זמנית.
- פולימורפיזם משמעותה שמאפשר להוסיף סוגים חדשים ללא שינוי בקוד המשמש אותם. כל תשובה היא תכונה וגם ההשלכה שלה.
לצוות יש שחקנים; הוא עצמו אינו שחקן
- כילוי (Containment) פירונו שאובייקט מכיל אובייקט אחר כמאפיין שלו. באגרגציה, האובייקט המכול יכול להתקיים באופן עצמאי: צימאר
Teamמכיל רפרנסים לPlayerאובייקטים שיכולים לעבור לצוות אחר. - בחרו לפי הקשר: צימאר
GoalkeeperהואPlayer, לכן השתמשו בירישה; צימארTeamיש לו שחקנים, לכן השתמשו באגרגציה. צוות שמוריש שיטתKick()של שחקן הוא טעות עיצוב, גם אם הצוות היה נהנה לקבל פנילטי.
צוות מאחסן הפניות לאובייקטי שחקנים. השחקנים נשארים כאשר הצוות מוסר. אילו יחסים מתאימים?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
לקבוצה יש אובייקטי שחקנים עצמאיים. ירישה דורשת קשר "הוא-" (is-a).
דוגמה מפורטת: עיצוב צוות ללא העתקת שחקניו
- נתון: צימאר
Playerיש שם פרטי ושיטתGetName(). עיצבוTeamעם איסוף פרטיMembersהמכיל רפרנסים לPlayerאובייקטים ושיטתAddPlayer(NewPlayer)המוסיפה רפרנס. - צימאר
Playerיכול להתקיים לפני הצוות, וצוות יכול להימחק בעוד שחקניו נשארים. זוהי אגרגציה. שינוי שם של שחקן דרך שיטתו个人的 visible לכל אובייקט המחזיק בשחקן זה; שרט מופק של שם יהפוך למיושן.
Player object: name = "Sam"
Team object: Members = [reference to Sam's Player object]
Goalkeeper class: inherits the Player attributes and methods
בעיצוב זה, הסרת קבוצה חייבת גם להסיר כל שחקן המכילת.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
לשחקנים יש קיום עצמאי. הסרת הקבוצה תסיר את הייחוסים שלה, אך לא בהכרח את אובייקטי השחקנים.
התאם את כל עיצוב ליחס המתאים לו.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
ירישה מדגמת קשר "הוא-"; הרכבה מדגמת "יש-" עם אובייקטים עצמאיים; אינקפסולציה שולטת בגישה לנתונים.
סימונים נופלים מהיד
- מחלקה היא תבנית, אובייקט הוא אינסטנס שלה. אין להשתמש במונחים הללו בהחלפה זה לזה.
- אנצקפולציה היא הסתרת נתונים מאחורי מתודות, והיתרונות שלה הם הטלת כללים ושינוי בטוח בפנימיים. "זה יותר מאובטח" הוא ניסוח מטושטש מדי.
- יורשות היא קשר של is-a (בשאלה: "הוא/היא"). רכב יש לו מנוע, וזהו קומפוזיציה ולא יורשות.
- פולימורפיזם הוא אותו קריאה המתנהגת בצורה שונה בהתאם למחלקה, מה שמאפשר הוספת סוג בתת-מחלקה חדשה ללא שינוי בקוד הקיים.
הבנתך מושלמת
- אובייקט משלב מאפיינים ומתודות; מחלקה היא התבנית ואובייקט הוא אינסטנס, שנבנה על ידי קונסטרוקטור.
- אנצקפולציה: נתונים פרטיים מאחורי מתודות ציבוריות, כך שכללים מוטלים על כל שינוי והפנימיים יכולים להשתנות בבטחה.
- יורשות: תת-מחלקה לוקחת את החברים של מחלקת על ומוסיפה או מעליהם, ומדמה קשר is-a וכותבת קוד משותף פעם אחת.
- פולימורפיזם: אותה קריאה מיושמת בצורה שונה בהתאם למחלקה, ולכן לסוגים חדשים אין צורך בשינוי בקוד הקיים; אstraction: ממשק פשוט המסתיר את המורכבות.