PracticU

מרחבי שמות - namespace

בלי כתוביותעם כתוביות
PracticU › קורס תכנות מונחה עצמים - OOP - Object Oriented Programming - חומר לימוד של מדעי המחשב › מרחבי שמות - namespace
מילון מושגים:
Namespace - מרחב שמות שמקבץ שמות של טיפוסים ורכיבים ומונע התנגשות בין שמות זהים בחלקים שונים של הקוד.
רכיב - יחידת בניין עצמאית וניתנת לשימוש חוזר בתוך מערכת או ממשק משתמש, שאחראית על חלק מוגדר מהתפקוד.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
קומפיילר - תוכנה שממירה קוד מקור שנכתב בשפת תכנות לקוד שהמחשב יכול להריץ, ומדווחת על שגיאות תחביר.

מרחבי שמות - namespace
השיעור מסביר מרחב שמות (namespace): שם שעוטף טיפוסים, ומונע בלבול כשכמה רכיבים מגדירים מחלקות עם אותו שם.
למה צריך מרחב שמות
1. עטיפה: כל טיפוס שנבנה נמצא בתוך מרחב שמות. למשל, מחלקה Person של מערכת מכללה נמצאת בתוך מרחב השמות של הפרויקט.
2. שמות זהים: כל אחד יכול לכתוב מחלקה בשם Person, ולכן המערכת צריכה להבדיל בין שתיהן לפי מרחב השמות שלהן.
3. שם ייחודי: בוחרים שם שמייחד את הפרויקט, כמו שם החברה או שם המוצר.
שימוש במחלקות ממרחבי שמות אחרים
1. שם מלא: המחלקה File נמצאת ב-System.IO. בלי using, יש לכתוב את השם המלא System.IO.File.Delete, אחרת הקומפיילר לא מוצא אותה.
2. using: השורה using System.IO; בתחילת הקובץ מאפשרת להשתמש במחלקות של המרחב בקובץ הנוכחי בלבד.
3. איתור המרחב: כותבים את שם המחלקה, לוחצים Ctrl+. ובוחרים בהצעה להוסיף את ה-using המתאים.
מרחב השמות של הפרויקט
1. הגדרה: הפרויקט נפתח עם מרחב שמות ברירת מחדל. אפשר לשנות אותו בהגדרות הפרויקט, בשדה Default Namespace.
2. קבצים חדשים: כל קובץ שנוסף לפרויקט נכנס אוטומטית למרחב השמות הזה.
3. ניקוי: בעזרת Organize Usings, Remove and Sort, מסירים את ה-using שאינם בשימוש.
שימו לב
בפרויקטים גדולים עדיף שכל הקבצים ישתייכו לאותו מרחב שמות, שמייצג את החברה או את המוצר. כעת אפשר להגדיר מרחב שמות ייחודי, ולהשתמש במחלקות ממרחבים אחרים בלי להתבלבל.
השיעור הבא בקורס: כיצד לקבוע שמות - Naming Convention

פרקי ההרצאה: מרחבי שמות - namespace

  1. 00:00

    מהו Namespace מרחב שמות

  2. 01:00

    התנגשות שמות בין מקורות

  3. 02:29

    בחירת שם ייחודי למרחב

  4. 03:26

    שימוש במחלקה ממרחב אחר

  5. 04:45

    שימוש מפורש System.IO

  6. 06:06

    שימוש מרומז עם using

תמלול ההרצאה: מרחבי שמות - namespace

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

  1. 00:01

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

  2. 00:32

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

  3. 00:54

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

  4. 01:08

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

  5. 01:31

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

  6. 02:00

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

  7. 02:24

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

  8. 02:40

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

  9. 03:03

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

  10. 03:27

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

  11. 03:38

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

  12. 03:58

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

  13. 04:17

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

  14. 04:38

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

  15. 04:56

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

  16. 05:16

    io זה צור של input output וזה אומר כל מה שקשור לקבצים או קלט פלט. בתוכו קיימת מחלקה שנקראת פייל. הנה אנחנו מגיעים אליה ולכן אנחנו יכולים להשתמש בפונקציה הסטטית delete ונמחוק את הקובץ שנמצא בקונל סי ונקרא myfile.txt אז זאת היא בעצם שיטה אחת והשיטה הזאת נקראת שימוש מפורש.

  17. 05:58

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

  18. 06:16

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

  19. 06:33

    כאן אנחנו רואים שפתאום פייל כן נמצאת, ואנחנו כעת יכולים לבצע file.delete ולמחוק את אותו הקובץ, קובץ אחר, myfile.txt, זה יהיה implicit using זאת אומרת שימוש מרומז כאן אנחנו הגדרנו שאנחנו רוצים להשתמש במרחב שמות הזה וזה חלק מהעניין אבל איך אתם יודעים

לקורס המלא: קורס תכנות מונחה עצמים OOP

ההרצאה הקודמת: העמסת אופרטור-Operator Overloading

ההרצאה הבאה: כיצד לקבוע שמות - Naming Convention

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

  • הסבר על Kubernetes - Namespace
  • שמות פרמטרים של פעולות
  • שינוי מרחב השמות - Namespace
  • רישום שמות DNS ב-ROUTER53

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

  • קורס יסודות התכנות - שפת C# .NET - קורס תכנות למתחילים - דוט-נט / סי-שארפ - חומר לימוד של מדעי המחשב