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

תוכן שנמחק תוכן שנוסף
מ הוספת {{תב|ויקישיתוף בשורה}} בקישורים חיצוניים במידה וחסר (תג) (דיון)
Matanyabot (שיחה | תרומות)
מ בוט החלפות: לעיתים
שורה 1:
'''תכנות מונחה־עצמים''' או לעתיםלעיתים '''תכנות מוכוון־עצמים''' (ב[[אנגלית]]: '''Object-Oriented Programming''', או בקיצור '''OOP''') הוא [[פרדיגמת תכנות]] המשתמשת ב"עצמים" ([[אובייקט (מדעי המחשב)|אובייקטים]]) לשם [[תכנות]] [[תוכנית מחשב|תוכניות מחשב]].
 
בפרדיגמה זו שמאפייניה הן [[מודולריות (תכנות)|מודולריות]], מדרגיות ו[[אבסטרקציה (מדעי המחשב)|אבסטרקציה]] (הפשטה), מרחב התוכנה הוא למעשה מרחב של אובייקטים תכנותיים בעלי יחסים היררכיים ביניהם. כל ישות תכנותית היא מחלקה/אובייקט בעלת מאפיינים ופעולות משלה הקיימת כיחידה סגורה ועצמאית. בשיטה זו קיימת הפרדה בין המימוש הפנימי לבין הממשק החיצוני של המחלקה, בדומה לצורת העיצוב של מכשירים רבים.
שורה 36:
על מנת להשתמש במחלקה, המתכנת יוצר מופעים שלה. כל מופע של מחלקה הוא עצם (Object או Instance). היחס בין המחלקה לבין המופע, הוא היחס בין הגדרת טיפוס (Type) לבין הכרזת משתנה מסוג טיפוס בפועל בזיכרון המחשב. כלומר, בעוד שהמחלקה מהווה תבנית ומגדירה את התכונות והפעולות השייכות לה, עצם הוא משתנה פעיל שטיפוסו הוא המחלקה ומכיל את המידע הזה בפועל - כל עצם מכיל את התכונות והפעולות שהוגדרו במחלקה ממנה נוצר. לדוגמה, למחלקה הקרויה "מכונית" יש תכונות: צבע, דגם, שנת יצור, ופעולות: התנעה, נסיעה, עצירה. כל מכונית מסוימת היא עצם במחלקה זו, ולכל תכונה ערך המתאים למכונית המסוימת, למשל [[מזדה]] לבנה מודל 2003.
 
בכל מחלקה קיימות שתי פונקציות שמופעלות באופן אוטומטי על המופעים שלה בעת יצירתם ובעת מחיקתם. בעת יצירת המופע תופעל '''פונקציית בנאי''' (Constructor), באמצעותה אפשר לאתחל את האובייקט, לעתיםלעיתים באמצעות פרמטרים המועברים אליה. בעת הריסת האובייקט תופעל '''פונקציה הורסת''' (Destructor), באמצעותה אפשר למשל לשחרר זיכרון שהיה בשימוש על ידי העצם, או למחוק אובייקטים אחרים שכבר אין בהם צורך. בשפות המשתמשות במנגנון [[איסוף זבל (מדעי המחשב)|איסוף זבל]] (Garbage collection), כגון [[Java]], ישנה פונקציה מקבילה אך היא נקראת רק בעת ההריסה הסופית של העצם על ידי המנגנון, ולכן תפקידיה שונים.
 
