תכנות מונחה-עצמים – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
מ קו מפריד בטווח מספרים
←‏כימוס: הרחבה - דוגמת קוד
שורה 58:
המימוש הפנימי של אובייקט הוא באופן כללי מוסתר מחלקי קוד החיצוניים להגדרת האובייקט. רק המתודות של האובייקט עצמו (או לעתים, של אובייקטים אחרים השייכים לאותה מחלקה) רשאיות לבצע פעולות על השדות שלו.
 
יצירת האובייקט כמודול סגור וכ"[[קופסה שחורה (הנדסה)|קופסה שחורה]]", בה כל המכניזם הפנימי עלום וכמוס מפני המשתמש, מאפשרת בקרה טובה על כל הפעילות עם האובייקט. כל הנתונים הפנימיים כמו גם פעולות פנימיות, המשמשים את העצם, אינם ידועים מחוץ לעצם (כלומר למתכנת המשתמש בו) ולכן מפתח האובייקט יכול לשנותם בחופשיות מבלי שיהיה צורך לשנות את התוכנות אשר משתמשות באובייקט. הדבר גם מאפשר להחליף בקלות ופשטות מנועי תכנות אשר פועלים מבחינה פנימית באופן שונה לגמרי, כל זמן שהם נותנים כלפי חוץ את אותם שיטות ומאפיינים. קשר מסוג זה בין עצמים קרוי [[צימוד רפוי]] (loose coupling), והוא מקל על יצירת תוכנית מודולרית, פשוטה להבנה וניווט, וקלה לתחזוקה. ניתן לתאר כלי רכב שמשתמש במנוע מסוים ויש לו מעט חיבורים סטנדרטיים, ללא כל גישה לפעילות הפנימית של המנוע. הסיכוי שהפעילות של כלי הרכב באמצעות המנוע לגרום לו לתקלה פנימית מתמעט, והאפשרות להחליף מנוע מטיפוס אחד במנוע עם ממשקים חיצוניים דומים אפשרי מאוד. בדוגמה ניתן לראות כלי רכב, שמשתמש במנוע, תיבת הילוכים ומשאבת דלק, כאשר כל אחד מהם הוא אובייקט כמוס, שלא ניתן לשנות את החלקים הפנימיים שלו אלא להשתמש בשיטות שהוא חושף.
<syntaxhighlight lang="csharp">
class Vehicle
{
Engin engine = new Engin();
Gear gear = new Gear();
GasPump gasPump = new GasPump();
 
public void StartDriving(int gearNum)
{
engine.TurnOn();
gear.TransferGear(gearNum);
gasPump.FuelInject(20.55F);
}
}
</syntaxhighlight>
טיפוסי נתונים מופשטים מאפשרים כימוס בצורה דומה לזאת של אובייקטים.