التغليف (برمجة الكمبيوتر)

في أنظمة البرمجيات، يشير التغليف إلى تجميع البيانات مع الآليات أو الطرق التي تعمل على البيانات. وقد يشير أيضًا إلى تقييد الوصول المباشر إلى بعض هذه البيانات، مثل مكونات الكائن. [1] في الأساس، يمنع التغليف الكود الخارجي من الاهتمام بالعمل الداخلي للكائن.

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

كما يشجع التغليف المبرمجين على وضع كل التعليمات البرمجية التي تتعلق بمجموعة معينة من البيانات في نفس الفئة، مما ينظمها لسهولة فهمها من قبل المبرمجين الآخرين. التغليف هو تقنية تشجع على فصل البيانات .

تدعم جميع أنظمة البرمجة الموجهة للكائنات (OOP) التغليف، [2] [3] لكن التغليف ليس خاصًا بالبرمجة الموجهة للكائنات. تقدم أيضًا تنفيذات أنواع البيانات المجردة والوحدات النمطية والمكتبات التغليف . وقد تم تفسير التشابه من قبل منظري لغة البرمجة من حيث الأنواع الوجودية . [4]

معنى

في لغات البرمجة الموجهة للكائنات ، وغيرها من المجالات ذات الصلة، يشير التغليف إلى أحد مفهومين مرتبطين ولكن متميزين، وأحيانًا إلى مزيج منهما: [5] [6]

  • آلية لغوية لتقييد الوصول المباشر إلى بعض مكونات الكائن . [7] [8]
  • بنية لغوية تسهل تجميع البيانات مع الأساليب ( أو الوظائف الأخرى) التي تعمل على تلك البيانات. [1] [9]

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

يعكس التعريف الثاني أنه في العديد من لغات البرمجة الموجهة للكائنات، وغيرها من المجالات ذات الصلة، لا يتم إخفاء المكونات تلقائيًا ويمكن تجاوز ذلك. وبالتالي، يتم تعريف إخفاء المعلومات كمفهوم منفصل من قبل أولئك الذين يفضلون التعريف الثاني.

يتم دعم ميزات التغليف باستخدام الفئات في معظم لغات البرمجة الموجهة للكائنات، على الرغم من وجود بدائل أخرى أيضًا.

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

التغليف والوراثة

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

إخفاء المعلومات

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