התכנות במתודולוגיה זו מצריך תכנון ומאמץ יתר מבשיטה הרגילה, מפני שצריך לנתח, להגדיר ולארגן מראש את המערכת כולה ולבנות את כל המודל שלה, שבו יוגדרו כל האובייקטים השונים, הפונקציונליות שלהם וההיררכיה שביניהם, כך שהמתכנת הופך להיות ארכיטקט וקבלן גם יחד. הכתיבה איננה אינטואיטיבית כמו בשפה פרוצדורלית מכיוון שאפילו כתיבת פונקציה פשוטה, כופה יצירת אובייקט שלם עם פונקציות בונות והורסות. מצד שני נוצרת תוכנה מאורגנת, ולמתכנת המשתמש באובייקטים או המנסה לתחזק אותם, הרבה יותר קל להתמצא, לפתח ולתחזק כאשר הוא מתבסס על קוד של תכנות מונחה־עצמים, בהשוואה לקוד פרוצדורלי, מפני שהוא מאורגן וממופה יותר, ושינוי קטן במקום אחד בתוכנה אמור להשפיע באופן מקומי על האובייקט שבו הוא התבצע השינוי, ולא על כל התוכנה כולה.
שורה 100:
=== כימוס ===
{{הפניה לערך מורחב|ערך=[[כימוס]]}}
המימוש הפנימי של אובייקט הוא באופן כללי מוסתר מחלקי קוד החיצוניים להגדרת האובייקט. רק המתודות של האובייקט עצמו (או לעתיםלעיתים, של אובייקטים אחרים השייכים לאותה מחלקה) רשאיות לבצע פעולות על השדות שלו.
 
יצירת האובייקט כמודול סגור וכ"[[קופסה שחורה (הנדסה)|קופסה שחורה]]", בה כל המכניזם הפנימי עלום וכמוס מפני המשתמש, מאפשרת בקרה טובה על כל הפעילות עם האובייקט. כל הנתונים הפנימיים כמו גם פעולות פנימיות, המשמשים את העצם, אינם ידועים מחוץ לעצם (כלומר למתכנת המשתמש בו) ולכן מפתח האובייקט יכול לשנותם בחופשיות מבלי שיהיה צורך לשנות את התוכנות אשר משתמשות באובייקט. הדבר גם מאפשר להחליף בקלות ופשטות מנועי תכנות אשר פועלים מבחינה פנימית באופן שונה לגמרי, כל זמן שהם נותנים כלפי חוץ את אותם שיטות ומאפיינים. קשר מסוג זה בין עצמים קרוי [[צימוד רפוי]] (loose coupling), והוא מקל על יצירת תוכנית מודולרית, פשוטה להבנה וניווט, וקלה לתחזוקה. ניתן לתאר כלי רכב שמשתמש במנוע מסוים ויש לו מעט חיבורים סטנדרטיים, ללא כל גישה לפעילות הפנימית של המנוע. הסיכוי שהפעילות של כלי הרכב באמצעות המנוע לגרום לו לתקלה פנימית מתמעט, והאפשרות להחליף מנוע מטיפוס אחד במנוע עם ממשקים חיצוניים דומים אפשרי מאוד. בדוגמה ניתן לראות כלי רכב, שמשתמש במנוע, תיבת הילוכים ומשאבת דלק, כאשר כל אחד מהם הוא אובייקט כמוס, שלא ניתן לשנות את החלקים הפנימיים שלו אלא להשתמש בשיטות שהוא חושף.
שורה 143:
{{ערך מורחב|ירושה (תכנות)}}
 
אובייקטים המשתפים חלקים מהממשק שלהם, משתפים לעתיםלעיתים קרובות גם התנהגות. ירושה מאפשרת לממש את ההתנהגות המשותפת הזאת פעם אחת. רוב השפות מונחות־העצמים משיגות את היכולת הזאת דרך מחלקות, שכל האובייקטים הנוצרים דרכן משתפים התנהגות - ודרך מנגנון שנקרא ירושה, המאפשר למחלקה אחת להרחיב מחלקה אחרת - להוסיף לה מימוש והתנהגות דרך מימושים של מתודות חדשות, הוספה של משתנים, ובמקרה הצורך ביצוע של '''דריסה''' של מתודות שהוגדרו במחלקה ממנה יורשים. (שפות אחרות משתמשות במנגנון שונה, הנקרא delegation).
 
ניתן להגדיר מחלקה חדשה על בסיס מחלקה קיימת. למחלקה החדשה ישנן כל התכונות והפעולות שירשה מהמחלקה שעל־פיה הוגדרה, ובנוסף ניתן להגדיר פעולות נוספות במחלקה החדשה, או לשנות פעולות שירשה. המחלקה המורישה קרויה מחלקת בסיס (base class), מחלקת אב (parent) או מחלקת־על (superclass). המחלקה היורשת קרויה מחלקה נגזרת (derived class), בן (child) או תת־מחלקה (subclass).