DCSIMG
UI - פוסט 2: Swing vs. GDI - Maxim

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

  • תאימות

  • שייך למערכת הפעלה ספציפית

  • שייך לחבילת פיתוח/הפצה של Java

  • "רץ" במערכת הפעלה ספציפית

  • "רץ" בכל מערכת הפעלה שבה מתקנת חבילה של Java

  • מודל השכבות

  • מהווה שכבה מעל הדרייבר של כרטיס הגראפי

  • מהווה שכבה מעל הדרייבר של כרטיס הגראפי

  • ביצועים

  • מהיר יותר מ-Swing

  • איטי יחסית ל-GDI

  • טכנולוגיה

  • מנוע ראסטר (מידע מוצג כתמונות מפוקסלות)

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

  • פיתוח

  • Windows forms: עפ"י סקרים אחרונים - עורך טפסים של MS נוח ומהיר יותר מעורך של Swift

  • Windows forms: עפ"י סקרים אחרונים - עורך טפסים Swift "מפסיד" לעורכים ויזואליים של MS

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


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

Comments

# re: GUI - פוסט 2: Swing vs. GDI

Friday, December 07, 2007 1:12 AM by Doron Ben-David

הכתבות שלך מבורכות, ולכן ארשה לעצמי לתת לך עיצה-

עדיף שתפרסם כל יום כתבה אחרת, מאשר שתפרסם את כל הארסנל שלך עכשיו והבלוג שלך יישאר אח"כ יבש (בדומה לבלוג שלי :P).

בכל מקרה, ברוך הבא!

# re: GUI - פוסט 2: Swing vs. GDI

Friday, December 07, 2007 1:29 AM by Maxim

דוד, תודה על העצה.

מה שכן ניתן להוסיף שהתייבשות הארסנל תלויה בכמות הזמן שפנוי להשקעה וב"מוזה" שיש לך לכתיבת הפוסט.

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

# re: GUI - פוסט 2: Swing vs. GDI

Friday, December 07, 2007 11:43 AM by Mr.J

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

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

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

ברוך הבא והמון בהצלחה.

# re: GUI - פוסט 2: Swing vs. GDI

Friday, December 07, 2007 2:46 PM by שניר דוד

פוסט מאוד מעניין (:

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

# re: GUI - פוסט 2: Swing vs. GDI

Friday, December 07, 2007 6:08 PM by Maxim

wxWidgets: www.wxwidgets.org/.../wxwidgets.swf

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

החיסכון הוא בפלטפורמט פיתוח אחידה עבור המפתח, העבודה של התאמה ל-API של מערכת הפעלה מסויימת נעשה ע"י המנוע של החבילה.

# re: GUI - פוסט 2: Swing vs. GDI

Friday, December 07, 2007 11:14 PM by שניר דוד

אז בהנחה שבWINDOWS הוא משתמש בWIN API ובלינוקס הוא משתמש שבGTK+ ובמק הוא משתמש בCocoa widgets יוצא שפיתוח אם חבילת פיתוח כדוגמת wxWidgets ייתן מהירות עבודה מקסימלית בכל מערכת הפעלה... (?) מפה אני לא רואה שום סיבה למה לפתח ספציפית לכל מערכת הפעלה ולא בחבילת פיתוח Cross-platform כמו wxWidgets.. ככה גם אפשר לשמור על פיתוח אפליקציה לכל הפלטפורמות בלי איבוד קהל יעד וגם שמירה על מהירות מקסימלית בעבודת התוכנה... (יכול להיות שדבר כזה הוא JAVA KILLER?)

# re: GUI - פוסט 2: Swing vs. GDI

Saturday, December 08, 2007 12:54 AM by Maxim

שניר,

מהפה שלך לה' - כמו שאומרים.

אבל זה לא יהיה "Java Killer". אם תקרא את מה שאתה בעצמך כתבת אז תבין שזה לא ייתן מהירות מקסימלית.

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

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

אפשר לכתוב ספרים עבים על הנושא...

# re: UI - פוסט 2: Swing vs. GDI

Sunday, December 09, 2007 9:25 PM by מיכה ברשפ

מקסים התעלמת מ swt שזה ה java killer?  ראה eclipse

# re: UI - פוסט 2: Swing vs. GDI

Monday, December 10, 2007 9:55 PM by Maxim

SWT: en.wikipedia.org/.../Standard_Widget_Toolkit

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

גם ככה מנוע של ג'אווה יותר איטי מדוט-נט ויחד עם כל השפכטלים של SWT הוא נתקע (יודע מניסיון של אחרים).

- לכן זה עדיין לא Java Killer.

PS

לא יודע למה הנכם מנסים לקרוא Java Killer, מנוע של דוט-נט יכול להיות ג'אווה-קילר, אבל לא חבילות פיתוח/שירות שנועדו להיות בשימוש ע"י מנועים האלה.

(www.theregister.co.uk/.../microsoft_describes_its_java_killer)

Leave a Comment

(required) 
(required) 
(optional)
(required) 

Enter the numbers above: