דלג לתוכן

שימוש באובייקטים ובשיטות

מדעי מחשב A - AP · נושא 1

שיעור וידאו לנושא זה פתח את עמוד הוידאו
15:05

שימוש באובייקטים ובשיטות

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

קריאת קול באנגלית · תרגום אנגלי + סינית שרוף בתוך הסרטון

1.1

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

סיילבוס

מטרת הלמידה 1.1.A: ייצוג דפוסים ואלגוריתמים הנמצאים בחיי היומיום באמצעות כתיבה או דיאגרמות.

  • 1.1.A.1 אלגוריתמים מגדירים תהליכים צעד-צעד שיש לבצע בעת ביצוע משימה או פתרון בעיה. אלגוריתמים אלו יכולים להיות מיוצגים באמצעות כתיבה או דיאגרמות.
  • 1.1.A.2 רצף מגדיר סדר עבור ביצוע הצעדים בתהליך. צעדים בתהליך מתבצעים אחד אחרי השני.

מטרת הלמידה 1.1.B: הסבר על תהליך ההרכבה והביצוע של קוד.

  • 1.1.B.1 קוד ניתן לכתיבה בכל עורך טקסט; עם זאת, משתמשים לעיתים קרובות ב-סביבת פיתוח משולבת (IDE) כדי לכתוב תוכניות, מכיוון שהיא מספקת כלים למפתח כדי לכתוב, להרכיב ולהפעיל קוד.
  • 1.1.B.2 מיישר בודק את הקוד לקיוום שגיאות מסוימות. שגיאות שניתן לגלות על ידי המיישר חייבות לתוקן לפני שהתוכנית תוכל להפעיל.

מטרת הלמידה 1.1.C: זיהוי סוגי שגיאות בתכנות.

  • 1.1.C.1 שגיאת סינטקס היא טעות בתוכנית בה כללי לשפת התכנות אינם נעלמו. שגיאות אלו נזקפות על ידי המיישר.
  • 1.1.C.2 שגיאת לוגיקה היא טעות באלגוריתם או בתוכנית הגורמת להתנהגות לא נכונה או לא צפויה. שגיאות אלו נזקפות על ידי בדיקת התוכנית עם נתונים ספציפיים כדי לוודא שהיא מייצרת את התוצאה הרצויה.
  • 1.1.C.3 שגיאת ריצה היא טעות בתוכנית שקורה במהלך הביצוע של תוכנית. שגיאות ריצה גורמות לרוב להפסקת התוכנית בצורה לא תקינה.
  • 1.1.C.4 חריגה היא סוג של שגיאת ריצה הנובעת מאירוע בלתי צפוי שלא נזקף על ידי המיישר. היא מפסיקה את זרימת הביצוע הרגילה של התוכנית.

מקור: תיאור הקורס והמבחן של College Board AP

קוד מקור בעמדת עבודה — תוכניות נכתבות, מצומצמות ורצות כהוראות מדויקות
קוד מקור במח workstation — תוכניות נכתבות, מופקות ומיושרות כהוראות מדויקות

אלגוריתם הוא הליך סופי ושלבים-שלביים שפותר בעיה. תוכנית מבטאת אלגוריתם בשפה שמחשב יכול ליישם. Java היא מופקת: ה-מפיק מתרגם את קוד המקור שלך ל-בייטקוד, שה-מכונה הוירטואלית של Java (JVM) מיישמת. שגיאת סינטקס (הפרת הדקדוק) נתפסת על ידי המפיק; שגיאת לוגיקה (תוצאה שגויה) לא – התוכנית מיושרת אך פועלת באופן שגוי.

מפיק מתרגם את כל התוכנית בבת אחת; אינטרפרטר מיישם אותה שורה בשורה
מפיק מתרגם את כל התוכנית בבת אחת; אינטרפרטר מיישם אותה שורה בשורה
מספר שבבי מעבדי מחשב הנראים מלמטה
התוכנית שלך ב-Java מופקת להוראות שעובד כמו אחד משלו אכן מיישם
מילון מונחים אימון
English עברית
algorithm/ˈælɡərɪθəm/ אלגוריתם
program/ˈprəʊɡræm/ תוכנית מחשב
compiled/kəmˈpaɪld/ עריכה
compiler/kəmˈpaɪlə/ מתרגם
syntax error/ˈsɪntæks ˈerə/ שגיאת סינטקס
logic error/ˈlɒdʒɪk ˈerə/ שגיאת לוגיקה
variable/ˈveərɪəbl/ משתנה
1.2

משתנים וסוגי נתונים

סיילבוס

יעד למידה 1.2.A: זיהוי סוג הנתונים המתאים ביותר לקטגוריה עבור ספקיפיקציה נתונה.

  • 1.2.A.1 סוג נתונים הוא קבוצת ערכים וקבוצת פעולות המתאימה לערכים אלו. סוגי נתונים יכולים להיות קטגוריזציה כ要么 primitive או reference.
  • 1.2.A.2 סוגי הנתונים ה-primitive המשמשים בקורס זה מגדירים את קבוצת הערכים ואת הפעולות המתאימות עליהם עבור מספרים וערכים בוליאניים.
  • 1.2.A.3 סוג ייחוס (reference type) משמש להגדרת אובייקטים שאינם סוגי primitive.

