المساحة الاسمية

في الحوسبة ، مساحة الأسماء هي مجموعة من العلامات ( الأسماء ) التي تستخدم لتحديد والإشارة إلى كائنات من أنواع مختلفة. تضمن مساحة الأسماء أن يكون لكل مجموعة معينة من الكائنات أسماء فريدة بحيث يمكن التعرف عليها بسهولة .

تُبنى المساحات الاسمية عادةً على هيئة تسلسلات هرمية للسماح بإعادة استخدام الأسماء في سياقات مختلفة. وكمثال على ذلك، لنتأمل نظام تسمية الأشخاص حيث يكون لكل شخص اسم معين، بالإضافة إلى اسم عائلة مشترك مع أقاربه. إذا كانت الأسماء الأولى لأفراد العائلة فريدة فقط داخل كل عائلة، فيمكن تحديد كل شخص بشكل فريد من خلال الجمع بين الاسم الأول واسم العائلة؛ فهناك جين دو واحدة فقط، رغم أنه قد يكون هناك العديد من جين. داخل المساحة الاسمية لعائلة دو، يكفي "جين" فقط لتعيين هذا الشخص بشكل لا لبس فيه، بينما داخل المساحة الاسمية "العالمية" لجميع الأشخاص، يجب استخدام الاسم الكامل.

تشمل الأمثلة البارزة لمساحات الأسماء أنظمة الملفات ، والتي تعين أسماء للملفات. [1] تنظم بعض لغات البرمجة متغيراتها وبرامجها الفرعية في مساحات الأسماء. [2] [3] [4] تعين شبكات الكمبيوتر والأنظمة الموزعة أسماء للموارد، مثل أجهزة الكمبيوتر والطابعات ومواقع الويب والملفات البعيدة. يمكن لأنظمة التشغيل تقسيم موارد النواة حسب مساحات الأسماء المعزولة لدعم حاويات المحاكاة الافتراضية .

على نحو مماثل، تنظم أنظمة الملفات الهرمية الملفات في أدلة. كل دليل هو مساحة اسم منفصلة، ​​بحيث قد يحتوي الدليلان "letters" و"invoices" على ملف "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] عادةً ما يتم تطبيق اسم مساحة الاسم كبادئة للاسم المحلي.

في صيغة باكوس ناور الموسعة :

الاسم = < اسم المساحة > فاصل < الاسم المحلي >
      

عندما يتم استخدام الأسماء المحلية بمفردها، يتم استخدام تحليل الاسم لتحديد أي اسم معين (إن وجد) يشير إليه اسم محلي معين.

أمثلة