بعض اللغات مثل Smalltalk و Ruby تسمح بالوصول فقط عبر طرق الكائن، ولكن معظم اللغات الأخرى (على سبيل المثال، C++ و C# و Delphi و Java [12] ) تقدم للمبرمج بعض التحكم فيما هو مخفي، عادةً عبر كلمات رئيسية مثل publicو private. [8] يشير معيار ISO C++ إلى protectedو privateو publicباعتبارهما " محددات وصول " وأنها لا "تخفي أي معلومات". يتم إخفاء المعلومات من خلال توفير نسخة مجمعة من الكود المصدر الذي يتم توصيله عبر ملف رأس.

في أغلب الأحيان، توجد طريقة لتجاوز مثل هذه الحماية - عادةً عبر واجهة برمجة التطبيقات العاكسة (Ruby وJava وC# وما إلى ذلك)، وأحيانًا من خلال آلية مثل تشويه الأسماء ( Python )، أو استخدام كلمات رئيسية خاصة كما في C++. الأنظمة التي توفر أمانًا قائمًا على القدرات علىfriend مستوى الكائن (بالالتزام بنموذج قدرات الكائن ) تشكل استثناءً، وتضمن تغليفًا قويًا.

أمثلة

تقييد حقول البيانات

توفر لغات مثل C++ و C# و Java [12] و PHP و Swift و Delphi طرقًا لتقييد الوصول إلى حقول البيانات.

فيما يلي مثال بلغة C# يوضح كيفية تقييد الوصول إلى حقل البيانات من خلال استخدام privateكلمة أساسية:

الفئة Program { public class Account { private decimal _accountBalance = 500.00 m ; 

      
    
            

        عدد عشري عام CheckBalance () { return _accountBalance ; } }  
        
             
        
    

    static void Main () { حساب myAccount = حساب جديد (); decimal myBalance = myAccount . CheckBalance ();  
    
            
           

        /* يمكن لهذه الطريقة الرئيسية التحقق من الرصيد عبر 
         طريقة "CheckBalance" العامة التي توفرها فئة "Account" 
         * ولكنها لا تستطيع معالجة قيمة "accountBalance" */ 
} }    

فيما يلي مثال في Java :

public class Employee { private BigDecimal salary = new BigDecimal ( 50000.00 ) ; public BigDecimal getSalary ( ) { return this.salary ; }   
         
    
       
         
    

    public static void main () { Employee e = new Employee (); BigDecimal sal = e . getSalary (); } }    
            
           
    

التغليف ممكن أيضًا في اللغات غير الموجهة للكائنات. في لغة C ، على سبيل المثال، يمكن إعلان بنية في واجهة برمجة التطبيقات العامة عبر ملف الرأس لمجموعة من الوظائف التي تعمل على عنصر بيانات يحتوي على عناصر بيانات لا يمكن الوصول إليها من قبل عملاء واجهة برمجة التطبيقات باستخدام externالكلمة الأساسية. [13]

// ملف الرأس "api.h"

struct Entity ; // هيكل غير شفاف مع أعضاء مخفية           

// وظائف API التي تعمل على كائنات 'Entity' 
extern struct Entity * open_entity ( int id ); extern int process_entity ( struct Entity * info ); extern void close_entity ( struct Entity * info ); // الكلمات الأساسية extern هنا زائدة عن الحاجة، ولكنها لا تضر. // يحدد extern الوظائف التي يمكن استدعاؤها خارج الملف الحالي، وهو السلوك الافتراضي حتى بدون الكلمة الأساسية      
                 
                


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

// ملف التنفيذ "api.c"

#تضمين "api.h" 

struct Entity { int ent_id ; // رقم الهوية char ent_name [ 20 ] ; // الاسم ... والأعضاء الآخرين ... };  
                  
           
        


// تنفيذات وظيفة API 
struct Entity * open_entity ( int id ) { ... }    
  

int process_entity ( struct Entity * info ) { ... }   
  

void close_entity ( struct Entity * info ) { ... }   
  

تشويه الاسم

فيما يلي مثال على Python ، والذي لا يدعم قيود الوصول إلى المتغيرات. ومع ذلك، فإن الاتفاقية هي أن المتغير الذي يسبق اسمه علامة سفلية يجب اعتباره خاصًا. [14]

الفئة  Car :  
    def  __init__ ( self )  ->  None : 
        self . _maxspeed  =  200
 
    def  drive ( self )  ->  None : print 
        ( f " السرعة القصوى هي { self._maxspeed } ." )
 
redcar  =  Car () 
redcar . drive ()   # سيؤدي هذا إلى طباعة "السرعة القصوى هي 200."

redcar . _maxspeed  =  10 
redcar . drive ()   # سيؤدي هذا إلى طباعة 'السرعة القصوى هي 10.'

انظر أيضا

الاستشهادات

  1. ^ ab Rogers, Wm. Paul (18 مايو 2001). "التغليف ليس إخفاءً للمعلومات". JavaWorld . تم الاسترجاع في 20 يوليو 2020 .
  2. ^ "ما هي البرمجة الشيئية الموجهة (OOP)؟". هندسة التطبيقات . تم الاسترجاع في 2024-03-02 .
  3. ^ "التغليف في البرمجة الشيئية الموجهة (OOPS)". www.enjoyalgorithms.com . تم الاسترجاع في 2024-03-02 .
  4. ^ Pierce 2002, § 24.2 تجريد البيانات باستخدام القيم الوجودية
  5. ^ سكوت، مايكل لي (2006). براجماتيات لغة البرمجة (الطبعة الثانية). مورجان كوفمان. ص 481. ISBN 978-0-12-633951-2. تتيح آليات التغليف للمبرمج تجميع البيانات والبرامج الفرعية التي تعمل عليها معًا في مكان واحد، وإخفاء التفاصيل غير ذات الصلة عن مستخدمي التجريد
  6. ^ ديل، نيل ب.؛ ويمز، شيب (2007). البرمجة وحل المشكلات باستخدام جافا (الطبعة الثانية). جونز وبارتليت. ص. 396. رقم ISBN 978-0-7637-3402-2.
  7. ^ ميتشل، جون سي. (2003). المفاهيم في لغات البرمجة . مطبعة جامعة كامبريدج. ص 522. ISBN 978-0-521-78098-8.
  8. ^ أ ب بيرس، بنيامين (2002). أنواع ولغات البرمجة . مطبعة معهد ماساتشوستس للتكنولوجيا. ص 266. رقم ISBN 978-0-262-16209-8.
  9. ^ كونولي، توماس م.؛ بيج، كارولين إي. (2005). "الفصل 25: مقدمة إلى أنظمة إدارة قواعد البيانات الكائنية § المفاهيم الموجهة للكائنات". أنظمة قواعد البيانات: نهج عملي للتصميم والتنفيذ والإدارة (الطبعة الرابعة). بيرسون للتعليم. ص 814. رقم ISBN 978-0-321-21025-8.
  10. ^ McDonough, James E. (2017). "التغليف". التصميم الموجه للكائنات باستخدام ABAP: نهج عملي . Apress . doi :10.1007/978-1-4842-2838-8. ISBN 978-1-4842-2837-1- عبر أوريلي .{{cite book}}:صيانة CS1: التاريخ والسنة ( الرابط )
  11. ^ جاما، إيريش؛ هيلم، ريتشارد؛ جونسون، رالف؛ فليسيدس، جون (1994). أنماط التصميم . أديسون ويسلي. رقم ISBN 978-0-201-63361-0.
  12. ^ ab Bloch 2018، ص 73-77، الفصل §4 البند 15 تقليل إمكانية الوصول إلى الفصول والأعضاء.
  13. ^ King, KN (2008). C Programming: A Modern Approach (الطبعة الثانية). WW Norton & Company. ص. 464. ISBN 978-0393979503.
  14. ^ بدر، دان. "معنى الشرطات السفلية في بايثون". تحسين مهاراتك في بايثون . تم الاسترجاع في 1 نوفمبر 2019 .

مراجع

  • بلوخ، جوشوا (2018). "جافا الفعّالة: دليل لغة البرمجة" (الطبعة الثالثة). أديسون ويسلي. رقم ISBN 978-0134685991.
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=التغليف (برمجة_الحاسوب)&oldid=1249648008"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate