UI - פוסט 2: Swing vs. GDI
זהו פוסט המשך לפוסט הקודם "ממשקי מחשב בעשרים שנים האחרונות" מתוך סדרת פוסטים על UI. פוסט הקודם נתן סקירה קצרה וכללית על היסטורייה של ממשקי מחשב ומערכות הפעלה הנפוצות.
(אפשר לקרוא את הפוסט הזה גם ללא קשר לפוסטים הקודמים)
UI - פוסט 2: Swing vs. GDI
על מנת לקבל מידע מהמכונה (כאן, מחשב) או להזין מידע למכונה יש להשתמש בהתקני קלט-פלט, במקרה שלנו - מסך מחשב. מסך מחשב - LCD או CRT, מציג מידע ויזואלי (CRT בעזרת קרן קתודית-מגנטית על גבי האלקטרודות או ע"י שינוי של צבע הקריסטלים נוזליים ב-LCD). אלקטרודה או קריסטל (גביש) הנם יחידות חומרה קטנות ביותר לתצוגה של נקודה אחת בצבע כלשהו (לא אתייחס לטכניקות הקרנה שונות בשלב זה). מכאן ניתן לומר שהצגת מידה מתבצעת ע"י ציור מיליוני נקודות (פיקסלים) על המסך.
GDI
כל מערכת מכילה רכיב תוכנה אשר אחראי "לציור" מידע גראפי (טקסט וסוגי גרפיקה אחרים). רכיב נקרא: GDI - Graphics Design Interface, ממשק עיצוב גראפי. לכל מערכת הפעלה יש מנוע גרפי משלה אשר פותח בהתאם להגדרת השימוש של אותה מערכת הפעלה. ניתן לציין שלחלק מן התוכנות שאינן חלק מובנה של מערכת הפעלה יש מנוע גרפי משלהן, שעובד במקביל למנוע גרפי של מערכת ההפעלה או "מעליו" (אתייחס למינוח זה בהמשך).
ליתר דיוק יש לומר ש"ציור" מתבצע ע"י החומרה - כרטיס מסך. יצרן של כרטיס מסך מספק עימו תוכנה אשר מאפשרת לשלוט בכרטיס - תוכנה נקראת "Driver" (מנהל התקן). מערכת הפעלה משתמשת בדרייבר על מנת להציג מידע גראפי על המסך. רכיב שנמצא מעל הדרייבר (מעל - ז"א מפעיל את הדרייבר - נמצא בשכבה מעליו) הנו GDI.
במערכות הפעלה של מיקרוסופט ואפל יש GDI (לכל חברה יש GDI משלה). מתחילת שנות התשעים של המאה העשרים ועד היום טכנולוגיה לא עברה הרבה שינויים. מנוע "מצייר" אובייקטים גראפיים על מסך המחשב בשיטת ראסטריזציה.
ראסטריזציה - מיפוי סיביות, תרגום מידע מספרי למידע ויזואלי אשר מתורגם לפיקסלים על גבי צג המחשב או קבצים של מפת סיביות (bitmap files). למשל: אם GDI מצייר קו אשר מיוצג בזיכרון המחשב ע"י שתי נקודות (x1,y1)A ו-(x2,y2)B, בעובי של 2 פיקסלים ובצבע שחור; מנוע יצייר את הקו פיקסל אחרי פיקסל מנקודה A ועד נקודה B, לכל פיקסל יינתן צבע שחור ורוחב הקו ייוצג ע"י שני פיקסלים לכל האורך. לסיכום: כל המידע הגראפי שמוצג על המסך מצויר ע"י הפיקסלים.

Swing
זהו מנוע גראפי אשר פותח ע"י חברת Sun ומהווה חלק מחבילת פיתוח של Java. מנוע זה עובד במקביל ל-GDI, ז"א נמצא בשכבה מעל הדרייבר של כרטיס מסך.
קצת היסטוריה:
ג'אווה - שם של שפת תכנות וגם שם של חבילת פיתוח, ניתנת להתקנה ברוב מערכות הפעלה נפוצות. הרעיון שעומד מאחורי הפצתה של החבילה הוא שניתן לפתח תוכנה בשפת ג'אווה ולהריצה במערכות הפעלה שונות, Sun יצרה חבילת פיתוח עבור המפתחים, שיעשו שימוש במחלקות שלה. על מנת להריץ את התוכנה שנכתבה בשפת ג'אווה יש להתקין את החבילה במערכת הפעלה. חבילת פיתוח זו מאפשרת לכתוב תוכנה בתקן אחיד ללא קשר למערכת הפעלה כלשהי (ככה לפחות Sun טוענת).
Swing - (חלק מחבילת (Java מנוע גראפי לציור אובייקטים גראפיים /פקדים, תמונות וכו') של התוכנה. למה Swing? - כוון ש-Java מאפשרת לפתח תוכנה ללא קשר למערכת הפעלה יש לדאוג שהממשקים הגראפיים גם יהיו בלתי תלויים במע' הפעלה, לדוגמא: ניתן לפתח ממשק גראפי (טופס עם פקדים) בסביבת Windows ואח"כ להריץ אץ התוכנה בסביבת Linux. לשתי מערכות הפעלה הנ"ל יש GDI משלהן, אילו לא היה Swing אז היה צורך לפתח ממשק גראפי נפרד לכל מערכת הפעלה.

Swing vs. GDI
לשני מנועיים יש מאפיינים משותפים וייחודיים, ולשניהם יש חסרונות ויתרונות:
|
פרמטר השוואה |
GDI/GDI++ |
Swing |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
הערה: עפ"י סקרים אחרונים, ניתן להגיע למסקנה שהעדפה לשימוש בטכנולוגיה כלשהי נובע בעיקר מנגישות כלי פיתוח; ז"א אם ישנו כלי פיתוח נוח ונגיש לפיתוח ממשק השתמש בטכנולוגיה כלשהי, רוב הסיכויים שהטכנולוגיה זו תהיה דומיננטית יותר.
ראו בהמשך פוסט על "OpenGL vs DirectX", אשמח לקבל הערות/תיקונים לגבי הפוסט. לרשימת הפוסטים של הסדרה לחצו כאן.