1)אם אתה ממשיך להשתמש במערכים(מס' ידוע ומוגבל מראש) של סופרים וספרים.
הייתי ממליץ לך לשמור משתנה סטאטי ציבורי המכיל את מס' הספרים/סופרים(אחד לכל אחד), כדי שבכל פעם שאתה צריך להשתמש בגודל המערך לא תרשום "80".
ככה במידה ויש שינוי אתה משנה בכל המקומות ביחד.
במקרה כזה, כדאי לשמור גם משתנה פרטי, שיגיד לך מה מכסת התאים שהשתמשת(bookCount, authorCount), ובאיזה תא להכניס את הספר הבא בתור.2)במידה ואתה לא משתמש במערכים(אידאלי - שימוש ב-Vector עם generics של <Book> ו-<Author>) לא תצטרך לשמור את ה-bookCount(למרות שמומלץ), כי הווקטור כבר מנהל לך את כל הדברים שאתה צריך.
3)אתה לא מכניס ספרים/מחברים ב-constructor בצורה ידנית(אמרנו אם בחרת במערך אתה צריך לקדם את bookCount).
יש לך בשביל זה addBook ופונק' דומות, אתה משתמש רק בהן(אישית אני לא אוהב להשתמש בפונק' שעלולות להידרס בתוך קונסטרקטור, זה מתכון לבעיות בהורשה).
לאובייקט library ישנה אינווריינטה(תנאי שמתקיים תמיד) , תמיד bookCount ו-authorCount יספרו את מס' הספרים שהוכנסו למערך(שזה בעצם המקום להכנסת הספר הבא במערך), כלומר עליך לקדם אותם בכל הכנסה למערך, ולהקטין אותם בכל הוצאה מהמערך.
4)אני לא יודע אם זה בדרישות להחזיר boolean אחרי כל פעולה, אבל אם כן, תשאיר את זה ככה.
אישית אני נוטה לחלק את הפונקציות שלי ל-commands ו-queries(לא תמיד זה אפשרי, אבל בד"כ כן).
commands הן פונק' כמו הכנסה או מחיקה של ספרים, הן מבצעות פעולה(מניפולציה על מבנה הנתונים) ולא מחזירות כלום.
queries פונק' אחזור, הן משאירות את המידע כמו שהוא(בלי לבצע מניפולציה) אך מאחזרות ממנו מידע.
דוג' למקום שזה בעייתי - הפונק' pop במחסנית, היא גם מחזירה את האיבר העליון במחסנית, וגם מוציאה אותו מהמחסנית(גם את זה ניתן לחלק אבל סתם שתכיר ותראה את הדברים בצורה חכמה כבר מההתחלה).
ככה שאני לא הייתי מחזיר boolean על הפונק' הנ"ל, כי אם void(במקרה כזה, זה בדיוק כמו המקרה של pop, אצטרך גם לממש פונק' query שבודקת האם אני יכול מראש להכניס איבר למערך או לא).
לסיכום, גם מימוש בממשק שמחזיר boolean כמו שעשית הוא ריאלי, רק כדאי שתכיר עוד דרך.
5)עבור ספרים וסופרים, תבנה פונק' שוויון לוגי(תדרוס את equals אם אתה יודע איך, אם לא פשוט תבנה פונק' דומה ל-equals רק שלא תקבל Object אלא Book או Author).
במידה ותעבוד עם Vector, אז תוכל בקלות לדעת האם הוקטור כבר מכיל סופר/ספר בעזרת פונק' מוכנה מראש שנקראת contains(במידה ודרסת את equals המקורית).
במידה ואתה ממשיך לעבוד עם מערכים, אתה תצטרך לממש פונק' דומה ל-contains שעוברת על המערך באופן סדרתי(מאינדקס 0 ועד אינדקס bookCount- לא כולל!!).
ולהפעיל את פונק' השוויון הלוגית שכתבת זה עתה.
אם סיבכתי אותך תגיד.
