תכנות מונחה-אירועים

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

בהנדסת תוכנה, תכנות מונחה אירועים (באנגלית: Event-driven programming) הוא תפיסה בתכנות. הרעיון הוא שבתוך תוכנית המחשב קיימים חלקים (ערוכים כרצפי פעולות), הממתינים לקבלת אות. האות נקרא "מאורע" (event) והוא מתקבל כאשר מתרחש אירוע מסוים במערכת, אליו קשוב היישום.

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

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

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

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

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

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

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

דוגמה[עריכת קוד מקור | עריכה]

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

Public Class Form1
    Private WithEvents people1 As People = New People()
 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        people1.DateOfBirth = #8/30/1999#
    End Sub
 
    Sub BirthDate(ByVal sender As Object, ByVal age As Integer) Handles people1.BirthDate
        Console.WriteLine(age.ToString())
    End Sub
End Class
 
Public Class People
    Public Property DateOfBirth As Date
 
    Public Event BirthDate(ByVal sender As Object, ByVal age As Integer)
 
    Private Sub CheckBirthDate() ' Operate by timer once a day
        If (DateOfBirth.Month = Date.Today.Month And DateOfBirth.Day = Date.Today.Day) Then
            RaiseEvent BirthDate(Me, DateDiff(DateInterval.Year, DateOfBirth, Date.Today))
        End If
    End Sub
End Class

סביבות תכנות[עריכת קוד מקור | עריכה]

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

ראו גם[עריכת קוד מקור | עריכה]

Crystal kpackage.png ערך זה הוא קצרמר בנושא תוכנה. אתם מוזמנים לתרום לוויקיפדיה ולהרחיב אותו.