יעד למידה 1.2.B: פיתוח קוד להצהרת משתנים לאחסון מספרים וערכים בוליאניים.

  • 1.2.B.1 שלושת סוגי הנתונים הפרימיטיביים המשתמשים בקורס הם int, double ו-boolean. ערך int הוא מספר שלם. ערך double הוא מספר אמיתי. ערך boolean הוא או true או false.
    • הודעת חריגה: חמישה סוגי נתונים primitive אחרים (long, short, byte, float ו-char) אינם בתחום הלימודים ובמבחן AP Computer Science A.
  • 1.2.B.2 משתנה הוא מקום אחסון המכיל ערך, שעלול להשתנות בעת ביצוע התוכנית. לכל משתנה יש שם וסוג נתונים הקשור אליו. משתנה מסוג primitive מכיל ערך primitive מאותו סוג.

מקור: תיאור הקורס והמבחן של College Board AP

משתנה הוא קופסה עם שם ששומרת ערך מסוג קבוע. הסוגים פרמיטיביים העיקריים ב-Java הם int (מספרים שלמים), double (מספרים עשרוניים), וboolean (true/false). הכרז עם הסוג תחילה:

סוגי הנתונים הבסיסיים ב-Java, כל אחד שומר סוג שונה של ערך
סוגי הנתונים הבסיסיים ב-Java, כל אחד שומר סוג שונה של ערך
int score = 90;
double price = 4.99;
boolean passed = true;
חקור

חקור כיצד משתנה שומר ערך אחד בכל פעם

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

מילון מונחים אימון
English עברית
type/taɪp/ סוג
primitive types/ˈprɪmɪtɪv taɪps/ סוגים primitive (בסיסיים)
expression/ekˈspreʃn/ ביטוי
modulus/ˈmɒdjʊləs/ מודולוס
escape sequence/eˈskeɪp ˈsiːkwəns/ תווית בריחה
assignment/əˈsaɪnmənt/ הקצה
1.3

ביטויים והדפסה

סיילבוס

מטרת למידה 1.3.A: פיתוח קוד ליצירת תפוקה וקביעת התוצאה שתוצג.

  • 1.3.A.1 System.out.print וSystem.out.println מציגים מידע על מסך המחשב. System.out.println מעביר את המעבר לסיבה חדשה לאחר הצגת המידע, בעוד שSystem.out.print אינו עושה זאת.

מטרת למידה 1.3.B: פיתוח קוד לשימוש בליטרלים של מחרוזות וקביעת התוצאה של שימוש בליטרלים אלו.

  • 1.3.B.1 ליטרל הוא הייצוג הקודי של ערך קבוע.
  • 1.3.B.2 ליטרל מחרוזת הוא רצף של תווים הכולא בתוך סימני ציטוט כפולים.
  • 1.3.B.3 רצפי בריחה הם רצפים מיוחדים של תווים שיכולים להיות כלולים במחרוזת. הם מתחילים ב\ ול他们有 משמעות מיוחדת ב-Java. רצפי הבריחה המשמשים בקורס זה כוללים סימן ציטוט כפול \", מקש חזרה (backslash) \\, וסיבת חדשה (newline) \n.

מטרת למידה 1.3.C: פיתוח קוד עבור ביטויים אריתמטיים וקביעת התוצאה של ביטויים אלו.

  • 1.3.C.1 ביטויים אריתמטיים, המורכבים מערכים מספריים, משתנים ומפעולות, כוללים ביטויים מסוג int וdouble.
  • 1.3.C.2 הפעולות האריתמטיות כוללות חיבור +, חיסור -, כפל *, חלוקה /, ושארית %. פעולה אריתמטית שמשתמשת בשני ערכי int תוביל לתוצאה של ערך int. פעולה אריתמטית שמשתמשת לפחות בערך אחד מסוג double תוביל לתוצאה של ערך double.
    • הצהרת יציא: ביטויים המובילים לערכי double מיוחדים (למשל, אינסופיים ו-NaN) אינם בטווח הלימודים ובחינה של AP Computer Science A.
  • 1.3.C.3 כאשר מחלקים ערכים מספריים שהם שניהם ערכי int, התוצאה היא רק החלק השלם של המנה. כאשר מחלקים ערכים מספריים שמשתמשים בהם לפחות בערך אחד מסוג double, התוצאה היא המנה.
  • 1.3.C.4 הפעולת שארית % משמשת לחישוב השארית כאשר מספר a מחולק במספר אחר b.
    • הצהרת יציא: השימוש בערכים קטנים מ0 עבור a והשימוש בערכים קטנים או שווים ל0 עבור b אינם בטווח הלימודים ובחינה של AP Computer Science A.
  • 1.3.C.5 ניתן להשתמש בפעולות לבניית ביטויים מורכבים. בזמן ההרכבה, ערכים מספריים מקושרים לפעולות בהתאם לסדר עדיפות של פעולות כדי לקבוע כיצד הם מקושרים. סוגריים יכולים לשמש לשינוי סדר עדיפות של פעולות. כפל, חלוקה ושארית ישנם עדיפות על פני חיבור וחיסור. פעולות עם אותה עדיפות מוערכות משמאל לימין.
  • 1.3.C.6 ניסיון לחלק מספר שלם באפס שלם יוביל לArithmeticException.
    • הצהרת יציא: השימוש בחלוקה לאפס כאשר ערך מספרי אחד הוא double אינו בטווח הלימודים ובחינה של AP Computer Science A.

מקור: תיאור הקורס והמבחן של College Board AP

ביטוי משלב ערכים ו-פעולונים לחישוב תוצאה: + - * / ו% (מודולוס, שארית החילוק). חילוק שלם חותך: 7 / 2 הוא 3, בעוד ש7 % 2 הוא 1. עדיפות פעולונים עוקבת אחרי מתמטיקה (*,/,% לפני +,-). הדפס עם:

System.out.print("no newline");
System.out.println("with newline");

חילוק שלם על שלם 0 (כמו 7 / 0) אינו מותר וגורם לקריסה בזמן הרצה עם ArithmeticException. בתוך מחרוזת, מקש אחורי מסמן רצף בריחה: \" מדפיס תווית ציטוט כפולה, \\ מקש אחורי יחיד, ו\n מתחיל שורה חדשה – כך שSystem.out.println("She said \"hi\""); מדפיס She said "hi".

חקור

חקרו את סדר הפעולות צעד אחר צעד

Java מפעילה *, /, % לפני + ו -, פועלת משמאל לימין. צפו בכל שלב ותראו מדוע 2 + 3 * 4 היא $14$, ולא $20$ — הכפל מתבצע תחילה.

1.4

הוראות הקצה וכניסה

סיילבוס

מטרת למידה 1.4.A: פיתוח קוד עבור הוראות הצבה עם ביטויים וקביעת הערך שנשמר במשתנה כתוצאה מההוראות הללו.

  • 1.4.A.1 לכל משתנה יש להעריך ערך לפני שהוא יכול לשמש בביטוי. ערך זה חייב להיות מסוג נתונים תואם. משתנה מוזן לראשונה כשהוא מקבל ערך. סוגי ייחוס יכולים לקבל אובייקט חדש או null אם אין אובייקט. הליטרל null הוא ערך מיוחד המשמש להצגה שהייחוס אינו קשור לאובייקט כלשהו.
  • 1.4.A.2 פעולת ההצבה = מאפשרת לתוכנית לזין או לשנות את הערך הנשמר במשתנה. ערך הביטוי בצד ימין נשמר במשתנה בצד שמאל.
    • הערת פסילה: השימוש בפועלי ההשמה בתוך ביטויים (למשל, a = b = 4; או a[i += 5]) אינם כלל שיעורי הקורס ובמבחן AP Computer Science A.
  • 1.4.A.3 במהלך ביצוע, ביטוי מוערך כדי לייצר ערך יחיד. לערך הביטוי יש סוג המבוסס על הערכת הביטוי.

מטרה לימודית 1.4.B: פיתוח קוד לקריאת קלט.

  • 1.4.B.1 הקלט יכול לבוא בצורות שונות, כגון מגע, שמיעה, חזות או טקסט. המחלקה Scanner היא אחת הדרכים להשיג קלט טקסט מהמקלדת.
    • הצהרת בלילה: כל צורה ספציפית של קלט מהמשתמש אינה בתחום ההשכלה של קורס ובחינת AP Computer Science A.

מקור: תיאור הקורס והמבחן של College Board AP

הקצה x = expr; מעריך את האגף הימני ושומרת אותו במשתנה השמאלי. קרא כניסה עם Scanner:

Scanner in = new Scanner(System.in);
int age = in.nextInt();
String name = in.next();
1.5

ייעוש טיפו (Casting) ותחום משתנים

סיילבוס

מטרה לימודית 1.5.A: פיתוח קוד לביצוע Cast של ערכים פרמיטיביים לסוגים פרמיטיביים שונים בביטויים אריתמטיים והגדרת הערך הנובע כתוצאה מכך.

  • 1.5.A.1 אופרטורי ה-Cast (int) ו-(double) יכולים לשמש להמרה מערך מסוג double לערך מסוג int (או להפך).
  • 1.5.A.2 ביצוע Cast של ערך מסוג double לערך מסוג int גורם לגיליות מימין לנקודת העשרון להיות נחתכות.
  • 1.5.A.3 חלק מהקוד גורם לערכי int להיות מומרים (Widened) באופן אוטומטי לערכי double.
  • 1.5.A.4 ערכים מסוג double יכולים לעבור עיגול למספר השלם הקרוב ביותר על ידי (int)(x + 0.5) עבור מספרים לא שליליים או (int)(x - 0.5) עבור מספרים שליליים.

מטרה לימודית 1.5.B: תיאור תנאים שבהם ביטוי שלם מתערך לערך מחוץ לטווח המותר.

  • 1.5.B.1 הקבוע Integer.MAX_VALUE מכיל את הערך של ערך int המקסימלי האפשרי. הקבוע Integer.MIN_VALUE מכיל את הערך של ערך int המינימלי האפשרי.
  • 1.5.B.2 ערכים שלמים ב-Java מיוצגים על ידי ערכים מסוג int, אשר מאוחזים בכמות מוגבלת (4 BYTES) של זיכרון. לכן, ערך מסוג int חייב להיות בטווח מ-Integer.MIN_VALUE עד Integer.MAX_VALUE כולל.
  • 1.5.B.3 אם ביטוי היה מתערך לערך מסוג int מחוץ לטווח המותר, מתרחש Overflow של שלמים. התוצאה היא ערך מסוג int בטווח המותר אך לא בהכרח הערך הצפוי.

מטרה לימודית 1.5.C: תיאור תנאים המגבילים את הדיוק של ביטויים.

  • 1.5.C.1 מחשבים מקצים כמות מוגדרת של זיכרון לאחסון נתונים בהתבסס על סוג הנתונים. אם ביטוי היה מתערך לערך מסוג double שדיוקו גדול יותר ממה שניתן לאחסן בכמות הזיכרון המוקצה, מתרחש טעות עיגול. התוצאה תועגל לערך הניתן לייצוג. כדי למנוע טעויות עיגול שמתרחשות באופן טבעי, השתמשו בערכי int.
    • הצהרת בלילה: סוגי נתוני עשרון מיוחדים אחרים שניתן להשתמש בהם כדי למנוע טעויות עיגול הם מחוץ לתחום ההשכלה של קורס ובחינת AP Computer Science A.

