فضای نام

از ویکیپدیا، دانشنامه آزاد
پرش به ناوبری پرش به جستجو

در محاسبات ، فضای نام مجموعه ای از علائم ( نام ها ) است که برای شناسایی و ارجاع به اشیاء از انواع مختلف استفاده می شود. فضای نام تضمین می‌کند که همه مجموعه‌ای از اشیاء دارای نام‌های منحصربه‌فرد هستند تا بتوان آنها را به راحتی شناسایی کرد.

فضاهای نام معمولاً به صورت سلسله مراتبی ساخته می شوند تا امکان استفاده مجدد از نام ها در زمینه های مختلف را فراهم کنند. به عنوان یک قیاس، سیستم نامگذاری افراد را در نظر بگیرید که در آن هر فرد دارای یک نام خاص و همچنین نام خانوادگی مشترک با بستگان خود است. اگر نام کوچک اعضای خانواده فقط در هر خانواده منحصر به فرد باشد، آنگاه هر فرد را می توان با ترکیب نام و نام خانوادگی منحصر به فرد شناسایی کرد. فقط یک جین دو وجود دارد، اگرچه ممکن است جین های زیادی وجود داشته باشد. در فضای نام خانواده Doe، فقط "جین" برای تعیین بدون ابهام این شخص کافی است، در حالی که در فضای نام "جهانی" همه افراد، باید از نام کامل استفاده شود.

نمونه‌های برجسته برای فضای نام شامل سیستم‌های فایل است که نام‌هایی را به فایل‌ها اختصاص می‌دهند. [1] برخی از زبان های برنامه نویسی متغیرها و زیر روال های خود را در فضای نام سازماندهی می کنند . [2] [3] [4] شبکه‌های کامپیوتری و سیستم‌های توزیع‌شده نام‌هایی را به منابعی مانند رایانه‌ها، چاپگرها، وب‌سایت‌ها و فایل‌های راه دور اختصاص می‌دهند. سیستم عامل ها می توانند منابع هسته را با فضاهای نام ایزوله تقسیم بندی کنند تا از کانتینرهای مجازی سازی پشتیبانی کنند .

به طور مشابه، سیستم های فایل سلسله مراتبی، فایل ها را در دایرکتوری ها سازماندهی می کنند. هر دایرکتوری یک فضای نام جداگانه است، به طوری که دایرکتوری های "حروف" و "فاکتورها" ممکن است هر دو حاوی یک فایل "to_jane" باشند.

در برنامه نویسی کامپیوتر ، فضاهای نام معمولاً به منظور گروه بندی نمادها و شناسه ها در اطراف یک عملکرد خاص و جلوگیری از برخورد نام بین چندین شناسه که یک نام مشترک دارند، استفاده می شود.

در شبکه، سیستم نام دامنه وب سایت ها (و سایر منابع) را در فضای نام سلسله مراتبی سازماندهی می کند .

تضاد نام

نام عناصر توسط توسعه دهنده تعریف می شود. این اغلب در هنگام تلاش برای مخلوط کردن اسناد XML از برنامه های مختلف XML منجر به تضاد می شود.

این XML اطلاعات جدول HTML را حمل می کند :

<table> 
    <tr> 
        <td> سیب </td> 
        <td> پرتقال </td> 
    </tr> 
</table>

این XML اطلاعاتی در مورد یک میز (به عنوان مثال یک قطعه مبلمان) دارد:

<table> 
    <name> میز قهوه آفریقایی </name> 
    <width> 80 </width> 
    <length> 120 </length> 
</table>

اگر این قطعات XML با هم جمع شوند، یک تضاد نام وجود خواهد داشت. هر دو حاوی یک <table>...</table>عنصر هستند، اما عناصر دارای محتوا و معنای متفاوتی هستند.

تجزیه کننده XML نمی داند چگونه این تفاوت ها را مدیریت کند.

راه حل از طریق پیشوند

با استفاده از پیشوند نام به راحتی می توان از تضاد نام در XML جلوگیری کرد.

XML زیر اطلاعات مربوط به جدول HTML و مبلمان را با پیشوند "h" و "f" در ابتدای عناصر متمایز می کند.

<h:table> 
    <h:tr> 
        <h:td> سیب </h:td> 
        <h:td> پرتقال </h:td> 
    </h:tr> 
