PracticU

קבצים - Files - חלק 5

בלי כתוביותעם כתוביות
PracticU › קורס תכנות מתקדם - #Advanced .NET C › קבצים - Files - חלק 5
מילון מושגים:
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
נתיב - מחרוזת שמתארת את מיקומו של קובץ או תיקייה במערכת הקבצים, או כתובת של משאב בתוך אתר.
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.

קבצים - Files - חלק 5
בשיעור הזה בונים תוכנית צורות עם מחלקות עיגול ומחלקת בסיס, ושומרים את האוסף לקובץ טקסט וטוענים אותו בחזרה, תוך בחירה נכונה של מיקום הקובץ.
השלבים העיקריים
1. מחלקת בסיס ומחלקה נגזרת: Shape מכילה את המיקום X ו-Y ופונקציית הדפסה, ו-Circle יורשת ממנה ומוסיפה רדיוס. הפונקציה Print נדרסת כך שמדפיסה גם את הרדיוס.
2. שמירת עיגול בודד: פונקציה בעיגול פותחת StreamWriter ושומרת את הערכים בשורות נפרדות. בלי תוויות, כי המטרה היא שהנתונים יישמרו בין הרצות ולא שיקראו בקלות.
3. שמירת אוסף: במקום שכל עיגול יפתח ויסגור קובץ בעצמו, האוסף פותח את הקובץ פעם אחת ומעביר את ה-StreamWriter הפתוח לכל עיגול. זה חוסך פתיחה וסגירה חוזרות.
4. טעינה מקובץ: קונסטרקטור נוסף מקבל StreamReader וקורא ממנו את X, Y והרדיוס בסדר שבו נשמרו. כדי לשמור על הסדר, בתחילת הקובץ נשמר מספר הפריטים.
5. האוסף: CirclesCollection יורשת מ-List של Circle, כך שאפשר להוסיף עיגולים בלי קוד נוסף. לאוסף מוסיפים פונקציות לשמירה לקובץ ולטעינה ממנו.
6. מיקום הקובץ: בשיעור מוסבר שנתיב כמו C:\test לא קיים אצל כל לקוח, ובמערכות חדשות אין הרשאה לכתוב בכונן C. הפתרון הוא לשמור בתיקיית קובץ ההרצה, ולקבל את הנתיב שלה מ-Application.StartupPath.
7. למה לא להשתמש בנתיב יחסי: התיקייה הנוכחית (Current Directory) עלולה להשתנות במהלך ריצת התוכנית, למשל אחרי פעולה של המשתמש בחלון אחר. לכן שם קובץ בלי נתיב מלא עלול להישמר במקום לא צפוי.
בסיום השיעור ברור איך שומרים אוסף אובייקטים לקובץ טקסט וטוענים אותו בהרצה הבאה, ולמה כדאי לשמור קבצי אפליקציה בתיקייה של האפליקציה.
השיעור הבא בקורס: קבצים - Files - חלק 6

פרקי ההרצאה: קבצים - Files - חלק 5

  1. 00:00

    תרגיל שמירה וטעינה מעשי

  2. 00:45

    בניית מחלקת Shape

  3. 02:13

    מחלקת Circle עם רדיוס

  4. 03:41

    אוסף צורות ומחלקה אבסטרקטית

  5. 05:13

    פונקציית Save לאובייקט בודד

  6. 06:33

    הבעיה בפתיחת קובץ לכל צורה

תמלול ההרצאה: קבצים - Files - חלק 5

הטקסט המלא של הדקות הראשונות בהרצאה «קבצים - Files - חלק 5» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

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

  2. 00:27

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

  3. 00:39

    אז ניקח פה איזשהו shapes, ובואו נניח שאנחנו בונים איזושהי מחלקה, נוסיף פה קלאס, והמחלקה הזאת היא מחלקה שבואו נניח אמורה לתאר עיגול אחלה.

  4. 01:07

    אז אפילו בואו נעשה משהו קצת יותר ממשי, נניח שיש לנו אפילו מחלקה shape שמתארת צורה כללית, ובואו נניח שלצורה כללית, לכל צורה שהיא, יש מיקום במרחב, זה אומר public int x ו-y.

  5. 01:33

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

  6. 02:27

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

  7. 03:18

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

  8. 03:45

    ועכשיו אנחנו רוצים לבצע איזשהו קולקשן של כל מיני צורות ושתהיה לנו את היכולת לשמור את כל הצורות האלה לקובץ ולטעון את כל הצורות האלה מקובץ.

  9. 03:58

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

  10. 04:20

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

  11. 04:39

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

  12. 04:58

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

  13. 05:13

    לכן, אם אני רוצה לבנות איזושהי פונקציה, בוא נניח פונקציה ששומרת שייפ, היא כמובן תהיה public, היא תחזיר void ונקרא לה save.

  14. 05:26

    היא לא צריכה לקבל כלום מפני שכל הדאטה ממבר נמצאים אצלי, אז נראה אולי כאילו שאם הייתי רוצה לשמור את זה לקובץ טקסטואלי, אפילו בואו נקרא לזה save to text file, אז כל מה שהיינו צריכים לעשות זה מה שעשינו מקודם.

  15. 05:46

    נפתח stream writer, writer שווה new stream writer לאיזשהו קובץ shape.txt ופשוט נבצע שמירה פה של האובייקט הנוכחי. כלומר אנחנו שומרים את ה-x ואת ה-y.

  16. 06:11

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

  17. 06:36

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

  18. 06:47

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

  19. 07:18

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

לקורס המלא: קורס תכנות מתקדם ב‑#C ודוט-נט

ההרצאה הקודמת: קבצים - Files - חלק 4

ההרצאה הבאה: קבצים - Files - חלק 6

הרצאות קשורות מקורסים אחרים

  • קבצים - files
  • Text Files
  • files ownership
  • עבודה עם קבצים ב-Xcode - חלק 1

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס WCF - תקשורת למתקדמים בדוט-נט