מקור: תיאור הקורס והמבחן של College Board AP

תחום int, גלישה וחיתוך

לכל סוג יש טווח קבוע; int int עולה על הגבול כשהערך עובר כ-2.1 מיליארד. המרה בין סוגים (casting) ממירה בין סוגים הרחבה (int ל-double) היא אוטומטית; הצרה דורשת המרה מפורשת, שתמיד חוסכת (אינה מעגלת):

double avg = (double) total / count;   // force real division
int whole = (int) 3.9;                 // 3, truncated

מهارות לבחינה: שימו לב לחילוק שלם המייצר תוצאה חתוכה כאשר נ预期 עשרוני – ייעשו טיפו אחד מהמפעילים ל-double תחילה.

דוגמה פותרת. עקוב אחר כל ביטוי:

  • 7 / 2 → 3 (שניהם int, ולכן החילוק חוסך);
  • 7.0 / 2 → 3.5 (כאשר אחד מהם double, החילוק הופך לממשי);
  • 7 % 2 → 1 (השארית);
  • (double) 7 / 2 → 3.5 (התבליט מחזיק בחוזקה יותר מ/, ולכן הוא 7.0 / 2);
  • (double) (7 / 2) → 3.0 (הסוגרים מחשבים תחילה את 7 / 2 = 3 בתוך int, ואז ההמרה היא הרחבה).

השניים האחרונים נראים זהים אך שונים – מיקום ההמרה קובע האם החיסוך מתרחש.

חקור

מדוע int ו double מאחסנים מספרים בצורה שונה

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

מילון מונחים אימון
English עברית
Casting/ˈkæstɪŋ/ יציקה
library/ˈlaɪbrəri/ ספרייה
abstraction/əbˈstrækʃn/ הפשטה
Comments/ˈkɒments/ הערות
method signature/ˈmeθəd ˈsɪɡnɪtʃə/ חתימת שיטה
arguments/ˈɑːɡjuːmənts/ ארגומנטים
class (static) method/klæs ˈmeθəd/ שיטת מחלקה (סטטית)
1.6

מפעלי שימוש חוזר

סיילבוס

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

  • 1.6.A.1 פועלי השמה מורכבים +=, -=, *=, /= ו-%= יכולים לשמש במקום פועל ההשמה בביטויים נומריים. פועל השמה מורכב מבצע את פעולת האריתמטיקה המצוינת בין הערך בשמאל לערך בימין ולאחר מכן משמיר את התוצאה במשתנה שבשמאל.
  • 1.6.A.2 מפעיל ההגדלה ה-Post-increment (++) ומפעיל ההקטנה ה-Post-decrement (--) משמשים להוספת 1 או לחיסור 1 מערך המאוחסן במשתנה מספרי. הערך החדש מוקנה למשתנה.
    • הצהרת חריגה: השימוש במפעילי הגדלה והקטנה בצורת פריפיקס (למשל, ++x) אינם בטווח לימודי הקורס ובמבחן AP Computer Science A. שימוש במפעילי הגדלה והקטנה בתוך ביטויים אחרים (למשל, arr[x++]) אינם בטווח לימודי הקורס ובמבחן AP Computer Science A.

מקור: תיאור הקורס והמבחן של College Board AP

קיצורים משלבים פעולה עם הקצאה: x += 5 פירושו x = x + 5; באופן דומה -=, *=, /=, %=. המפעילים הגדלה והקטנה x++ וx-- מוסיפים או מחסרים אחד.

1.7

ממשק תכנות אפליקציה (API) וספריות

סיילבוס

יעד הלמידה 1.7.A: זיהוי מאפיינים והתנהגויות של מחלקה הנמצאים בספריות הכוללות API.

  • 1.7.A.1 ספריות הן קבוצות של מחלקות. ספציפיקציה של ממשק תוכנת אפליקציה (API) מכוונת את המתכנן כיצד להשתמש במחלקות אלו. מסמך המצוי בספציפיקציות של API ובספריות הוא קריטי להבנת המאפיינים וההתנהגויות של מחלקה שהוגדרה על ידי ה-API. מחלקה מגדירה סוג הפניה ספציפי. מחלקות ב-API ובספריות מסודרות בקבוצות (packages). ניתן להשתמש במחלקות ובספריות מחלקות קיימות ליצירת אובייקטים.
  • 1.7.A.2 מאפיינים מתייחסים לנתונים הקשורים למחלקה ואחסונים במשתנים. התנהגויות מתייחסות לכמה שמוצגים (instances) של המחלקה יכולים לעשות (או מה ניתן לבצע עמם), והן מוגדרות על ידי מתודות.

מקור: תיאור הקורס והמבחן של College Board AP

API (ממשק תכנות אפליקציה) הוא רשימת הכיתובים והשיטות המפורסמת שתוכלו להשתמש בהם. ספריית קוד היא איסוף של כיתובים מוכנים מראש (כמו Math, String, Scanner). קוראים את מסמכי ה-API כדי ללמוד מה שיטה דורשת (הפרמטרים שלה) ומחזירה, מבלי לראות את הקוד הפנימי שלה – זהו דוגמה לאבסטרקציה.

1.8

מסמכות עם הערות

סיילבוס