أمثلة على الأسماء في مساحة الأسماء
سياق اسم اسم المساحة الاسم المحلي
طريق /home/user/readme.txt /home/user (الدليل) readme.txt (اسم الملف)
اسم المجال www.example.com example.com (اسم المجال) www (اسم المجال الورقي)
سي++ std::مصفوفة std (مساحة اسم C++) المصفوفة (الهيكل)
الأمم المتحدة/رمز الموقع الولايات المتحدة الأمريكية نيويورك الولايات المتحدة (دولة أو إقليم) نيويورك (المحلية)
إكس إم إل xmlns:xhtml="http://www.w3.org/1999/xhtml"
<xhtml:body>
xhtml (مساحة اسم XML المعلنة سابقًا xhtml="http://www.w3.org/1999/xhtml") الجسم (العنصر)
بيرل $DBI::خطأ $DBI (وحدة Perl) errstr (متغير)
جافا java.util.التاريخ java.util (مساحة اسم Java) التاريخ (الصف)
اسم المورد الموحد (URN) جرة:nbn:fi-fe19991055 urn:nbn (أرقام الببليوغرافيا الوطنية) فاي-في19991055
نظام المقبض 10.1000/182 10 (التعامل مع سلطة التسمية) 1000/182 (الاسم المحلي)
معرف الكائن الرقمي 10.1000/182 10.1000 (الناشر) 182 (نشر)
عنوان MAC 01-23-45-67-89-أب 01-23-45 ( معرف فريد تنظيميًا ) 67-89-ab (خاصة بـ NIC)
معرف PCI 1234 أ ب ت ج 1234 (معرف البائع) abcd (معرف الجهاز)
معرف الفيديو/معرف العملية USB 2341 003ف [7] 2341 (معرف البائع) 003f (معرف المنتج)
سباركل dbr:سيدني dbr (علم الوجود المعلن مسبقًا، على سبيل المثال عن طريق تحديد @prefix dbr: <http://dbpedia.org/resource/>) سيدني

وفد

يعد تفويض المسؤوليات بين الأطراف أمرًا مهمًا في التطبيقات الواقعية، مثل بنية شبكة الويب العالمية. تسمح مساحات الأسماء بتفويض تعيين المعرف إلى منظمات متعددة لإصدار الأسماء مع الاحتفاظ بالتفرد العالمي. [8] تسجل سلطة التسجيل المركزية أسماء مساحات الأسماء المخصصة المخصصة . يتم تخصيص كل اسم مساحة أسماء لمنظمة مسؤولة لاحقًا عن تعيين الأسماء في مساحتها المخصصة لها. قد تكون هذه المنظمة منظمة إصدار أسماء تقوم بتعيين الأسماء بنفسها، أو سلطة تسجيل أخرى تقوم بتفويض أجزاء من مساحتها المخصصة لمنظمات مختلفة.

تَسَلسُل

مخطط التسمية الذي يسمح بالتفويض الفرعي لمساحات الأسماء إلى أطراف ثالثة هو مساحة أسماء هرمية .

تكون التسلسلات الهرمية متكررة إذا كانت صيغة أسماء المساحات هي نفسها لكل تفويض فرعي. ومن الأمثلة على التسلسل الهرمي المتكرر نظام أسماء النطاقات .

ومن الأمثلة على التسلسل الهرمي غير المتكرر اسم الموارد الموحد الذي يمثل رقم هيئة أرقام الإنترنت المخصصة (IANA).

تقسيم المساحة الاسمية الهرمية لـ urn:isbn:978-3-16-148410-0، وهو معرف لكتاب منطق الاكتشاف العلمي من تأليف كارل بوبر، الطبعة العاشرة.
السجل المسجل معرف المثال اسم المساحة المساحة الاسمية
اسم المورد الموحد (URN) هيئة أرقام الإنترنت المخصصة جرة:ISBN:978-3-16-148410-0 جرة مساحة اسم URN الرسمية
مساحة اسم URN الرسمية هيئة أرقام الإنترنت المخصصة جرة:ISBN:978-3-16-148410-0 رقم الكتاب الدولي المعياري أرقام الكتب القياسية الدولية كأسماء موارد موحدة
الرقم الدولي للمقالات (EAN) جي اس 1 978-3-16-148410-0 978 أرض الكتب
الرقم الدولي القياسي للكتاب (ISBN) وكالة ISBN الدولية 3-16-148410-X 3 الدول الناطقة باللغة الألمانية
كود الناشر الألماني وكيل Für Buchmarktstandards 3-16-148410-X 16 مور سيبيك

المساحة الاسمية مقابل النطاق

قد يوفر اسم المجال السياق ( النطاق في علوم الكمبيوتر) لاسم ما، وتُستخدم المصطلحات أحيانًا بالتبادل. ومع ذلك، قد يتم توفير سياق الاسم أيضًا من خلال عوامل أخرى، مثل الموقع الذي يظهر فيه أو بناء جملة الاسم.

أمثلة على أنظمة التسمية ذات النطاق المحلي والعالمي، ومع أو بدون مساحات الأسماء
بدون مساحة اسم مع مساحة اسم
النطاق المحلي لوحة تسجيل المركبة معيار التسلسل الهرمي لنظام الملفات
النطاق العالمي معرف فريد عالميًا نظام اسم النطاق

في لغات البرمجة

بالنسبة للعديد من لغات البرمجة، فإن مساحة الأسماء هي سياق لمعرفاتها . في نظام التشغيل، يعد الدليل مثالاً على مساحة الأسماء. يحدد كل اسم في الدليل ملفًا أو دليلًا فرعيًا بشكل فريد. [9]

كقاعدة عامة، لا يمكن أن يكون للأسماء في مساحة اسم أكثر من معنى واحد؛ أي أنه لا يمكن لمعاني مختلفة أن تشترك في نفس الاسم في نفس مساحة الاسم. تسمى مساحة الاسم أيضًا سياقًا ، لأن نفس الاسم في مساحات اسم مختلفة يمكن أن يكون له معاني مختلفة، كل منها مناسب لمساحة الاسم الخاصة به.

وفيما يلي خصائص أخرى لمساحات الأسماء:

بالإضافة إلى الاستخدام الفني للغة المجردة كما هو موضح أعلاه، فإن بعض اللغات لها كلمة رئيسية محددة تستخدم للتحكم الصريح في مساحة الأسماء، من بين استخدامات أخرى. فيما يلي مثال لمساحة أسماء في C++:

#تضمين <iostream> 

// هذه هي الطريقة التي يتم بها جلب اسم إلى النطاق الحالي. في هذه الحالة، يتم 
جلبه إلى النطاق العالمي. 
باستخدام std :: cout ؛ باستخدام std :: endl ؛ 
 

مساحة اسم box1 { int box_side = 4 ; }  
       


مساحة اسم 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. }  
       
          
          
          

