
הטקסט המלא של הדקות הראשונות בהרצאה «קבצים - Files - חלק 5» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
עכשיו, אחרי שראינו איך אנחנו יכולים לכתוב לקובץ טקסטואלי ולקרוא מקובץ טקסטואלי, בואו נעשה איזשהו תרגיל שהוא קצת יותר פרקטי וקצת יותר ממחיש את היכולת שלנו לבצע את השמירות האלה ואת הטעינות האלה בתוכנית שיכולה להיות תוכנית אמיתית.
אז מה שאני רוצה לעשות, אני רוצה לפתוח תוכנית חדשה לגמרי, ובואו נניח שאנחנו מתעסקים כרגע עם תוכנית שמתעסקת עם צורות.
אז ניקח פה איזשהו shapes, ובואו נניח שאנחנו בונים איזושהי מחלקה, נוסיף פה קלאס, והמחלקה הזאת היא מחלקה שבואו נניח אמורה לתאר עיגול אחלה.
אז אפילו בואו נעשה משהו קצת יותר ממשי, נניח שיש לנו אפילו מחלקה shape שמתארת צורה כללית, ובואו נניח שלצורה כללית, לכל צורה שהיא, יש מיקום במרחב, זה אומר public int x ו-y.
בואו ניקח פה איזשהו קונסטרקטור, ניקח כאן איזשהו קונסטרקטור שמקבל x ו-y, נהתחל את ה-data members, בואו ניקח כאן איזושהי פונקציית הדפסה, ונדפיס את הפרטים, ניקח פה x, y, בצורה כזאת ויש לנו כרגע את המחלקה שייפ ואנחנו יכולים לגשת ולבנות את המחלקה סרקל שלנו סרקל יורשת את שייפ פה אנחנו מוסיפים
נניח רדיוס בואו נבצע את זה אפילו בצורה כזאת יש לנו פה פאבליק אינט רדיוס פרופרטי נחזיר פה את הרדיוס במידה והוואליו גדול שווה לאפס רק אז נבצע את ההשמה בנוסף יש לנו פה פרינט שאנחנו רוצים לקרוא לבייס ובנוסף להדפיס גם את הרדיוס.
ופה סיימנו לבנות גם את השייפ וגם את הסרקל. מה שדבר נוסף שהיה כדאי לעשות זה להגדיר את הפונקציה הזאת כמובן כווירטואלית ואנחנו רוצים לדרוס אותה ולכן אנחנו נגדיר כאן ה-override, נבצע בנייה ונראה שכל התוכנית עברה עד כאן בהצלחה.
ועכשיו אנחנו רוצים לבצע איזשהו קולקשן של כל מיני צורות ושתהיה לנו את היכולת לשמור את כל הצורות האלה לקובץ ולטעון את כל הצורות האלה מקובץ.
כלומר, אם יש לנו המון המון המון אובייקטים של שייפס ואובייקטים של סרקל ליתר דיוק, זה משהו שהוא יותר הגיוני שיהיה לנו, אפילו את שייפ נגדיר כמחלקה אבסטרקטית בכדי שלא ניתן יהיה ליצור מן האובייקט אלא רק מסרקל, ואנחנו רוצים שתהיה לנו את היכולת לשמור את כל הדברים האלה באיזשהו קובץ טקסטואלי ושתהיה
לנו את היכולת לטעון את הכל. אז בואו נראה איך אנחנו יכולים לבצע את זה. אז בואו נתחיל עם שמירת המידע. מה שהיינו יכולים לעשות זה משהו מאוד פשוט. הרי כל מחלקה באובג'קט אוריינטד צריכה לטפל בעצמה ובמה שיש בתוכה.
ולכן אם אני שייפ, אז כל מה שאני צריך לדעת זה איך לשמור שייפ אחד ויחיד לתוך קובץ ואיך לטעון שייפ אחד ויחיד מתוך קובץ. אבל אני צריך לארגן פה עוד משהו שאני צריך להתייחס אליו.
הרי אני יודע שכשאני בונה מחלקה, יכול להיות שיש לי עוד הרבה אובייקטים מהסוג של המחלקה שלי. ולכן כנראה שמישהו רוצה שיהיה לו אוסף מסוים של כל הפריטים.
לכן, אם אני רוצה לבנות איזושהי פונקציה, בוא נניח פונקציה ששומרת שייפ, היא כמובן תהיה public, היא תחזיר void ונקרא לה save.
היא לא צריכה לקבל כלום מפני שכל הדאטה ממבר נמצאים אצלי, אז נראה אולי כאילו שאם הייתי רוצה לשמור את זה לקובץ טקסטואלי, אפילו בואו נקרא לזה save to text file, אז כל מה שהיינו צריכים לעשות זה מה שעשינו מקודם.
נפתח stream writer, writer שווה new stream writer לאיזשהו קובץ shape.txt ופשוט נבצע שמירה פה של האובייקט הנוכחי. כלומר אנחנו שומרים את ה-x ואת ה-y.
writer.writeline את ה-x ו-writer.writeline את ה-y ומיד לאחר מכן writer.dispose. וברגע שאנחנו עושים את הקוד הזה, אנחנו לא באמת הבנו את הקונספט שאנחנו חלק מקולקשן ואנחנו לא אובייקט בודד בעולם.
ולכן אם אנחנו משאירים את הפונקציה הזאת בצורה כזאת וממש לא יהיה טוב לנו כי כל הזמן הקובץ האחד והיחיד הזה יידרס ויכול להיות שיש לנו פה המון המון צורות.
גם אם אנחנו נבצע true בכדי להוסיף לקובץ את הצורה הקודמת שנשמרה עדיין יש פה בזבוז זמן על פתיחת קובץ ועל סגירת קובץ וזאת לא השיטה הנכונה לעבוד כאשר אנחנו רוצים לאפשר שמירה של המון צורות או של המון אובייקטים יכול להיות שיש לכם מחלקה שמתארת מוצר ואתם רוצים לשמור אוסף של מוצרים ספר ואתם רוצים לשמור המון ספרים לקוח ואתם רוצים לשמור המון לקוחות בקובץ זה לא השיטה הנכונה
לעבודה השיטה הנכונה לעבודה אומרת תקבלו את הסטרים רייטר לתוך הפונקציה