יעד הלמידה 1.8.A: תיאור הפונקציונליות והשימוש בקוד באמצעות הערות.

  • 1.8.A.1 הערות נכתבות עבור המתכנן המקורי ועבור מתכננים אחרים כדי להבין את הקוד ותפקודו, אך הן מוהדרות על ידי המترגם ואינן מופעות כאשר התוכנית מופעלת. שלושה סוגי הערות ב-Java כוללים: /* */, שמייצר בלוק של הערות; //, שמייצר הערה בשורה אחת; ו-/** */, שהן הערות Javadoc המשמשות ליצירת מסמכי API.
  • 1.8.A.2 תנאי מקדים הוא תנאי שחייב להיות נכון בדיוק לפני ביצוע מתודה כדי שתתנהג כצפוי. אין ציפייה שהמתודה תבדוק כדי לוודא שתנאים מקדימים מלאים.
  • 1.8.A.3 תנאי בוא הוא תנאי שחייב להיות תמיד נכון לאחר ביצוע מתודה. תנאי בוא מתארים את התוצאה של הביצוע בהתאם למה שנחזר או הערך הנוכחי של המאפיינים של אובייקט.

מקור: תיאור הקורס והמבחן של College Board AP

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

1.9

חתימות שיטות

סיילבוס

יעד הלמידה 1.9.A: זיהוי המתודה הנכונה לקריאה על בסיס מסמכות וחתימות מתודות.

  • 1.9.A.1 מתודה היא בלוק קוד בעל שם המופעל רק כאשר היא נקראת. בלוק קוד הוא כל חלק מקוד המוקף בסוגריים. הפשטה הליכה מאפשרת למתכנן להשתמש במתודה על ידי ידע על מה שהיא עושה, גם אם לא יודע איך הכתובה.
  • 1.9.A.2 פרמטר הוא משתנה המוגדר בחתימת המתודה או הבונה וניתן להשתמש בו בתוך גוף המתודה. הדבר מאפשר העברת ערכים או ארגומנטים לשימוש על ידי מתודה או בונה. חתימת מתודה למתודה עם פרמטרים מורכבת משם המתודה ורשימה מסודרת של סוגי הפרמטרים. חתימת מתודה למתודה ללא פרמטרים מורכבת משם המתודה ורשימת פרמטרים ריקה.

יעד הלמידה 1.9.B: תיאור כיצד לקרוא מתודות.

  • 1.9.B.1 מתודה void אינה מחזירה ערך ולכן אינה נקראת כחלק מביטוי.
  • 1.9.B.2 מתודה שאינה void מחזירה ערך זהה לסוג ההחזרה בחתימת המתודה. כדי להשתמש בערך ההחזרה בעת קריאה למתודה שאינה void, יש לאחסנו במשתנה או להשתמש בו כחלק מביטוי.
  • 1.9.B.3 ארגומנט הוא ערך שעובר לתוך מתודה בעת קריאתה. הארגומנטים שעוברים למתודה חייבים להיות תואמים במספרם ובסדרם לסוגים המזהים ברשימת הפרמטרים בחתימת המתודה. בעת קריאת מתודות, ארגומנטים עוברים באמצעות קריאה על ידי ערך. קריאה על ידי ערך מאפסת את הפרמטרים עם העתקים של הארגומנטים.
  • 1.9.B.4 אומרים ששיטות הן עמוסות (overloaded) כאשר קיימות מספר שיטות בעלות אותו שם אך חתימות שונות.
  • 1.9.B.5 קריאת שיטה מפסיקה את הביצוע הסדרתי של פקודות, וגורמת לתוכנה לבצע תחילה את הפקודות בתוך השיטה לפני שהיא ממשיכה. ברגע ביצועה של הפקודה האחרונה בשיטה או ביצוע פקודת החזרה, זרימת הבקרה חוזרת לנקודה המיידית שלאחר מקום קריאת השיטה.

מקור: תיאור הקורס והמבחן של College Board AP

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

1.10

קריאת שיטות כיתוב

סיילבוס

מטרת הלמידה 1.10.A: פיתוח קוד לקריאת שיטות מחלקה וקביעת התוצאה של קריאות אלו.

  • 1.10.A.1 שיטות מחלקה קשורות למחלקה עצמה, ולא לדגימות המחלקה. שיטות מחלקה כוללות את המילה static בראשית לפני שם השיטה.
  • 1.10.A.2 שיטות מחלקה נקראות בדרך כלל באמצעות שם המחלקה יחד עם אופרטור הנקודה. כאשר קריאת השיטה מתרחשת בתוך המחלקה המגדירה, שימוש בשם המחלקה נדרש בקריאה.

מקור: תיאור הקורס והמבחן של College Board AP

שיטת כיתוב (סטטית) שייכת לכיתוב עצמו, ולכן קוראים לה על שם הכיתוב: ClassName.method(args). אין צורך באובייקט.

חקור

עקבו אחרי קריאת שיטה בקלאס על הערימה

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

מילון מונחים אימון
English עברית
class/klæs/ כיתה
1.11

מחלקת Math

סיילבוס

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

  • 1.11.A.1 מחלקת Math היא חלק מארזת java.lang. מחלקות בארזת java.lang זמינות ברירת מחדל.
  • 1.11.A.2 מחלקת Math מכילה רק שיטות מחלקה. שיטות מחלקת Math הבאות—כולל תיאור הפעולה שלהן ומתי הן משמשות—נכללות בהפניה מהירה ל-Java:
    • static int abs(int x) מחזירה את הערך המוחלט של ערך int.
    • static double abs(double x) מחזירה את הערך המוחלט של ערך double.
    • static double pow(double base, double exponent) מחזירה את ערך הפרמטר הראשון מוועד למעלה בדרגה השנייה.
    • static double sqrt(double x) מחזירה את השורש הריבועי האי-שלילי של ערך double.
    • static double random() מחזירה ערך double הגדול או שווה ל0.0 וקטן מ1.0.
  • 1.11.A.3 ניתן לעבד את הערכים המוחזרים מתוך Math.random() באמצעות פעולות אריתמטיות והמרה (casting) כדי ליצור מספר מקרי int או double בטווח מוגדר על פי קריטריונים ספציפיים. כל אחת מקצוות הטווח יכולה להיות סגורה (inclusive), כלומר הערך נכלל, או פתוחה (exclusive), כלומר הערך אינו נכלל.

