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

 תֶכֶן מונחה-עצמים - - - בעיית בד הציור

 

 

- מבוא
- הקדמה

- תוכנית לדוגמה מתוך Dale & Weems

- תאור הבעיה

- פתרון ODD

- דיון

- מחלקות, אובייקטים ומשתני מופע  נחוצים

- המתודות הנחוצות

- יחסים בין מחלקות ואובייקטים

- התנהגות האובייקטים

- קטעי קוד מעניינים

- התוכנית

 


 

מבוא

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

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

 

הקדמה

 

תיאור קצר למדי של תֶכֶן מונחה-עצמים (OOD) ניתן בשיעור 4 בליווי דוגמה לשימוש ב‑ OOD
על מנת לפתח תוכנית פשוטה שמחקה מונה ספרתי. חומר נוסף בנושא זה ניתן בשיעור 29,
שדן בו בהרחבה.

 

שיעור זה והבאים אחריו ימשיכו בהצגת מושגי OOD ותוכניות לדוגמה שפותחו תוך שימוש במתודולוגיית OOD תוך כדי לימוד כתיבת תוכניות Java מונחות-עצמים.

 

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

 

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

 

תוכנית לדוגמה מתוך Dale & Weems

 

להלן פתרון מונחה-עצמים ב‑Java ל"מקרה מבחן של פתרון בעיה" המובא בעמוד 152 של
Turbo Pascal, Fourth Edition, by Nell Dale & Chip Weems .

 

התוכנית לדוגמה מובאת על מנת להמחיש את הניגוד במבנה של שתי גירסאות של תוכנית זהה:
אחת שנבנתה בהתאם למתודולוגיית תֶכֶן
top-down, ואחרת שנבנתה בהתאם למתודולוגיית תֶכֶן מונחה-עצמים.

 

כיוון שאינני רשאי להביא את פתרון ה‑top-down לצורך השוואת שתי הגירסאות, יהיה עליך לראות אותו במדריך עצמו.

 

תיאור הבעיה

 

להלן ניסוח של תיאור הבעיה:

 

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

 

קבל מן המשתמש את הקלט הבא:

 

·       אורך ורוחב הציור

·       עלות העץ בדולר/אינטש

·       עלות הבד בדולר/רגל מרובע

 

חשב והצג למען המשתמש את הפלט הבא:

 

·       הודעות מנחות

·       הד של נתוני הקלט

·       אורך העץ שיירכש באינטשים

·       אורך ורוחב הבד באינטשים

·       עלות העץ בדולרים

·       עלות הבד בדולרים

·       העלות הכוללת של החומרים בדולרים

 

נתון כי:

 

·       אורך העץ הדרוש לבניית מסגרת הוא כפליים סכום האורך והרוחב של הציור
(בהנחה שאין כל בזבוז).

·       מימדי הבד אמורים להיות גדולים ב‑5 אינטש ממימדי הציור (באורך וברוחב),
על מנת שניתן יהיה למתוח ולהדק את הבד סביב מסגרת העץ.

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

 

פתרון OOD

 

המחלקה השולטת של התוכנית תיקרא Ood03. היא נועדה לרוץ כאפליקציית Java,
ועל כן היא מחייבת מתודת ()
main. מופע  של המחלקה השולטת הוא אנלוגי לציור.

 

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

 

דיון

 

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

 

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

 

מחלקות, אובייקטים ומשתני מופע  נחוצים

 

שמות העצם, שנבחרו לייצג מחלקות (ואובייקטים), הם:

 

·       Painting

·       Canvas

·       Wooden Frame

 

שמות העצם, שנבחרו לייצג משתני מופע  של מחלקת Painting, הם:

 

·       Canvas

·       WoodenFrame

 

שים לב, שאלו הם אובייקטים של שתי מחלקות מתוך השלוש.

 

שמות העצם, שנבחרו לייצג משתני מופע  של מחלקת Canvas, הם:

 

·       margin (השוליים למתיחת הבד סביב המסגרת כדי שניתן יהיה להדק אותו)

·       length (אורך הציור)

·       width (רוחב הציור)

·       costPerSqFt (עלות הבד)

 

שמות העצם, שנבחרו לייצג משתני מופע  של מחלקת WoodenFrame, הם:

 

·       length (אורך הציור)

·       width (רוחב הציור)

·       costPerInch (עלות העץ)

 

המתודות הנחוצות

 

ניתוח הפעלים, והיבטים אחרים, בתיאור הבעיה העלה שמחלקת Painting צריכה לכלול את המתודות הבאות, כולל מתודת ()main הדרושה בכל אפליקציית Java :

 

·       main()

·       getInput()

·       showOutput()

·       getTotalMaterialCost()

 

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

 

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

 

·       setLength (כפליים length)

·       setWidth (כפליים width)

·       setCostPerSqFt (כפליים costPerSqFt)

 

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

 

·       getTotalLength()

·       getTotalWidth()

·       getTotalCost()

 

ניתוח הפעלים, והיבטים אחרים, בתיאור הבעיה העלה שמחלקת WoodenFrame צריכה לכלול את מתודות-השינוי הבאות:

 

·       setLength (פעמיים ה‑length)

·       setWidth (פעמיים ה‑width)

·       setCostPerInch (פעמיים ה‑costPerInch)

 

ניתוח הבעיה העלה שמחלקת WoodenFrame צריכה לכלול את מתודות-גישה הבאות:

 

·       getTotalCostToBuy()

·       getTotalCost()

 

יחסים בין מחלקות ואובייקטים

 

ניתוח תיאור הבעיה העלה את היחסים הבאים בין אובייקטים שנוצרו במחלקות Ood03, Canvas ו‑WoodenFrame:

 

כל אובייקט של Ood03 (Painting) מכיל אובייקט אחד של Canvas ואובייקט אחד של WoodenFrame. זהו יחס של "יש" לציור יש Canvas ויש WoodenFrame  .

 

התנהגות האובייקטים

 

ההתנהגות של כל אובייקט של המחלקות Canvas ו‑WoodenFrame מורכבת בעיקר משינוי ומְגישה.

 

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

 

ההתנהגות של אובייקט של מחלקת Ood03 מחייבת:

 

·       קבלת נתוני קלט מהמשתמש.

·       שליחת הודעות לאובייקטים של Canvas ושל WoodenFrame, עם הבקשה לשנות את מצבם ולאחסן את המידע שהושג מהמשתמש.

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

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

 

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