» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
קריאות לאחור II
דף ראשי  מתקדמים  קריאות לאחור II גרסה להדפסה

קריאות לאחור II

זהו השני מבין שלושה שיעורים עוקבים בנושא קריאות לאחור ב- Java. שלושת השיעורים הם קריאות לאחור I , קריאות לאחור II, קריאות לאחור III.

 

סטודנטים בקורס ביניים בתכנות Java ב-ACC אחראים להכרת והבנת כל החומר בשיעור זה.

 

 

- מבוא

- תוכנית לדוגמא

          - קטעי קוד מעניינים

          - סיכום

          - רישום תוכנית

  

   


 

מבוא

תהליכים רבים ב Java API סטנדרטי משתמשים במכניזם אשר בסביבות תכנות אחרות ייתכן ויהיה מכונה מכניזם הקריאה לאחור.

 

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

 

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

 

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

 

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

 

שיעור זה מגדיל את התוכנית הקודמת כדי שתוכל לבצע אפשרות זו.

 

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

 

התרחיש שלנו כולל מורה ומספר תלמידים. תחילה היה תלמיד אחד בלבד. אז הרחבנו את התרחיש שיכלול תלמידים רבים ומספר חיות בכתה בנוסף.

 

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

 

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

 

ללא דיון נוסף, הבא נסתכל על קצת קוד.

 

תוכנית דוגמא

במקרה והתחלת לקרוא בנקודה זו, זוהי הגדלת הגרסה של תוכנית בשם קריאה לאחור02.
כדאי לך להכיר את התוכנית הקודמת לפני הניסיון להבנת תוכנית זו.

 

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

 

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

 

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

 

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

 

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

 

(על אף שלא דנו עדיין בנושא, אני מאמין שתקורה היא הסיבה ש-  JavaSoft בחרו להפריד את ממשקי מאזין עכבר ומאזין תנועות עכבר (MouseMotionListener) אולי מישהו יזכיר לי לדון בזה כשנגיע לנושא ממשק מאזין תנועות עכבר בשיעור בכתה).

 

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

 

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

 

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

 

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

 

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

 

ההודעה היא בצורת קריאה לפונקצית recess() או לפונקצית lunch() בכל האובייקטים ברשימה.

 

לבסוף, התוכנית מגדירה מחלקת בקרה אשר מקשרת בין כל החלקים ומתרגלת אותם.

 

התוכנית נבדקה תוך שימוש ב- JDK 1.1.3  תחת Win95.

 

הפלט מהתוכנית מוצג מאוחר יותר.

 06-12-03 / 16:35  עודכן ,  13-10-03 / 20:04  נוצר ע"י רונית רייכמן  בתאריך 
 רישום תוכנית - הקודםהבא - קטעי קוד מעניינים + סיכום 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 11