מקור: תיאור הקורס והמבחן של College Board AP

המחלקה Math מספקת שיטות מתמטיקה סטטיות: Math.abs(x), Math.pow(base, exp), Math.sqrt(x), וMath.random() (שהיא double בתוך $[0,1)$). לקבל מספר שלם אקראי מ-0 עד n-1: (int)(Math.random() * n).

1.12

אובייקטים: instances של כיתובים

סיילבוס

מטרת למידה 1.12.A: הסבר הקשר בין מחלקה לאובייקט.

  • 1.12.A.1 אובייקט הוא instance ספציפי של מחלקה עם מאפיינים מוגדרים. מחלקה היא היישום הרשמי, או התוכנית האדריכלית (blueprint), של המאפיינים וההתנהגויות של אובייקט.
  • 1.12.A.2 היררכיה של מחלקות יכולה לפתח על ידי הכנסת מאפיינים והתנהגויות משותפים של מחלקות קשורות למחלקה אחת הנקראת מחלקת על (superclass). מחלקות המרחיבות מחלקת על, הנקראות מחלקות תת (subclasses), יכולות להסתמך על המאפיינים וההתנהגויות הקיימים של המחלקת העל ללא החלפתם בקוד. יוצר זאת יחס ירשה (inheritance relationship) ממחלקות התת אל המחלקת העל.
    • הערה: עיצוב ויישום של יחסי ירשה חוצים מגבלות תוכן הקורס ובחינת AP Computer Science A.
  • 1.12.A.3 כל המחלקות ב-Java הן מחלקות תת של מחלקת Object.

מטרת למידה 1.12.B: פיתוח קוד להצהרת משתנים לאחסון סוגי עזרה (reference types).

  • 1.12.B.1 משתנה מסוג עזרה מחזיק רפרנס לאובייקט, שמעלה ככיוון זיכרון של האובייקט הזה.

מקור: תיאור הקורס והמבחן של College Board AP

= מעתיק את הייחוס, לא את האובייקט

מחלקה היא תבנית; אובייקט הוא מופע ממושי בנה ממנה. מחלקת אוספת נתונים (שדות) עם התנהגות (שיטות) – ליבת תכנות מונחה-אובייקטים. String, Scanner וArrayList כולם מחלקות שתופעו.

מחלקות יכולות להיות מאורגנות בשרשרת היררכיה. מחלקה עליונה מכילה מאפיינים והתנהגויות משותפים למספר מחלקות נכחות שextend אותה – יחס ירישה. כל מחלקה ב-Java היא בסופו של דבר מחלקה נכחת של המחלקה המובנית Object, ולכן לכל אובייקט יש כבר שיטת toString; כתיבת שיטת מחלקה נכחת בעלת אותו חתימה לשיטת מחלקה עליונה היא החלפת שיטה. (עיצוב ירישה משלה אינו נכלל בקורס זה, אך מצופה שתזהו מושגים אלו).

תרשים מחלקה: מאפיינים פרטיים ושיטות ציבוריות
תרשים מחלקה: מאפיינים פרטיים ושיטות ציבוריות
מחלקה היא תבנית; כל אובייקט הוא מופע אחד הנבנה ממנה
מחלקה היא תבנית; כל אובייקט הוא מופע אחד הנבנה ממנה
מילון מונחים אימון
English עברית
object/ˈɒbdʒekt/ אובייקט
instance/ˈɪnstəns/ תעודת ייצוג
object-oriented programming/ˈɒbdʒekt ˈɔːrɪəntɪd ˈprəʊɡræmɪŋ/ תכנות ממוקד-אובייקטים
superclass/ˈsuːpəklæs/ סוג אב
subclasses/ˈsʌbklæsɪz/ מחלקות בת
inheritance relationship/ɪnˈherɪtəns rɪˈleɪʃənʃɪp/ יחס ירוש
method overriding/ˈmeθəd ˌəʊvəˈraɪdɪŋ/ החלפת שיטות
Instantiation/ˌɪnstænʃɪˈeɪʃn/ יצירת אובייקטים
constructor/kənˈstrʌktə/ בונה
reference/ˈrefrəns/ יחוס
1.13

יצירת אובייקטים ואחסון (מופע)

סיילבוס

מטרת למידה 1.13.A: זיהוי, באמצעות הסיגnature שלו, הבונה (constructor) הנכון שנקרא.

  • 1.13.A.1 למחלקה ישנם בונים (constructors) הנקראים ליצירת אובייקטים. הם נושאים את אותו שם כמו המחלקה.
  • 1.13.A.2 סיגnature של בונה מורכב משם הבונה, שהוא אותו שם כמו שם המחלקה, ורשימה מסודרת של סוגי הפרמטרים. רשימת הפרמטרים, בתוך הכותרת של הבונה, מפרטת את סוגי הערכים שעוברים ואת שמות המשתנים שלהם.
  • 1.13.A.3 בונים נחשבים כ" overloaded " (מועמסים מחדש) כאשר קיימים מספר בונים עם סיגnature שונים.

