» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
קביעת תכונות בתוכנית
דף ראשי  מתחילים  קביעת תכונות בתוכנית גרסה להדפסה

קביעת תכונות בתוכנית

 

 

- מבוא

- הקדמה

- קביעת מאפיינים ושימוש במאפיינים

- ארגומנטים משורת פקודה

- פרמטרים ב‑applet

- שאלות סיכום

 


 

מבוא

 

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

הנושאים הספציפיים ב – C++ מוצעים כחומר משלים לטובת אלו שמכירים כבר C++
ומבצעים הסבה ל –
Java.

 

הקדמה

 

לעתים התוכנית תידרש לקרוא את התכונות של המערכת, ולקרוא ו/או לשנות תכונות ספציפיות לתוכנית.

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

 

תוכניות Java מסוגלות לנהל את התכונות של התוכנית הודות לשלושה מנגנונים:

·       מאפיינים

·       ארגומנטים משורת הפקודה באפליקציה

·       פרמטרים ב‑applet

 

קביעת מאפיינים ושימוש במאפיינים

 

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

משום כך, הדיון יהיה קצר ובדרך כלל גם לא טכני. כאשר תגיע שעתך להשתמש במאפיינים,
תוכל לפנות לעמוד 227 ב‑
The Java Tutorial, או מקור אחר מסוגו, כדי לדלות את הפרטים.

 

על פי The Java Tutorial by Campione & Walrath,

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

 

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

 

כזכור, אף על פי שלאפליקציות Java יש גישה לקבצים בדיסק של המחשב המארח, ושבו מבוצעת האפליקציה, הרי נכון לזמן הכתיבה (26/1/97), ל‑applets אין גישה כזו.

לכן, על מנת ש‑applet יוכל לעשות שימוש במאפיינים, עליו להיות בעל גישה לאחסון ארוך-טווח בשָרָת, שממנו הוא הורד (נכון לזמן הכתיבה, גם הגישה של applets לשָרַתֵי רשת מוגבלת לשָרָת, שממנו ה‑applet הורד).

 

מחלקת Properties

 

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

 

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

 

גם key וגם value הם מחרוזות. לדוגמה, os.name הוא ה‑key של אחד ממאפייני ברירת המחדל של Java. הערך שלו מכיל את שם מערכת ההפעלה הנוכחית.

 

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

ממחיש את השימוש באובייקט מטיפוס Properties על מנת להציג את מאפייני המערכת.

 

/*File Prop01.java Copyright 1997, R.G.Baldwin
Illustrates use of an object of type Property to display 
system properties.

The output from the program was:
-- listing properties --
user.language=en
java.home=C:\JAVA_JDK\JAVA\BIN\..
awt.toolkit=sun.awt.windows.WToolkit
file.encoding.pkg=sun.io
java.version=1.1.3
file.separator=\
line.separator=

user.region=US
file.encoding=8859_1
java.vendor=Sun Microsystems Inc.
user.timezone=CST
user.name=Baldwin
os.arch=x86
os.name=Windows 95
java.vendor.url=http://www.sun.com/
user.dir=C:\BALDWIN\JavaProg\Combined\Java
java.class.path=.;c:\Baldwin\JavaProg;C:\JAVA_JDK\JAV...
java.class.version=45.3
os.version=4.0
path.separator=;
user.home=C:\JAVA_JDK\JAVA\BIN\..
**********************************************************/
import java.util.*;
import java.lang.*;

class Prop01{
  public static void main(String[] args){
    //Instantiate and display a Properties object 
    // containing the system properties
    Properties obj = new Properties(
                                 System.getProperties() );
    obj.list(System.out);
  }//end main()
}//end class Prop01

 

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

 

השגת מאפייני המערכת נעשית באמצעות קריאה למתודת מחלקה בשם getProperties() של מחלקת System. לאחר מכן, מתודת list() של מחלקת Properties משמשת כדי להציג את תוכן האובייקט.

 

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

 

מאפייני System מנוהלים באמצעות מחלקת java.lang.System, כמו בתוכנית לעיל.

 

מרגע שיצרת אובייקט Properties עבור התוכנית שלך, תוכל לשמור אותו בזרימת פלט באמצעות מתודת save(). בעתיד תוכל להטעין אותו באמצעות מתודת load().

 

ארגומנטים משורת הפקודה

 

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

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

 

על פי The Java Tutorial by Campione & Walrath,

 

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

 

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

 

copy fileA fileB

 

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

 

אפליקציית Java מסוגלת לקבל כל מספר של ארגומנטים משורת הפקודה.

ארגומנטים אלה מאפשרים למשתמש לשנות את אופן הפעולה של אפליקציה.

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

 

תוכנית לדוגמה, המציגה ארגומנטים משורת הפקודה

 

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

 

אפליקציית Java שממחישה את השימוש בארגומנטים משורת הפקודה.

 

כאשר מריצים את התוכנית משורת הפקודה באופן הבא:

java cmdlin01 My command line arguments

  

/*File cmdlin01.java Copyright 1997, R.G.Baldwin
This Java application illustrates the use of Java 
command-line arguments.

When this program is run from the command line as follows:

java cmdlin01 My command line arguments

the program produces the following output:

My
command
line
arguments

**********************************************************/
class cmdlin01 { //define the controlling class
  public static void main(String[] args){ //main method
    for(int i=0; i < args.length; i++)
    System.out.println( args[i] );
  }//end main
}//End cmdlin01 class.  

 

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

