مُعدِّلات الوصول

مُعدِّلات الوصول (أو مُحدِّدات الوصول ) هي كلمات محجوزة في لغات البرمجة كائنية التوجه ، تُستخدم لتحديد إمكانية الوصول إلى الفئات والأساليب والأعضاء الآخرين. تُعدّ مُعدِّلات الوصول جزءًا أساسيًا من بنية لغة البرمجة، وتُستخدم لتسهيل تغليف المكونات. [ 1 ]

في لغة C++ ، يوجد ثلاثة مُعدِّلات وصول فقط. أما في لغة C#، فيزداد عددها إلى ستة، [ 2 ] بينما تحتوي لغة Java على أربعة مُعدِّلات وصول، ولكن بثلاث كلمات مفتاحية لهذا الغرض. في Java، عدم وجود كلمة مفتاحية قبل المُعدِّل يُشير افتراضيًا إلى مُعدِّل الوصول الخاص بالحزمة.

عند تعريف فئة على أنها عامة (public)، تصبح متاحة لجميع الفئات الأخرى المُعرّفة في نفس الحزمة، وكذلك للفئات المُعرّفة في حزم أخرى. هذا هو المُحدِّد الأكثر شيوعًا للفئات. مع ذلك، لا يُمكن تعريف فئة على أنها خاصة (private). في حال عدم تحديد أي مُحدِّد وصول، تُطبَّق قيود الوصول الافتراضية. ستكون الفئة متاحة لجميع الفئات في نفس الحزمة، ولكنها غير متاحة للفئات خارج الحزمة. عندما نقول إن فئة ما غير قابلة للوصول، فهذا يعني ببساطة أنه لا يُمكننا إنشاء كائن من تلك الفئة أو تعريف مُتغير من نوعها. كما لا يُمكن تطبيق مُحدِّد الوصول المحمي (protected) على فئة.

مخطط فئات UML مع مُعدِّلات الوصول.svg

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

تستخدم لغة C++ ثلاثة مُعدِّلات تُسمى public`<input> protected` و`<input>` و` < input > ` private. [ 3 ] بينما تستخدم لغة C# المُعدِّلات public` <input> ` و .... [ 4 ] أما لغة Java فتستخدم `<input> ` و` <input>` و`<input >`؛ حيث يُعد `<input>` هو المُعدِّل الافتراضي، ويُستخدم في حال عدم تحديد أي مُعدِّل وصول آخر. قد يختلف معنى هذه المُعدِّلات من لغة إلى أخرى. فيما يلي مقارنة بين الكلمات المفتاحية، مُرتبة من الأكثر تقييدًا إلى الأكثر انفتاحًا، ومعانيها في هذه اللغات الثلاث. يتراوح نطاق رؤيتها من نفس الفئة إلى الحزمة التي تُعرَّف فيها الفئة وصولًا إلى إذن وصول عام. يُوضح الجدول أدناه أقصى مستوى وصول.protectedinternalprivateprotected internalprivate protectedfilepublicpackageprotectedprivatepackage

في لغة Swift، توجد خمسة مستويات وصول مختلفة بالنسبة لكل من ملف المصدر الذي تم تعريف الكيان فيه والوحدة التي تحتوي على ملف المصدر هذا. [ 5 ]

الكلمة المفتاحيةسي شاربلغة سي++جافاسويفت
privateفصلصفوف دراسية و/أو صفوف الأصدقاءفصلتضمين الإعلان فقط + امتدادات الإعلان في نفس الملف
fileprivate---نفس الملف
fileنفس الملف---
private protectedالفئات المشتقة في نفس التجميع---
protected internalنفس التجميع و/أو الفئات المشتقة---
protectedالفئات المشتقةالفئات المشتقة و/أو الفئات الصديقةالفئات المشتقة و/أو ضمن نفس الحزمة-
package--داخل عبوتها-
internalنفس التجميع--نفس الوحدة
publicالجميعالجميعالجميعالجميع
open---الجميع + فئة فرعية خارج الوحدة + تجاوز خارج الوحدة

مثال

لغة سي++

استيراد std ؛// مُعدِّل الوصول الافتراضي داخل البنية هو عام // مُعدِّل الوصول الافتراضي داخل الفئة هو خاص struct Base { private : int x ; protected : // Base::m, Base::n محمي int m ; int n ; public : void set_n ( int v ) noexcept { n = v ; }void f () { std :: println ( "استدعاء Base::f()" ); } }; // Derived يمتد من Base مع وراثة عامة struct Derived : public Base { private : using Base :: f ; // Derived::f خاص public : using Base :: m ; // Derived::m عام// يمكن الوصول إلى Base::n هنا، ولكن ليس خارج [[ nodiscard ]] int get_n () const noexcept { return n ; }// خطأ، لا يمكن الوصول إلى Base::x هنا // int get_x() const noexcept { // return x; // } }; int main ( int argc , char * argv []) { Derived d ;// dx = 2; // خطأ، خاص // dn = 2; // خطأ، محمي d.m = 2 ; // يمكن الوصول إلى Base::m المحمي كـ Derived::md.set_n ( 2 ) ; // يستدعي Base::set_n(int) std :: println ( " {}" , d.get_n ( ) ); // الناتج: 2// df(); // خطأ، لا يمكن الوصول إلى Base::f كـ Derived::fBase & b = d ; // يشير b إلى d ويعتبره من النوع Base// bx = 3; // خطأ، خاص // bn = 3; // خطأ، محمي // bm = 3; // خطأ، Base::m محميb.set_n ( 3 ); // يستدعي Base::set_n(int) // std::println("{}", b.get_n()); // خطأ، لا يحتوي 'struct Base' على عضو باسم ' get_n 'b.f ( ); // يستدعي Base::f( ) return 0 ; }

مراجع

ملحوظات

  1. مايو 2002 ، ص 199.
  2. فاغنر، بيل . "مُعدِّلات الوصول - دليل برمجة C#" . docs.microsoft.com . تم الاسترجاع في 13 يناير 2020 .
  3. "محددات الوصول" . en.cppreference.com . تم الاطلاع عليه بتاريخ 13 يناير 2020 .
  4. "مُعدِّلات الوصول (مرجع C#)" . learn.microsoft.com . مايكروسوفت . 2022-09-27 . تم الاطلاع عليه بتاريخ 2023-02-08 .
  5. "التحكم في الوصول - لغة برمجة سويفت (سويفت 5.3)" . docs.swift.org . تم الاطلاع عليه بتاريخ 2021-02-08 .

فهرس