מטרת למידה 1.13.B: פיתוח קוד להכרזת משתנים בעלי סוגים נכונים כדי לאחסן רעיונות (references) של אובייקטים.

  • 1.13.B.1 משתנה מסוג רעיון (reference type) אחסן רעיון של אובייקט או, אם אין אובייקט, null.

מטרת למידה 1.13.C: פיתוח קוד ליצירת אובייקט על ידי קריאה לבונה (constructor).

  • 1.13.C.1 אובייקט נוצר בדרך כלל באמצעות המילה המפתחית new שבהמשך נעשה קריאה לאחד הבונים של המחלקה.
  • 1.13.C.2 פרמטרים מאפשרים לבונים לקבל ערכים כדי לקבוע את הערכים ההתחלתיים של המאפיינים של האובייקט.
  • 1.13.C.3 פרמטר כניסה לבונה הוא ערך שמעבירים לתוך בונה כאשר הבונה נקרא. הפרמטרים שנעברים לבונה חייבים להיות תואמים בסדר ובמספר לסוגים שזוהו ברשימת הפרמטרים בחתימת הבונה. בעת קריאת בונים, פרמטרים מועברים באמצעות "קריאה בערך" (call by value). קריאה בערך מזינה את הפרמטרים עם העתקים של הפרמטרים הנעברים.
  • 1.13.C.4 קריאת בונה מפסיקה את הביצוע הסדרתי של הפקודות, וגורמת לתוכנית לבצע תחילה את הפקודות שבבונה לפני שהיא ממשיכה. לאחר ביצוע הפקודה האחרונה בבונה, זרימת הביצוע חוזרת לנקודה המיישירה אחרי מקום הקריאה לבונה.

מקור: תיאור הקורס והמבחן של College Board AP

מופע יוצר אובייקט באמצעות המילת המפתח new, שמכנסת בונה:

Scanner in = new Scanner(System.in);
String s = new String("hi");   // or just "hi"

המשתנה מכיל ייחוס (כתובת האובייקט), ולא את האובייקט עצמו. שני ייחוסים יכולים להצביע על אותו אובייקט; השוואתם באמצעות == משווה כתובות, לא תוכן.

ייחוס יכול גם לא להצביע על כלום: הערך המיוחד null פירושו "לא מחובר לאובייקט כלשהו". קריאת שיטה על ייחוס null גורמת לקריסה בזמן הרצה עם NullPointerException. הגנה על כך נעשית על ידי בדיקה עם ==/!= ובדיקת null ראשית, כדי ש&& יבצע קצר-סיבול לפני ריצת השיטה: if (s != null && s.length() > 0).

משתנה ראשוני אחוז ערך ישירות, ייחוס אחזן חץ אל האובייקט
משתנה ראשוני אחז ערך ישירות, ייחוס אחזן חץ אל האובייקט
מילון מונחים אימון
English עברית
null/nʌl/ ערך ריק (null)
instance method/ˈɪnstəns ˈmeθəd/ שיטת אובייקט
immutable/ɪˈmjuːtəbl/ בלתי משתנה
Interface/ˈɪntəfeɪs/ ממשק
1.14

קריאת שיטות מופע

סיילבוס

מטרת למידה 1.14.A: פיתוח קוד לקריאת שיטות אינסטנציה וקביעת התוצאה של קריאות אלו.

  • 1.14.A.1 שיטות אינסטנציה נקראות על אובייקטים של המחלקה. האופרטור הנקודה (dot operator) משמש יחד עם שם האובייקט כדי לקרוא לשיטות אינסטנציה.
  • 1.14.A.2 קריאת שיטה על רעיון (reference) מסוג null תוביל ל-NullPointerException.

מקור: תיאור הקורס והמבחן של College Board AP

שיטת מופע פועלת על אובייקט ספציפי, ולכן קוראים אותה בייחוס האובייקט: object.method(args). לדוגמה: in.nextInt(), word.length().

1.15

עיבוד מחרוזות

סיילבוס

מטרת למידה 1.15.A: פיתוח קוד ליצירת אובייקטי מחרוזות וקביעת התוצאה של יצירה והיתוך מחרוזות.

  • 1.15.A.1 אובייקט String מייצג רצף של תווים וניתן ליצור אותו על ידי שימוש בליטרל מחרוזת או על ידי קריאה לבונה מחלקת String.
  • 1.15.A.2 מחלקת ה-String היא חלק מהחבילה (package) java.lang. מחלקות בחבילה java.lang זמינות כברירת מחדל.
  • 1.15.A.3 אובייקט String הוא בלתי השתנה (immutable), כלומר לאחר שהאובייקט String נוצר, מאפייניו אינם ניתנים לשינוי. שיטות שנקראות על אובייקט String אינן משנות את תוכן האובייקט String.
  • 1.15.A.4 שני אובייקטים String יכולים להתחבר זה לזה או להתמזג באמצעות האופרטור + או האופרטור +=, בתוצאה של אובייקט String חדש. ערך פרימיטיבי ניתן להתחבר לאובייקט String. הדבר גורם להמרה אנוnimית של הערך הפרימיטיבי לאובייקט String.
  • 1.15.A.5 אובייקט String יכול להתחבר לכל אובייקט, דבר שמקריא באופן אנונימי את שיטת ה-toString של האובייקט (התנהגות המובטחת על ידי יחסי הירושelse שכל מחלקה יש עם מחלקת ה-Object). שיטת ה-toString של אובייקט מחזירה ערך טקסט המייצג את האובייקט. תת-מחלקות (subclasses) של Object לעיתים קרובות מעתיקות (override) את שיטת ה-toString עם מימוש ספציפי למחלקה. העתקת שיטה מתרחשת כאשר שיטה ציבורית בתת-מחלקה בעלת אותה חתימת שיטה כמו שיטה ציבורית במחלקת האב, אך ההתנהגות של השיטה היא ספציפית לתת-המחלקה.
    • הצהרת פסילה: העתקת שיטת ה-toString של מחלקה אינה בתחום החובה של הקורס והמבחן AP Computer Science A.

מטרת למידה 1.15.B: פיתוח קוד לקריאת שיטות על אובייקטי מחרוזות וקביעת התוצאה של קריאות אלו.

  • 1.15.B.1 ל-String יש ערכי אינדקס מ-0 ועד אחד פחות מאורך המחרוזת. ניסיון לגשת לאינדקסים מחוץ לטווח זה יוביל ל-StringIndexOutOfBoundsException.
  • 1.15.B.2 String הבאים—כולל תיאור פעולותיהם ומועד השימוש בהם—נכללים ברפרנס מהיר של Java:
    • int length() מחזיר את מספר התווים ב-String.
    • String substring(int from, int to) מחזיר תת-מחרוזת שמתחילה באינדקס from ומסתיימת באינדקס to - 1.
    • String substring(int from) מחזיר substring(from, length()).
    • int indexOf(String str) מחזיר את האינדקס של ההופעה הראשונה של str; מחזיר -1 אם לא נמצא.
    • boolean equals(Object other) מחזיר true אם this מתאימה לאותה רצף תווים כמו other; מחזיר false אחרת.
    • int compareTo(String other) מחזיר ערך < 0 if this is less than other; returns zero if this is equal to other; returns a value > 0 אם this גדולה מ-other. מחרוזות ממוינות לפי האלפבית.
    • הודעת חריגה: שימוש בשיטת equals להשוות אובייקט String אחד לאובייקט מסוג אחר מאשר String נמצא מחוץ לתחום הלימודים ובמבחן AP Computer Science A.
  • 1.15.B.3 ניתן ליצור מחרוזת זהה לתת-מחרוזת הרוכבת על אלמנט יחיד במיקום index על ידי קריאת substring(index, index + 1).

מקור: תיאור הקורס והמבחן של College Board AP

מחרוזות אינן ניתנות לשינוי

אובייקטי String הם בלתי ניתנים לשינוי – השיטות מחזירות מחרוזת חדשה במקום לשנות את המקורית. שיטות עיקריות (כל האינדקסים מתחילים ב0):

s.length();            // number of characters
s.substring(2, 5);     // chars at index 2,3,4 (5 excluded)
s.indexOf("ab");       // first position, or -1
s.equals(other);       // content comparison (never use == for Strings)
s.compareTo(other);    // <0, 0, >0 by dictionary order

מיומנות למבחן: substring(a, b) כולל אינדקס a אך לא כולל b, והשוואת String חייבת להשתמש ב.equals ולא ב== – שניים מהכשלים הנבדקים ביותר בקשר ל-String.

דוגמה פותרת. נניח String s = "COMPUTER"; (אינדקסים 0–7). אזי s.length() הוא 8; s.substring(0, 4) הוא "COMP" (אינדקסים 0,1,2,3 – אינדקס 4 אינו כלול); s.substring(4) הוא "UTER" (מאינדקס 4 ועד הסוף); s.indexOf("PU") הוא 3; ו-s.indexOf("X") הוא -1 (לא נמצא). ספירת הקצה המושלך של substring היא טעות השכיחה ביותר.

בקשה לאינדקס מחוץ ל0 עד length()-1 (ארגומנט substring או charAt רע, למשל s.substring(0, 20) כאן) יגרור קריסה עם שגיאת StringIndexOutOfBoundsException – הגרסת ה-String לשגיאת אינדקס מערך.

אינדקסי מחרוזת מתחילים ב-0
אינדקסי מחרוזת מתחילים ב-0
חקור

חקרו אינדקסים ומישור של מחרוזות

לכל תווית יש אינדקס, והמינוי מתחיל מ-0. גררו את ההתחלה והסוף כדי לראות כיצד substring(from, to) לוקח את התוויות מfrom ועד (אולם לא כולל) to.

1.15

טיפים לבחינות

  • עקוב אחר קוד ידנית שורה בשורה, מעקב אחר ערך כל משתנה בטבלה – הבחינה מעדיפה מעקב מדויק על ניחוש.
  • הכר את הטיפוסים הגולמיים של Java ואת העובדה שמחלקה של מספרים שלמים חותכת ($7/2$ נותן $3$); השתמש בהמרה (cast) או ב-double לחלוקה אמיתית.
  • הבדל בין שגיאות בזמן ההרכבה (סינטקס, טיפוסי נתונים) לבין שגיאות בזמן הרצה – הכר את השמות הספציפיים: ArithmeticException (int ÷ 0), NullPointerException (שיטת על הפניה לnull), StringIndexOutOfBoundsException / ArrayIndexOutOfBoundsException – וגם שגיאות לוגיקה (תוצאה שגויה).
  • עקוב אחר עדיפות המפעילים והתחל כל משתנה לפני השימוש בו.
  • בתשובות הפתוחות, כתוב Java שלם וניתן להרכבה – החזר את הטיפוס הנכון והתאם בדיוק את חתימת המטרה (method header).

שיעורים אינטראקטיביים בנושא זה

לעבור על הדברים צעד אחר צעד, עם תרגילים לבדיקה מיידית.

מבחני עבר

נושאים נוספים במדעי מחשב A - AP

היכנס או צור חשבון

IGCSE, A-Level & AP