מחולל יישומים
מחולל יישומים המכונה גם שפת תכנות הדור הרביעי (4GL) הוא כלי לפיתוח יישומי מחשב, שמספק יכולת הפשטה גבוהה יותר של חומרת המחשב מאשר שפות מהדור השלישי, מה שהופך את השפה לידידותית, עוצמתית ורב תכליתית. אחד האיפיונים של שפה זו הוא עיסוק עם אוספים גדולים של מידע ולא עם בתים וביטים. שפות אלו בדרך כלל כוללות תמיכה בבסיסי נתונים, ממשקי משתמש, אופטימיזציה מתמטית, מולטימדיה ופיתוח אתרי אינטרנט. חלק משפות הדור השלישי המתקדמות כמו פייתון, רובי ופרל כוללות כמה תכונות של שפות 4GL. כמו כן, ספריות עם תכונות הדומות לשפות דור רביעי פותחו כתוספות לשפות דור שלישי, דברים אשר טשטשו את האבחנה בין שפות 4GL ו-3GL. בשנת 1980 ו-1990, נעשו מאמצים לפתח שפות תכנות מהדור החמישי (5GL).
דורות של שפות תכנות
מחולל יישומים קרוי לעיתים "שפת דור רביעי", משום שהתפתחותו באה לאחר שפות דור שלישי – שפות עיליות כגון קובול, פורטרן, פסקל, C, שהן אוסף של הוראות למחשב בפסדו אנגלית שעל פי רוב אינן תלויות בחומרה עליה תתבצע התוכנית.
שפות הדור הרביעי הן השלב הבא בהתפתחות. יצירת כלי לפיתוח תוכנה שבו הגדרתם של יישומים נעשית בכלים מתקדמים במידה רבה מאלה של שפות הדור השלישי, כך שנחסך חלק ניכר מהתכנות הנדרש.
מהות מחולל היישומים
מחולל היישומים מהווה רמת הפשטה גבוהה יותר של מלאכת פיתוח התוכנה מאשר שפות הדור השלישי. נפתח פער גדול יותר בין חומרת המחשב ומערכת ההפעלה לבין השפה, והמפתח איננו נדרש להבנה מעמיקה ברזי החומרה ומערכת ההפעלה כדי ליצור יישום מתפקד. באמצעות מחוללי היישומים ניתן ליצור תוכנות ללא שימוש בתכנות, או עם שימוש מצומצם בקוד פשוט יחסית בשפת תסריט בנקודות מסוימות. מדובר בתוכנה שיש לה יכולות שמוקנות לה מראש בתחום מסוים, וניתן לגזור ממנה את יכולותיה ליישומים שונים ולתת להם את הייחוד, הצורה והפונקציונליות הנדרשת, מתוך מרחב גדול של יכולות שקיימות במחולל.
ניתן לדמות את ההבדל בין שפות תכנות עיליות למחולל יישומים, כהבדל שיש בין בנייה סטנדרטית בלבנים ומלט, לבין בניה מתועשת שבה יוצקים מודולים מבניים ומרכיבים אותם ביחד. מחולל יישומים מאפשר למשתמש בו להתרכז ב"מה" ולא ב"איך", וכך, למשל, מאפשר להתייחס לטבלה בבסיס נתונים או ליצירת טופס להצגת נתונים מבלי להתייחס לאופן מימושם. כתוצאה מכך הפיתוח במחוללי יישומים קל,נוח ומהיר יותר, ודורש יכולת תכנות נמוכה. יש מחוללים שמתפארים בכך שאין בהן קידוד בכלל, ובשל כך אף זכו לביקורת מצד מתכנתים שהרגישו חסומים ביכולות שלהם, אך ברובם יש שילוב של תכנות חזותי ביחד עם אפשרות לקידוד בשפת תכנות כלשהי, שמגדילה את הגמישות התכנותית. שילוב זה יוצר שתי רמות של משתמשים במחולל היישומים:
- משתמש שאינו מתכנת, כגון מנתח מערכות ומשתמש מתוחכם המתמקד ביישומים שאינם מצריכים תכנות.
- מתכנת, המשתמש במחולל היישומים לפיתוח יישומים מורכבים, שבהם נדרשת יכולת תכנותית, ונעזר בכלי המחולל ליצירה מהירה של תשתית התוכנה.
ברוב המחוללים מוטמעים מראש אלגוריתמים שונים לביצוע מטלות תכנותיות שונות. במחוללים שמיועדים לעבודה עם נתונים יהיו יכולות כמו חיפוש, מיון, יצירת אינדקסים, הצגת נתונים, יצירת שאילתות ודו"חות, יבוא ויצוא נתונים בפורמטים שונים, יכולת תקשורת עם מסדים בתקשורת נתונים ודרך האינטרנט, אבטחת נתונים, יכולת הצפנה, מנגנון הרשאה, מנגנון שכפול מידע ועוד, ואילו במחוללים שמיועדים למולטימדיה יהיו יכולות של הצגת תמונות, ניגון קובצי וידאו, אודיו ואנימציה, תצוגת שקופיות וכדומה. יכולות אלו מיתרות את כתיבת אותו קוד שוב ושוב.
זאת ועוד, כתיבת אלגוריתמים מוכנים בידי צוות מקצועי, שמכסה טווח רחב של אפשרויות, כמו למשל שימוש באלגוריתם שונים של מיון וחיפוש לפי המצבים השונים, בדרך כלל מאפשר כיסוי אופטימלי של הנושא, באופן שמתכנת מן השורה שצריך לממש יישום מסד נתונים לא היה מסוגל לו, או מתמודד אתו בקושי רב. הטמעת אלגוריתמים שעברו בחינה מדוקדקת במחוללי היישומים, מאפשרת לפנות את מרצו וזמנו של המפתח, להגדרת ופיתוח האפליקציה המסוימת ותכניה, והממשקים השונים שלה, במקום להתמודד עם בעיות טכניות כמו התעסקות בדליפת זיכרון או בקובץ שננעל.
סוגי מחוללים
לרוב מחוללי היישומים אין יכולת הידור, ליצירת תוכנה עצמאית שרצה עצמאית, כפי שיש לשפות תכנות מהדור השלישי. האפליקציות שנוצרות באמצעותם, שנשמרות בקובץ או מספר קובצי נתונים, יכולות לרוץ במסגרת מחולל היישומים או באמצעות גרסת הרצה שלו (גרסת Run Time) שהיא גרסה מנוונת של המחולל, שאפשר להריץ באמצעותה את היישום, אבל לא לפתח אותו.
אבחנה נוספת בין מחוללי יישומים היא בין מחוללים מקצועיים שמיועדים למפתחים כדוגמת פאואר בילדר, קליפר ופוקס פרו, שלשימוש בהם נדרש ידע מוקדם ואף יכולת תכנותית, ומחוללים שמיועדים למשתמשי קצה כדוגמת דיבייס, אקסס ומיכה 8, שבהם ניתן ליצור יישום בלי ידע רב ובקלות יחסית ועיקר השימוש בו הוא כמחסן לצורך אגירת ואחזור נתונים.
אבחנה אחרת שעשויה להיות קשורה במידה מסוימת לאבחנה הקודמת, היא מחוללי יישומים חסרי שפה תכנותית שמוגבלים ביכולות שלהם כמו מג'יק, לבין מחוללי יישומים שמשולבת בהם שפה תכנותית, שמרחיבה במידה כזו או אחרת את הפונקציונליות שלהם ומיועדת לקהל מגוון יותר של מפתחים. אבחנה נוספת היא בשיטה של הטיפול בנתונים, בין מחוללי ישומים מבוססי SQL, לבין מחוללי יישומים שיש להם שפה פנימית אחרת לטיפול בנתונים כדוגמת דיבייס וממשיכיו.
מחולל היישומים וויזדום (Wizdom) שפותח על ידי חברת מ.ל.ל הישראלית היה מחולל הישומים הראשון שהיה בגישה של תכנות מונחה-עצמים, שבו היה ניתן לרשת טופס ולשנות את תכונותיו.
יתרונות וחסרונות
יתרונות
- קלות פיתוח: פשטות ונוחות בפיתוח לעומת סביבת פיתוח רגילה. ניתן ליישם פעולות רבות ואף מורכבות בכמה הקלקות וגרירות עכבר, ובכמה בחירות מתוך תיבות רשימה. הצורך להתעסק ב"קרביים התכנותים" פוחת מאוד, במיוחד לדברים מייגעים שבשגרה. הדבר מאפשר ליצור יישומים מורכבים ואפקטיביים מאוד.
- מהירות פיתוח: מחזור פיתוח קצר, שמאפשר ליצור יישום חדש בזמן קצר משמעותית מזה הנדרש בסביבת פיתוח רגילה. הדבר גם מאפשר לקצץ בעלויות הפיתוח ולהיות תחרותי ורווחי.
- תחזוקה: יכולת תחזוקה קלה, שכן ניתן לנווט בקלות ברכיבים שמכיל היישום כמו טופס או דוח ולתקן את הבעיות. יתר על כן, כיוון שהפיתוח מהיר וקל, במידה שיש חלק בעייתי שלא מתפקד כראוי, ניתן בקלות למחוק אותו ליצור מחדש במהירות.
- ניפוי: מיעוט באגים בשל מיעוט הקוד שקיים במחולל, ובשל העובדה שחלק מהקוד מחולל באופן אוטומטי או מהווה שכבה עוטפת, ומכיוון שמודולים שקיימים בו דובגו בשיטות מקצועיות, ובידי מפתחים מקצועיים מהרמה הראשונה.
- נגישות: פשטות הפיתוח מנגישה פיתוח יישומים וביצוע פרויקטים גם לאנשים שאינם מתכנתים מקצועיים, או כאלו שהם ברמה מקצועית נמוכה יחסית, דבר המאפשר גם לקצץ בעלות הפיתוח של פרויקט וגם לאפשר ליצור ישומים גם לאנשים מקצועיים שאינם אנשי תוכנה.
- שימוש ברכיבים מקצועיים: חלקים רבים ושונים במחולל נכתבו במטרה לעשות את המטלות באופן המוצלח ביותר, תוך שילוב באלגוריתמים שונים ובדיקת איכות שלהם, דבר שמתכנת בשפה עילית היה מתקשה להגיע אליה. למשל הצפנת הנתונים באופן יעיל, או פיתוח מקבילי שולחני ואינטרנטי ביחד.
- יציבות ועקביות: בניגוד לכתיבה בשפה עילית שבה יש דינמיות, ועשוי להיות שימוש בקטעי קוד שונים במקומות דומים וחסרה עקביות ויציבות, במחולל ישומים קיימת יציבות והרכיבים יפעלו באופן דומה ובאופן צפוי.
חסרונות
- חוסר גמישות: מבנה קשיח וחוסר גמישות לעומת הגמישות והחופשיות שמאפשר תכנות רגיל. ברוב המחוללים בדרך כלל צריך להיצמד לקונבנציות שמכתיב מחולל היישומים, ואף אם יש יכולות הרחבה, עדיין תהיה חסרה גמישות במקרים רבים.
- כבילות ותלות במפתחי המחולל: כיוון שהמחולל מגיע עם תכונות מובנות, קשה בדרך כלל להרחיב את התכונות שלו, להסיר מגבלות, ולשפר היבטים רבים בתוכו, ועל כן קיימת תלות של המשתמשים במפתח המחולל, שבדרך כלל יש לו סדר יום משלו ותפיסות שלאו בהכרח עולות בקנה אחד עם של המשתמשים במחולל.
- סרבול: אף במקרה שרוצים ליצור אפליקציה קטנה המכילה טבלה וטופס בודד, יהיה צריך לגרור ברוב מחוללי היישומים את כל קובץ ההרצה של המחולל, מכיוון שרוב המחוללים אינם יוצרים קובץ בינארי עצמאי שמוכן להרצה, אלא קובץ נתונים ומשתמשים ביכולות שלהם, או בגרסת זמן ריצה כדי לפעול.
- מורכבות: מחוללי הישומים הם בדרך כלל כלים מורכבים שמכילים הרבה חלקים והרבה פרטים, שנדרשת השקעה וזמן רב כדי ללמוד אותם לפרטיהם. בניגוד לשפת תכנות כללית שלאחר שנלמדת פעם אחת, ניתן לעשות בה שימוש בכל תחום, המימוש של מחוללי ישומים הוא בדרך כלל בתחום ההתמחות הצר שלהן.
- פעילות לא צפויה: כיוון שהקוד הפנימי לא גלוי, ודרכי הפעולה של המחולל סמויים מהעין, לעיתים קשה לדעת כיצד המערכת תפעל במערכות שונות שמוגדרות אחרת, ואף קשה לשנות אופן פעילות בעייתי.
- עלות: בחלק מהמחוללים כמו למשל המג'יק בעבר והפאואר בילדר כיום העלות הכספית גבוהה, והם מתומחרים במחיר גבוה ממחירי סביבות פיתוח רגילות. ובחלקם יש לשלם תמלוגים על כל גרסת הרצה שמופצת, דבר שמגדיל את העלות ומוריד את הריווחיות. עלות זו מתקזזת מול החיסכון בעלות הפיתוח.
תחומים לפיתוח עם מחולל
מחוללי יישומים ברובם הגדול מיועדים לתחום של בסיסי נתונים ומניפולציות על מידע, אך עם זאת ניתן למצוא אותם בתחומים נוספים, כמו מחולל היישומים Toolbook שיועד במקור ליצירת מערכי למידה העוסקות במולטימדיה, או כמו MATLAB בתחום המתמטי והאלגוריתמי המאפשר טיפול קל ונוח במטריצות, שימוש בפונקציות ובנתונים, ומימוש אלגוריתמים על נתונים בתחומים רבים.
רוב רובם של מחוללי היישומים הקיימים כיום, לא מתאימים לפיתוח תוכנות תשתית (מערכות הפעלה, תוכנות תקשורת וכו') וגם לא ליישומים ייעודיים בעלי אלגוריתמיקה ייחודית, במיוחד אלו שדורשים משאבי עיבוד כמו תוכנות גרפיקה, עיבוד תמונה, עיבוד קול ועיבוד וידאו, שבכדי לעבוד ביעילות, הן צריכות להיכתב בקוד של שפה עילית שקרובה לחומרה כמו C++.