שאלה בקשר ל-Java

  • פותח הנושא OICW
  • פורסם בתאריך

OICW

New member
שאלה בקשר ל-Java

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

neko

New member
../images/Emo13.gif פשוט מאד - עד היום תכנתת בשפות

שאינן מונחות עצמים, וכתבת פונקציות\פרוצדורות, נכון? מתודה סטטית בJAVA היא בדיוק כמו פונקציה\מתודה בשפות פרוצדורליות - מפעילה קוד ומחזירה ערך (לא חובה). ההבדל הוא שמתודה שאינה סטטית מקושרת לאובייקט ספציפי ופועלת עליו. דוגמא: המתודה Math.sin() היא מתודה סטטית, המתודה Dog.setValue() תהיה דינאמית (לא סטטית). מקווה שעזרתי.
 

OICW

New member
סבבה,תודה! ואם אפשר עוד שאלה

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

neko

New member
כמובן שאתה מובן... גם אנחנו עברנו

את זה.
MAIN חייבת להיות סטטית, מכיוון שהיא אינה שייכת לאובייקט. היא רצה בפני עצמה. בדיוק כמו פונקציה\פרוצדורה\מתודה סטטית. זה די בסיסי, כי בלי MAIN לא תוכל להתחיל להריץ קוד וליצור אובייקטים, שלהם יכולות להיות מתודות דינמיות. חוק האצבע למתכנת OO מתחיל: לעשות הכל סטטי, למעט מה שעובד ספציפית על אובייקט כלשהו. (חוק האצבע מתהפך כשהופכים למתכנתי OO אמיתיים, אבל אנחנו עוד צעירים בשביל זה...
) זה אמנם קצת פשטני לראות את זה ככה (ואם תקרא את ההודעה של VOGUEMASTER מתחת תראה את זה), אבל אין טעם להכנס יותר לעומק כרגע, ואחרי שכבר תתרגל לרעיון ותעבוד איתו חודש-חודשיים, כבר תתחיל להבין את הסיבות המדוייקות לצורה בה JAVA בנוייה.
 

voguemaster

New member
אז ככה

בכל מקרה, מתודה סטטית/רגילה בכל מקרה שייכת למחלקה שבה הגדרת אותה כמובן, זה לא לגמרי נכון שפונק' סטטית היא פונק' חופשית לחלוטין כמו ב-C לדוגמא. ההבדלים הם שפונקציה סטטית קיימת גם מבלי שייצרת אובייקטים של המחלקה שבה היא מוגדרת בעוד שפונק' רגילה בד"כ משויכת עם אובייקט כלשהו שיצרת מהמחלקה. לדוגמא, קריאה למתודה של String בד"כ עובדת על אובייקט המחרוזת הספציפי שאתה מטפל בו. זה *דורש* שיהיה כזה אובייקט (נניח ואתה קורא ל-equalsToIgnoreCase או איך שקוראים לה). עם פונק' סטטית אין דרישה כזו. יש לך מחלקה מוגדרת ואתה לא חייב אפילו ליצור אובייקט אחד של המחלקה הזו כדי לקרוא לפונק' הזו. אפשר לקרוא לה בד"כ מתי שרוצים. המשמעות: היא מן הסתם לא פועלת על איזשהו אובייקט ספציפי של המחלקה כמו בדוגמא הקודמת, בד"כ היא משמשת לפעולות utility כלשהן... ספציפית לגבי main: תראה, היות וכשהתוכנית מתחילה לרוץ אין אובייקטים בכלל (כי לא יצרת עדיין!) אז חייבת להיות נקודת התחלה כלשהי לתוכנית שלא תהיה תלויה ביצירה של אובייקטים. פונק' סטטית היא פונק' כזו ולכן main מוגדרת כך. זו הגדרה פשוטה משהו אבל לדעתי היא בסדר
 

OICW

New member
תודה רבה לכל מי שעזר לי בשרשור../images/Emo70.gif

זה עזר מאוד
 
בנוסף למה שאמרו על מתודה סטטית

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