فضای نام (علوم رایانه)

در علم رایانش، یک فضای نام (به انگلیسی: Namespace) یک مجموعه نماد می‌باشد که از آن برای سازمان دادن به انواع متفاوت شیء استفاده می‌شود، هدف آن است که این اشیا بتوانند توسط نام ارجاع شوند. یک فضای نام باید تضمین کند که همهٔ شناسه‌های موجود در آن نام یکتایی دارند و در نتیجه اشیاء به راحتی قابل شناسایی می‌باشند.[۱]

فضاهای نام معمولاً سلسله مراتبی هستند، دلیل این امر امکان استفاده مجدد از نام‌ها در زمینه‌های مختلف است.[۱]

مثال‌های برجسته از فضای نام شامل:[۱]

مقایسه فضای نام رایانه با فضای نام در انسان‌ها

ویرایش

برای مقایسه یک سیستم نامگذاری افراد را در نظر بگیرید، که در آن هر انسان یک نام خاص دارد و بعلاوه یک نام خانوادگی دارد که با وابستگان خود مشترک است. اگر نام کوچک برای اعضای خانواده تنها در یک خانواده یکتا باشد، آنوقت هر فرد می‌تواند به صورت منحصر به فرد با ترکیبی از نام کوچک و نام خانوادگی شناسایی شوند. تنها یک «بیژن شیرازی» وجود دارد، اگر چه ممکن است «بیژن» های زیادی وجود داشته باشد. در فضای نام خانواده «شیرازی»، تنها «بیژن» کافی است که به صورت غیر مبهم آن فرد را معین کند، در حالیکه در فضای نام «جهانی» برای همهٔ افراد، باید از نام کامل استفاده کرد.[۱]

  • به صورت مشابه، سیستم فایل سلسله مراتبی، فایل‌هایش را در پرونده‌ها (دایرکتوری) سازماندهی می‌کند. هر پرونده یک فضای نام جداگانه است، بنابراین کلمه‌ها و نیز مفاد درونی پرونده هر دو ممکن است شامل یک فایل «to_jane» باشند.
  • در زبان‌های برنامه‌نویسی، از فضای نام به صورت معمول برای اهداف گروه‌بندی نشانه‌ها و شناسه‌ها، در حول یک عملکرد بخصوص، و نیز جلوگیری برخورد اسامی بین چندین شناسه که دارای نام مشابه‌اند، استفاده می‌شود.
  • در شبکه‌سازی، سامانه نام دامنه وبگاه‌ها (و دیگر منابع) را به فضای نام سلسله مراتبی، سازمان‌دهی می‌کند.[۱]

به عبارت دیگر، فضای نام، این امکان را می‌دهد که موجودیت‌هایی مثل کلاس‌ها، اشیاء و توابع را تحت عنوان یک نام جمع کنیم.[۶]

یک مثال از فضای‌نام در زبان ++C

ویرایش
#include <iostream>

// این روش استفاده‌کننده از یک نام را به دامنه فعلی می‌آورد. در این مورد، آنها را به دامنه سراسری می‌آورد.
using std::cout;
using std::endl;

namespace box1 {
    int box_side = 4;
}

namespace box2 {
    int box_side = 12;
}

int main() {
    int box_side = 42;
    cout << box1::box_side << endl;  // خروجی 4 را نشان می‌دهد.
    cout << box2::box_side << endl;  // خروجی 12 را نشان می‌دهد.
    cout << box_side << endl;  // خروجی 42 را نشان می‌دهد.
}
ر

منابع

ویرایش
  1. ۱٫۰ ۱٫۱ ۱٫۲ ۱٫۳ ۱٫۴ "Namespace". Wikipedia (به انگلیسی). 2020-01-31.
  2. Adya, Atul; Bolosky, William; Castro, Miguel; Cermak, Gerald; Chaiken, Ronnie; Douceur, John; Howell, Jon; Lorch, Jacob; Theimer, Marvin; Wattenhofer, Roger (2002). FARSITE: Federated, Available, and Reliable Storage for an Incompletely Trusted Environment (PDF). Proc. USENIX Symp. on Operating Systems Design and Implementation. Archived from the original (PDF) on 2010-07-28. The primary construct established by a file system is a hierarchical directory namespace, which is the logical repository for files.
  3. "C# FAQ: What is a namespace". http://en.csharp-online.net/: C# Online Net. Archived from the original on 2013-10-20. Retrieved 2010-02-23. A namespace is nothing but a group of assemblies, classes, or types. A namespace acts as a container—like a disk folder—for classes organized into groups usually based on functionality. C# namespace syntax allows namespaces to be nested. {{cite web}}: External link in |location= (help)
  4. "An overview of namespaces in PHP". PHP Manual. What are namespaces? In the broadest definition namespaces are a way of encapsulating items. This can be seen as an abstract concept in many places. For example, in any operating system directories serve to group related files, and act as a namespace for the files within them.
  5. "Creating and Using Packages". Java Documentation. Oracle. A package is a grouping of related types providing access protection and name space management. Note that types refers to classes, interfaces, enumerations, and annotation types. Enumerations and annotation types are special kinds of classes and interfaces, respectively, so types are often referred to in this lesson simply as classes and interfaces.[منبع بهتری نیاز است]
  6. دکتر بابک بشری راد (۱۳۹۴). برنامه سازی پیشرفته با ++C. تهران: ناقوس. صص. ۱۵۹. شابک ۹۷۸-۹۶۴-۳۷۷-۷۴۶-۳.