</h:table>

<f:table> 
    <f:name> میز قهوه آفریقایی </f:name> 
    <f:width> 80 </f:width> 
    <f:length> 120 </f:length> 
</f:table>

سیستم نامگذاری

یک نام در یک فضای نام از یک نام فضای نام و یک نام محلی تشکیل شده است. [5] [6] نام فضای نام معمولاً به عنوان پیشوند نام محلی اعمال می شود.

به شکل Backus-Naur تقویت شده :

نام = <نام فضای نام> جداکننده <نام محلی>

هنگامی که نام های محلی به خودی خود استفاده می شوند، از تفکیک نام برای تصمیم گیری در مورد کدام نام خاص (در صورت وجود) توسط نام محلی خاص استفاده می شود.

مثالها

نمونه هایی از نام ها در فضای نام
متن نوشته نام نام فضای نام نام محلی
مسیر /home/user/readme.txt /home/user (دایرکتوری) readme.txt (نام فایل)
نام دامنه www.example.com example.com (نام دامنه) www (نام دامنه برگ)
C++ std:: آرایه std (فضای نام ++C) آرایه (ساختار)
UN/LOCODE نیویورک آمریکا ایالات متحده (کشور یا قلمرو) نیویورک (محل)
XML xmlns:xhtml=" http://www.w3.org/1999/xhtml "
<xhtml:body>
xhtml (قبلاً فضای نام XML اعلام شده xhtml=" http://www.w3.org/1999/xhtml ") بدن (عنصر)
پرل $DBI::errstr $DBI (ماژول Perl) errstr (متغیر)
جاوا java.util.Date java.util (فضای نام جاوا) تاریخ (کلاس)
نام یکنواخت منبع (URN) urn:nbn:fi-fe19991055 urn:nbn (شماره کتابشناسی ملی) fi-fe19991055
سیستم دسته 10.1000/182 10 (مرجع نامگذاری دسته) 1000/182 (نام محلی دسته)
شناسه دیجیتال شی 10.1000/182 10.1000 (ناشر) 182 (انتشار)
آدرس مک 01-23-45-67-89-ab 01-23-45 ( شناسه منحصر به فرد سازمانی ) 67-89-ab (ویژه NIC)
شناسه PCI 1234 abdd 1234 (شناسه فروشنده) abcd (شناسه دستگاه)
USB VID/PID 2341 003f [7] 2341 (شناسه فروشنده) 003f (شناسه محصول)
SPARQL dbr: سیدنی dbr (هستی شناسی قبلاً اعلام شده، به عنوان مثال با تعیین پیشوند @ dbr: < http://dbpedia.org/resource/ >) سیدنی

تفویض اختیار

تفویض مسئولیت ها بین طرفین در برنامه های کاربردی دنیای واقعی، مانند ساختار شبکه جهانی وب، مهم است. فضاهای نام امکان تفویض انتساب شناسه به چندین سازمان صادرکننده نام را فراهم می‌کنند و در عین حال منحصربه‌فرد بودن جهانی را حفظ می‌کنند. [8] یک مرجع ثبت مرکزی ، نام فضای نام اختصاص داده شده را ثبت می کند. هر نام فضای نام به سازمانی اختصاص داده می شود که متعاقباً مسئول تخصیص نام ها در فضای نام اختصاص یافته خود است. این سازمان ممکن است یک سازمان صادرکننده نام باشد که نام‌ها را به خود اختصاص می‌دهد، یا مرجع ثبت دیگری که بخش‌هایی از فضای نام خود را به سازمان‌های مختلف واگذار می‌کند.

سلسله مراتب

یک طرح نامگذاری که اجازه تفویض فضای نام فرعی به اشخاص ثالث را می دهد، یک فضای نام سلسله مراتبی است.

اگر نحو نام فضای نام برای هر نمایندگی فرعی یکسان باشد، سلسله مراتب بازگشتی است. نمونه ای از سلسله مراتب بازگشتی، سیستم نام دامنه است .

نمونه‌ای از سلسله مراتب غیر بازگشتی، نام منبع یکسانی است که یک شماره مرجع اعداد اختصاص داده شده به اینترنت (IANA) را نشان می‌دهد.

تفکیک فضای نام سلسله مراتبی برای urn:isbn:978-3-16-148410-0 ، یک شناسه برای کتاب منطق کشف علمی اثر کارل پوپر، ویرایش دهم.
ثبت ثبت نام شناسه نمونه نام فضای نام فضای نام
نام یکنواخت منبع (URN) مرجع شماره های اختصاص داده شده اینترنت urn:isbn:978-3-16-148410-0 کوزه در دار فضای نام URN رسمی
فضای نام URN رسمی مرجع شماره های اختصاص داده شده اینترنت urn:isbn:978-3-16-148410-0 شابک شماره های استاندارد بین المللی کتاب به عنوان نام منابع یکسان
شماره مقاله بین المللی (EAN) GS1 978-3-16-148410-0 978 کتاب سرزمین
شماره کتاب استاندارد بین المللی (ISBN) آژانس بین المللی شابک 3-16-148410-X 3 کشورهای آلمانی زبان
کد ناشر آلمانی Agentur für Buchmarktstandards 3-16-148410-X 16 مور زیبک

فضای نام در مقابل دامنه

نام فضای نام ممکن است زمینه ( حوزه در علوم کامپیوتر) را برای یک نام فراهم کند و اصطلاحات گاهی اوقات به جای یکدیگر استفاده می شوند. با این حال، زمینه یک نام ممکن است توسط عوامل دیگری نیز ارائه شود، مانند محل وقوع آن یا نحو نام.

نمونه هایی از سیستم های نامگذاری با دامنه محلی و جهانی، و با و بدون فضای نام
بدون فضای نام با فضای نام
محدوده محلی پلاک خودرو استاندارد سلسله مراتب سیستم فایل
گستره جهانی شناسه منحصر به فرد جهانی سیستم نام دامنه

در زبان های برنامه نویسی

برای بسیاری از زبان های برنامه نویسی، فضای نام زمینه ای برای شناسه های آنهاست . در یک سیستم عامل، نمونه ای از فضای نام یک دایرکتوری است. هر نام در یک فهرست به طور منحصر به فرد یک فایل یا زیر شاخه را مشخص می کند. [9]

به عنوان یک قاعده، نام ها در یک فضای نام نمی توانند بیش از یک معنی داشته باشند. یعنی معانی مختلف نمی توانند یک نام را در فضای نام یکسان به اشتراک بگذارند. به فضای نام، زمینه نیز می گویند، زیرا یک نام در فضای نام های مختلف می تواند معانی متفاوتی داشته باشد که هر کدام برای فضای نام خود مناسب است.

در زیر سایر ویژگی های فضای نام آمده است:

و همچنین استفاده فنی زبان انتزاعی آن همانطور که در بالا توضیح داده شد، برخی از زبان ها دارای یک کلمه کلیدی خاص هستند که برای کنترل فضای نام صریح، در میان کاربردهای دیگر، استفاده می شود. در زیر نمونه ای از فضای نام در C++ آمده است:

#include <iostream> 

// به این صورت است که یک نام را وارد محدوده فعلی می کنیم. در این مورد، 
// آنها را در محدوده جهانی قرار می دهد. 
استفاده از std :: cout ; 
با استفاده از std :: endl ; 

کادر فضای نام 1 {  
    int box_side = 4 ;   
}

کادر فضای نام 2 {  
    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. }      
          
          

ملاحظات علوم کامپیوتر

فضای نام در علوم کامپیوتر (گاهی اوقات دامنه نام نیز نامیده می شود ) یک محفظه یا محیط انتزاعی است که برای نگهداری یک گروه بندی منطقی از شناسه ها یا نمادهای منحصر به فرد (یعنی نام ها) ایجاد می شود. یک شناسه تعریف شده در یک فضای نام فقط با آن فضای نام مرتبط است. همان شناسه را می توان به طور مستقل در فضای نام چندگانه تعریف کرد. یعنی یک شناسه تعریف شده در یک فضای نام ممکن است همان معانی تعریف شده در فضای نام دیگر را داشته باشد یا نداشته باشد. زبان‌هایی که از فضای نام پشتیبانی می‌کنند، قوانینی را مشخص می‌کنند که تعیین می‌کنند یک شناسه (نه تعریف آن) به کدام فضای نام تعلق دارد. [10]

این مفهوم را می توان با یک قیاس نشان داد. تصور کنید که دو شرکت X و Y هر کدام به کارمندان خود شماره شناسایی اختصاص می دهند. X نباید دو کارمند با شماره شناسه یکسان داشته باشد و به همین ترتیب برای Y; اما استفاده از شماره شناسه یکسان در هر دو شرکت مشکلی ندارد. به عنوان مثال، اگر بیل برای شرکت X کار می کند و جین برای شرکت Y کار می کند، مشکلی نیست که هر یک از آنها کارمند شماره 123 باشند. در این قیاس، شماره شناسه شناسه است و شرکت به عنوان فضای نام عمل می کند. برای شناسایی یک شناسه یکسان برای شناسایی افراد مختلف در هر فضای نام مشکلی ایجاد نمی کند.

در برنامه ها یا اسناد کامپیوتری بزرگ ، داشتن صدها یا هزاران شناسه معمول است. فضاهای نام (یا تکنیک مشابه، به تقلید فضاهای نام مراجعه کنید ) مکانیزمی را برای پنهان کردن شناسه های محلی فراهم می کند. آنها ابزاری برای گروه بندی شناسه های مرتبط منطقی در فضاهای نام مربوطه فراهم می کنند و در نتیجه سیستم را ماژولارتر می کنند.

دستگاه های ذخیره سازی داده و بسیاری از زبان های برنامه نویسی مدرن از فضای نام پشتیبانی می کنند. دستگاه های ذخیره سازی از فهرست ها (یا پوشه ها) به عنوان فضای نام استفاده می کنند. این اجازه می دهد تا دو فایل با نام یکسان در دستگاه ذخیره شوند تا زمانی که در فهرست های مختلف ذخیره شوند. در برخی از زبان‌های برنامه‌نویسی (مانند C++ ، Python )، شناسه‌هایی که نام‌های فضای نام را نام‌گذاری می‌کنند، خود با یک فضای نام محصور مرتبط هستند. بنابراین، در این زبان‌ها فضاهای نام می‌توانند تودرتو باشند و درخت فضای نام را تشکیل دهند . در ریشه این درخت فضای نام جهانی بدون نام قرار دارد.

استفاده در زبان های رایج

ج

از C99 می توان از ساختارهای ناشناس به عنوان فضای نام در C استفاده کرد.

// helper.c 
static int _add ( int a , int b ) {      
    برگرداندن a + b ;   
}

ساختار ساخت {  
    پی دو ; 
    int ( * add ) ( int , int );   
} helper = { 3.14 , _add };      

// helper.h 
const struct {  
    پی دو ; 
    int ( * add ) ( int , int );   
} کمک کننده ; 

// main.c 
#include <stdio.h> 
#include "helper.h" 

int main (){ 
    printf ( "3 + 2 = %d \n " , helper . add ( 3 , 2 ));  
    printf ( "pi is %f \n " , helper . pi ); 
}
C++

در C++ ، یک فضای نام با یک بلوک فضای نام تعریف می شود. [11]

فضای نام abc {  
    نوار int ; 
}

در این بلوک، شناسه ها می توانند دقیقاً همانطور که اعلام شده اند استفاده شوند. خارج از این بلوک، مشخص کننده فضای نام باید پیشوند باشد. برای مثال، خارج از namespace abc، barباید نوشته abc::barشود تا بتوان به آن دسترسی داشت. C++ شامل ساختار دیگری است که این پرحرفی را غیر ضروری می کند. با اضافه کردن خط

استفاده از فضای نام abc ;  

برای یک قطعه کد، پیشوند abc::دیگر مورد نیاز نیست.

شناسه هایی که به صراحت در یک فضای نام اعلان نشده اند، در فضای نام جهانی در نظر گرفته می شوند.

int foo ; 

این شناسه‌ها می‌توانند دقیقاً همانطور که اعلام شده‌اند استفاده شوند، یا از آنجایی که فضای نام جهانی بدون نام است، ::می‌توان پیشوند مشخص‌کننده فضای نام را تعیین کرد. به عنوان مثال، fooهمچنین می تواند نوشته شود ::foo.

وضوح فضای نام در C++ سلسله مراتبی است. این بدان معنی است که در فضای نام فرضی food::soup، شناسه chickenبه food::soup::chicken. اگر food::soup::chickenوجود ندارد، به آن اشاره می کند food::chicken. اگر نه وجود دارد food::soup::chickenو نه food::chickenوجود دارد، chickenبه ::chickenیک شناسه در فضای نام جهانی اشاره دارد.

فضاهای نام در C++ اغلب برای جلوگیری از برخورد نامگذاری استفاده می شود . اگرچه فضاهای نام به طور گسترده در کدهای C++ اخیر استفاده می شود، اکثر کدهای قدیمی از این امکان استفاده نمی کنند زیرا در نسخه های اولیه زبان وجود نداشت. برای مثال، کل کتابخانه استاندارد C++ در داخل تعریف شده است namespace std، اما قبل از استانداردسازی، بسیاری از مؤلفه‌ها در ابتدا در فضای نام جهانی بودند. یک برنامه نویس می تواند usingدستورالعملی را برای دور زدن الزامات وضوح فضای نام و به دست آوردن سازگاری با کدهای قدیمی تر که انتظار دارد همه شناسه ها در فضای نام جهانی باشند، وارد کند. با این حال، استفاده از usingدستورالعمل به دلایلی غیر از سازگاری با عقب (به عنوان مثال، راحتی) خلاف شیوه های کد خوب در نظر گرفته می شود.

جاوا

در جاوا ، ایده فضای نام در بسته های جاوا تجسم یافته است . همه کدها به یک بسته تعلق دارند، اگرچه آن بسته نیازی به نامگذاری صریح ندارد. کد از بسته های دیگر با پیشوند نام بسته قبل از شناسه مناسب قابل دسترسی است، به عنوان مثال class Stringin می تواند به عنوان (این به عنوان نام کلاس کاملاً واجد شرایط شناخته می شود ) قابل دسترسی است. مانند C++، جاوا ساختاری را ارائه می دهد که تایپ نام بسته ( ) را غیرضروری می کند. با این حال، برخی از ویژگی ها (مانند بازتاب ) برنامه نویس را ملزم به استفاده از نام کاملاً واجد شرایط می کند. package java.langjava.lang.Stringimport

برخلاف C++، فضاهای نام در جاوا تا آنجا که به نحو زبان مربوط می شود، سلسله مراتبی ندارند. با این حال، بسته ها به صورت سلسله مراتبی نامگذاری می شوند. به عنوان مثال، همه بسته‌هایی که با آن شروع javaمی‌شوند، بخشی از پلتفرم جاوا هستند - این بسته java.langشامل کلاس‌های اصلی زبان، و java.lang.reflectشامل کلاس‌های هسته‌ای است که به طور خاص به بازتاب مربوط می‌شوند.

در جاوا (و Ada ، C# ، و دیگران)، فضاهای نام/بسته ها دسته های معنایی کد را بیان می کنند. به عنوان مثال، در سی شارپ، namespace Systemحاوی کد ارائه شده توسط سیستم ( دات نت فریم ورک ) است. اینکه این دسته بندی ها چقدر خاص هستند و سلسله مراتب ها چقدر عمیق هستند، از زبانی به زبان دیگر متفاوت است.

دامنه های تابع و کلاس را می توان به عنوان فضای نام ضمنی مشاهده کرد که به طور جدایی ناپذیری با قابلیت مشاهده، دسترسی و طول عمر شی مرتبط هستند.

سی شارپ

فضای نام به شدت در زبان سی شارپ استفاده می شود. همه کلاس‌های NET Framework در فضاهای نام سازماندهی شده‌اند تا واضح‌تر از آنها استفاده شود و از هرج و مرج جلوگیری شود. علاوه بر این، فضاهای نام سفارشی به طور گسترده توسط برنامه نویسان استفاده می شود، هم برای سازماندهی کار خود و هم برای جلوگیری از برخورد نامگذاری . هنگام ارجاع به یک کلاس، باید نام کاملاً واجد شرایط آن را مشخص کنید، که به معنای فضای نام و به دنبال آن نام کلاس است.

سیستم . کنسول . WriteLine ( "سلام جهان!" 
int  i  =  سیستم . تبدیل کنید. ToInt32 ( "123" );

یا یک دستور استفاده اضافه کنید . با این کار نیازی به ذکر نام کامل همه کلاس ها در آن فضای نام نیست.

با استفاده از  سیستم ؛

کنسول . WriteLine ( "سلام جهان!" 
int  i  =  تبدیل . ToInt32 ( "123" );

در مثال‌های بالا، System یک فضای نام است و Console و Convert کلاس‌هایی هستند که در System تعریف شده‌اند .

پایتون

در پایتون ، فضاهای نام توسط ماژول های جداگانه تعریف می شوند، و از آنجایی که ماژول ها را می توان در بسته های سلسله مراتبی قرار داد، پس فضاهای نام نیز سلسله مراتبی هستند. [12] [13] به طور کلی وقتی یک ماژول وارد می‌شود، نام‌های تعریف‌شده در ماژول از طریق فضای نام آن ماژول تعریف می‌شوند و با استفاده از نام کاملاً واجد شرایط، از ماژول‌های فراخوان به داخل دسترسی می‌شوند.

# فرض کنید modulea دو تابع را تعریف می کند: func1() و func2() و یک کلاس: Class1 
import  Modulea

ماژول . func1 () 
Modulea . func2 () 
a  =  Modulea . کلاس 1 ()

این from ... import ...عبارت را می توان برای درج نام های مربوطه به طور مستقیم در فضای نام ماژول فراخوان استفاده کرد، و آن نام ها را می توان از ماژول فراخوان بدون نام واجد شرایط دسترسی داشت:

# فرض کنید Modulea دو تابع تعریف می کند: func1() و func2() و یک کلاس: Class1 
از  Modulea  import  func1

func1 () 
func2 ( )  # این به عنوان یک نام تعریف نشده با شکست مواجه خواهد شد، همانطور که نام کامل Modulea.func2() 
a  =  Class1 ()  # این به عنوان یک نام تعریف نشده، مانند نام کامل Modulea.Class1 () ناموفق خواهد بود.

از آنجایی که این مستقیماً نام‌ها را وارد می‌کند (بدون صلاحیت)، می‌تواند نام‌های موجود را بدون هیچ هشداری بازنویسی کند.

شکل خاصی از عبارت این است from ... import *که تمام نام‌های تعریف شده در بسته نام‌گذاری شده را مستقیماً در فضای نام ماژول فراخوان وارد می‌کند. استفاده از این شکل از وارد کردن، اگرچه در زبان پشتیبانی می‌شود، به طور کلی ممنوع است، زیرا فضای نام ماژول فراخوان را آلوده می‌کند و باعث می‌شود نام‌های از قبل تعریف‌شده در موارد تداخل نام بازنویسی شوند. [14]

پایتون همچنین import x as yبه عنوان راهی برای ارائه یک نام مستعار یا نام جایگزین برای استفاده توسط ماژول فراخوان پشتیبانی می کند:

numpy  را به عنوان np وارد کنید  

a  =  np _ آرنج ( 1000 )
فضای نام XML

در XML ، مشخصات فضای نام XML، نام عناصر و ویژگی‌های یک سند XML را قادر می‌سازد تا مشابه نقش فضاهای نام در زبان‌های برنامه‌نویسی منحصربه‌فرد باشند. با استفاده از فضاهای نام XML، اسناد XML ممکن است حاوی نام عنصر یا ویژگی از بیش از یک واژگان XML باشد.

PHP

فضاهای نام از نسخه 5.3 به بعد وارد PHP شدند. از برخورد نامگذاری کلاس ها، توابع و متغیرها می توان جلوگیری کرد. در PHP ، یک فضای نام با یک بلوک فضای نام تعریف می شود.

# فایل phpstar/foobar.php

فضای نام  phpstar ;

class  FooBar 
{ 
    public  function  foo () :  void 
    { 
        echo  'Hello world, from function foo' ; 
    }

     نوار تابع  عمومی () : void { echo 'Hello world, from function bar' ; } } 
    
         
    

ما می توانیم یک فضای نام PHP را با روش های مختلف زیر ارجاع دهیم:

# فایل index.php

# شامل فایل 
شامل  "phpstar/foobar.php" ;

# گزینه 1: مستقیماً نام کلاس را با فضای نام 
$obj_foobar  =  new  \phpstar\FooBar ();

# گزینه 2: فضای نام را وارد 
کنید از  phpstar\FooBar ; 
$obj_foobar  =  FooBar جدید  ();

# گزینه 2a: وارد کردن و نام مستعار 
از  phpstar\FooBar  به عنوان  FB استفاده کنید . 
$obj_foobar  =  FB جدید  ();

# دسترسی به ویژگی ها و متدها با روش معمولی 
$obj_foobar -> foo (); 
$obj_foobar -> نوار ();

شبیه سازی فضاهای نام

در زبان های برنامه نویسی که فاقد پشتیبانی زبان برای فضاهای نام هستند، می توان فضاهای نام را تا حدی با استفاده از یک قرارداد نامگذاری شناسه تقلید کرد . به عنوان مثال، کتابخانه های C مانند libpng اغلب از یک پیشوند ثابت برای همه توابع و متغیرهایی که بخشی از رابط کاربری در معرض آنها هستند استفاده می کنند. Libpng شناسه هایی مانند:

png_create_write_struct
png_get_signature
png_read_row
png_set_invalid

این قرارداد نامگذاری اطمینان معقولی را ارائه می دهد که شناسه ها منحصر به فرد هستند و بنابراین می توانند در برنامه های بزرگتر بدون تداخل نامگذاری استفاده شوند . [15] به همین ترتیب، بسیاری از بسته‌هایی که در ابتدا به زبان فرترن نوشته شده‌اند (به عنوان مثال، BLAS ، LAPACK ) چند حرف اول نام یک تابع را برای نشان دادن اینکه به کدام گروه تعلق دارد، رزرو می‌کنند.

این تکنیک چندین اشکال دارد:

  • به خوبی به فضای نام تو در تو مقیاس نمی شود. شناسه ها بیش از حد طولانی می شوند زیرا همه موارد استفاده از شناسه ها باید کاملاً دارای فضای نام باشند.
  • افراد یا سازمان‌ها ممکن است از قراردادهای نام‌گذاری متناقض استفاده کنند که به طور بالقوه باعث ایجاد مبهم‌سازی ناخواسته می‌شود.
  • عملیات مرکب یا «مبتنی بر پرس و جو» روی گروه‌های شناسه، بر اساس فضای نامی که در آن اعلام شده‌اند، غیرقابل اجرا یا غیرقابل اجرا می‌شوند.
  • در زبان‌هایی با طول شناسه محدود، استفاده از پیشوندها تعداد کاراکترهایی را که می‌توان برای شناسایی عملکرد تابع استفاده کرد، محدود می‌کند. این یک مشکل خاص برای بسته هایی است که در ابتدا در FORTRAN 77 نوشته شده بودند، که تنها 6 کاراکتر در هر شناسه ارائه می کرد. به عنوان مثال، نام تابع BLASDGEMM نشان می دهد که بر روی اعداد با دقت دوگانه ("D") و ماتریس های عمومی ("GE") عمل می کند، و تنها دو کاراکتر آخر نشان می دهد که در واقع چه کاری انجام می دهد: ضرب ماتریس-ماتریس ( "MM").

چندین مزیت وجود دارد:

  • هیچ ابزار نرم افزاری خاصی برای مکان یابی نام ها در فایل های کد منبع مورد نیاز نیست. یک برنامه ساده مانند grep کافی است.
  • هیچ تناقضی در نام فضای نام وجود ندارد.
  • نیازی به نام بردن و در نتیجه مشکل ناسازگاری احتمالی وجود ندارد.

همچنین ببینید

منابع

  1. ^ آدیا، آتل؛ بولوسکی، ویلیام؛ کاسترو، میگل؛ سرماک، جرالد؛ چایکن، رونی؛ دوسر، جان؛ هاول، جان؛ لورچ، یعقوب؛ تایمر، ماروین؛ واتنهوفر، راجر (2002). FARSITE: ذخیره سازی فدرال، در دسترس و قابل اعتماد برای یک محیط ناقص قابل اعتماد (PDF) . Proc. علامت USENIX در مورد طراحی و پیاده سازی سیستم عامل بایگانی شده از نسخه اصلی (PDF) در 28/07/2010. ساختار اولیه ایجاد شده توسط یک سیستم فایل یک فضای نام دایرکتوری سلسله مراتبی است که مخزن منطقی فایل ها است.
  2. ^ "C# FAQ: namespace چیست" . http://en.csharp-online.net/ : C# Online Net. بایگانی شده از نسخه اصلی در 2013-10-20 . بازیابی شده در 23-02-2010 . فضای نام چیزی نیست جز گروهی از مجموعه ها، کلاس ها یا انواع. فضای نام به‌عنوان یک محفظه (مانند یک پوشه دیسک) برای کلاس‌هایی که معمولاً براساس عملکرد در گروه‌هایی سازمان‌دهی شده‌اند، عمل می‌کند. نحو فضای نام سی شارپ اجازه می دهد تا فضاهای نام تو در تو باشند. {{cite web}}: لینک خارجی در |location=( راهنما )
  3. «نمای کلی فضاهای نام در PHP» . کتابچه راهنمای PHP . فضاهای نام چیست؟ در گسترده‌ترین تعریف، فضاهای نام راهی برای کپسوله‌سازی آیتم‌ها هستند. این را می توان در بسیاری از جاها به عنوان یک مفهوم انتزاعی دید. به عنوان مثال، در هر سیستم عامل، دایرکتوری ها برای گروه بندی فایل های مرتبط، و به عنوان فضای نام برای فایل های درون آن ها عمل می کنند.
  4. «ایجاد و استفاده از بسته‌ها» . اسناد جاوا . اوراکل. یک بسته گروهی از انواع مرتبط است که حفاظت دسترسی و مدیریت فضای نام را فراهم می کند. توجه داشته باشید که type به کلاس‌ها، رابط‌ها، شمارش‌ها و انواع حاشیه‌نویسی اشاره دارد. شمارش‌ها و انواع حاشیه‌نویسی به ترتیب انواع خاصی از کلاس‌ها و رابط‌ها هستند، بنابراین از انواع در این درس به سادگی به عنوان کلاس‌ها و رابط‌ها یاد می‌شود.[ منبع بهتر مورد نیاز است ]
  5. ^ گروه کاری XML Core (8 دسامبر 2009). فضاهای نام در XML 1.0 (نسخه سوم)» . W3C . بازیابی 2012-03-30 .
  6. موتس، رایان (مه 1997). " نحو" . نحو URN . IETF _ پ. 1 ثانیه. 2. doi : 10.17487/RFC2141 . RFC 2141 . بازیابی 2012-03-30 .
  7. ^ استیون جی. گودی. "فهرست شناسه های USB" . 2013.
  8. Sollins & Masinter (دسامبر 1994). "الزامات برای قابلیت های عملکردی" . الزامات عملکردی برای نام‌های یکسان منابع . IETF _ پ. 3. ثانیه 2. doi : 10.17487/RFC1731 . RFC 1731 . بازیابی 2012-03-30 .
  9. ^ "C# FAQ: namespace چیست" . http://en.csharp-online.net/ : C# Online Net. بایگانی شده از نسخه اصلی در 20 اکتبر 2013 . بازیابی شده در 23-02-2010 . برای مثال، [در ویندوز ]، برای دسترسی به کلاس‌ها و اعضای ورودی-خروجی داخلی (I/O)، از فضای نام System.IO استفاده کنید. یا برای دسترسی به کلاس ها و اعضای مرتبط با وب، از فضای نام System.Web استفاده کنید. {{cite web}}: لینک خارجی در |location=( راهنما )
  10. ^ "Namespace "گروه بندی منطقی نام هایی است که در یک برنامه استفاده می شود."Webopedia.com . _ _ _
  11. ^ "Namspaces امکان گروه بندی موجودیت هایی مانند کلاس ها، اشیاء و توابع را تحت یک نام فراهم می کند. " Cplusplus.com . بازیابی شده در 2011-07-26 .
  12. ^ "6. ماژول ها" . آموزش پایتون . بنیاد نرم افزار پایتون بازبینی شده در 25 اکتبر 2010 .
  13. «محدوده‌ها و فضاهای نام پایتون» . Docs.python.org . بازیابی شده در 2011-07-26 .
  14. ^ https://docs.python.org/3/tutorial/modules.html "به طور کلی، عمل وارد کردن * از یک ماژول یا بسته مورد انتقاد قرار می گیرد"
  15. ^ دنی کالف. "چرا از فضاهای نام متنفرم" . بایگانی شده از نسخه اصلی در 2016-07-09.{{cite web}}: CS1 maint: ربات: وضعیت URL اصلی ناشناخته ( پیوند )