תכנות מונחה עצמים (OOP) - מתודות (Methods)

סגור באמצעות טופס זה תוכלו לספר ולהמליץ לחבריכם..
שם השולח:
כתובת דוא"ל של השולח:
שם המקבל:
שלח לכתובת דוא"ל:
הוסף הערה:
מחלקות מגדירות לא רק את תכונות המחלקה אלא גם את ההתנהגות של המחלקה, דהיינו, את הפעולות שהמחלקה מסוגלת לבצע ובכך להשפיע על התוכנית. הפעולות מוגדרות באמצעות המתודות של המחלקה.

מתודות (Methods) מתודות


 
מאת: ארז קלר

הורדת דוגמת קוד 


אם היינו מתבקשים לכתוב מחלקה המייצגת טוש סביר להניח שהיינו מגדירים אותה כדלקמן:
תכונות: שם יצרן, דגם, מחיר, צבע, עובי, כמות דיו וכו'.
פעולות: צייר עיגול, צייר מלבן, צבע שטח, כתוב מחרוזת וכדומה.
שאלה:
איזה חלק המחלקה יותר חשוב: התכונות או המתודות? (התשובה שניהם חשובים לא תתקבל).
תשובה:
המתודות יותר חשובות משום שהן למעשה הערך המוסף של המחלקה, והן הסיבה האמיתית להגדרת אובייקטים מהמחלקה.
במציאות אנו לא נרכוש טוש רק בגלל שהוא במבצע או רק בגלל שהוא בצבע אדום או רק בגלל כמות הדיו, אנו נרכוש טוש כאשר נצטרך לצייר עיגול או לשרטט מלבן או כאשר נרצה לכתוב מחרוזת על לוח.
כך גם בעולם התכנות, אנו נגדיר מחלקה המייצגת טוש ונקצה ממנה אובייקטים כאשר יש משמעות לפונקציונאליות שלה במערכת (יש מקרים שבהם המידע הוא הפונקציונאליות הנדרשת, כמו בדוחות למשל, אבל זה המקרה הפחות שכיח).
 
אובייקטים "עושים משהוא" בתוכנית, וה"משהוא" שהם עושים משפיע על ההתנהלות ואו התוצאות של התוכנית, אחרת אין בהם צורך.
מחלקות מגדירות לא רק את תכונות המחלקה אלא גם את ההתנהגות של המחלקה, דהיינו, את הפעולות שהמחלקה מסוגלת לבצע ובכך להשפיע על התוכנית.
הפעולות מוגדרות באמצעות המתודות של המחלקה.
 
בתכנון מחלקה יש לקחת בחשבון תחילה את ההתנהגויות הנדרשות, תכונות המחלקה הנדרשות הן לעיתים תוצאה של צרכי ההתנהגויות.
וזה תפקיד המתודות, ולשם כך הן נדרשות, להגדיר את הפונקציונאליות של האובייקט במערכת.

כתיבה וקריאה

ישנן שני סוגים של מתודות: מתודות סטאטיות ומתודות מופע.
מתודות סטאטיות הן מתודות ברמת המחלקה ולא ברמת האובייקט (לא הגדרנו אובייקט בשביל לקרוא להן).
מתודות סטאטיות הן מתודות שאינן מייצגות התנהגות או פעולה של אובייקט אלא מייצגות שירות שהמחלקה מספקת לתוכנית או לכלל האובייקטים של המחלקה.
בתכנון ובכתיבת מחלקות יש צורך לתכנן ולכתוב מתודות המטפלות באובייקט או מייצגות פעולה שהאובייקט מסוגל לבצע (או שאנו מסוגלים לבצע עליו).
מתודות הללו לא יוגדרו כמתודות סטאטיות אלא כמתודות מופע (Instance Method).
מתודות מופע מוגדרות בדיוק כמו מתודות סטאטיות למעט הסרה של המילה השמורה static.
מתודות סטאטיות הופעלו על ידי המחלקה, מתודות מופע מופעלות על ידי האובייקט.
כל החוקים, הכללים והמוסכמות שנסקרו בפרק 11 תקפים גם בהגדרת מתודות מופע.
מחלקה יכולה להכיל מתודות מופע לצד מתודות סטאטיות.

דוגמת קוד - המחלקה Car: 
 1  : public enum EngineState { Off, On } 
 2  : public enum Direction { North, East, South, West } 
 3  : public class Car 
 4  : { 
 5  :     private EngineState m_EngineState; 
 6  :     private int m_Speed; 
 7  :     private Direction m_Direction; 
 8  :     public void TurnOn() 
 9  :     { 
 10 :         if (m_EngineState == EngineState.Off) 
 11 :             m_EngineState = EngineState.On; 
 12 :         else 
 13 :             Console.WriteLine("Engine is already turn-on"); 
 14 :     } 
 15 :     public void TurnOff() 
 16 :     { 
 17 :         if (m_EngineState == EngineState.On) 
 18 :         { 
 19 :             m_EngineState = EngineState.Off; 
 20 :             m_Speed = 0; 
 21 :         } 
 22 :         else 
 23 :             Console.WriteLine("Engine is already turn-off"); 
 24 :     } 
 25 :     public void Accelerate() 
 26 :     { 
 27 :         if (m_EngineState == EngineState.On && m_Speed <  180) 
 28 :             m_Speed += 5; 
 29 :     } 
 30 :     public void Accelerate(int speed) 
 31 :     { 
 32 :         if (speed  >= 0 && m_EngineState == EngineState.On 
 33 :                                    && (m_Speed + speed) <  180) 
 34 :             m_Speed += speed; 
 35 :     } 
 36 :     public void SlowDown() 
 37 :     { 
 38 :         if (m_Speed  > 0) 
 39 :             m_Speed -= 5; 
 40 :     } 
 41 :     public void SlowDown(int speed) 
 42 :     { 
 43 :         if (speed  >= 0 && (m_Speed - speed)  > 0) 
 44 :             m_Speed -= 5; 
 45 :     } 
 46 :     public void TurnRight() 
 47 :     { 
 48 :         if (m_EngineState == EngineState.Off) 
 49 :         { 
 50 :             switch (m_Direction) 
 51 :             { 
 52 :                 case Direction.North: 
 53 :                     m_Direction = Direction.West; 
 54 :                     break; 
 55 :                 case Direction.West: 
 56 :                     m_Direction = Direction.South; 
 57 :                     break; 
 58 :                 case Direction.South: 
 59 :                     m_Direction = Direction.East; 
 60 :                     break; 
 61 :                 case Direction.East: 
 62 :                     m_Direction = Direction.North; 
 63 :                     break; 
 64 :             } 
 65 :         } 
 66 :         else 
 67 :             Console.WriteLine("Can't redirect the car when engine is stopped"); 
 68 :     } 
 69 :     public void TurnLeft() 
 70 :     { 
 71 :         if (m_EngineState == EngineState.On) 
 72 :         { 
 73 :             switch (m_Direction) 
 74 :             { 
 75 :                 case Direction.North: 
 76 :                     m_Direction = Direction.East; 
 77 :                     break; 
 78 :                 case Direction.East: 
 79 :                     m_Direction = Direction.South; 
 80 :                     break; 
 81 :                 case Direction.South: 
 82 :                     m_Direction = Direction.West; 
 83 :                     break; 
 84 :                 case Direction.West: 
 85 :                     m_Direction = Direction.North; 
 86 :                     break; 
 87 :             } 
 88 :         } 
 89 :         else 
 90 :             Console.WriteLine("Can't redirect the car when engine is stopped"); 
 91 :     } 
 92 :     public void Print() 
 93 :     { 
 94 :         Console.WriteLine("Speed: {0}, Direction : {1}", 
 95 :                                         m_Speed, m_Direction); 
 96 :     } 
 97 : } 
בשורה 1 ובשורה 2 נגדיר שני Enumerations , באמצעות הראשון נדע האם המנוע נונע או כבוי.
באמצעות השני נדע את כיוון נסיעתה של המכונית.
המחלקה Car (שורה 3) מכילה שלוש תכונות:
  • מצב המנוע - כבוי או דולק (שורה 5).
  • מהירות הנסיעה נוכחית של המכונית (שורה 6).
  • כיוון הנסיעה (שורה 7).
המתודות או ההתנהגויות של המכונית הן:
  • ()TurnOn (שורה 8) - התנעת המנוע אם הוא כבוי.
  • ()TurnOff (שורה 15) - כיבוי המנוע אם הוא מונע.
  • ()Accelerate (שורה 25) - האצת המכונית ב-5 קמ"ש בכל פעם שהמתודה מופעלת.
  • (Accelerate(int speed (שורה 30) - האצת המהירות למהירות נדרשת המתקבלת כפרמטר.
  • ()SlowDown (שורה 36) - האטת מהירות המכונית ב-5 קמ"ש בכל פעם שהמתודה מופעלת.
  • (SlowDown(int speed (שורה 36) - האטת מהירות המכונית למהירות נדרשת המתקבלת כפרמטר.
  • ​()TurnRight (שורה 46) - הפניית המכונית ימינה.
  • ()TurnLeft (שורה 69) - הפניית המכונית שמאלה.
  • ()Print (עמוד 92)- הדפסת ה- State של המכונית
מה התועלת מכונית ללא הפונקציונאליות שלה?
מה התועלת האובייקט מכונית ללא המתודות?
לא יותר מפוסטר.
 
Main:
 1  : class Program 
 2  : { 
 3  :     static void Main(string[] args) 
 4  :     { 
 5  :         Car c = new Car(); 
 6  :         c.TurnOn(); 
 7  :         c.Print(); 
 8  :         c.Accelerate(); 
 9  :         c.Print(); 
 10 :         c.TurnLeft(); 
 11 :         c.Print(); 
 12 :         c.Accelerate(); 
 13 :         c.Accelerate(); 
 14 :         c.Accelerate(); 
 15 :         c.Accelerate(); 
 16 :         c.Accelerate(); 
 17 :         c.Accelerate(); 
 18 :         c.Print(); 
 19 :         c.TurnOff(); 
 20 :         c.Print(); 
 21 :     } 
 22 : } 

המתודה Main מציגה הקצאת אובייקט מהמחלקה Car והפעלת המתודות שלו,
עכשיו רק תוסיפו בדמיונכם תצוגה גראפית מרשימה ואת משחק המירוץ שבו המחלקה Car מככבת.



פלט:
פלט של דוגמת הקוד MethodSample

 

 

 
כל הזכויות שמורות למחבר ©