התוכנית משתמשת בפרמטר length של מערך String בפסוקית התנאי של לולאת for על מנת להציג את המחרוזות בזו אחר זו.

 

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

 

באחד השיעורים הקודמים הופיעה תוכנית לדוגמה, המראה כיצד להשתמש במחלקות עוטפות מִסְפָּריוֹת, על מנת להפוך מחרוזות לערכים מספריים. מומלץ שתעיין שנית בתוכנית ההיא.

 

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

 

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

 

מוסכמות

 

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

 

The Java Tutorial by Campione & Walrath מתאר כמה מן המוסכמות הקיימות ומביא תוכנית לדוגמה, המטפלת בשאלות המתעוררות מתוכן.
לא נדון בהן כאן. במקרה הצורך, תדע היכן למצוא זאת.

 

הבדלים לעומת C ו‑++C

 

מתכנתי C ו‑++C צריכים לזכור, שהשיטה של העברת ארגומנטים משורת הפקודה ב‑Java דומה לזו של C ו‑++C, אך נבדלת ממנה מכמה בחינות.

 

התחביר של פונקציית main ב‑++C/C אינו מחייב לתמוך בארגומנטים משורת הפקודה אלא אם כן משתמשים בהם.

לעומת זה, התחביר של מתודת main ב‑Java מחייב לתמוך בארגומנטים משורת הפקודה גם אם התוכנית אינה משתמשת בהם.

 

ב‑++C/C המערכת מעבירה לתוכנית שני פרמטרים התומכים בארגומנטים משורת הפקודה:

·       מספר הארגומנטים

·       מחוון למערך של מחוונים, שכל אחד מהם מצביע על מחרוזת.

 

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

 

ב‑C וב‑++C המערכת מעבירה, נוסף על הארגומנטים עצמם שהוכנסו בשורת הפקודה,
גם את שם התוכנית העומדת להתבצע (במערכות מסוימות, שם המערכת יהיה זבל).

ב‑Java, לעומת זה, רק הארגומנטים עצמם מועברים לתוכנית.

 

פרמטרים ב‑applet

 

המנגנון השלישי, שבו משתמשות תוכניות Java כדי לנהל את התכונות של התוכנית, הוא באמצעות פרמטרים ב-applet.

 

ניתן להשתמש בפרמטרים של ה‑applet בתוך עמודי HTML על מנת להשפיע על התנהגותו של ה‑applet,  בדומה לאופן שבו ארגומנטים משורת הפקודה משמשים כדי להשפיע על התנהגותה של אפליקציה. תוכל להשתמש בפרמטרים של ה‑ applet כדי לקבוע תכונה או כמה תכונות עבור כל הפעלה בודדת של ה‑applet.

הדיון בפרמטרים אלה יידחה לשיעור הדן ב‑ applets בהרחבה.

 

שאלות סיכום

 

ש: כתוב תוכנית העונה על הדרישות הבאות.

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

 

/*File SampProg27.java from lesson 52
Copyright 1997, R.G.Baldwin
Without viewing the solution that follows, write a Java
application that illustrates use of an object of type 
Properties to display system properties.

The output from the program should be similar to the
following, but will differ from one system to the next:
  
-- listing properties --
user.language=en
java.home=C:\JAVA_JDK\JAVA\BIN\..
awt.toolkit=sun.awt.windows.WToolkit
file.encoding.pkg=sun.io
java.version=1.1.1
file.separator=\
line.separator=

user.region=US
file.encoding=8859_1
java.vendor=Sun Microsystems Inc.
user.timezone=CST
user.name=Baldwin
os.arch=x86
os.name=Windows 95
java.vendor.url=http://www.sun.com/
user.dir=C:\BALDWIN\Cis2103J\Fall97\SampProg
java.class.path=;C:\Program Files\Kawa;C:\JAVA_JDK\JA...
java.class.version=45.3
os.version=4.0
path.separator=;
user.home=C:\JAVA_JDK\JAVA\BIN\..
**********************************************************/
import java.util.*;
import java.lang.*;

class SampProg27{
  public static void main(String[] args){
    //Instantiate and display a Properties object 
    // containing the system properties
    Properties obj = 
      new Properties(System.getProperties());
    obj.list(System.out);
  }//end main()
}//end class SampProg27

 

ש: כתוב תוכנית העונה על הדרישות הבאות.

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

 

כאשר התוכנית תורץ משורת הפקודה באופן הבא:

 

java SampProg28 My command line arguments

 

/*File SampProg28.java from lesson 52
Copyright 1997, R.G.Baldwin
Without viewing the solution that follows, write a Java
application that illustrates the use of Java command-line
arguments.

When this program is run from the command line as follows:

java SampProg28 My command line arguments

the program should produce the following output:

My
command
line
arguments
**********************************************************/
class SampProg28 { //define the controlling class
  public static void main(String[] args){ //define main
    for(int i=0; i < args.length; i++)
    System.out.println( args[i] );
  }//end main
}//End SampProg28 class.  Note no semicolon required

//End Java application

 

 

 05-01-04 / 19:24  נוצר ע"י רונית רייכמן  בתאריך 
 שאלות סיכום - הקודםהבא - חברים בהֵדגֵם, חברים במחלקה, בנאים וביצוע סיום 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 12