اعتبارات علوم الكمبيوتر

مساحة الأسماء في علوم الكمبيوتر (وتسمى أحيانًا أيضًا نطاق الأسماء ) هي حاوية مجردة أو بيئة تم إنشاؤها لحمل مجموعة منطقية من المعرفات أو الرموز الفريدة (أي الأسماء). يرتبط المعرف المحدد في مساحة الأسماء بتلك المساحة فقط. يمكن تعريف نفس المعرف بشكل مستقل في مساحات أسماء متعددة. أي أن المعرف المحدد في مساحة أسماء واحدة قد يكون أو لا يكون له نفس معنى نفس المعرف المحدد في مساحة أسماء أخرى. تحدد اللغات التي تدعم مساحات الأسماء القواعد التي تحدد إلى أي مساحة أسماء ينتمي المعرف (وليس تعريفه). ​​[10]

يمكن توضيح هذا المفهوم باستخدام تشبيه. تخيل أن شركتين، X وY، كل منهما تخصص أرقام هوية لموظفيها. لا ينبغي أن يكون لدى X موظفان بنفس رقم الهوية، وينطبق الأمر نفسه على Y؛ ولكن لا توجد مشكلة في استخدام نفس رقم الهوية في كلتا الشركتين. على سبيل المثال، إذا كان بيل يعمل في شركة X وتعمل جين في شركة Y، فلا توجد مشكلة في أن يكون كل منهما الموظف رقم 123. في هذا التشبيه، يكون رقم الهوية هو المعرف، وتعمل الشركة كمساحة اسم. ولا يسبب نفس المعرف مشاكل لتحديد شخص مختلف في كل مساحة اسم.

في البرامج أو المستندات الحاسوبية الكبيرة ، من الشائع وجود مئات أو آلاف من المعرفات. توفر المساحات الاسمية (أو تقنية مماثلة، انظر محاكاة المساحات الاسمية) آلية لإخفاء المعرفات المحلية. وهي توفر وسيلة لتجميع المعرفات ذات الصلة منطقيًا في المساحات الاسمية المقابلة، مما يجعل النظام أكثر قابلية للتطوير .

تدعم أجهزة تخزين البيانات والعديد من لغات البرمجة الحديثة مساحات الأسماء. تستخدم أجهزة التخزين الدلائل (أو المجلدات) كمساحات أسماء. يسمح هذا بتخزين ملفين بنفس الاسم على الجهاز طالما تم تخزينهما في دلائل مختلفة. في بعض لغات البرمجة (مثل C++ و Python )، تكون معرفات تسمية مساحات الأسماء مرتبطة بمساحة أسماء محيطة. وبالتالي، في هذه اللغات يمكن لمساحات الأسماء أن تتداخل، وتشكل شجرة مساحات أسماء . في جذر هذه الشجرة توجد مساحة الأسماء العالمية غير المسماة .

الاستخدام في اللغات الشائعة

ج

من الممكن استخدام الهياكل المجهولة كمساحات أسماء في C منذ C99 .

// helper.c 
ثابت int _add ( int a ، int b ) { إرجاع a + b ؛ }      
       


ثابت البنية { ضعف باي ؛ int ( * إضافة ) ( int ، int ) ؛ } مساعد = { 3.14 ، _إضافة   
     
       
      

// helper.h 
const struct { double pi ; int ( * add ) ( int , int ); } helper ;  
     
       
 

// 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++ ، يتم تعريف مساحة الاسم باستخدام كتلة مساحة الاسم. [11]

مساحة اسم abc { int bar ; }  
     

داخل هذه الكتلة، يمكن استخدام المعرفات تمامًا كما تم إعلانها. خارج هذه الكتلة، يجب وضع بادئة لمحدد مساحة الاسم. على سبيل المثال، خارج namespace abc، barيجب كتابة ذلك abc::barللوصول إليه. تتضمن لغة C++ بنية أخرى تجعل هذا الإسهاب غير ضروري. عن طريق إضافة السطر

استخدام مساحة الاسم abc ؛  

بالنسبة لقطعة من الكود، abc::لم تعد هناك حاجة إلى البادئة.

تعتبر المعرفات التي لم يتم الإعلان عنها صراحةً داخل مساحة اسم ما موجودة في مساحة الاسم العالمية.

int foo ؛ 

يمكن استخدام هذه المعرفات بالضبط كما تم إعلانها، أو نظرًا لأن مساحة الأسماء العالمية غير مسماة، ::فيمكن وضع بادئة لمواصفات مساحة الأسماء. على سبيل المثال، fooيمكن أيضًا كتابة ::foo.

حل مساحة الأسماء في C++ هو حل هرمي. وهذا يعني أنه داخل مساحة الأسماء الافتراضية ، يشير food::soupالمعرف إلى . إذا لم يكن موجودًا، فإنه يشير إلى . إذا لم يكن موجودًا ولا موجودًا ، فإنه يشير إلى ، وهو معرف في مساحة الأسماء العالمية. chickenfood::soup::chickenfood::soup::chickenfood::chickenfood::soup::chickenfood::chickenchicken::chicken

تُستخدم المساحات الاسمية في C++ غالبًا لتجنب تضارب الأسماء . وعلى الرغم من استخدام المساحات الاسمية على نطاق واسع في كود C++ الحديث، فإن معظم الكود القديم لا يستخدم هذه الميزة لأنها لم تكن موجودة في الإصدارات المبكرة من اللغة. على سبيل المثال، يتم تعريف مكتبة C++ القياسيةnamespace std بالكامل داخل ، ولكن قبل التوحيد القياسي كانت العديد من المكونات في الأصل في المساحة الاسمية العالمية. يمكن للمبرمج إدراج usingالتوجيه لتجاوز متطلبات حل المساحة الاسمية والحصول على التوافق مع الكود القديم الذي يتوقع أن تكون جميع المعرفات في المساحة الاسمية العالمية. ومع ذلك، فإن استخدام التوجيه usingلأسباب أخرى غير التوافق مع الإصدارات السابقة (على سبيل المثال، الراحة) يعتبر مخالفًا لممارسات الكود الجيدة.

جافا

في Java ، تتجسد فكرة مساحة الأسماء في حزم Java . ينتمي كل الكود إلى حزمة، على الرغم من عدم ضرورة تسمية تلك الحزمة صراحةً. يتم الوصول إلى الكود من حزم أخرى عن طريق وضع بادئة اسم الحزمة قبل المعرف المناسب، على سبيل المثال يمكن الإشارة إلى in باسم class String( يُعرف هذا باسم اسم الفئة المؤهل بالكامل ). مثل C++، تقدم Java بنية تجعل من غير الضروري كتابة اسم الحزمة ( ). ومع ذلك، تتطلب بعض الميزات (مثل الانعكاس ) من المبرمج استخدام الاسم المؤهل بالكامل. package java.langjava.lang.Stringimport

على عكس لغة C++، لا تكون مساحات الأسماء في لغة Java هرمية فيما يتعلق بقواعد اللغة. ومع ذلك، يتم تسمية الحزم بطريقة هرمية. على سبيل المثال، جميع الحزم التي تبدأ بـ javaهي جزء من منصة Javajava.langتحتوي الحزمة على فئات أساسية للغة، وتحتوي java.lang.reflectعلى فئات أساسية تتعلق بشكل خاص بالانعكاس.

في Java (و Ada و C# وغيرها)، تعبر المساحات/الحزم عن فئات دلالية من التعليمات البرمجية. على سبيل المثال، في C#، namespace Systemتحتوي على التعليمات البرمجية التي يوفرها النظام ( إطار عمل .NET ). تختلف مدى دقة هذه الفئات ومدى عمق التسلسلات الهرمية من لغة إلى أخرى.

يمكن اعتبار نطاقات الوظائف والفئات بمثابة مساحات أسماء ضمنية مرتبطة ارتباطًا وثيقًا بالرؤية وإمكانية الوصول ومدة حياة الكائن .

سي شارب

تُستخدم المساحات الاسمية بشكل كبير في لغة C#. يتم تنظيم جميع فئات .NET Framework في مساحات اسمية، لاستخدامها بشكل أكثر وضوحًا وتجنب الفوضى. علاوة على ذلك، يتم استخدام المساحات الاسمية المخصصة على نطاق واسع من قبل المبرمجين، سواء لتنظيم عملهم أو لتجنب تضارب الأسماء . عند الإشارة إلى فئة، يجب تحديد اسمها المؤهل بالكامل، والذي يعني المساحة الاسمية متبوعة باسم الفئة،

نظام . وحدة التحكم . WriteLine ( "مرحباً بالعالم!" ); 
int i = System . Convert . ToInt32 ( "123" );   

أو قم بإضافة عبارة استخدام . وهذا يلغي الحاجة إلى ذكر الاسم الكامل لجميع الفئات في مساحة الاسم هذه.

استخدام النظام ؛ 

وحدة التحكم . WriteLine ( "مرحبا بالعالم!" ); 
int i = Convert.ToInt32 ( " 123 " );   

في الأمثلة المذكورة أعلاه، يعد System عبارة عن مساحة اسم، و Console و Convert عبارة عن فئات محددة داخل System .

مخطط UML مع وحدة التحكم وفئة التحويل.

بايثون

في بايثون ، يتم تعريف مساحات الأسماء بواسطة الوحدات الفردية، وبما أن الوحدات يمكن أن تكون متضمنة في حزم هرمية، فإن مساحات الأسماء تكون هرمية أيضًا. [12] [13] بشكل عام، عندما يتم استيراد وحدة، يتم تعريف الأسماء المحددة في الوحدة عبر مساحة اسم تلك الوحدة، ويمكن الوصول إليها من الوحدات النمطية المستدعية باستخدام الاسم المؤهل بالكامل.

# افترض أن modulea تحدد دالتين: func1() و func2() وفئة واحدة: Class1 
استيراد  Modulea

Modulea . func1 () 
Modulea . func2 () 
a  =  Modulea . Class1 ()

يمكن استخدام العبارة from ... import ...لإدراج الأسماء ذات الصلة مباشرةً في مساحة اسم الوحدة النمطية المستدعاة، ويمكن الوصول إلى هذه الأسماء من الوحدة النمطية المستدعاة دون الاسم المؤهل:

# افترض أن Modulea تحدد دالتين: func1() و func2() وفئة واحدة: Class1 
من  Modulea  استيراد  func1

func1 () 
func2 ()  # ستفشل هذه العملية كاسم غير معرف، كما هو الحال مع الاسم الكامل Modulea.func2() 
a  =  Class1 ()  # ستفشل هذه العملية كاسم غير معرف، كما هو الحال مع الاسم الكامل Modulea.Class1()

نظرًا لأن هذا يستورد الأسماء مباشرةً (بدون مؤهل)، فيمكنه استبدال الأسماء الموجودة دون تحذيرات.

هناك شكل خاص من البيان وهو from ... import *استيراد جميع الأسماء المحددة في الحزمة المسماة مباشرة في مساحة اسم الوحدة النمطية المستدعاة. لا يُنصح عمومًا باستخدام هذا الشكل من الاستيراد، على الرغم من دعمه داخل اللغة، لأنه يلوث مساحة اسم الوحدة النمطية المستدعاة وسيؤدي إلى استبدال الأسماء المحددة بالفعل في حالة وجود تضارب في الأسماء. [14]

يدعم Python أيضًا import x as yكطريقة لتوفير اسم مستعار أو اسم بديل للاستخدام بواسطة وحدة الاتصال:

استيراد  numpy  كـ  np

أ  =  ن ب . أرانج ( 1000 )
مساحة اسم XML

في XML ، يتيح تحديد مساحة اسم XML أن تكون أسماء العناصر والسمات في مستند XML فريدة، على غرار دور مساحات الأسماء في لغات البرمجة. باستخدام مساحات أسماء XML، قد تحتوي مستندات XML على أسماء عناصر أو سمات من أكثر من مفردات XML.

بي اتش بي

تم تقديم مساحات الأسماء في PHP من الإصدار 5.3 فصاعدًا. يمكن تجنب تضارب الأسماء بين الفئات والوظائف والمتغيرات. في PHP ، يتم تعريف مساحة الأسماء باستخدام كتلة مساحة الأسماء.

# ملف phpstar/foobar.php

مساحة اسم  phpstar ؛

class  FooBar 
{ 
    public  function  foo () :  void 
    { 
        echo  'مرحبا بالعالم، من الدالة foo' ; 
    }

     دالة  عامة bar () :  void 
    { 
        echo  'مرحبا بالعالم، من دالة bar' ; 
    } 
}

يمكننا الإشارة إلى مساحة اسم PHP بالطرق المختلفة التالية:

# ملف index.php


# قم بتضمين  الملف "phpstar/foobar.php" ؛

# الخيار 1: قم بإضافة البادئة مباشرة لاسم الفصل باستخدام مساحة الاسم 
$obj_foobar  =  new  \phpstar\FooBar ();

# الخيار 2: استيراد مساحة الاسم 
استخدم  phpstar\FooBar ؛ 
$obj_foobar  =  new  FooBar ();

# الخيار 2أ: استيراد اسم مستعار لمساحة الاسم 
استخدم  phpstar\FooBar  كـ  FB ؛ 
$obj_foobar  =  new  FB ();

# الوصول إلى الخصائص والطرق بالطريقة العادية 
$obj_foobar -> foo (); 
$obj_foobar -> bar ();

مخطط UML لحزمة phpstar مع الفئة FooBar.

محاكاة مساحات الأسماء

في لغات البرمجة التي تفتقر إلى دعم اللغة لمساحات الأسماء، يمكن محاكاة مساحات الأسماء إلى حد ما باستخدام اتفاقية تسمية المعرف . على سبيل المثال، غالبًا ما تستخدم مكتبات C مثل libpng بادئة ثابتة لجميع الوظائف والمتغيرات التي تشكل جزءًا من واجهتها المكشوفة. تعرض Libpng معرفات مثل:

png_إنشاء_كتابة_هيكل
png_الحصول_على_التوقيع
png_قراءة_الصف
png_set_غير صالح

توفر اتفاقية التسمية هذه ضمانًا معقولاً بأن المعرفات فريدة وبالتالي يمكن استخدامها في برامج أكبر دون حدوث تصادمات في التسمية . [15] وعلى نحو مماثل، تحتفظ العديد من الحزم المكتوبة في الأصل بلغة فورتران (على سبيل المثال، BLAS و LAPACK ) بالأحرف القليلة الأولى من اسم الوظيفة للإشارة إلى المجموعة التي تنتمي إليها.

هذه التقنية لها عدة عيوب:

  • لا يتناسب بشكل جيد مع مساحات الأسماء المتداخلة؛ حيث تصبح المعرفات طويلة بشكل مفرط نظرًا لأن جميع استخدامات المعرفات يجب أن تكون مؤهلة بالكامل لمساحات الأسماء .
  • قد يستخدم الأفراد أو المنظمات اتفاقيات تسمية غير متسقة، مما قد يؤدي إلى تشويش غير مرغوب فيه.
  • تُعد العمليات المركبة أو "القائمة على الاستعلام" على مجموعات من المعرفات، استنادًا إلى المساحات الأساسية التي تم إعلانها فيها، غير عملية أو غير قابلة للتنفيذ.
  • في اللغات ذات طول المعرف المقيد، يحد استخدام البادئات من عدد الأحرف التي يمكن استخدامها لتحديد ما تفعله الوظيفة. هذه مشكلة خاصة للحزم المكتوبة أصلاً بلغة FORTRAN 77 ، والتي عرضت 6 أحرف فقط لكل معرف. على سبيل المثال، يشير اسم دالة BLASDGEMM إلى أنها تعمل على أرقام ذات دقة مزدوجة ("D") ومصفوفات عامة ("GE")، ويظهر الحرفان الأخيران فقط ما تفعله بالفعل: ضرب مصفوفة بمصفوفة ("MM").

هناك العديد من المزايا:

  • لا يلزم استخدام أدوات برمجية خاصة لتحديد الأسماء في ملفات التعليمات البرمجية المصدرية. يكفي استخدام برنامج بسيط مثل grep .
  • لا توجد تعارضات في أسماء المساحة.
  • ليست هناك حاجة لتشويه الأسماء، وبالتالي لا توجد مشاكل عدم التوافق المحتملة.

انظر أيضا

مراجع

  1. ^ 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. مؤرشف من الأصل (PDF) في 2010-07-28. البنية الأساسية التي ينشئها نظام الملفات هي مساحة اسم الدليل الهرمي، والتي تعد المستودع المنطقي للملفات.
  2. ^ "أسئلة وأجوبة حول لغة C#: ما هي مساحة الأسماء". C# Online Net. مؤرشف من الأصل في 2013-10-20 . تم الاسترجاع في 2010-02-23 . مساحة الأسماء ليست سوى مجموعة من التجميعات أو الفئات أو الأنواع. تعمل مساحة الأسماء كحاوية—مثل مجلد القرص—للفئات المنظمة في مجموعات عادةً بناءً على الوظيفة. تسمح صيغة مساحة الأسماء في لغة C# بتضمين مساحات الأسماء.
  3. ^ "نظرة عامة على المساحات الاسمية في PHP". دليل PHP . ما هي المساحات الاسمية؟ في التعريف الأوسع، المساحات الاسمية هي طريقة لتغليف العناصر. يمكن اعتبار هذا مفهومًا مجردًا في العديد من الأماكن. على سبيل المثال، في أي نظام تشغيل، تعمل الدلائل على تجميع الملفات ذات الصلة، وتعمل كمساحة اسمية للملفات الموجودة داخلها.
  4. ^ "إنشاء الحزم واستخدامها". وثائق Java . Oracle. الحزمة عبارة عن مجموعة من الأنواع ذات الصلة التي توفر حماية الوصول وإدارة مساحة الأسماء. لاحظ أن الأنواع تشير إلى الفئات والواجهات والتعدادات وأنواع التعليقات التوضيحية . تعد التعدادات وأنواع التعليقات التوضيحية أنواعًا خاصة من الفئات والواجهات على التوالي، لذا غالبًا ما يشار إلى الأنواع في هذا الدرس ببساطة باسم الفئات والواجهات.[ مطلوب مصدر أفضل ]
  5. ^ مجموعة عمل XML الأساسية (8 ديسمبر 2009). "المساحات الاسمية في XML 1.0 (الطبعة الثالثة)". W3C . تم الاسترجاع في 2012-03-30 .
  6. ^ Moats, Ryan (مايو 1997). "Syntax". URN Syntax. 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: What is a namespace". C# Online Net . مؤرشف من الأصل في 20 أكتوبر 2013 . تم الاسترجاع في 2010-02-23 . على سبيل المثال، [في نظام التشغيل Windows ]، للوصول إلى فئات وأعضاء الإدخال والإخراج (I/O) المضمنة، استخدم مساحة اسم System.IO. أو، للوصول إلى الفئات والأعضاء المرتبطة بالويب، استخدم مساحة اسم System.Web.
  10. ^ "مساحة الأسماء هي "تجميع منطقي للأسماء المستخدمة داخل برنامج". Webopedia.com. 10 أبريل 2002. تم الاسترجاع في 2011-07-26 .
  11. ^ "تسمح المساحات الاسمية بتجميع الكيانات مثل الفئات والكائنات والوظائف تحت اسم واحد". Cplusplus.com . تم الاسترجاع في 2011-07-26 .
  12. ^ "6. Modules". The Python Tutorial . Python Software Foundation . تم الاسترجاع في 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: bot: original URL status unknown (link)
Retrieved from "https://en.wikipedia.org/w/index.php?title=Namespace&oldid=1240040049"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate