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