L_03_packages

מסמכים קשורים
תוכנה 1 בשפת Java שיעור מספר 3: "חתיכת טיפוס"

PowerPoint Presentation

Microsoft PowerPoint - rec3.ppt

מהוא לתכנות ב- JAVA מעבדה 3

Microsoft PowerPoint - lec2.ppt

PowerPoint Presentation

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

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

מבוא לתכנות ב- JAVA תרגול 7

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

PowerPoint Presentation

תכנות מונחה עצמים א' – תש"ע

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

תורת הקומפילציה

PowerPoint Presentation

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

שאלהIgal : מערכים דו מימדיים רקורסיה:

Microsoft Word - Ass1Bgu2019b_java docx

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

PowerPoint Presentation

פ רק כה ) פ ס וק ים ז-יא( ז ו א ל ה י מ י ש נ י ח י י א ב ר ה ם א ש ר ח י: מ א ת ש נ ה ו ש ב ע ים ש נ ה ו ח מ ש ש נ ים. ח ו י ג ו ע ו י מ ת א ב ר ה ם

סדנת תכנות ב C/C++

Microsoft PowerPoint - lec10.ppt

מבוא למדעי המחשב

Microsoft PowerPoint - Lecture1

PowerPoint Presentation

Slide 1

תרגול 1

PowerPoint Presentation

PowerPoint Presentation

ייבוא וייצוא של קבצי אקסל וטקסט

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

מבוא למדעי המחשב

Slide 1

לנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי

2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ

מבחן בפיתוח מערכות תוכנה בשפת Java ( )

שאלהIgal : מערכים דו מימדיים רקורסיה:

Microsoft PowerPoint - rec1.ppt

מבוא לתכנות ב- JAVA תרגול 11

PowerPoint Presentation

Slide 1

Slide 1

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

תוכנה חופשית מאחורי הקלעים? על סדר היום: קצת על עצמי מה זאת תוכנה חופשית? ההיסטוריה של תוכנה חופשית כיצד תוכנה חופשית משתלבת בשוק התוכנה היתרונות של ת

PowerPoint Presentation

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

WinZIP תוכנה לדחיסת קבצים ספטמבר 2007

PowerPoint Presentation

Microsoft PowerPoint - 10_threads.ppt

PowerPoint Presentation

מדריך להתקנת Code Blocks מדריך זה נועד לתאר את תהליך התקנת התוכנה של הקורס "מבוא למחשב שפת C". בקורס נשתמש בתוכנת Code::Blocks עם תוספת )אשף( המתאימה

Microsoft Word - c_SimA_MoedB2005.doc

People. Partnership. Trust מסלול Free פורטל החינוך מבית U-BTech מסלולים ומחירים חיבור לשירותי Office 365 ללא עלות פורטל התחברות הכולל ממשק למנב"ס ולסי

מבוא למדעי המחשב

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

Slide 1

שאלהIgal : מערכים דו מימדיים רקורסיה:

PowerPoint Presentation

ה ש ל מ ת מ ש פ ט ים ש א ל ה מ ס פ ר 1: ע ד ן ש ל מ כ ב י ת ל אב יב ב כ ד ור ס ל, ו ל כ ן מ ק פ יד ל ל כ ת ה ק ב וצ ה כ ש מ ת אפ ש ר ל ו. ל מ ש ח ק י

ביה"ס היסודי ע"ש יצחק רבין, נשר

Microsoft PowerPoint - 07_tdd.ppt

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

pdf

Office 365 ProPlus בחינם לסטודנטים באוניברסיטת בן גוריון בנגב הוראות סטודנטים באוניברסיטת בן גוריון בנגב יכולים להוריד ולהתקין את חבילת התוכנה Office

Microsoft PowerPoint - L01-n.ppt

Slide 1

Microsoft PowerPoint - 07_tdd.ppt

מבוא למדעי המחשב

תוכן העניינים

איטרטורים: 1 תוכנה 1 סתיו תשע"ג תרגיל מספר 9 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה moodl

Microsoft Word B

1

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

יצוא לחשבשבת תוכן עיניינים הגדרות - חשבונות בנק...2 הגדרות - הגדרות חשבשבת... 3 הגדרות - כרטיסי אשראי... 4 הגדרות - סוגי הכנסה... 5 יצוא לחשבשבת...6 י

Microsoft Word - solutions.doc

Microsoft Word - pitaron222Java_2007.doc

תרגול 3 - מערכים

People. Partnership. Trust שלבי הפרויקט והמסלולים השונים - פלטפורמת "קהילה לומדת" מסלול Free שלבי הפרויקט: חיבור לשירותי Office 365 ללא עלות פורטל התח

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

Tutorial 11

eriktology The Writings Book of Psalms [1]

פרויקט שורשים דמות

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

מבוא למדעי המחשב - חובלים

Slide 1

Slide 1

Homework Dry 3

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

תרגול מס' 7: תרגילים מתקדמים ברקורסיה

סרגל כלים ל-Outlook או לExplorer- מדריך למשתמש

<4D F736F F D20FAE5F1F4FA20ECE7E5E5FA20E3F2FA20ECE2E1E920E3E9F1F720FAEEE5F0E5FA20E6E9F8FA20E4F8F6E72E646F63>

מבוא למדעי המחשב

HTML - Hipper Text Makeup Language

תמליל:

שיעור מספר 3: "זו זכ ו ת לת ת שרות" מקוצר: סמסטר ב' 2007 בית הספ ר ל מדע י המח שב א וניב רס יטת תל א ביב

עקר ונו ת תכנו ת נכוני ם

"משבר התוכנה" כתיבת תוכנית קטנה אינה משימה קשה הקושי בהנדסת תוכנה נעוץ בבניית מערכות תוכנה גדולות (1,000,000< שורות קוד), ע"י מספר אנשים הדורשות תחזוקה לאורך זמן רב (כמה שנים) הגודל כן קוב ע מאז סוף שנות ה- 60 של המאה ה- 20 ברור לעולם התוכנה, כי בשביל להתגבר על הקושי שבכתיבת מערכות גדולות יש צורך להלביש על שפת התכנות עקרונות פיתוח נכונים אשר ישפרו את היכולת לכתוב מערכות תוכנה מורכבות 3

תכנות מונחה עצ מים אחד מאוספי העקרונות האלה מכונה "תכנות מונחה עצמים" Programming) (Object Oriented שעיקריו (כפי שיבואו לידי ביטוי בקורס): שימוש חוזר בקוד הפשטה מודולריות תיכון בעזרת חוזים contract) (design by ביצוע מקסימום בדיקות תקינות בזמן קומפילציה ניהול זיכרון אוטומטי חלק משפות התכנות המודרניות מקדמות עקרונות אלו ע"י הגדרת מבנים בשפה שיתמכו בהם בצורה ישירה או עקיפה שפת Java היא שפה כזו 4

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

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

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

שרותי ם לשימוש בשרותים יש מרכיב מרכזי בבניית מערכות תוכנה גדולות בכמה מישורים: חסכון בשכפול קוד עליה ברמת ההפשטה הגדרת יחסי ספק-לקוח בין כותב השרות והמשתמשים בשרות 8

שרותי ם - חסכון בש כפ ול קו ד אם קטע קוד מופיע יותר מפעם אחת (copy-paste) יש להפוך אותו לפונקציה (שרות) אם הק ו ד ה מ ופ י ע ד ומ ה אבל לא זה ה יש לב ד וק ה אם אפשר לבט א את הש ונ י כפר מטר לשר ות 9

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

public static void printowing(double amount) { //printbanner System.out.println("********************"); System.out.println("*** Customer Owes **"); System.out.println("********************"); שרותים והפשטה דוגמא } //print details System.out.println ("name:" + name); System.out.println ("amount" + amount); public static void printowing(double amount) { printbanner(); printdetails(amount); } public static void printbanner() { System.out.println("********************"); System.out.println("*** Customer Owes **"); System.out.println("********************"); } public static void printdetails(double amount) { System.out.println ("name:" + name); System.out.println ("amount" + amount); } 11

שכתוב מבני (refactoring) ישנן פעולות של שכתוב קוד שהן כל כך שכיחות עד שהומצא להן שם לדוגמא: הפיכת קטע קוד לשרות שראינו בשקף הקודם נקרא: "חלץ למתודה" method) (extract בשנים האחרונות נאסף מספר גדול של פעולות כאלה וקובץ בקטלוג בשם.Refactoring הקטלוג זמין ברשת ובכמה ספרים http://www.refactoring.com/catalog/index.html סביבות פיתוח מודרניות בלחיצת כפתור (לרבות (Eclipse מאפשרות שכתובי ם אוטומטי ים ביצוע שכתוב בעזרת כלי אוטומטי פותר בעיות רבות של חוסר עקביות העשויות להיווצר כאשר הוא מתבצע ידנית למשל: החלפת שם משתנה בצורה עקבית או חילוץ למתודה קטע קוד התלוי במשתנה מקומי 12

לק וח וספק ב מערכת תוכנה ספק (supplier) הוא מי שקוראים לו (לפעמים נקרא גם שרת, (server לקוח (client) הוא מי שקרא לספק או מי שמשתמש בו (לפעמים נקרא גם משתמש,.(user דוגמא: public static void do_something(){ // doing... } public static void main(string [] args) { do_something(); } בדוגמא זו הפונקציה main היא לקוחה של הפונקציה do_something() main היא ספקית של do_something 13

לק וח וספק ב מערכת תוכנה הספק והלקוח עשויים להיכתב בזמנים שונים, במקומות שונים וע"י אנשים שונים ואז כמובן לא יופיעו באותו קובץ (באותה מחלקה) public static void do_something(){ // doing... } Supplier.java public static void main(string [] args) { do_something(); } Client.java חלק נכבד בתעשיית התוכנה עוסק בכתיבת ספריות מחלקות המכילות אוסף שרותים שימושיים בנושא מסוים כותב הספרייה נתפס כספק שרותים בתחום (domain) מסוים 14

המחלקה כספריה של שרותי ם ניתן לראות במחלקה ספריה של שרותים: אוסף של פונקציות עם מכנה משותף רוב המחלקות ב,Java נוסף על היותן ספריה, משמשות גם כטיפוס נתונים. ככאלו הן מכילות רכיבים נוספים פרט לשרותי מחלקה. נדון במחלקות אלו בהמשך הקורס ואולם קיימות ב- Java גם כמה מחלקות המשמשות כספריות בלבד. בין השימושיות שבהן: java.lang.math java.util.arrays java.lang.system 15

חבילות ומרחב השמות מרחב השמות של Java הירר כי בדומה לשמות תחומים באינטרנט או שמו ת תיקיות במערכת הקבצים חבילה (package) רקורסיבית יכולה להכיל מחלקות או תת-חבילות בצורה שמה המלא של מחלקה name) (fully qualified כולל את שמות כל החבילות שהיא נמצאת בהן מהחיצונית ביותר עד לפנימית. שמות החבילות מופרדים בנקודות מקובל כי תוכנה הנכתבת בארגון מסוים משתמש בשם התחום האינטרנטי של אותו ארגון כשם החבילות העוטפות 16

חבילות ומרחב השמות קיימת התאמה בין מבנה התיקיות ) directories, (folders בפרויקט תוכנה ובין חבילות הקוד (packages) 17

משפט import ש ימ ו ש בש מה ה מל א של מ חלק ה מסרבל א ת הק וד: System.out.println("Before: x=" + java.util.arrays.tostring(arr)); ניתן לחסוך שימוש בשם מלא ע"י ייבוא השם בראש הקובץ (מעל הגדרת המחלקה) import java.util.arrays;... System.out.println("Before: x=" + Arrays.toString(arr)); 18

משפט import כאשר עושים שימוש נרחב במחלקות מחבילה מסויימת ניתן לייבא את שמות כל המחלקות במשפט import יחיד: import java.util.*;... System.out.println("Before: x=" + Arrays.toString(arr)); השימוש ב-* אינו רקורסיבי, כלומר יש צורך במשפט import נפרד עבור כל תת חבילה: // for classes directly under subpackage import package.subpackage.*; // for classes directly under subsubpackage1 import package.subpackage.subsubpackage1.*; // only for the class someclass import package.subpackage.subsubpackage2.someclass; 19

משפט static import החל מ Java5 ניתן לייבא למרחב השמות את השרות או המשתנה הסטטי import) (static ובכך להימנע מציון שם המחלקה בגוף הקוד: package il.ac.tau.cs.software1.examples; import static il.ac.tau.cs.software1.examples.someotherclass.somemethod; public class SomeClass { } public static void main(string[] args) { somemethod(); } גם ב static import נית ן ל ה שת מש ב- * 20

הערות על מרחב השמות ב- Java שימוש במשפט import אינו שותל קוד במחלקה והוא נועד לצורכי נוחות בלבד אין צורך לייבא מחלקות מאותה חבילה אין צורך לייבא את החבילה java.lang ייבוא כוללני מדי של שמות מעיד על צימוד חזק בין מודולים ייבוא של חבילות עם מחלקות באותו שם יוצר ambiguity של הקומפיילר וגורר טעות קומפילציה ("התנגשות שמות") 21

CLASSPATH איפה נמצאות המחלקות? איך יודעים הקומפיילר וה- JVM היכן לחפש את המחלקות המופיעות בקוד המקוד או ה?byte code קיים משתנה סביבה בשם CLASSPATH המכיל שמות של תיקי ות במערכת הקבצים שם יש לחפש מחלקות הנזכרות בתוכני ת ה- CLASSPATH מכיל את תיקי ות ה"שורש" של חבילות המחלקות ניתן להגדיר את המשתנה בכמה דרכים: הגדרת המשתנה בסביבה (תלוי במערכת ההפעלה) הגדרה אד-הוק ע"י הוספת תיקיות חיפוש בשורת הפקודה הדגל cp או (classpath הגדרת תיקיות החיפוש בסביבת הפיתוח (בעזרת 22

jar כאשר ספקי תוכנה נותנים ללקו חות יהם מספר גדול של מחלקות הם יכולים לארוז אותן כארכיב התוכנית (Java ARchive) jar אורזת מספר מחלקות לקובץ אחד תוך שמירה על מבנה החבילות הפנימי שלהן הפורמט תואם למקובל בתוכנות דומות כגו ן zip, tar, rar ואחרות כדי להשתמש במחלקות הארוזות אין צורך לפרוס את קובץ ה- jar ניתן להוסיפו ל CLASSPATH של התוכנית התוכנית jar היא חלק מה- JDK ונית ן להשתמש בה משורת הפקודה או מתוך סביבת הפיתוח 23

API and javadoc קובץ ה- jar עשוי שלא להכיל קובצי מקור כלל, אלא רק קובצי class (למשל משיקולי זכויות יוצרים) איך יכיר לקוח שקיבל jar מספק תוכנה כלשהו את הפונקציות והמשתנים הנמצאים בתוך ה-,jar כדי שיוכל לעבוד איתו? בעולם התוכנה מקובל לספק ביחד עם הספריו ת גם מסמך תיעוד, המפרט את שמות וחת י מות את המחלקות, השרותים והמשתנים יחד עם תיאור מילול י של אופן השימוש בהם תוכנה בשם javadoc מחוללת תיעוד אוטומטי בפורמט הערות התיעוד שהופיעו בגוף קובצי המקור html על בסיס תיע וד זה מכונה (Application Programming Interface) API תוכנת ה javadoc היא חלק מה- JDK וניתן להשתמש בה משורת הפקודה או מתוך סביבת הפיתוח 24

/** Documetntaion for the package */ package somepackage; /** Documetntaion for the class * @author your name here */ public class SomeClass { /** Documetntaion for the class variable */ public static int somevariable; } /** Documetntaion for the class method * @param x documentation for parameter x * @param y documentation for parameter y * @return * documentation for return value */ public static int somemethod(int x, int y, int z){ } // this comment would NOT be included in the documentation return 0; 25

Java API חברת Sun תיעדה את כל מחלקות הספרייה של שפת Java וחוללה עבורן בעזרת javadoc אתר תיעוד מקיף ומלא הנמצא ברשת: http://java.sun.com/j2se/1.5.0/docs/api/ 26

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

פער י הבנה חתימה אינה מספיקה, מכיוו ן שהספק והלקוח אינם רק שני רכיבי תוכנה נפרדים אלא גם לפעמים נכתבים ע"י מת כנתים שונים עשוי ים ל היות פערי הבנה לגבי תפקוד שרות מסוים הפערים נובעים ממגבלות השפה הטבעית, פערי תרבות, הבדלי אינטואיציות, ידע מוקדם ומקושי יסודי של תיאור מלא ושיטתי של עולם הבעיה לדוגמא: שלהם: נתבונן בשרות divide המקבל שני מספרים ומחזיר את המנה public static int divide(int numerator, int denominator) {...} לרוב הקוראים יש מושג כללי נכון לגבי הפונקציה ופעולתה למשל, די ברור מה תחזיר הפונקציה אם נקרא לה עם הארגומנטים 6 ו- 2 28

"Let us speak of the unspeakable" אך מה יוחזר עבור הארגומנטים 7 ו-? 2 האם הפונקציה מעגלת למעלה? מעגלת למטה? ועבור ערכים שליליים? אולי היא מעגלת לפי השלם הקרוב? ואולי ה שימ וש בפונק ציה אסו ר בעב ור מ ספרים שא ינם מתח לקים ללא שארית? מה יקרה אם המכנה הוא אפס? האם נקבל ערך מיוחד השקול לאינסוף? האם קיים הבדל בין אינסוף ומינוס אינסוף? ואולי ה שימ וש בפונק ציה אסו ר כא שר ה מ כנה ה וא אפ ס? מה קורה בעקבות שימוש אסור בפונקציה? האם התוכנית תעוף? האם מוחזר ערך שגיאה? אם כן, איזה? האם קיים משתנה או מנגנון שבאמצעותו ניתן לעקוב אחרי שגיאות שארעו בתוכנית? 29

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

עיצוב על פי חוזה contract) (design by בשפת Java אין תחביר מיוחד כחלק מהשפה לציון החוזה, נתבסס על תחביר המקובל במספר כלי תכנות ואולם אנחנו נציין בהערות התיעוד שמעל כל פונקציה: תנאי קדם (precondition) מהן ההנחות של כותב הפונקציה לגבי הדרך התקינה להשתמש בה תנאי בתר (תנאי אחר, (postcondition מה עושה הפונקציה, בכל אחד מהשימושים התקינים שלה נשתדל לתאר את תנאי הקדם ותנאי הבתר במונחים של ביטויים חוקיים ככל שניתן (לא תמיד ניתן) בולאנים שימוש בביטויים בולאנים חוקיים: מדויק יותר יאפשר לנו בעתיד לאכוף את החוזה בעזרת כלי חיצוני 31