·
הקדמה
קצת היסטוריה…
מטרתם המקורית של מפתחי השפה
הייתה לייצור שפת תכנות אשר תשמש לפיתוח תכניות אשר יפעילו טוסטרים,
ומכשירי חשמל נוספים :).
בשנת 95, עם התפתחות ה-web, JAVA
החלה לצבור תאוצה הודות לאפשרות לכתוב applets
(תכניות JAVA
קטנות אשר נשלחות מן השרת אל הדפדפן ופועלות בו).
כיוון שתכניות אשר כתובות
ב-JAVA
יכולות לפעול בכל פלטפורמה (ובלבד שיותקן בה JVM –
יוסבר בהמשך) ה-applets
אפשרו את פיתוחם של אתרי אינטרנט מתוחכמים.
במהלך השנים האחרונות,
אחוז השימוש ב-applet
בפיתוחם של אתרי אינטרנט הלך ופחת. טכנולוגיות אחרות (כגון JavaScript, DHTML, FLASH, ASP
ואחרות..) סיפקו את האפשרות לבצע חלק מן הפעולות, שבעבר ביצעו באמצעות applets, בדרך זולה יותר (שכרם של מתכנתי JAVA
גבוה יותר משכרם של מתכנתים בשפות אחרות) ולעתים גם יותר טובה וגם יותר מהירה. כך
למשל, רוב האנימציה באתרי אינטרנט מפותחת כיום באמצעות FLASH, ולא
באמצעות Java Applets
כפי שהיה נהוג לפני מספר שנים. כיום, פיתוחם של Java
Applets, לצורך אנימציה, רלוואנטי רק באותם מקרים שבהם מסתתרת מאחורי
האנימציה תכנית מתוחכמת או באותם מקרים שבהם לא ניתן לקבל את האנימציה הנדרשת
באמצעות FLASH או
טכנולוגיות אחרות. יתר על כן, הופעתה של Visual
J++ (גרסתה של Microsoft
ל-JAVA
אשר זהה ל-Java רק
באופן חלקי) והעובדה שמיקרוסופט ניצחה במלחמת הדפדפנים (רוב הדפדפנים כיום הם מסוג
IE) תרמו גם הם לשימוש ההולך ופוחת ב-Java
Applets.
העובדה כי אחוז השימוש ב-applets רק
הולך ופוחת סיפקה את התחמושת הדרושה לבעלי העניין בהכחדתה של השפה.
ובכן,
אם השימוש
ב-Java Applets רק הולך ופוחת, אז למה להשקיע זמן וללמוד JAVA ?
ü
אי תלות בפלטפורמה שעליה התכנית רצה
המטרה העיקרית שעמדה לנגד
עיניהם של מפתחי השפה הייתה ליצור שפה אשר מאפשרת לכתוב את התכנית פעם אחת ולאחר
מכן להריץ אותה בכל מחשב מבלי לבצע
שינויים.
קובץ קוד המקור של תכנית ב-JAVA
מתורגם ל- JAVA BYTE CODE שנשמר בקובץ ששמו זהה (בדרך כלל) לשמו של קובץ קוד המקור,
והסיומת שלו class.
קובץ ה- class
ניתן להרצה בכל מחשב הודות ל- JVM (Java
Virtual Machine). ה- JVM
היא תכנית שנכתבה במיוחד למערכת הפעלה מסוימת (קיימות גרסאות של ה- JVM
כמעט לכל מערכת
הפעלה קיימת). תכנית זו מסוגלת לתרגם את קובץ ה-Java
Byte Code (הקובץ עם הסיומת class)
לשפת המכונה של המחשב שבו היא פועלת. בדרך זו מושגת אחידות שלא הייתה קיימת בשפות
אחרות. ב C++
ניתן היה לכתוב תכנית במחשב אחד ולהריצה באחר רק לאחר ביצוע השינויים הדרושים
ולאחריהם קומפילציה מחדש.
בדרך זו, ל-JAVA יש
רמת תאימות גבוהה לא רק בכל הקשור ל-source
code, אלא גם בכל הקשור לקובץ שמוכן להרצה.
ü
קלות בפיתוחן של אפליקציות בתחום התקשורת
ב-JAVA
קיימות מחלקות מוכנות אשר כוללות מתודות/פונקציות שמקלות על כתיבתן של תכניות אשר
מתקשרות עם תכניות אחרות (במחשבים שונים).
המחלקות המוכנות ב-Java
כוללות תמיכה במגוון רחב של פרוטוקולים (HTTP, TCP\IP, UDP, SMTP
ואחרים).
ü
מנגנוני הגנה מפני וירוסים
ל-JAVA
קיימים מנגנונים רבים אשר מקטינים את הסכנות הקיימות בדמותם של ווירוסים מזיקים (“I
LOVE YOU...”(.
ü
שפה מודולרית
כיוון שתכנית ב-JAVA מורכבת ממחלקות,
אופן השדרוג של תכניות ב-JAVA פשוט בהרבה מאופן
השדרוג של תכניות אשר כתובות ב- C++. שדרוג תכנית ב-JAVA נעשה באמצעות החלפת
מחלקה אחת באחרת.
ü
שפה קלה ופשוטה ללמידה ולשימוש
כדי להשיג מטרה זו, התבססו בפיתוחה על C++. C++
היא אחת השפות הפופולריות ביותר (נכון לשנות ה-90) ומשום הדמיון שיש בינה לבין JAVA, למתכנתי C++ קל
לעבור ל- JAVA. כללי התחביר כמעט
זהים לחלוטין, ותפיסת תכנות מונחה העצמים ממשיכה להתקיים. כדי להקל על השימוש ב-JAVA הנושאים הבעייתיים
שקיימים בC++ כגון עבודה עם
מצביעים וטיפול בזיכרון שמוקצה באופן דינמי לא אומצו.
אחת הפעולות שמעיקות על כל מתכנת הוא כתיבת התיעוד לתכנית שכתב. מפתחי השפה חשבו
על בעיה זו מראש, ופיתחו כחלק מהשפה את ה- javadoc.
ה-javadoc היא תכנית שבעת
הפעלתה על תכנית בכתובה ב-JAVA
היא יוצרת דפי HTML אשר מכילים תיעוד
מפורט לתכנית עפ"י ההערות המתאימות שנשתלות בקוד המקור. ה-API שמשמש כ-help לכל מפתח ב-JAVA נוצר באמצעות הפעלת
ה-javadoc על קבצי קוד המקור
של המחלקות שיש ב-JAVA.
ü
שפה שמצמצמת את האפשרות לבאגים
כדי שהשפה החדשה, אכן תאפשר לפתח תכניות עם מספר קטן ככל האפשר של באגים (באגים
מצד המתכנת) הטיפול בהקצאת הזיכרון הדינמית הוצא מתחום אחריותו של המתכנת. ב-JAVA קיים רכיב בשם Garbage Collector אשר פועל כל הזמן
במקביל לפעולת התכנית, ומשחרר את הזיכרון שהוקצה ושאין בו עוד שימוש. ב C++ האחריות לשחרר את הזיכרון שהוקצה באופן
דינמי, כאשר אין בו עוד שימוש, מוטלת על המתכנת.
שיפור נוסף שבוצע ב JAVA הוא מניעת האפשרות
לחרוג מגבולותיו של מערך. בעוד שבC++
ניתן לחרוג מגבולותיו של המערך מבלי שהתכנית תתריע על כך, ב-JAVA זה
לא אפשרי. ניסיון לחרוג מגבולותיו של מערך ב-JAVA
יגרום לשגיאה. שיפור נוסף שבוצע ב-JAVA
הוא האפשרות לבצע הורשה יחידה בלבד (כל מחלקה יכולה לרשת ממחלקה אחת בלבד). לא
ניתן לבצע הורשה מרובה ב-JAVA.
האפשרות לבצע הורשה מרובה ב C++ גרמה, לא אחת, לתקלות קשות. תכנון
נכון של המחלקות מתממש בהורשה יחידה בלבד. אם אינך יודע מהי הורשה, אל דאגה. באחד
הפרקים הבאים נקדיש לנושא את תשומת הלב הראויה.
שיפור אחר שבוצע ב JAVA
מצוי באופן ביצוע ה-casting
(שינוי טיפוס של ערך). בעוד שב- C\C++
ערך מטיפוס כלשהו, אשר אמור לשנות את טיפוסו בעקבות השמתו למשתנה/פרמטר מטיפוס
אחר, עובר casting
באופן אוטומאטי גם כאשר שינוי הטיפוס עלול לגרום לשינוי בערך (השמה של ערך מספרי
ממשי לתוך משתנה מטיפוס מספרי שלם) - ב-JAVA,
ה-casting
מתבצע באופן אוטומאטי רק כאשר אין כל סכנה לפגיעה בערך (השמה של ערך מטיפוס long
לתוך משתנה מטיפוס int לא
תעבור קומפילציה).
ü
תכנית אשר מאפשרת להריץ בו זמנית יותר
מרצף פעולות אחד
JAVA מאפשרת לפתח תכניות
אשר יש בהן מספר רצפי פעולה אשר מתבצעים בו זמנית. אפשרות זו קיימת גם בשפות
אחרות, אך אופן מימושה ב-Java מסובך בהרבה.
ü
תכנות מבוזר
אופן כתיבתן של תכניות אשר חלקים שונים
מתוכן מתבצעים במחשבים נפרדים תוך כדי העברת אינפורמציה בינם לבין עצמם פשוט בהרבה
מאשר בשפות תכנות אחרות.
ü
יכולות גרפיות משופרות
האפשרויות המגוונות ביצירת GUI (ממשק משתמש גראפי)
באמצעות Java מציבים אותה בתור
אחת השפות המתאימות ביותר ליצירת GUI (אם לא הטובה ביותר
!).
ü
קישוריות לטכנולוגיות אחרות
כיוון שתכנית ב-JAVA יכולה לפעול בכל
פלטפורמה והודות לכך ש-JAVA כוללת מחלקות רבות
מוכנות, קיימת האפשרות לשלב קוד Java עם טכנולוגיות רבות
אחרות. כך למשל, ניתן לכתוב תכנית ב-JAVA
אשר תתחבר לבסיס נתונים – כמעט מכל סוג – לרבות Access (באמצעות ODBC). אפשרויות אחרות
כוללות את האפשרות לכתוב תכנית ב-Java שתשולב כ-ActiveX בתכנית אחרת שכתובה
ב-Visual
Basic. אין כל בעיה
בכתיבת חלק מן המתודות/פונקציות שמוגדרות בתכנית לעשות שימוש בקטעי קוד אשר כתובים
ב- C\C++.
ü
תמיכה מובנית בUNICODE-
בעוד שתכניות אשר כתובות ב- C\C++ עושות שימוש בטבלת
ה-ASCII (מסוגלת לתאר רק את
האותיות באנגלית ואת האותיות של השפה המקומית שמותקנת במחשב – בישראל זוהי
העברית), תכניות שכתובות ב-JAVA יכולות לעשות שימוש
בטבלת ה-UNICODE אשר כוללת כ-65000
תווים לתיאור מרבית השפות בעולם ומרבית הסימנים הגרפיים אשר קיימים בתחומי המדעים
השונים).
ü
"מצעד הבאגים"
כבכל
טכנולוגיה, גם ב-Java קיימים באגים.
ההבדל באופן הטיפול בבאגים שקיימים ב-Java
לעומת טכנולוגיות אחרות מצוי באופן השיתוף של המתכנתים בתהליך התיקון שלהם. בעוד
שבאגים אשר קיימים ב-ASP, Visual J++, Visual C++, Visual Basic ובטכנולוגיות אחרות
מתוקנים רק על ידי המפתחים של אותן טכנולוגיות, ב-Java הליך מציאת הבאג
הדיווח עליו והצעת התיקון שלו יכולים להיעשות (וכך זה גם מתבצע) על ידי מפתחים
מרחבי העולם. באתר המרכזי של Java, www.javasoft.co.il,
קיים מדור שלם אשר מפרט באגים שדווח עליהם. אופן הטיפול המיוחד בבאגים שקיימים ב-Java מתאפשר הודות לכך שכל קוד המקור של
המחלקות שכבר הוגדרו (ויש הרבה הרבה הרבה מחלקות כאלה...) גלוי לעיניו של כל מפתח.
קבצי קוד המקור של המחלקות הקיימות נגישים לכולם באופן חופשי.
ü
פופולריות עצומה
הודות לפופולריות העצומה של השפה (לשם
ההשוואה, בכל 6 שנות קיומה נכתבו עליה יותר ספרים משנכתבו על C++ אשר קיימת למעלה
מ-10 שנים) מרבית המתכנתים מעדיפים לתכנת באמצעותה (במקום C++ ושפות אחרות).
תכונה זו מקנה לחברות שמפתחות ב-Java יתרון תחרותי עסקי
ברור על חברות אחרות אשר מעדיפות לפתח באמצעות שפות אחרות ופחות פופולריות כגון C++ ו- Visual Basic: מיטב המוחות עתיד
להימצא – בשנים הקרובות-באותן חברות אשר ישכילו לפתח ב-Java.
ü
מגוון רחב של ייעודים
מאז הופעת השפה, היא פותחה באופן שמאפשר
לה לתת מענה למגוון רחב של צרכים: קישוריות לבסיסי נתונים, יצירת גרפיקה דו/תלת
ממדית, אפליקציות בצד השרת, תכנות טלוויזיה אינטראקטיבית, תכנות מכשירי חשמל,
תכנות פלאפונים, תכנות ליצירת אתרים מתוחכמים ב-web הקונבנציונלי
ואחרים... מסיבה זו, צוותי מתכנתים
אשר שולטים ב-Java ניתנים לניוד מהיר
בין תחומי הפעילות שונים, וכמו כן, מגוון רחב מבין חלקיו של פרוייקט נתון ניתנים
לפיתוח באמצעות אותה שפה (באמצעות: Java).
במהדורות
הבאות של הספר ייסקרו יתרונות נוספים...
שפת
התכנות JAVA
צוברת תאוצה רבה בתקופה זו, והיא אינה מוגבלת לשימוש באינטרנט. ניתן לפתח בה בקלות
רבה יחסית אפליקציות חלונאיות ולהנות מכל |היתרונות שמנינו. כמו כן, כיוון שתחום האינטרנט הולך ומתפתח במקביל
לשינוים התרבותיים שמתחוללים בעולם כולו, אין כל ספק, שב-"אינטרנט של
המחר" , אינטרנט של פלאפונים ושל טלוויזיות אינטראקטיביות תתפוס השפה מקום של
כבוד. בהמשך ייסקרו חלק מן התחומים הרבים שבהם ניתן להשתמש ב-Java.
מגוון השימושים שקיימים לשפה
בחלק זה ייסקרו מספר
תחומים שבהם Java נותנת מענה:
טלוויזיה אינטראקטיבית JavaTV -
JAVA כוללת מחלקות
מוכנות שיכולות לשמש לכתיבת תכניות אשר יפעלו בתוך מכשיר הטלוויזיה או בתוך הקופסה
שתותקן מעליו (set top box).
חברות רבות בעולם משתמשות ב-Java לצורך פיתוח בתחום
זה: TOSHIBA, SAMSUNG, PHILIPS, SONY, MATSUSHITA ואחרות... לאחרונה קיבל ה-DVB (Digital Video Broadcasting
project) את ההחלטה להשתמש
ב-Java לצורך פיתוחה של
הטלוויזיה האינטראקטיבית. ה-DVB הנו גוף אשר מאגד
בתוכו למעלה מ-250 חברות אלקטרוניקה/תקשורת גופי תקינה וספקיות תוכן מלמעלה מ-30
מדינות אשר התאגד מתוך מטרה לגבש במשותף את התקנים ואת הסטנדרטים לפעולתה של
הטלוויזיה הדיגיטאלית. יתר על כן, SONY קיבלה, לאחרונה, את
ההחלטה לשלב במכשירים מתוצרתה JVM וזאת מתוך כוונה
שתכניות שתכתבנה ב-JAVA יפעילו אותם. החלטה
זו התקבלה לאחר ש-SONY החליטה להימנע
מלאמץ את הצעתה של Microsoft להתקין במכשיריה
מערכת הפעלה מגרסה מיוחדת של Windows
CE.
להלן מספר תמונות מתוך הדגמות פועלות של
טלוויזיה אינטראקטיבית אשר עושה שימוש ב-Java:
דמיינו פרסומת שמופיעה בטלוויזיה תוך כדי
הצגת כתובת הסניף הקרוב למקום המגורים ....
דמיינו ערוץ טלוויזיה אשר מציג במסך אחד את
אשר ניתן לצפייה במספר ערוצים תוך מתן האפשרות לראות את תוכנם של ערוצים אחרים
נוספים...
דמיינו את האפשרות לצפות
בסדרת הטלוויזיה האהובה עליכם תוך צפייה בשערי המניות ...
דמיינו את האפשרות לצפות במשחק
הספורט החביב עליכם תוך בחירה בזווית המצלמה ותוך קבלת אינפורמציה נוספת בנוגע
לשחקנים השונים ...
דמיינו את האפשרות לצפות בתחזית מזג
האוויר ולקבל את התחזית הרלוונטית לגביכם (לפי אזור מגוריכם, למשל) ...
כבר כיום, שירותים רבים
שנהגנו לקבל מן הטלוויזיה ניתן לקבל מרשת האינטרנט באמצעות הדפדפן, ולהפך: כבר
כיום קיימות טלוויזיות שמאפשרות לגלוש באינטרנט, ולקרוא מכתבי דואר אלקטרוני.
לעניות דעתי, בין הטלוויזיה המוכרת לבין המחשב האישי לא תפרוץ מלחמה שבסופה אחד
משני המכשירים ייעלם. בין שני המכשירים תתחיל מגמת התקרבות שבסופה אנו (או הדורות
הבאים) נשכח שפעם היו שני מכשירים שונים.
JINI –
המהפכה האמיתית
סקירה תופיע באחת
המהדורות הבאות ...
גרפיקה תלת ממדית Java3D
API -
סקירה תופיע באחת
המהדורות הבאות ...
גרפיקה דו מימדית Java2D
API -
סקירה תופיע באחת
המהדורות הבאות ...
JavaCard –
כתיבת תכניות ב-Java אשר יפעלו בכרטיסים זעירים
סקירה תופיע באחת
המהדורות הבאות ...
קישור לבסיס נתונים - JDBC
סקירה תופיע באחת
המהדורות הבאות ...
שילוב מולטימדיה – JMF (Java
Media Framework)
סקירה תופיע באחת
המהדורות הבאות ...
נושאים נוספים שטרם
הוזכרו יופיעו – גם הם – במהדורות החדשות ...
סביבת הפיתוח JDK
כדי
לתרום להגברת הפופולריות של השפה, נכון לזמן כתיבת הספר, ניתן להוריד בחינם
מהאינטרנט את כל סביבת הפיתוח הבסיסית של השפה. לסביבת הפיתוח הבסיסית נהוג לקרוא
בשמות JDK (Java Development Kit) ו-
SDK (Software Development Kit).
בשנת
1995 הופיעה הגרסה הראשונה של JAVA,
שנקראה בשם: JDK1.0.
גרסאות תיקון אשר הוצאו לגרסה זו נקראו בשמות: JDK1.0.1, JDK1.0.2
ואילך ...
כעבור
פרק זמן, הופיעה הגרסה השניה של JAVA,
שנקראה בשם: JDK1.1.
גם לגרסה זו פורסמו גרסאות תיקון אשר נקראו בשמות: JDK1.1.1, JDK1.1.2
ואילך...
בדצמבר
1998 הופיעה הגרסה השלישית של JAVA,
שנקראה בשם JDK1.2.
כיוון שבין גרסה זו לגרסה הקודמת חלו שינויים די רבים, שונה השם של JAVA
לשם החדש: JAVA 2.
גם בגרסה השלישית היו מספר גרסאות תיקון שנקראו, בדומה לגרסאות התיקון שהוצאו
לגרסאות הקודמות בשמות: JDK1.2.1
וכו'...
במרץ
2000 הופיעה הגרסה הרביעית של JAVA,
תחת השם JDK1.3.
מרבית השינויים בין גרסה זו לגרסה הקודמת מתמקדים באופן פעולת ה-JVM. JDK1.3
כולל JVM יעיל
באופן מיוחד.
סביבת
הפיתוח הבסיסית כוללת את כל מה שדרוש כדי לפתח תכניות ב-Java,
והשימוש בהן כולל את השימוש בעורך טקסט פשוט. ניתן גם להשתמש בסביבות פיתוח
ויזואליות ויותר נחמדות :). עם זאת, כדאי לדעת, שלא קיימות תכניות שניתן לפתח
באמצעות סביבות פיתוח ויזואליות שלא ניתנות לפיתוח באמצעות עורך טקסט פשוט.
הסביבות
ויזואליות כוללות, בין היתר, את הסביבות הבאות:
Symantec’s
Visual Café
JBuilder
VisualAge
JDeveloper
Forte
ואחרות…
Visual
J++ איננה JAVA.
השימוש ב-Visual J++ רלוואנטי רק כאשר מפתחים applets שאמורים
לפעול ב-web
מבלי שהגולש יידרש להתקין במחשבו את ה-Java
Plugin.
The
World Wide Web (www)
הודות לתאימות הגבוהה של
השפה למערכות הפעלה שונות במחשבים שונים, היא מתאימה באופן מיוחד לפיתוח אפליקציות
שמופעלות ברשת האינטרנט, ובייחוד לפיתוחן של אפליקציות שמופעלות ברשת ה-WWW.
רשת ה-WWW (World
Wide Wev) היא רשת וירטואלית שבנויה על בסיס רשת האינטרנט. ניתן לראות ברשת
הזו מערכת של שרת-לקוח:
הלקוח הוא הדפדפן. הדפדפן
דורש אינפורמציה מסוימת. הדרישה שלו נשלחת אל הרשת ומגיעה אל השרת. השרת מגיב
לבקשת הלקוח (הדפדפן) בשליחת מידע חזרה.
פרוטוקול התקשורת שמשמש
את השרתים ואת הלקוחות ברשת ה-WWW
הוא הפרוטוקול http.
טכנולוגיות אחרות
אין זה סוד, כי ישנם אנשי
מחשבי המפקפקים בעתידה של השפה. מגוון הפעולות שניתן לבצע ב-JAVA,
אפשריות
-
לעיתים - לביצוע גם באמצעות שפות,
וטכנולוגיות אחרות.
במהדורות הבאות אציג בחלק
זה השוואות בין Java
לבין טכנולוגיות אחרות....
הקדמה
ב-
JAVA ניתן לזהות ארבעה סוגים עיקריים של
תכניות:
1.
Java Applications
2.
Java Applets
3.
Java Servlets
4.
JSP
JSP
דומה ל-ASP בכך שבשתי הטכנולוגיות
מדובר בהשתלתן של שורות קוד בתוך מסמך ה-HTML
אשר יבוצעו על ידי השרת ויוחלפו בתוצאה שתתקבל ובכך ייווצרו, למעשה, מסמכי HTML באופן דינאמי.
ההבדל הוא שבעוד שב-ASP מדובר בשילובן של
פקודות Script פשוטות, ב-JSP מדובר בשילובן של
פקודות אשר נכתבות ב-JAVA, ועל כוחה של JAVA לעומת שפת סקריפט
פשוטה אין כל צורך להרחיב. יתר על כן, בשימוש ב-JSP ניתן לעשות שימוש
בכל אחד ממרכיביה החדשים של השפה (jdk 1.3) – להבדיל מ-applets אשר פועלים על פי
מגבלותיו של הדפדפן (כאשר הם פועלים
בתוך Internet
Explorer עליהם להיכתב על פי
כלליה של Visual
J++ וכאשר הם פועלים
בתוך Netscape
Nevigator עליהם לפעול על פי
גרסת ה-JVM אשר מותקן בו).
Java Servlets הן
תכניות קטנות אשר פועלות בשרת ומסוגלות לתת שירותים לפניות אשר מגיעות אליו בדומה
לתכניות CGI .ה-servlets
הם, למעשה, אובייקטים אשר נוצרים ממחלקות אשר הוגדרו על פי דרישות מסוימות ושוכנים
בשרת באופן שמאפשר להם לקבל פניות מדפדפנים ולהחזיר להם תשובה בדומה לתכניות CGI.
הדיון
ב-JSP וב-Servlets חורג מגבולות הדיון
של ספר זה. הספר מתרכז ביסודותיה של השפה תוך התמקדות באופן כתיבתם של Java Applications ו- Java Applets.
תכניות מסוג Java Applications יכולות לפעול לבדן,
וללא סיועו של הדפדפן. כל מה שצריך הוא interpreter
מותקן במחשב (JVM שיתרגם את התכנית).
כפי שניתן לפתח תכניות (stand alone) כגון WORD , EXCELL ואחרות, כך גם ניתן לעשות זאת באמצעות Java.
תכניות מסוג Java Applets הן תכניות שניתן
להריץ רק באמצעות הדפדפן (או באמצעות ה-appletviewer
כפי שנראה בהמשך). ה-applet מיועד להרצה מתוך
מסמך HTML שבתוכו ישנה קריאה
להפעלתו. הקריאה להפעלת ה-applet (או בשמו העברי:
ישומון) משובצת במסמך ה-HTML בדומה לתמונה.
ההבדל הבולט בין applet ל- application הוא שב-application חייבים לכתוב את
המתודה main. ב- applet אין צורך במתודה
זו, למרות שבהחלט ניתן לכתוב אותה ובכך לגרום ל- applet לתפקד גם בתור application.
דוגמא
לפיתוחו של Application
השלבים
הטכניים הבסיסים ביותר בכתיבתו של Application הם:
1.
להשיג
עורך טקסט ולכתוב את קוד המקור של ה-Application.
2.
באמצעות
ה-JDK להדר את קוד המקור,
ולקבל כתוצאה מכך קובץ שמכיל java
byte code , ששמו זהה לשמו של
קובץ קוד המקור אך הסיומת היא class.
ההידור
נעשה באמצעות תכנית ההידור ששמה: javac
על שם הקובץ להיות זהה בדיוק לשם המחלקה תוך מתן תשומת לב
לאותיות גדולות וקטנות (המהדר רגיש לאותיות קטנות וגדולות).
3.
באמצעות
ה-interpreter ניתן להריץ את קובץ
ה-java
byte code שהתקבל.
ההרצה
נעשית באמצעות תכנית ההרצה שנקראת: java
כעת
ניגש לכתיבת התכנית הראשונה שלנו:
שלב א' : כתיבת קוד המקור
בדומה ל C++,
גם ב- JAVA התכנית מאורגנת
בתוך מחלקות.
עם זאת, בעוד שב C++ התכנית מורכבת
מקבצים שיכולים להכיל גם משתנים/פונקציות גלובאליות (פונקציות שלא שייכות לאף
מחלקה), ב-JAVA כל המשתנים/פונקציות
הקיימים/ות חייבות להיות שייכות למחלקה מסוימת.
דמיון נוסף בין שתי השפות הוא הצורך בקיומה של מתודה עיקרית בשם main, אשר בעצם הפעלתה
האפליקציה מתחילה לרוץ. ה- main מהווה מעין נקודת
התחלה לאפליקציה.
הפעל את עורך הטקסט שברשותך, וכתוב לתוך הקובץ החדש את התכנית הבאה:
//filename:HelloIsrael.java
//Copyright © 2000 Haim Michael & Zindell Publishing House,
Ltd.
//All rights reserved. No part of the contents of this program
may be
//reproduced or transmitted in any form or by any means without
the
//written permission of the publisher.
class HelloIsrael
{
public static void
main(String args[])
{
System.out.println("Hello Israel !");
}
}
בשמירת הקובץ חייבים לתת לו שם שזהה לשם
המחלקה שמוגדרת בו (בהמשך נראה שכלל זה לא תמיד מחייב). הסיומת שנותנים לקובץ
חייבת להיות : java.
במקרה
זה, אנו נשמור את הקובץ תחת השם : HelloIsrael.java
שלב ב' : הידור קובץ קוד
המקור וקבלת קובץ ה-java byte code
שמה של התכנית שמבצעת קומפילציה ב-JDK הוא: javac. כדי להפעילו מתוך
סביבת העבודה DOS יש לכתוב את שם
התכנית (javac) ומייד אחריו את שם
הקובץ שרוצים להדר.
כך,
למשל, כדי לבצע קומפילציה לקובץ HelloIsrael.java יש להקליד בשורת
הפקודה:
javac
HelloIsrael.java
ולהקיש
ENTER.
ה-
java compiler יוצר קובץ חדש ששמו זהה לשמו של קובץ קוד המקור,
והסיומת שלו class. הקובץ הזה מכיל
למעשה את ה- java
byte code.
הוראות
אלה נכונות לעבודה בסביבת הפיתוח של JDK.
בכלי פיתוח מתקדמים יותר ההידור נעשה באמצעות פקודות מהתפריט.
כדי
שהתכנית javac תפעל בהצלחה יש
לוודא שהספרייה שמכילה אותה נמצאת ב-path של
המחשב. אם קובץ קוד המקור מכיל יותר ממחלקה אחת, אז ה-javac ייצור יותר מקובץ
אחד. הוא ייצור קבצים שמספרם כמספר המחלקות. כל מחלקה תתורגם ל-java byte code שיישמר בקובץ נפרד,
אשר שמו זהה לשם של המחלקה והסיומת שלו היא class.
שלב ג' : הרצת התכנית
כדי להריץ את ה-application שנכתב יש להשתמש ב-interpreter, התכנית אשר מתרגמת
את ה-java
byte code לשפה שהמחשב מסוגל
להבין. בסביבת העבודה של JDK קיימת התכנית java. הפעלתה מתוך שורת
הפקודה של DOS וכתיבת שם הקובץ
שרוצים להריץ מיד אחרי שמה תגרום לתכנית לעבוד. כדאי לשים לב לכך ששם הקובץ הוא,
למעשה, גם השם של המחלקה שמהווה application (על שום שהיא מכילה
מתודת main). אחרי המילה java יש לרשום את שם
המחלקה בלבד, כלומר, את שם הקובץ שמכיל את ה-java byte code של אותה מחלקה (ללא
הסיומת שלו).
בדוגמא
זו יש לרשום בשורת הפקודה:
java
HelloIsrael
ולהקיש
ENTER.
כיוון
שה-interpreter צריך גם לתרגם את
ה-java
byte code לשפת המכונה שעליה
התכנית רצה, תכניות שכתובות ב-JAVA רצות לאט יותר.
התכנית
java נמצאת
באותה ספריה שבה נמצאת התכנית javac. יש לוודא שהספרייה
הזו כלולה ב-path. אם התקנת SDK מגרסה 1.3 אז
התכניות java ו-javac נמצאות בתיקיה c:\jdk1.3\bin ולכן יש לוודא שהיא
מופיעה ב-path.
כפי
שנראה בהמשך, ניתן להעביר אל התכנית משורת הפקודה (בדומה לתכניות שכתובות ב-C\C++ ) ערכים בעת הפעלתה.
דוגמא
לפיתוחו של Applet
השלבים
הטכניים הבסיסים ביותר ביצירתו של Java
Applet הם:
1.
להשיג
עורך טקסט ולכתוב את קוד המקור של ה-Applet.
2.
באמצעות
ה-JDK להדר את קוד המקור,
ולקבל כתוצאה מכך קובץ שמכיל java
byte code , ששמו זהה לשמו של
קובץ קוד המקור אך הסיומת היא class.
ההידור יעשה בדומה להידור ה-application, באמצעות התכנית javac.
3.
באמצעות
עורך טקסט לכתוב קובץ HTML מתאים אשר יכיל
קריאה להפעלת ה-applet.
4.
הרצת
ה-applet באמצעות ה-appletviewer או באמצעות העלאת
מסמך ה-HTML בדפדפן.
כעת
ניגש לכתיבת היישומון הראשון שלנו:
שלב א' : כתיבת קוד המקור
בדומה לכתיבת ה-application, גם ה-applet יאורגן במחלקות.
רוב ה-applet מכילים את שתי
שורות ה-import שמופיעות בדוגמה
לעיל. ב-applet אין מתודת main כמו שיש ב-application. רוב ה- applets מכילים את המתודה paint אשר גורמת להופעת
הטקסט, ולהופעת צורות גרפיות אחרות על המסך. מחלקה שמתעתדת להיות יישומון (applet) חייבת לרשת
מהמחלקה Applet. אנו נייחד ל-applets פרק מיוחד בהמשך.
הפעל את עורך הטקסט
שברשותך וכתוב לתוכו את שורות הקוד הבאות:
//filename:
HiIsrael.java
//Copyright © 2000 Haim Michael & Zindell Publishing House,
Ltd.
//All rights reserved. No part of the contents of this program
may be
//reproduced or transmitted in any form or by any means without
the
//written permission of the publisher.
import java.applet.*;
import java.awt.*;
public class HiIsrael extends java.applet.Applet
{
public void
paint(java.awt.Graphics g)
{
g.drawString("Hi
Israel !",50,25);
}
}
קובץ זה יש לשמור
עפ"י הכללים שאמורים לגבי application תחת שם שזהה לשם
המחלקה : HiIsrael.java.
שלב ב' : הידור קובץ קוד
המקור וקבלת קובץ ה-java byte code
כל מה שנאמר בנוגע להידור של תכנית שהיא application נכון גם לגבי תכנית
שהיא applet. ההידור נעשה באותו
אופן, ולכן, מה שיש לרשום בשורת הפקודה הוא:javac HiIsrael.java
שלב ג' : כתיבת קובץ HTML שמיועד להפעיל את ה-applet שכתבנו.
כדי להריץ יישומון שכתבנו יש לייצור מסמך HTML
מתאים אשר מכיל בתוכו את התגית <APPLET> שמיועדת להפעיל את
היישומון. לא ניתן להריץ יישומון מבלי שיהיה קובץ HTML מתאים אשר מפעיל
אותו.
הפעל
את עורך הטקסט שברשותך והעתק לתוך קובץ חדש שתיצור את שורות הקוד הבאות:
<applet
code="HiIsrael.class"
width=200 height=100>
</applet>
הענק
לקובץ שיצרת שם ושמור אותו עם הסיומת html.
width ו- height מבטאים את גודל
החלון שבו יוצג ה-applet.
בסביבות
פיתוח מתקדמות מסמך ה-HTML אשר מכיל את הקריאה
להפעלת ה-applet נוצר באופן אוטומאטי.
שלב ג' : הרצת היישומון
(ה-applet)
את היישומון שכתבת ניתן להריץ בשתי דרכים:
דרך
אחת היא להעלות לצפייה בדפדפן את מסמך ה-HTML
שמכיל את הקריאה להפעלת היישומון. העלאת מסמך ה-HTML לצפייה בדפדפן
תגרום להפעלת התגית APPLET
שנמצאת בו, וה- applet יתחיל לפעול.
דרך
שניה להפעלת היישומון היא הפעלתו באמצעות ה-appletviewer.
בחבילת הפיתוח JDK קיימת התכנית appletviewer אשר בהפעלתה על
קובץ ה- HTML שמכיל קריאה להפעלת
APPLET מופעל ה-Applet. כדי להפעיל את ה-appletviewr על התכנית שהנך
כותב כעת, יש לרשום בשורת הפקודה:
appletviewer
HiIsrale.html
ההבדל
הבולט בין שתי הדרכים הוא שבדרך השניה לא רואים את מסמך ה-HTML אלא רק את ה-applet שמופעל מתוכו בעוד
שבדרך הראשונה כן רואים את מסמך ה-HTML. הבדל נוסף שקיים
בין שתי הדרכים הוא שבדרך השניה, כאשר ה-appletviewer
מופעל על מסמך HTML
שכולל יותר מ-applet אחד אז הוא גורם
להופעתם של כל אחד מה-applets בחלון נפרד, בעוד
שבדפדפן היה ניתן לראות את כולם באותו חלון.
הקדמה
Packages
package abba;
class Gulu
{
.
.
.
}
בהוספת שורה זו, המחלקה
(או המחלקות אם יש יותר ממחלקה אחת בקובץ) יהיו שייכים ל-package ששמו abba.
אם לא מציינים באמצעות
משפט ה-package כי המחלקה/ות בקובץ
מסוים שייכות ל-package מסוים אז המחלקות
יהיו שייכות ל- default
package.
משפט ה-package בנוי באופן
הבא: package package name
נהוג לתת ל-package שם באותיות קטנות.
נהוג גם לייצור היררכיה של packages – יוסבר בהמשך.
כל קבצי ה-class של מחלקות ששייכות
ל- package מסוים יישמרו
בספריה (תיקיה) ששמה זהה לשם של ה-package. קיימת אפשרות ש-package או אפילו קבוצה של packages תישמר בקובץ אחד
מכווץ, אך באפשרות זו לא נדון בשלב זה.
לאחר כתיבת קובץ קוד
המקור שמכיל מחלקות ששייכות ל-package מסוים יש להדר אותו כך שקבצי ה-class שיווצרו יישמרו
בספריה ששמה זהה לשם של ה-package. כדי לעשות זאת יש
להדר באמצעות הוספת התגית –d למילה javac. כמו כן, יש לרשום
אחרי התגית –d את ה-path שבו אנו רוצים
שתיווצר הספריה (אם היא עדיין לא קיימת שם) של קבצי ה-package.
לדוגמא (המשך הדוגמא
הקודמת):
javac –d c:\ Gulu.java
כתיבת שורה זו בשורת
הפקודה תגרום לכך שקובץ ה-class שיווצר ישמר בספריה
ששמה abba, והספריה הזו
תיווצר בספריית השורש c:\.
כפי שכבר ציינתי, ניתן
לייצור היררכיה של packages. כלומר, package אשר יכיל packages אחרים וכך הלאה…
היררכיה של packages תבוא לידי ביטוי
בהיררכיה מתאימה של ספריות.
לדוגמא:
package abba.gold;
class Gulu
{
.
.
.
}
בהוספת
שורה זו, המחלקה (או המחלקות אם יש יותר ממחלקה אחת בקובץ) יהיו שייכים ל-package ששמו gold אשר יימצא בתוך ה-package ששמו abba.
בביצוע
הקומפילציה לקובץ זה בתוספת התגית –d וציון path , תיבנה היררכית
הספריות המתאימה (אם היא לא קיימת) ב-path
שצוין.
לדוגמא:
javac –d c:\
Gulu.java
כתיבת
שורה זו בשורת הפקודה תגרום לכך שקובץ ה-class שיווצר ישמר בספריה ששמה gold,
וספריה זו תיווצר כתת ספריה בספריה abba אשר תיווצר בספרית
השורש c:\. כל אחת מספריות
אלה תיווצר רק אם היא לא קיימת.
כאשר
יוצרים מחלקה ששייכת לpackage- מסוים, שמה איננו
עוד השם שנתנו לה בשורת הגדרתה בקוד המקור. כעת שמה המלא הוא השם שניתן בשורת
הגדרתה בצירוף שם ה-package שאליו היא שייכת או
בצירוף שמות ה-packages אם ה-package שאליו המחלקה שייכת
שייך ל-package אחד. אם יש יותר מpackage- אחד שצריך לציין את
שמו, השמות יצוינו עם נקודות מפרידות ביניהן.
המשך
הדוגמא:
כעת
שמה המלא של המחלקה Gulu יהיה: abba.gold.Gulu.
מלבד
ה-path קיים במחשב משתנה
סביבה חשוב נוסף, ששמו classpath. ה-classpath מכיל את רשימת ה-pathים
שבהם java ו- javac יחפשו מחלקה, מחלקה
שרוצים להריץ או מחלקה שנעשה בה שימוש על ידי מחלקה אחרת שעוברת קומפילציה.
כאשר
javac מחפש מחלקה (שנעשה
בה שימוש בקובץ שאותו היא מהדרת) הוא מחפש אותה, קודם כל, בספריה הנוכחית. אם הוא
לא מוצא אותה אז הוא מחפש אותה בספריות שבה נמצאים קבצי ה-class ששייכים ל-java core. אם גם שם הוא לא
מוצא אותה אז הוא מחפש אותה בכל אחד מה-pathים שמופיעים במשתנה ה-classpath , והוא עושה זאת
עפ"י סדר הופעתם משמאל לימין.
החיפוש
אחרי מחלקה ששייכת לpackage מסוים נעשה בכל אחד
מה-pathים
שמופיעים ב-classpath. בכל אחד מהpathים
שנבדקים מתבצע חיפוש אחרי ספריה ששמש זהה לשם של ה-package (או אחרי ספריה
ששמה זהה לשם של ה-package ואחר כך גם אחרי תת
ספריה מתאימה ששמה זהה לשם של תת ה-package) . אחרי מציאת
הספריה המתאימה מתבצע חיפוש אחרי הקובץ המתאים בתוך אותה ספריה.
מסיבה
זו, חשוב להוסיף ל-classpath את ה-path שבו נמצאת הספריה
(או הספריות) של ה-package שאליו המחלקה
המבוקשת שייכת.
המשך
הדוגמא האחרונה:
כדי
שניתן יהיה להשתמש, כעת, במחלקה Gulu יש צורך להוסיף אל
ה-pathים
שנמצאים ב-classpath : c:\.
כמו
כן, מעתה ואילך, כדי להשתמש במחלקה Gulu יש צורך לכתוב את
השם המלא של המחלקה: abba.gold.Gulu
לדוגמא,
כדי להריץ עכשיו את המחלקה Gulu (בהנחה שהיא application כמובן) יש צורך
לרשום זאת כך: java abba.gold.Gulu
את
השם המלא יש לרשום בכל מקום שבו עושים שימוש במחלקה. גם כאשר מריצים את המחלקה (java abba.gold.Gulu), וגם כאשר משתמשים
בה בתוך מחלקה אחרת. לגבי המקרה האחרון, ניתן להימנע מכתיבת השם המלא של המחלקה אם
עושים שימוש בפקודה import.
הערות:
·
המטרה
העיקרית של חלוקת המחלקות ל-packages היא לייצור מחלקות
עם שמות ייחודיים, ולכן מקובל לעשות שימוש בשם ה-domain שבו עושים שימוש
כשם של package. לדוגמא: package il.co.zindell
·
כאשר
בקובץ קוד מקור מסוים יש הגדרה של יותר ממחלקה אחת, ומוסיפים לתחילתו של הקובץ את
משפט ה-package אז כל המחלקות
שמוגדרות באותו קובץ ישויכו ל-package שצוין.
משפט הimport-
כדי
להימנע מכתיבת השם המלא של מחלקה (כלומר, שם ה-packaage שאליו היא שייכת או
שמות ה-packages מופרדים בנקודות מפרידות
ורק אחר כך השם של המחלקה) יש לכתוב את משפט ה-import בתחילת הקובץ.
קיימות שתי דרכים לשימוש במשפט ה-import:
שימוש ספציפי
בתחילת
הקובץ, כותבים את משפט ה-import עפ"י התבנית
הבאה:
import package
name . package name . class name;
במקרה
כזה, בקובץ שבו שורה זו נכתבה לא יהיה צורך לציין את שמה המלא של המחלקה ששמה צוין
כעת באופן ספציפי במשפט ה-import. ציון שמה ללא שמות
ה-packages שאליהם היא שייכת
יספיק.
דוגמא
לשימוש ספציפי בפקודה import:
אם
בתחילת קובץ אוסיף את השורה:
import
abba.gold.Gulu;
אז
כשארצה לעשות שימוש במחלקה Gulu אוכל לרשום את השם Gulu בלבד. אם ארצה,
אוכל עדיין לרשום את השם המלא: abba.gold.Gulu אך זאת יהיה מיותר.
שימוש כללי
בתחילת
הקובץ כותבים את משפט ה-import על פי התבנית הבאה:
import package
name . package name. *;
במקרה
כזה, כל המחלקות ששייכות ל-package שצוין (והכוונה רק
לתת ה- package) – ניתן יהיה לעשות
בהן שימוש בקובץ מבלי לציין את שמן המלא.
דוגמא
לשימוש כללי בפקודה import:
אם
בתחילת קובץ אוסיף את השורה:
import abba.gold.*;
אז
כשארצה לעשות שימוש במחלקה כלשהי ששייכת ל-package: abba.gold אוכל לרשום את השם של המחלקה לבדו בלבד.
אם ארצה אוכל עדיין לרשום את השם המלא, אך לא יהיה בכך עוד צורך.
הערות:
·
אם
מחלקה רוצה להשתמש במחלקה אחרת ושתיהן שייכות לאותו package אז אין צורך בכתיבת
שמה המלא של המחלקה האחרת, ולכן גם אין צורך במשפט ה-import.
·
ה-
package ששמו java.lang מיובא (import) באופן אוטומאטי
לכל קובץ שאנו כותבים ב-JAVA, ולכן אין צורך
להוסיף לתחילת הקובץ: import java.lang.*;
·
אם
הקובץ מכיל גם את משפט ה-package וגם את משפט ה-import, אז משפט ה-package יופיע לפני משפט ה-import.
אם
אתה מכיר את שפת התכנות C\C++, את/ה וודאי מכיר/ה
את פקודת ה-include אשר מורה לקדם מהדר
לכלול את תכנם של קבצים נוספים לצורך הידור. פקודת ה-import שונה מפקודת ה-include. שימוש בפקודת ה-import לא גורם להגדלת הקובץ, ולכן איננו פוגע
בביצועים. ההשוואות בין JAVA ל- C\C++ עוד יימשכו. אין לי כל כוונה לפגוע בכבודה
של C\C++ , וגם אין בכך כל
צורך.
דוגמא לשימוש ב-package וב-import
הדוגמא לעיל כוללת שני קבצים. המחלקה Cord
שבקובץ הראשון שייכת ל-package
ששמו: solico.
המחלקה PackageDemo
שבקובץ השני עושה שימוש במחלקה Cord,
ועל כן מופיעה בתחילת הקובץ שורת ה-import
המתאימה. אל תנסה/י להבין את מה שהמחלקות עושות בשלב זה. כדי להבין את פעולתן תוכל
לחזור אל הדוגמה לאחר ההתקדמות המתאימה בחומר.
את הקובץ הראשון, אשר כולל בתוכו את הגדרת
המחלקה Cord
עליך להדר באמצעות הוספת התגית –d ומייד אחריה את ה-path
שהחל ממנו תיבנה היררכית הספריות המתאימה. תוכל לקבוע כל path
שתרצה. זכור כי אם ברצונך לאפשר את השימוש במחלקה גם כאשר הספריה הנוכחית איננה
הספריה שבה נוצרו ספריות ה-packages,
עליך גם להוסיף את ה-path ל-classpath.
הוספת path ל-classpath נעשית
)בשורת הפקודה) באופן הבא:
set classpath=%classpath%; path to be added ;
%classpath%
מייצג את ה-classpath הנוכחי.
//filename: Cord.java
//Copyright © 2000 Haim Michael & Zindell Publishing House,
Ltd.
//All rights reserved. No part of the contents of this program
may be
//reproduced or transmitted in any form or by any means without
the
//written permission of the publisher.
package soliko;
public class Cord
{
private int x,y;
private byte color;
public void set(int
a,int b, byte color)
{
this.x=a;
// the parameter name is
different from
// the instance variable name so the use
// of the word this isn't neccesary !
this.y=b;
// the parameter name is
different from
// the instance variable name so the use
// of the word this isn't neccesary !
this.color=color;
// the parameter has the
same name as
// the instance variable color so the
// use of the word this is necessery
}
public void set(int
a,int b)
{
x=a;
y=b;
}
public void set(byte
clr)
{
color=clr;
}
public void set()
{
x=y=0;
set((byte)0);
//calling the function
set(byte) to set the color
//to be zero. you can use the word 'this' but you
//don't have to !
}
public void set(int a)
{
x=a;
y=a;
}
public boolean
equals(Cord otherCord)
{
if (otherCord.x==x && otherCord.y==y)
return true;
else
return false;
}
}
הקובץ
השני עושה שימוש במחלקה Cord. שים לב כיצד
באמצעות משפט ה-import אין צורך לרשום את
השם המלא של המחלקה Cord.
//filename:PackageDemo.java
//Copyright © 2000 Haim Michael & Zindell Publishing House,
Ltd.
//All rights reserved. No part of the contents of this program
may be
//reproduced or transmitted in any form or by any means without
the
//written permission of the publisher.
import soliko.Cord;
public class PackageDemo
{
public static void
main(String args[])
{
Cord
CordA1;
Cord CordA2;
CordA1=new Cord();
CordA2=new Cord();
CordA1.set(10);
// Now CordA1 is (10,10) in color 2
CordA2.set(10,10,(byte)2);
// Now CordA2 is (10,10) in color 2 too !
if (CordA1.equals(CordA2))
System.out.println("\nThe two new Cords equal");
}
}
java solico.Cord
כמו כן, שורה זו ניתן
יהיה לרשום מכל path, ובלבד שה-classpath יכלול את ה-path, שבו ממוקמת הספריה
solico. אם ה-classpath לא כולל את ה-path, שבו ממוקמת הספריה
solico אז ניתן יהיה להריץ
את solico.Cord רק אם מנסים לעשות
זאת כאשר נמצאים בספריה שבה נמצאת תת הספריה solico.
במקום לשנות את ערכו של
ה-classpath ניתן, לחילופין,
לשמור את תת הספרייה (solico במקרה זה) בתיקיה c:\jdk1.3\jre\classes (בהנחה שה-jdk הותקן בספריית
השורש c:). אם תת הספרייה
כלולה בתוך קובץ jar אז ניתן לשמור אותה
בתיקיה c:\jdk1.2\jre\lib\ext (בהנחה שה-jdk הותקן בספריית
השורש c:) במקום לעדכן את ה-classpath.
ה- javadoc
היא תכנית שמאפשרת
לייצור קבצי HTML
שמהווים דוקומנטציה לתכנית הנכתבת. ההערות שמשולבות בתוך התכנית ושמועתקות אל קובץ
ה-HTML
שנוצר בתור תיעוד מאופיינות בכך שהן מתחילות ב- **/
ומסתיימות ב- /*
בתוך ההערות שה-javadoc
לוקח וממקם בקבצי התיעוד שהוא יוצר, ניתן למקם תגיות HTML,
וכמו כן, גם תגיות שמיוחדות ל- javadoc,
כגון: @see, @author ו-
@since.
כדי להשתמש ב-javadoc יש
לרשום בשורת הפקודה javadoc
ואחריה את שם קובץ ה-JAVA או
שם ה-package
שרוצים לעשות להם דוקומנטציה. בין המילה javadoc
לשם הקובץ יש להוסיף תגיות ותוספות שונות בהתאם לדוקומנטציה שרוצים שתיווצר.
להכרות רחבה יותר עם הכלי תוכל/י לעבור ולקרוא עליו בנספח המתאים או לחילופין,
לקרוא עליו ב- API Documentation,
אשר גם הוא נוצר באמצעות ה-javadoc.
בדוגמא הבאה מובא קובץ
שניתן להפעיל עליו את ה- javadoc.
תוכל להתרשם מפעולת ה-javadoc על
הקובץ בכך שבשורת הפקודה (עליך להימצא בספריה שבה נמצא הקובץ הזה) תרשום/תרשמי:
javadoc –d
. –author JavadocExample.java
לאחר מתן הפקודה, תוכל
לראות כיצד נוצרים קבצי ה-HTML
המתאימים. לאחר תום תהליך יצירתם של הקבצים ניתן לצפות בהם באמצעות הדפדפן. אחרי התגית –d,
הפקודה javadoc
מצפה לקבל את ה-path
למיקום שבו יווצרו קבצי ה-HTML. שליחת . (נקודה בודדת) כמוה כשליחת ה-path
לספריה הנוכחית, שכעת עובדים עליה.
//filename:
JavadocExample.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* filename is JavadocExample.
* was written in 26/6/99
* in the Holly Land
* @since version b1
* @author Haim Michael */
public class JavadocExample extends Frame
{
/**@serial
beautiful */
private Panel pane;
/**This is the
amazing constructor we love
*and without
him we could feel lonely
*/
public
JavadocExample()
{
pane = new Panel();
Button blueButton = new
Button("Blue");
pane.add(blueButton);
Button redButton = new
Button("Red");
pane.add(redButton);
add(pane,"Center");
}
/**This is the main
method of the application
*We like to
write comments … */
public
static void main(String[] args)
{
Frame f = new
JavadocExample();
f.addWindowListener(new
WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
} );
f.setSize(400,
400);
f.show();
}
}
בתיעוד של JAVA ניתן למצוא את ההגדרה הבא:
“The Java Virtual Machine is an Imaginary Machine that is implemented
by emulating it in software on a real machine. Code for the Java Virtual
Machine is stored in .class files, each of which contains code for at most one
public class.”
ה- JVM (Java
Virtual Machine) אחראית לתרגום ה-Java
Byte Code לשפת המכונה שעליה התכנית מורצת. ה-JVM
יכולה להיות תוכנית
שמורצת במחשב או אפילו חלק מהחומרה שלו. קובץ ה-byte
code (הקובץ עם הסיומת ,class) מכיל למעשה סדרת
הוראות ל-JVM. בכל כלי שמסוגל
להריץ תכניות ב-JAVA (דפדפנים, סביבות
פיתוח של תכניות ב-JAVA... ) קיים ה-JVM.
ה-JVM
Specification מכיל הגדרות מדויקות בנוגע לאופן שבו אמורים להיות קבצי ה-Java
Byte Code כדי שיוכלו לרוץ באמצעות ה-JVM. כאשר מגיעה מחלקה מרשת האינטרנט לפני
שהיא מורצת מופעל ה- Bytecode Verifier
אשר מוודא בין היתר את עמידת קובץ ה- Java Byte Code בכללים.
מידע נוסף אודות ה-JVM תוכל/י לקבל בספר:
JAVA Virtual Machine \ Jon Meyer & Troy Downing from O’REILLY
ה-JVM
בגרסאותיו המיושנות תרגם את התכנית פקודה, פקודה עפ"י סדר הופעתן. כתוצאה מכך
התכנית רצה די לאט.
במהלך
השנים ה-JVM התפתח וביצועיו
שופרו. לאחרונה פותח JVM חדיש ששמו: HOT
SPOT VIRTUAL MACHINE, אשר מסוגל לתרגם את אותם חלקים של התכנית
אשר מתבצעים יותר מפעם אחת (האזורים החמים שלה) לשפת מכונה, ורק אחר כך להריצה.
הודות להתקדמות זו, מהירות הריצה של תכניות ב-JAVA
מתקרבת למהירות הריצה של תכניות ב- C++. כמו כן, הודות
לפיתוח האחרון, ניתן לייצור Multi Threading (מספר רצפי פעולה שפועלים במקביל) תוך
התבססות ישירה על ה-CPU, וללא יצירת
סימולציה לכך. בכך מושג שיפור נוסף בביצועים. בשלב זה אינך אמור/ה להכיר את המושג thread
(פרק 9 מוקדש במלואו לנושא זה).
בשפות רבות קיימת האפשרות להקצות זיכרון דינמי במהלך ריצת
התכנית. כאשר לא משתמשים עוד בשטח שהוקצה באופן דינמי, יש לשחרר אותו כדי שיוכל
לשמש למטרות אחרות. בעוד שב- C\C++ וגם בשפות אחרות, האחריות לשחרור הזיכרון
שהוקצה נופלת על המתכנת, ב- JAVA האחריות לכך מוטלת
על השפה עצמה, וליתר דיוק, על ה- Garbage Collector.
הודות לכך, הסיכוי שתכנית ב-JAVA תקרוס בגלל בעיות
זיכרון קטן יותר מאשר אילו התכנית הייתה כתובה ב-C/C++
למשל.
ה-
Garbage Collector פועל ברצף וללא
הפסקה כל הזמן במקביל לתכנית, ומנהל מעקב אחרי כל שטחי הזיכרון שמוקצים בתכנית.
כאשר הוא מגלה ששטח זיכרון שהוקצה – אך משתנה לא מצביע עליו יותר הוא משחרר
אותו. כאן המקום להעיר, כי ב-JAVA המשתנים נחלקים
לשני סוגים. המשתנים מהטיפוס הבסיסי מכילים ערכים מהטיפוסים הבסיסיים שקיימים.
המשתנים מהטיפוס המחלקתי מכילים כתובות של שטחי זיכרון שמייצגים (כל אחד מהם
בנפרד) אובייקט. נקודה זו תובהר בפרקים הבאים.
נספח ו':
פקודות
שכיחות ב-SQL
2000 © All
the rights reserved to
Haim Michael & Zindell Publishing House Ltd.
No
parts of the contents of this paper may be reproduced or transmitted
in
any form by any means without the written permission of the publisher !
This
book can be used for personal use only!!!
Brought
to you by ZINDELL